/* *****************************************************************************

	Title   : spranm.h

	Comment : 当然、テスタロッサ専用のため、汎用性はありません。

			  ASprMng.snm[] は、各アニメーションへのポインタを指します。
			  テスタロッサでは、全部で１６タイプのアニメーションしか
			  持てません。

			  （０＝プレイヤー、１５＝テスタロッサ、１０＝ドラゴン等１６種類）

			  この、ゲーム専用のキャラタイプ・インデックスに相当した場所に、
			  アニメーション・アドレスを設定します。
			  必要なアニメの展開になりますので、アドレスは heap領域内になります。
			  そのため、near * になっています。

***************************************************************************** */

#define		SPR_NUM_MAX					128				/* 最大128ｽﾌﾟﾗｲﾄ				*/
#define		SPR_REG_MAX					16				/* 最大16種類のｷｬﾗｸﾀが登録可能	*/

#define		ANM_DISPSPR_MAX				128				/* ｽﾌﾟﾗｲﾄ使用最大数				*/

#define		ANM_REG_MAX					16				/* 全ｱﾆﾒｰｼｮﾝ･16種類 : ｹﾞｰﾑ専用	*/
#define		ANM_USESPR_MAX				10				/* 1ｱﾆﾒに使用する最大SPR数		*/
#define		ANM_ACTCHR_MAX				8				/* ｱｸﾃｨﾌﾞ転送用ｷｬﾗｸﾀ最大数		*/

#define		ASPR_FLAG_STOP				0x0001			/* ｱﾆﾒｰｼｮﾝ･STOPﾌﾗｸﾞ				*/

#define		ANM_MODE_LOOP				0x01			/* ｱﾆﾒｰｼｮﾝ･ﾙｰﾌﾟ ﾌﾗｸﾞ			*/
#define		ANM_MODE_STOP				0x02			/* ｱﾆﾒｰｼｮﾝ･STOP ﾌﾗｸﾞ			*/
#define		ANM_MODE_NODISP				0x04			/* ｱﾆﾒｰｼｮﾝ表示  ﾌﾗｸﾞ			*/
#define		ANM_MODE_NODISP2			0x08			/* ｱﾆﾒｰｼｮﾝ表示2 ﾌﾗｸﾞ			*/
#define		ANM_MODE_END				0x10			/* ｱﾆﾒｰｼｮﾝEND   ﾌﾗｸﾞ			*/
#define		ANM_MODE_END2				0x20			/* ｱﾆﾒｰｼｮﾝEND2  ﾌﾗｸﾞ			*/
#define		ANM_MODE_COUNT				0x40			/* ｱﾆﾒｰｼｮﾝ･ｶｳﾝﾄ ﾌﾗｸﾞ			*/
#define		ANM_MODE_ACTIVE				0x80			/* ｱﾆﾒｰｼｮﾝ･ｱｸﾃｨﾌﾞ転送 ﾌﾗｸﾞ		*/

#define		ANM_MODE2_ENDSTOP			0x01			/* ｱﾆﾒｰｼｮﾝ･終了ｺﾏSTOP ﾌﾗｸﾞ		*/



/* ///  ● 列挙型定義 ●  /// */


/* ///  ● 構造体宣言 ●  /// */
typedef struct __tagASPRMNG								/* ｱﾆﾒ･ｽﾌﾟﾗｲﾄ管理構造体			*/
{
	u_short		stChrIdx[ SPR_REG_MAX];					/* 登録開始ｷｬﾗｸﾀ番号:VRAM		*/
	char near	*anm[ ANM_REG_MAX];						/* 各ｱﾆﾒｰｼｮﾝへのﾎﾟｲﾝﾀ			*/
	char far	*cptr;									/* graph.far へのﾎﾟｲﾝﾀ			*/
	char far	*aptr;									/* anim.far へのﾎﾟｲﾝﾀ			*/
	u_short		flag;									/* ﾌﾗｸﾞ							*/
	u_char		useSpr;									/* 使用ｽﾌﾟﾗｲﾄ数					*/
	u_char		dmy;

} ASPRMNG;


