script.h 6.93 KB
/********************************************************************************
	script.h: NINTENDO64 Disk Drive IPL4 header

	December 11, 1996
 ********************************************************************************/

#ifndef SCRIPT_H
#define	SCRIPT_H


typedef unsigned long	Sequence;

extern Sequence marioSequence[];

/********************************************************************************/
/*																				*/
/*	Map language command ID.													*/
/*																				*/
/********************************************************************************/

enum SeqCommand {
	seqGotoID,
	seqEventID,
	seqParamID,
	seqSetFlgID,
	seqClrFlgID,
	seqLocateID,
	seqAngleID,
	seqSpeedID,
	seqAnimeID,
	seqAcceleID,
	seqTurnID,
	seqJumpID,
	seqLandID,
	seqCurveID
};

/********************************************************************************/
/*																				*/
/*	Sequence script basic macro.												*/
/*																				*/
/********************************************************************************/

#define	seqUPack(a)			((ulong)(a))
#define	seqPack2(a,b)		((((ulong)(a)&0xffff)<<16)|((ulong)(b) &0xffff))
#define	seqPack3(a,b,c)		((((ulong)(a)&0xff)<<24)|(((ulong)(b)&0xff)<<16)|((ulong)(c)&0xffff))
#define	seqPack4(a,b,c,d)	((((ulong)(a)&0xff)<<24)|(((ulong)(b)&0xff)<<16)|(((ulong)(c)&0xff)<<8)|((ulong)(d)&0xff))


//////////////////////////////////////////////////////////////////////////////////
//
//
//
//
//		Define script.
//
//
//
//
//////////////////////////////////////////////////////////////////////////////////

/********************************************************************************/
/*																				*/
/*	repeat sequence.															*/
/*																				*/
/********************************************************************************/

typedef struct {
	uchar	comm;
	uchar	frame;
	short	pad2;
	long	addr;
} SeqGoto;

#define	seqGoto(frame,addr)  \
	seqPack3(seqGotoID,frame,0), \
	seqUPack(addr),


/********************************************************************************/
/*																				*/
/*	Check event.																*/
/*																				*/
/********************************************************************************/

typedef struct {
	uchar	comm;
	uchar	frame;
	short	event;
} SeqEvent;

#define	seqEvent(frame,event)  \
	seqPack3(seqEventID,frame,event),


/********************************************************************************/
/*																				*/
/*	Set parameter.																*/
/*																				*/
/********************************************************************************/

typedef struct {
	uchar	comm;
	uchar	frame;
	short	param;
} SeqParam;

#define	seqParam(frame,param)  \
	seqPack3(seqParamID,frame,param),


/********************************************************************************/
/*																				*/
/*	Set or clear flag.															*/
/*																				*/
/********************************************************************************/

typedef struct {
	uchar	comm;
	uchar	frame;
	short	flags;
} SeqFlag;

#define	seqSetFlg(frame,flags)  \
	seqPack3(seqSetFlgID,frame,flags),

#define	seqClrFlg(frame,flags)  \
	seqPack3(seqClrFlgID,frame,flags),


/********************************************************************************/
/*																				*/
/*	Set shape location.															*/
/*																				*/
/********************************************************************************/

typedef struct {
	uchar	comm;
	uchar	frame;
	short	posx;
	short	posy;
	short	posz;
} SeqLocate;

#define	seqLocate(frame,posx,posy,posz)  \
	seqPack3(seqLocateID,frame,posx), \
	seqPack2(posy,posz),


/********************************************************************************/
/*																				*/
/*	Set shape angle.															*/
/*																				*/
/********************************************************************************/

typedef struct {
	uchar	comm;
	uchar	frame;
	short	angle;
} SeqAngle;

#define	seqAngle(frame,angle)  \
	seqPack3(seqAngleID,frame,angle),


/********************************************************************************/
/*																				*/
/*	Set shape speed.															*/
/*																				*/
/********************************************************************************/

typedef struct {
	uchar	comm;
	uchar	frame;
	short	speed;
} SeqSpeed;

#define	seqSpeed(frame,speed)  \
	seqPack3(seqSpeedID,frame,speed),


/********************************************************************************/
/*																				*/
/*	Set shape animation.														*/
/*																				*/
/********************************************************************************/

typedef struct {
	uchar	comm;
	uchar	frame;
	short	speed;
	long	anime;
} SeqAnime;

#define	seqAnime(frame,anime,speed)  \
	seqPack3(seqAnimeID,frame,speed), \
	seqUPack(anime),


/********************************************************************************/
/*																				*/
/*	Accele shape.																*/
/*																				*/
/********************************************************************************/

typedef struct {
	uchar	comm;
	uchar	frame;
	short	accele;
} SeqAccele;

#define	seqAccele(frame,accele)  \
	seqPack3(seqAcceleID,frame,accele),


/********************************************************************************/
/*																				*/
/*	Turn shape.																	*/
/*																				*/
/********************************************************************************/

typedef struct {
	uchar	comm;
	uchar	frame;
	short	angvelo;
} SeqTurn;

#define	seqTurn(frame,angvelo)  \
	seqPack3(seqTurnID,frame,angvelo),


/********************************************************************************/
/*																				*/
/*	Jump shape.																	*/
/*																				*/
/********************************************************************************/

typedef struct {
	uchar	comm;
	uchar	frame;
	short	speed;
} SeqJump;

#define	seqJump(frame,speed)  \
	seqPack3(seqJumpID,frame,speed),


/********************************************************************************/
/*																				*/
/*	Landing check.																*/
/*																				*/
/********************************************************************************/

typedef struct {
	uchar	comm;
	uchar	frame;
	short	height;
} SeqLand;

#define	seqLand(frame,height)  \
	seqPack3(seqLandID,frame,height),


/********************************************************************************/
/*																				*/
/*	Curve shape.																*/
/*																				*/
/********************************************************************************/

typedef struct {
	uchar	comm;
	uchar	frame;
	short	length1;
	short	posx2;
	short	posz2;
	short	angle2;
	short	length2;
	long	speed;
} SeqCurve;

#define	seqCurve(frame,len1,posx2,posz2,ang2,len2,speed)  \
	seqPack3(seqCurveID,frame,len1), \
	seqPack2(posx2,posz2), \
	seqPack2(ang2,len2), \
	seqUPack(speed),

#endif