

2D レイアウト/アクション出力形式


						吉良 理人
						Jun  1,  2001 Version 0.1.0
						May  21, 2001 Version 0.0.10
						Apl. 6,  2001 Version 0.0.9
						Feb. 23, 2001 Version 0.0.8
						Feb. 2,  2001 Version 0.0.7
						Feb. 2,  2001 Version 0.0.6
						Jan. 23, 2001 Version 0.0.5
						Jan. 17, 2001 Version 0.0.4
						Dec. 19, 2000 Version 0.0.3
						Dec. 15, 2000 Version 0.0.2
						Dec. 11, 2000 Version 0.0.1



§本文書の趣旨

  本文書は、2D 表示系におけるレイアウトの編集および、操作に伴う画面アクション
の生成を自動化するための機構(以下、「2D エディタ」と呼称)より出力される、
中間形式について述べるものである。

-----------------------------------------------------------------------------
§目次

1.0  2Dエディタの役割
  1.1  レイアウト設定
  1.2  アクション定義

2.0  概要

  2.1  2Dオブジェクトの階層構造
  2.2  処理概略

    2.2.1  使用オブジェクトの定義
    2.2.2  オブジェクトの状態の定義
    2.2.2  アクションの再生

	
3.0  出力形式

  3.1  オブジェクト定義セクション

    3.1.1  obj               使用オブジェクトの宣言


  3.2  状態定義セクション

    3.2.1  reftri	    参照テクスチャ定義
    3.2.2  status～endstat  状態指定
    3.2.3  tex		    テクスチャ指定
    3.2.4  vertex	    頂点指定
    3.2.5  size		    サイズ指定
    3.2.6  center	    回転中心指定
    3.2.7  angle	    回転角指定
    3.2.8  uv		    テクスチャ参照位置指定
    3.2.9  uvsize	    テクスチャサイズ指定
    3.2.10 texoff	    テクスチャ解除(予定)
    3.2.11 color	    RGB 値設定
    3.2.12 alpha	    アルファブレンディング指定
    3.2.13 pri		    プライオリティ補正値設定
    3.2.14 magni	    下位オブジェクト座標値係数設定
    3.2.15 hide		    非表示
    3.2.16 show	            表示
    3.2.17 hrev		    水平反転
    3.2.18 vrev		    垂直反転


  3.3  アクション記述セクション

    3.3.1  action～actend   アクション定義ブロック
    3.3.2  track～trend	    アクショントラック定義ブロック
    3.3.3  keytrack～keyend 同期用シグナルトラック定義ブロック
    3.3.4  wait		    時間待ち
    3.3.5  set		    状態設定
    3.3.6  morf		    補間変化
    3.3.7  signal	    シグナルハンドラコール


-----------------------------------------------------------------------------

1.0  2Dエディタの役割

    2D エディタは、二つの役割を持つ。一つは 2D オブジェクトにより構成される
  画面のレイアウトを編集する役割、もう一つは、特定のレイアウトから他のレイ
  アウトに移行する際の挙動を編集する役割である。

    本ドキュメントでは前者を「レイアウト設定」、後者を「アクション定義」と
  呼称する。



  1.1  レイアウト設定

    レイアウト定義においては、配置するオブジェクトの種類、位置、サイズ、
    使用するテクスチャ等の設定を行い、画面のレイアウトを行う。

    ここで設定されたレイアウトを「状態」と呼ぶ。


  1.2  アクション定義

    「1.1 レイアウト設定」で設定されたレイアウト間を、特定の時間軸にそって
    補間し変化させるための時間設定を行う。