typedef struct __tagSPRANM								/* ｽﾌﾟﾗｲﾄ･ｱﾆﾒ構造体				*/
{
	u_char		x, y;									/* 画面上座標での( x, y)		*/

	/* スプライト表示用メンバ変数	*/
	u_short		base;									/* ﾊﾟﾚｯﾄ＆登録先ｷｬﾗｸﾀ番号		*/
	u_short		pal;									/* 表示ﾊﾟﾚｯﾄ番号				*/
	u_short		paln;									/* 通常ﾊﾟﾚｯﾄ番号				*/
	char		sprNo;									/* 表示ﾍﾞｰｽ･ｽﾌﾟﾗｲﾄ番号 : 0-127	*/
	char far	*cptr;									/* ｷｬﾗｸﾀﾃﾞｰﾀへのﾎﾟｲﾝﾀ (ACT転送) */

	u_char		bfno;									/* 一つ前のｽﾌﾟﾗｲﾄ数				*/
	u_char		useSprNum;								/* ｱﾆﾒで使用する最大ｽﾌﾟﾗｲﾄ数	*/
	u_char		mode2;									/* ｱﾆﾒｰｼｮﾝ･ﾓｰﾄﾞ2					*/
	char		dmy;

	/* アニメ単位 静的メンバ変数	*/
	u_char		anmNo;									/* 表示ｱﾆﾒｰｼｮﾝ番号				*/
	u_short		anum;									/* 表示ｱﾆﾒｰｼｮﾝの総ｺﾏ数			*/
	char near	*fst;									/* ｱﾆﾒﾃﾞｰﾀ･ｵﾌｾｯﾄへのﾎﾟｲﾝﾀ		*/
	char near	*adt;									/* ｱﾆﾒﾃﾞｰﾀへのﾎﾟｲﾝﾀ				*/
	u_char		mode;									/* ｱﾆﾒｰｼｮﾝ･ﾓｰﾄﾞ					*/
	u_char		speed;									/* ｱﾆﾒｰｼｮﾝ･ﾍﾞｰｽ speed			*/

	/* アニメ単位 動的メンバ変数	*/
	char		motNo;									/* 表示中のｺﾏ番号				*/
	char		time;									/* 表示時間						*/
	u_short		flag;									/* ｱﾆﾒ･ｺﾏ単位属性ﾌﾗｸﾞ			*/

} SPRANM;


typedef struct __tagSPRACTIVE							/* ACTIVE ｽﾌﾟﾗｲﾄ登録用構造体	*/
{
	char far	*chrdt;									/* ｷｬﾗｸﾀ格納先ﾃﾞｰﾀ				*/
	short		regNo;									/* 登録先ｷｬﾗｸﾀ番号				*/
	u_char		num;									/* ｷｬﾗｸﾀ登録数					*/
	u_char		dmy;
} SPRACTIVE;


typedef struct __tagSPRLOCATE							/* ｽﾌﾟﾗｲﾄ表示用構造体			*/
{
	u_char		sprNo;									/* 割当ｽﾌﾟﾗｲﾄ番号				*/
	u_short		cdata;									/* ｷｬﾗｸﾀﾃﾞｰﾀ					*/
	int			x, y;									/* 表示座標						*/
	u_char		dmy;
} SPRLOCATE;




/* ///  ●外部関数宣言●  /// */
void	SprInit( u_char mode);							/* ｽﾌﾟﾗｲﾄ･ｱﾆﾒ処理の初期化		*/
void	SprSetAddr( char far *spr, char far *anm);		/* ｽﾌﾟﾗｲﾄ･ｱﾆﾒのｱﾄﾞﾚｽ設定		*/
int		SprSetChracter( char chrnum, u_short chridx);	/* ｽﾌﾟﾗｲﾄ･ｷｬﾗｸﾀの設定（VRAM）	*/

SPRANM	*AnmChrInit( char cnum, u_short pal, char spr);
void	AnmLoad( char ctype);
void	AnmSet( SPRANM *ap, char ctype, u_short anum, char mtno, char mode);
void	AnmSetAddr( SPRANM *ap, char mtno, u_char speed);
int		AnmExec( void);
int		AnmDisp( SPRANM *sp);
void	AnmTransfer( void);
void	AnmLocateAll( void);

int		SprSetGraphic( char fidx, char gidx, u_short chridx);



