/********************************************************************************
	backup.h: Ultra 64 MARIO Brothers include file

	Copyright (c) 1996 Nintendo co., ltd.  All rights reserved

	May 11, 1986
 ********************************************************************************/

#ifndef BACKUP_H
#define	BACKUP_H


#define	BuGetCourseNumber(stage)			(buCourseTable[(stage)-1])


#define	BuGetHiScore(course)				((ushort)(BuGetWinScore(course) & 0xffff))
#define	BuGetWinner(course)					((ushort)(BuGetWinScore(course) >> 16))

#define	BuGetCourseStars(player,course)		BuGetNumStars(player,course)
#define	BuGetTotalStars(player)				BuGetSumStars(player, 0,24)
#define	BuGetExtraStars(player)				BuGetSumStars(player,15,24)

#define	BuSetStartingStar()					(buStartingStarFlag=BuGetStarFlag(activePlayerNo-1,activeCourseNo-1))
#define	BuGetStartingStar()					buStartingStarFlag



#define	BuGetLastCourseNo()					buLastBackupCourseNo
#define	BuGetLastStarNo()					buLastBackupStarNo
#define	BuIsHiScore()						buLastBackupHiScore
#define	BuIsMyHiScore()						buLastBackupMyHiScore


extern char  buCourseTable[38];
extern uchar buLastBackupCourseNo;
extern uchar buLastBackupStarNo;
extern uchar buLastBackupHiScore;
extern uchar buLastBackupMyHiScore;
extern uchar buStartingStarFlag;
extern uchar buYosshiJump;

/********************************************************************************/
/*																				*/
/*	item flags.																	*/
/*																				*/
/********************************************************************************/

#define	BU_ITEM_ACTIVE			0x00000001

#define	BU_ITEM_REDSW			0x00000002
#define	BU_ITEM_GREENSW			0x00000004
#define	BU_ITEM_BLUESW			0x00000008

#define	BU_ITEM_KOOPAKEY1		0x00000010
#define	BU_ITEM_KOOPAKEY2		0x00000020
#define	BU_ITEM_KEYDOOR1		0x00000040
#define	BU_ITEM_KEYDOOR2		0x00000080

#define	BU_ITEM_WATERWALL		0x00000100
#define	BU_ITEM_DRAINSW			0x00000200

#define	BU_ITEM_STARDOOR0		0x00000400
#define	BU_ITEM_STARDOOR1		0x00000800
#define	BU_ITEM_STARDOOR2		0x00001000
#define	BU_ITEM_STARDOOR3		0x00002000
#define	BU_ITEM_STARDOOR4		0x00004000
#define	BU_ITEM_STARDOOR5		0x00008000
#define	BU_ITEM_STARDOOR6		0x00100000

#define	BU_ITEM_LOSTHAT			0x00010000
#define	BU_ITEM_CONDORHAT		0x00020000
#define	BU_ITEM_MONKEYHAT		0x00040000
#define	BU_ITEM_DARUMAHAT		0x00080000
#define	BU_ITEM_YOSSHI			0x00200000

#define	BU_ITEM_KINOPIO1		0x01000000
#define	BU_ITEM_KINOPIO2		0x02000000
#define	BU_ITEM_KINOPIO3		0x04000000
#define	BU_ITEM_RABBIT1			0x08000000
#define	BU_ITEM_RABBIT2			0x10000000


#define	BU_ITEM_HATFLAGS		0x000F0000
#define	BU_ITEM_ALLFLAGS		0x000003FF
#define	BU_ITEM_KILLKOOPA1		0x00000050
#define	BU_ITEM_KILLKOOPA2		0x000000A0

/********************************************************************************/
/*																				*/
/*	function prototype definition.												*/
/*																				*/
/********************************************************************************/

extern void
BuWriteStorage(int player);

extern void
BuClearStorage(int player);

extern int
BuCopyStorage(int source, int destination);



extern void
BuInitBackUp(void);

extern void
BuRestoreBackUp(void);

extern void
BuStoreBackUp(short score, short starno);



extern int
BuIsActive(int player);

extern ulong
BuGetWinScore(int course);

extern int
BuGetNumStars(int player, int course);

extern int
BuGetSumStars(int player, int course, int end_course);

extern int
BuGetStarFlag(int player, int course);

extern void
BuSetStarFlag(int player, int course, int starflag);

extern int
BuGetNumCoins(int player, int course);



extern void
BuSetItemFlag(ulong itemflag);

extern void
BuClrItemFlag(ulong itemflag);

extern ulong
BuGetItemFlag(void);

extern int
BuGetCannonFlag(void);

extern void
BuSetCannonFlag(void);

extern void
BuSetHatPosition(short posx, short posy, short posz);

extern int
BuGetHatPosition(SVector position);

extern void
BuSetSoundMode(ushort mode);

extern ushort
BuGetSoundMode(void);

extern void
BuRestoreHat(void);


extern void
BuClearRamStorage(void);

extern void
BuSetMidPoint(BGPortPtr bgport);

extern int
BuGetMidPoint(BGPortPtr bgport);

#endif