2.0  概要

  2.1  2Dオブジェクトの階層構造

    2D オブジェクトは、親子関係からなる階層構造を持つことができる。
    子として作成された 2D オブジェクトの座標値は、親オブジェクトの基準点に
    対する相対座標値として扱われるため、親オブジェクトを移動させると子以下の
    オブジェクトがすべて付随して移動することになる。

    また、表示属性も継承されるため、親オブジェクトを非表示にすると、その子
    以下のオブジェクト全てが非表示状態になる。



  2.2  処理概略

    2.2.1  使用オブジェクトの定義

      画面を構成するオブジェクトを、全てここで定義する。ある画面においては、
      どのような状態を設定しようと使用されるオブジェクトの種類および総数は
      変化しないものとする。

        これは、変化の途中でオブジェクトの追加や削除ができないことを意味する。
      変化の途中から表示や消去を行いたいオブジェクトがある場合は、この段階で
      あらかじめ作成しておき、各状態において表示/非表示を切替えることで制御
      する。

    2.2.2  オブジェクトの状態の定義

      各オブジェクトは、一つ以上の「状態」を持つ。
        

    2.2.2  アクションの再生

        アクションは、変化を必要とするオブジェクトに対し、以下のように時間軸を
      設定することで作成する。

             開始                          終了

	      a       b          c         d
	     (1)-----> ========>(2)------>(3)
                保持    補間        保持

      上記の(1)～(3)を、「状態ポイント」とし、その個数には制限は無いものと
      する。また、キーとなる a～d の各ポイント間の時間を設定する必要がある。

      ポイント間の属性が「保持」の場合、開始点となるポイントにおける状態が
      その時間中保持される。終点となるポイントで別の状態が指定されていた
      場合、瞬時に状態が変化することになる。

      ポイント間属性が「補間」である場合は、始点状態から終点状態にかけて、
      時間軸に比例した補間を行う。



	
