/*

	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 ;

			}





			



	









	

