/*
	chara.txt
	キャラ、コマンドの作成方法について

	2001/03/13	M.Sonoyama
	$Id: chara.txt,v 1.1.1.3 2002/11/19 11:41:41 Yoshizawa1 Exp $
*/

■そもそもキャラとは？

	ＭＧＳ２プログラム開発では、ゲーム中に登場する全ての
	事象は「キャラ(chara)」という名前で呼ばれます。
	たとえば、
		・プレイヤーは、「キャラ”プレイヤー”」
		・敵兵は、「キャラ”コマンダー”とキャラ”警備兵と・・・」
		・マップの定義は、「キャラ”マップ”」
		・水溜まり処理は、「キャラ”水溜まり管理」
		・スライドドアは、「キャラ”ドア”」
	といった具合です。
	ＭＧＳ２のプログラム開発は、この「キャラ」の作成だといっていいでしょう。

■じゃあコマンドとは？

	「キャラ」が、それなりに長い命（次のステージがロードされるまで、とか、
	あるエフェクトが発生して消えるまで、とか）に対して、
	「コマンド(command)」は、一瞬の命しか持たないものです。
	プログラム的には、
		「キャラ」は、アクターを起動するもの。
		「コマンド」は、１関数を実行するだけのもの。
	という感じで考えてもらっていいでしょう。
	「コマンド」は「キャラ」を制御する、「キャラ」の状態を取得する、のに使うことが
	多いようです。

■キャラの作成方法

	１）command.def に定義する。
			全ての「キャラ」は、scn/command.def 内に
			その定義を記述しなければなりません。
			定義するものは以下の通りです。
				・シナリオでの書式
				・コールされる関数名
				・起動時の引数の定義	

			シナリオの詳細説明は他の人に任せます。

			＜書式＞
				chara キャラ名称[呼ばれるプログラム関数] キャラ固有の名前 \
					-起動オプション１（A～Z, a～z) 引数 \
					-起動オプション２（A～Z, a～z) 引数 \
					....

			＜例＞
				<command.def>での記述

				chara プレイヤー[NewPlayer] $s:名前 \ 
					-position $v:初期位置 \
					-rotate $v:初期方向 \
					-flag $i:各種フラグ

				<各ステージのシナリオでの記述>
			
				chara プレイヤー スネーク \
					-position 1000,0,1000 \
					-rotate   0,1024,0 \
					-flag 0x010f

	２）プログラムの作成
			command.defで記述した、「呼ばれるプログラム関数」を作成します。
			このとき、この関数の引数は、必ず、

			void	*chara_func( int name, int where )
			{
				Work		*work ;

				......
				......

				return work ;
			}

			という書式にしてください。
			int name は、$s:名前（上の例で言えば スネーク）が数値変換された値。
			int where は、キャラの登場するマップＩＤが入ります。

	３）実際にステージのシナリオにキャラを記述

	４）シナリオのmake

			scn/ ディレクトリで make とやってシナリオをコンパイルします。

	５）ステージキャラリストの生成
	
			よく忘れる作業です。
			各ステージで実際に使用するキャラのリストファイルを作成します。
			これによって、そのステージで必要なキャラのみをリンクした実行ファイル
			を作成することが可能になります。

			scn/ ディレクトリで make stage とやってください。

	６）プログラムのコンパイル
			
	７）make run で実行

■コマンドの作成方法

	キャラの作成方法とほとんど一緒ですが、
	command.def に記述する書式と、関数の書式が異なります。

		＜書式＞
			command コマンド名称[呼ばれるプログラム関数]
				-起動オプション１（A～Z, a～z) 引数 \
				-起動オプション２（A～Z, a～z) 引数 \
				....

			$s:名前 がないのがキャラとの違いです。

		＜例＞
			<command.def>での記述
			
			command プレイヤー状態取得[NewGetPlayerStatus] \
				-flag $i:各種フラグ 

			<各ステージのシナリオでの記述>

			command プレイヤー状態取得 \
				-flag 0x0011 
	
		＜関数の書式＞

			int		command_func( void )
			{
				int		res ;

				return res ;
			}


			

	




	