3.0  出力形式

  3.1  オブジェクト定義セクション

    3.1.1  obj               使用オブジェクトの宣言

	   obj  "オブジェクト名"  <属性> [vertex 頂点数]  [parent "親オブジェクト名"]

        "オブジェクト名" で指定された名称で参照されるオブジェクトを、
      <属性>で指定された種類のオブジェクトとして定義する。

      また、parent "親オブジェクト名" を指定すると、そのオブジェクトの親
      となるオブジェクトを指定することができる。親オブジェクトは、その子が
      定義されるより前に定義されていなければならない。

      <属性>には、以下のうち一つを指定する。


        empty		座標オブジェクト(描画情報無し)
	point		点
	line		線分
	lstrip		折れ線
	linestrip	折れ線
	box		長方形(枠のみ)
	sprite		スプライト(幅、高さ指定)
	zoom		スプライト(左上頂点、右下頂点指定)
	spin		回転スプライト(幅、高さ、中心点、回転角指定)
	poly		任意4頂点指定スプライト(各頂点位置を指定)
	triangle	三角形スプライト(各頂点位置を指定)

      なお、[頂点数]は、属性が lstrip の場合のみ必須項目として指定する。
      他の属性において指定されても無視される。


      例)

	obj "全体基準点"  empty
	obj "上枠基準点"  empty			parent "全体基準点"
	obj "下枠基準点"  empty			parent "全体基準点"
	obj "周波数基準"  empty			parent "全体基準点"

	obj "上枠ライン"  lstrip vertex 4	parent "上枠基準点"
	obj "PTT"	  sprite		parent "上枠基準点"
	
	obj "下枠ライン"  linestrip vertex 4	parent "下枠基準点"
	obj "MEM"	  sprite		parent "下枠基準点"
	obj "TUNE"	  sprite		parent "下枠基準点"

	obj "中央ゲージ"  sprite		parent "下枠基準点"
	obj "ゲージ点灯"  sprite		parent "中央ゲージ"
	
	obj "外枠"        box			parent "全体基準点"

	obj "数字14"	  sprite		parent "周波数基準"
	obj "小数点"	  sprite		parent "周波数基準"
	obj "数字1.00"	  sprite		parent "周波数基準"
	obj "数字0.10"	  sprite		parent "周波数基準"
	obj "数字0.01"	  sprite		parent "周波数基準"




  3.2  状態定義セクション

    3.2.1  reftri	参照テクスチャ定義

	   reftri <.tri名称>

       この命令以後、参照対象となる .tri を指定する。
       ファイル名をクォートで囲む必要は無い。



    3.2.2  status～endstat	状態指定


	   status "オブジェクト名"
		  mode "状態名"
			[tex ...]
			[vertex ...]
			[size ...]
			[center ...]
			[angle ...]
			[uv ...]
			[uvsize ...]
			[texoff]
			[pri ...]
			[color ...]
			[alpha ...]
			[hide]
			[show]
			[hrev]
			[vrev]
		  endmode

		  mode "状態名"

		    :

		  endmode
	   endstat

        オブジェクトの持つ状態を定義する。
      各オブジェクトは、複数の状態を持つことができ、それぞれの状態についての
      定義を行う。

        "オブジェクト名" には、状態を定義するオブジェクト名を指定する。

        <状態名>には、それぞれの状態を参照するための名称を記述し、次の<状態名>
      までの間に、使用テクスチャの指定、頂点座標の指定、表示サイズの指定など
      (tex, vertex, size, uv, uvsize, texoff, color, hide, show の各命令。後述)
      を記述することで、その状態として定義する具体的な描画情報を指定する。



    3.2.3  tex		テクスチャ指定

	   tex "テクスチャ名称"

        status 構文(3.2.2)の中で使用する。reftri命令(3.2.1)で指定された
      テクスチャに含まれるテクスチャを、その状態におけるテクスチャとして
      指定する。この命令実行直後は、指定されたテクスチャ全体がオブジェクトの
      テクスチャとして割り当てられる。
	   

    3.2.4  vertex	頂点指定

	   vertex <開始頂点番号> (Xn, Yn) [!(Xn+1, Yn+1) [!(Xn+2, Yn+2)[...]]]


        オブジェクトの頂点座標を指定する。親オブジェクトを持つオブジェクトの
      場合、ここでは親オブジェクトの基準点からの相対座標値を指定する。

        <開始頂点番号> では、座標値を設定する頂点の番号を指定する。
      頂点の番号は 0 から開始され、そのオブジェクトの指定可能な頂点数 -1 まで
      となる。

        各属性のオブジェクトの、指定可能な頂点数は以下の通り。


	    属性	頂点個数

            empty	1
	    point	1
	    line	2
	    lstrip	obj 命令での定義時に指定した個数
	    box		2
	    sprite	1
	    zoom	2


      box や zoom の頂点は、対角の頂点座標で指定する。lstrip の頂点数は、
      obj 命令でオブジェクトを定義した際に指定した値となる。



    3.2.5  size		サイズ指定

	   size  幅 高さ

        オブジェクトの幅と高さを指定する。
      この指定が必要なのは、sprite もしくは spin 属性のオブジェクトのみとなる。


    3.2.6  center	オブジェクト回転中心指定

	   center 中心X 中心Y

      spin 属性オブジェクトの回転中心とする位置を指定する。
      回転中心は、spin オブジェクトの矩形を正位置に置いた場合の
      左上頂点からの相対座標で指定する。

                  |<- X ->|   	
		--+-------+------------+
		^ |       |            |
		| |       |            |
		Y |       |            |
		| |       |            |
		v |       |            |
		--+-------+            |
		  |        回転中心    |
		  |                    |
		  |                    |
		  |                    |
		  +--------------------+

      場合によっては、回転中心はオブジェクト矩形の外側にあっても良い。
      spin オブジェクトは、ここで指定した点を中心に回転する。

      また、spin オブジェクトの表示座標として指定した点は、この回転中心に
      対応する。


    3.2.7  angle        回転角度指定

	   angle 回転角

      spin オブジェクトの回転角を指定する。回転角は、時計廻り方向に、
      一回転を 4096 とした実数で与える。

      補間時の回転方向は、補間命令のオプションで与える。


    3.2.8  uv		テクスチャ参照位置指定

	   uv 正規化u値 正規化v値
	   uv { u値分子 ! u値分母 } { v値分子 ! v値分母 }


      tex 命令(3.2.3)で割り当てられたテクスチャ中における相対的な
      UV値を指定する。

      正規化値で与える場合、tex 命令で指定されたテクスチャのサイズを縦、
      横それぞれ 1.0 とし、割り当てたい UV値を比率で指定する。

      分数指定の場合は、UV値の比率を分子と分母で指定する。その他の概念は
      同じである。ただし、各分子、分母に使用できるのは整数のみであり、小数は
      使用できない。

      通常は uvsize 命令(3.2.9) と併用する。なお、テクスチャを使用できる
      オブジェクト(sprite, zoom)以外に使用しても意味を為さない。


    3.2.9  uvsize	テクスチャサイズ指定

	   uvsize  正規化横幅 正規化縦幅
	   uvsize  { 横幅値分子 ! 横幅値分母 } { 縦幅値分子 ! 縦幅値分母 }

      tex命令(3.2.3)で割り当てられたテクスチャ中において、実際に適用する
      テクセルのサイズを指定する。

      tex 命令で指定されたテクスチャのサイズを縦、横それぞれ 1.0 とし、
      適用したいテクセル幅をそれに対する比率で指定する。

      分数指定の場合は、縦横の幅値の比率を分子と分母で指定する。
      その他の概念は同じである。ただし、各分子、分母に使用できるのは
      整数のみであり、小数は使用できない。

      通常は uv 命令(3.2.8)と併用する。なお、テクスチャを使用できる
      オブジェクト(sprite, zoom)以外に使用しても意味を為さない。


    3.2.10 texoff	 テクスチャ解除(予定)

	   texoff

      その状態において、該当オブジェクトにはテクスチャを適用しないことを
      明示する。



    3.2.11 color	 RGB 値設定

	   color  <開始頂点番号> {Rn,Gn,Bn,An} [ {Rn+1,Gn+1,Bn+1,An+1} [...] ]


      オブジェクトの RGBA 値を指定する。line もしくは lstrip の場合、
      各頂点毎に RGBA値を指定する必要があるため、複数頂点分の指定が可能。

      これら以外の属性をもつオブジェクトの場合、RGBA 値はひとつ、もしくは
      0 (empty) であるため、開始頂点番号は無視され、最初に指定されている
      RGBA値が適用される。

    3.2.12 alpha        アルファブレンディング指定

	   alpha A B C D [fix]

      アルファブレンディングを有効にし、GS の ALPHA レジスタに指定する
      値を設定する。A,B,D には Cs,Cd,0 のうちのいずれかを指定し、C には
      As,Ad,FIX のいずれかを指定する。C に FIX を指定した場合、fix には
      ALPHA レジスタの FIX フィールドに指定する値を与える。
      
    3.2.13 pri		プライオリティ補正値

	   pri プライオリティ補正値


      プライオリティ補正値を指定する。

      基準となるプライオリティ値はレイアウトを使用するプログラムによって
      指定されるが、その値にここで指定されたプライオリティ補正値を加えた
      ものが、実際の描画プライオリティ値となる。

      プライオリティ値の結果が 7 を超過した場合、7として扱われる。



    3.2.14 magni	下位オブジェクト座標値係数設定

	   magni <表示係数>

      そのオブジェクトに従属する子オブジェクトや孫オブジェクトの座標値や
      表示サイズに、ここで指定した実数を乗算した値を用いる。

      ここで設定された値は、子孫となるすべてのオブジェクトに継承される。
      また、この値が設定されているオブジェクトそのものの座標値には影響を
      与えない。たとえば、下記のような関係を持つオブジェクトがあるとする。
      ()内は、各オブジェクトの座標値として設定されている値である。

	A(100, 100) -+-- B(20, 20)   -+-- D(10, 10)
		     |		      |
		     |		      +-- E(-5, -5)
		     |
		     +-- C(-10,-20)

      全てのオブジェクトの magni が 1.0 である場合、実際の表示座標は以下の
      ようになる。

	A (100, 100)
	B (120, 120)
	C ( 90,  80)
	D (130, 130)
	E (115, 115)

      ここで、A の magni に、0.5 を設定した場合、表示座標値は次のようになる。

	A (100, 100)
	B (110, 110)
	C ( 95,  90)
	D (115, 115)
	E (107.5, 107.5)

      この上、さらに B の magni に 0.5 を設定すると、B の子である D, E の
      座標値は、0.5(A) x 0.5(B) = 0.25 となり、実際の表示座標は以下のように
      なる。
      
	A (100, 100)
	B (110, 110)
	C ( 95,  90)
	D (112.5, 112.5)
	E (108.75, 108.75)

      座標値と同様、sprite や spin 属性の size 値もこの係数の影響を受ける。
      この係数は、ある一つのオブジェクトによって統括される一群のパーツの、
      見掛け上の形を崩さずに表示の大きさを変更したい場合に使用することを
      想定している。



    3.2.15 hide		非表示

	   hide

      オブジェクトを非表示状態にする。

      show 命令(3.2.16) とは排他的であり、一つの状態定義の中に hide と
      show が同時に存在してはならない。




    3.2.16 show		表示

	   show

      オブジェクトを表示状態にする。

      hide 命令(3.2.15) とは排他的であり、一つの状態定義の中に show と
      hide が同時に存在してはならない。




    3.2.17 hrev		水平反転

	   hrev

      オブジェクトに張り付けたテクスチャを、テクスチャの正位置に対して
      水平方向に反転させたものとして扱う。




    3.2.18 vrev		垂直反転

	   vrev

      オブジェクトに張り付けたテクスチャを、テクスチャの正位置に対して
      垂直方向に反転させたものとして扱う。




  3.3  アクション記述セクション

    3.3.1  action～actend	アクション定義ブロック

	   action  "アクション名"

		   track

		     :

		   trend


		   track

		     :

		   trend
		 
		     :
  	   actend


      "アクション名" で参照されるアクションを定義する。
      action ～ actend の間には、かならず track～trend構文(3.3.2) のみが
      置かれ、それぞれの track～trend 構文によって記述されるトラックが
      同時に実行される。

      全てのトラックの実行が終了すると、そのアクション全体の終了となる。
      なお、アクション中で操作されなかったオブジェクトはそれまでの状態を
      保持する。


    3.3.2  track～trend		アクショントラック定義ブロック

	   track "オブジェクト名"

		[wait]
		[set]
		[morf]

	   trend

      "オブジェクト名" で指定されたオブジェクトの、時間軸に伴う変化を記述する。
      track～trend の間は、wait(3.3.4), set(3.3.5), morf(3.3.6) が使用できる
      命令となる。

    3.3.3  keytrack～keyend     同期用シグナルトラック定義ブロック

	   keytrack

		[wait]
		[signal]

	   keyend

      プログラムと同期を取るためのシグナルトラックを記述する。



    3.3.4  wait			時間待ち

	   wait  <待ち時間>

      <待ち時間>で指定された時間だけ、何もせずに待機する。
      待ち時間は 1/300秒単位で指定する。


    3.3.5  set			状態設定

	   set <状態名>

      トラックの操作対象となっているオブジェクトを、<状態名>で指定された
      状態に、強制的に移行する。移行は瞬時に行われる。


    3.3.6  morf			補間変化

	   morf	<移行時間> <状態名>  [<回転方向>]

      トラックの操作対象となっているオブジェクトを、<移行時間>で指定された
      時間をかけて、<状態名> で指定された状態に直線補間で変化させる。

      <移行時間> は 1/300秒単位で指定する。

      トラックの操作対象となっているオブジェクトが spin 属性である場合、
      <回転方向> を指定することができる。回転方向に指定できるのは right 
      もしくは left であり、right であれば時計廻り、left であれば反時計
      廻りとなる。これを指定しなかった場合、デフォルトでは right と同じ
      になる。


    3.3.7  signal		シグナルハンドラコール

	   signal <シグナル名>  <整数>
	   signal <シグナル名>  "名前"

      <シグナル名> で指定された文字列の StrCode を引数として、プログラム側で
      与えられたシグナルハンドラを呼び出す。その際に一つだけ引数を渡すことが
      でき、<整数> もしくは "名前" で指定する。"名前" で指定した場合は
      その文字列の StrCode が値となる。

      <シグナル名> に与える文字列は任意で、重複のチェック等は行われない。


以上。
