// **************************************************************************
// **************************************************************************
// **************************************************************************
// **                                                                      **
// ** SHELL.H                                                       MODULE **
// **                                                                      **
// ** Main shell code.                                                     **
// **                                                                      **
// ** Last modified : 05 Mar 1997 by John Brandwood                        **
// **                                                                      **
// **************************************************************************
// **************************************************************************
// **************************************************************************

#ifndef __SHELL_h
#define __SHELL_h

#ifndef __LFPTYPES_h
 #include "lfptypes.h"
#endif

/*
#ifndef __FONTCODE_h
 #include "fontcode.h"
#endif
*/

#ifndef __TEAMDATA_h
 #include "teamdata.h"
#endif


#include "..\..\Audio\Data\ShellFX.h"

extern void
	*ShellFX;

#define AudioPlaySfx(sound, x, y, z);		Audio_SfxPlay(ShellFX,sound,SfxVolume);

#define BG_KOBE1 31
#define BG_KOBE2 32
#define BG_KOBE3 33
#define BG_KOBE4 34
#define BG_KOBE5 35


#define RANDOM_KOBE_BG	(BG_KOBE1 + (ReadRandomByte()%5))

#define BG_CYCLING	RANDOM_KOBE_BG

void BG_Auto( const s32 a );
Gfx *BG_Draw( Gfx *gp, const u32 slot, s32 x, const s32 half, const u8 shade );
void BG_Free( const u32 slot );
void BG_Load( const u32 id, const u32 slot );
void BG_Init();
void BG_Deinit();


//
// GLOBAL DATA STRUCTURES AND DEFINITIONS
//

#define ZERO	0	// it's my style, baby...

#define	ALLOW_ARCADE        1

#define	LFP_FILE_VERSION    0x1C

#if PAL
 #define GAME_HERTZ          25
#else
 #define GAME_HERTZ          30
#endif


extern int 	ShellPauseMenuInited;


//#define MAX_VOLUME_LEVEL	32		// 0 = off, levels are 1-32
#define MAX_VOLUME_LEVEL	127		// 0 = off, levels are 1-127	//stored in options as SB!!!!

#define DEFAULT_VOLUME_LEVEL	((MAX_VOLUME_LEVEL*3)/4)	// init options at this value

#define MAX_CONTROLLERS		4
#define MAX_JPADS			MAX_CONTROLLERS


//
// Options for Mike.
//

#define	MENU_LEFT_KEYX		114	//104 //114	// separation between left & right side of shell menus
				// the colorful rainbow "courtside" w/ vertical text is to the left
//				// the right side is for main display
//
//

#define MENU_LEFT_X			MENU_LEFT_KEYX+24	//128	//120
//#define MENU_FONT_H			18
//#define MENU_Y_SPACING		(z3+2)
//#define	MENU_BOX_H			(MENU_FONT_H+MENU_Y_SPACING-2)
#define MENU_BOTTOM_LINE_Y	210
#define MENU_BOTTOM_LINE_H	2
#define MENU_LINE_H			2
#define MENU_LINE_W			2	//3
#define MENU_BOTTOM_LINE_Ya	(MENU_BOTTOM_LINE_Y+MENU_BOTTOM_LINE_H)


#define MENU_TOP_KEY_Y	80		// separates top menu(team name) from bottom(player)
#define MENU_TOP_KEY_Ya	(MENU_TOP_KEY_Y+MENU_LINE_H)		// separates top menu(team name) from bottom(player)


#define DEBUG1	1


	// Main Coordinates- Welcome Screen (also used for PlayerCards)
/***
#define WEL_X1	(256-115-MENU_LINE_W)	// end of red
#define WEL_X2	(256-86)	// start of blank
#define WEL_X3	(256+86)	// end of blank
#define WEL_X4	(256+115)	// start of purple
***/

#define  WEL_TMRANK_W	210	//200	//180
#define WEL_X1	(256-110-MENU_LINE_W)	// end of red
#define WEL_X1a	(WEL_X1+MENU_LINE_W)	// end of red and line
#define WEL_X2	(256-WEL_TMRANK_W/2)	// start of blank
#define WEL_X3	(256+WEL_TMRANK_W/2)	// end of blank
#define WEL_X4	(256+110)	// start of purple

#define WEL_X4a (WEL_X4+MENU_LINE_W)

//#define WEL_Y1	(39+3)	// start of yellow
//#define WEL_Y2	(71-2)	// end of yellow
#define WEL_Y0	(WEL_Y0a-11)	// start of "welcome to" graphic
#define WEL_Y0a	(WEL_Y1-4)	// end of "welcome to" graphic
#define WEL_Y1	(44)	// start of yellow
#define WEL_Y2	(WEL_Y1+24)	// end of yellow
#define WEL_Y3	(96)	// start of blank
#define WEL_Y4  (194)	// end of blank

#define WEL_Y5  (WEL_Y4+2)	// start of text
#define WEL_Y6  (WEL_Y5+11)	// end of text


	// player Boxes - Welcome Screen & Sub screens
#define WEL_BY1	105
#define WEL_BY2	(WEL_BY1+56)	// end of photo
#define WEL_BY3	(WEL_BY2+18)
#define WEL_BY4	(WEL_BY3+12)
#define WEL_BY5	(WEL_BY4+ 3)
#define WEL_BY6	(WEL_BY5+12)

/*********
#define WEL_BX4	(WEL_X1-10)
#define WEL_BX3	(WEL_BX4-64)
#define WEL_BX2	(WEL_BX3-6)
#define WEL_BX1	(WEL_BX2-17)	// AWAY PLAYER

#define WEL_BX5	(WEL_X4+10)		// HOME PLAYER
#define WEL_BX6	(WEL_BX5+64)
#define WEL_BX7	(WEL_BX6+6)
#define WEL_BX8	(WEL_BX7+17)
********/

// wider box 3/22/99
#define WEL_BX4	(WEL_X1-12)			//256-115-2-10 = 129
#define WEL_BX3	(WEL_BX4-64)
#define WEL_BX2	(WEL_BX3-8)
#define WEL_BX1	(WEL_BX2-20)	// AWAY PLAYER

#define WEL_BX5	(WEL_X4+12)		// HOME PLAYER
#define WEL_BX6	(WEL_BX5+64)
#define WEL_BX7	(WEL_BX6+8)
#define WEL_BX8	(WEL_BX7+20)


#define CARD_BOX_W  (WEL_BX4 -  WEL_BX1)	//
#define CARD_BOX_H  (WEL_BY6 -  WEL_BY1)

#define CARD_BOX_Y2 (WEL_BY2 -  WEL_BY1)
#define CARD_BOX_Y3 (WEL_BY3 -  WEL_BY1)
#define CARD_BOX_Y4 (WEL_BY4 -  WEL_BY1)
#define CARD_BOX_Y5 (WEL_BY5 -  WEL_BY1)
#define CARD_BOX_Y6 (WEL_BY6 -  WEL_BY1)

#define LCARD_BOX_X2 (WEL_BX2 -  WEL_BX1)
#define LCARD_BOX_X3 (WEL_BX3 -  WEL_BX1)

#define RCARD_BOX_X2 (WEL_BX6 -  WEL_BX5)
#define RCARD_BOX_X3 (WEL_BX7 -  WEL_BX5)






typedef	struct ImgResource_S
	{
	UW                  imgW;
	UW                  imgH;
	UD                  imgFlg;
	UW **               imgPal;
	} ImgResource_T;

typedef	struct SprResource_S
	{
	UW                  sprW;
	UW                  sprH;
	UD                  sprFlg;
	UW **               sprPal;
	} SprResource_T;

typedef	struct SprTexture_S
	{
	UW                  sprW;
	UW                  sprH;
	SW                  sprX;
	SW                  sprY;
	UW **               sprPal;
	} SprTexture_T;

typedef	struct SPR_LIST_S
	{
	void *              pbf__Res;
	UL *                pul__ResID;
	} SPR_LIST_T;


// Define sprites.
//  WARNING - All shell sprites MUST fit in 8 bits (UB) **************************


//NOTE: the SPRITE_LIST uses a redefinable macro to keep all sprites in order in all the 
// places they are used, which include
//	1) enum
//  2) acl__gShellSpr (sprite lists) 
// Thus, if one sprite is added into the middle of the list, all relevant lists
// are automatically updated (lazy but smart!)

//	sm(SPR_RCLE21) 

/* dead sprites					sm(SPR_LL_ALNBL)\
								sm(SPR_LL_ALNTL)\
								sm(SPR_LL_ALNBR)\
								sm(SPR_LL_ALNTR)\
								sm(SPR_CNBUTLB)\
								sm(SPR_CNBUTRB)\

								sm(SPR_CNBORRC0)\
								sm(SPR_CNBORLC0)\
// corners -red 				sm(SPR_CBLA0ES)\
								sm(SPR_CTLA0ES)\
								sm(SPR_CBRA0ES)\
								sm(SPR_CTRA0ES)\

// playoff screen				sm(SPR_KTEAMUSR)  \
								sm(SPR_KTEAMCPU)  \
								sm(SPR_KTEAMNUL)  \

								sm(SPR_CTRLBAR)\

								sm(SPR_KEAST)  \
								sm(SPR_KWEST)  \

*/

#define SPRITE_LIST  			sm(SPR_GUSER)  \
								sm(SPR_GCPU)  \
								sm(SPR_TXTSH70)\
								sm(SPR_SMALLBTN)  \
/* menu screens*/				sm(SPR_MENU_HL) \
								sm(SPR_MENULBAR) \
								sm(SPR_TITLEBAR) \
/* controller screen */			sm(SPR_CNTRLBG)\
								sm(SPR_CNBUTBX)\
								sm(SPR_CNBORDL)\
								sm(SPR_CNBORDR)\
/* controller select sprites*/	sm(SPR_CNBORLA0)\
								sm(SPR_CNBORRA0)\
								sm(SPR_CNBUTRC0)\
								sm(SPR_CNBUTLC0)\
								sm(SPR_CNGRAY)\
/* menu red corner */			sm(SPR_SMALLCRV)\
								sm(SPR_AT_BOX)\
								sm(SPR_MBARSHAD)\
/* team box-rosters,etc*/		sm(SPR_TM_CRNR)\
								sm(SPR_OPSELECT)\
/* corners -yel & purp */		sm(SPR_CBL70ES)\
								sm(SPR_CTL70ES)\
								sm(SPR_CBR70ES)\
								sm(SPR_CTR70ES)\
/* trade screen - (messy)*/		sm(SPR_TMAINBAR)\
								sm(SPR_TREDBAR)\
								sm(SPR_TPURBAR)\
								sm(SPR_TCURVR70)\
								sm(SPR_TCURVL70)\
								sm(SPR_TCURTRO)\
								sm(SPR_TCURTLO)\
								sm(SPR_TCURBRO)\
								sm(SPR_TCURBLO)\
								sm(SPR_TCBR80IN)\
								sm(SPR_TCBL80IN)\
								sm(SPR_TCTL80IN)\
								sm(SPR_TCTR80IN)\
/* rounded white lines*/		sm(SPR_TRLNTR)\
								sm(SPR_TRLNTL)\
								sm(SPR_TRLNBR)\
								sm(SPR_TRLNBL)\
/* substitutions */				sm(SPR_PRCBNC)\
								sm(SPR_PRCCRT)\
								sm(SPR_RSELECT)\
								sm(SPR_PSELECT)\
								sm(SPR_SPWRBAR)\
								sm(SPR_SPWRBAR1)\
								sm(SPR_SPPWRBUT)\
								sm(SPR_SRPWRBUT)\
/* following 4 MUST be in order*/ sm(SPR_SGAMETXT)\
								sm(SPR_SNBATXT)\
								sm(SPR_SSEASTXT)\
								sm(SPR_SPLAYTXT)\
/* player "card" */				sm(SPR_PRCARD)\
								sm(SPR_PPCARD)\
								sm(SPR_PRCARD2)\
								sm(SPR_PPCARD2)\
/* pregame/welcome*/			sm(SPR_WELTXT70)\
								sm(SPR_WELPRE70)\
								sm(SPR_WELSEA70)\
								sm(SPR_WELPLA70)\
								sm(SPR_WELARC70)\
								sm(SPR_WELR70)\
								sm(SPR_WELL70)\
								sm(SPR_CTRA0IN)\
								sm(SPR_CTL70IN)\
/* team select  */				sm(SPR_TABATL)\
								sm(SPR_TABCEN)\
								sm(SPR_TABMID)\
								sm(SPR_TABPAC)\
								sm(SPR_TABALL)\
								sm(SPR_TABSPEC)\
								sm(SPR_TABEAS)\
								sm(SPR_TABWES)\
/* team select-2nd way */		sm(SPR_OREDBAR)\
								sm(SPR_OPURBAR)\
/*  playoff chart	*/			sm(SPR_PHOLEA0)\
								sm(SPR_PBUT)\
/*  options	*/					sm(SPR_OPPWRBUT)\
/*  offensive sets	*/			sm(SPR_COURT)\
								sm(SPR_PAD)\
								sm(SPR_PADHIL)\
								sm(SPR_PADHIR)\
								sm(SPR_PADHIU)\
								sm(SPR_PADHID)\
/*  corners of hilite/select bar*/		sm(SPR_SCBLUR11)\
/* blue, left - 11 pixels tall */		sm(SPR_SCBLUL11)\
								sm(SPR_SCORAR11)\
								sm(SPR_SCORAL11)\
								sm(SPR_ORSEL15L)\
								sm(SPR_ORSEL15R)\
/*  photo hilite box */			sm(SPR_PHILITE)\
/*  small corners */			sm(SPR_BLUESELR)\
								sm(SPR_BLUESELL)\
								sm(SPR_SMCURVR)\
/*  box in rookie mode */		sm(SPR_LEVBORD)\
/*  help box corners-green */	sm(SPR_HELPTL)\
								sm(SPR_HELPTR)\
								sm(SPR_HELPBL)\
								sm(SPR_HELPBR)\
/*  help box corners-blue */	sm(SPR_HELPTL1)\
								sm(SPR_HELPTR1)\
								sm(SPR_HELPBL1)\
								sm(SPR_HELPBR1)\
/*  game pak screene */			sm(SPR_SRUMBLE)\
								sm(SPR_SCART)\
								sm(SPR_SCONTRL)\
								sm(SPR_SCONTRLB)\
								sm(SPR_NSPORTS)\

//								sm(SPR_




// NOTE:  Naming convention for corners :
//  C = Corner
//  T = Top,   B = Bottom
//  L = left,  R = right
// "A0" & "70" refer to alpha channel transparency factor
//  E = External  , I = Internal
//  S = Shadow,     N - No shadow
//#define SPR_LL_ACRTR	SPR_CRTRA0
//#define SPR_LL_ACRTL	SPR_CRTLA0
//#define SPR_LL_ACRBR	SPR_CRBRA0
//#define SPR_LL_ACRBL	SPR_CRBLA0

//#define SPR_RED_TR		SPR_CTLA0ES	// warning - L&R are reversed
//#define SPR_RED_TL		SPR_CTRA0ES
//#define SPR_RED_BR		SPR_CBLA0ES
//#define SPR_RED_BL		SPR_CBRA0ES


#define SPR_RED_TR		SPR_CTL70ES
#define SPR_RED_TL		SPR_CTR70ES
#define SPR_RED_BR		SPR_CBL70ES
#define SPR_RED_BL		SPR_CBR70ES

// NOTE: Yellow & Purple corners use same alpha channel (i.e. same sprites)
#define SPR_YEL_TR		SPR_CTL70ES
#define SPR_YEL_TL		SPR_CTR70ES
#define SPR_YEL_BR		SPR_CBL70ES
#define SPR_YEL_BL		SPR_CBR70ES

#define SPR_PUR_TR		SPR_CTL70ES
#define SPR_PUR_TL		SPR_CTR70ES
#define SPR_PUR_BR		SPR_CBL70ES
#define SPR_PUR_BL		SPR_CBR70ES


#define SPR_TCURVL70_W	17		// width to help in shadow draw calcs - halftime/trade screens

#define RC_W		21		// Rounded Corner (SPR_Cxx70ES & SPR_CxxA0ES) width 
#define RC_H		16		// Rounded Corner (SPR_Cxx70ES & SPR_CxxA0ES) height 


#define sm(name)	name,

enum shellsprites {
	NO_SPRITE,
	SPRITE_LIST 
	LAST_SPRITE
};

#undef sm


#define	SPR_FLATS           LAST_SPRITE	//(1+89)

#define	SPR_FLATNUL         (SPR_FLATS+ 0)		// free agent logo
#define	SPR_FLATATL         (SPR_FLATS+ 1)
#define	SPR_FLATBOS         (SPR_FLATS+ 2)
#define	SPR_FLATCHA         (SPR_FLATS+ 3)
#define	SPR_FLATCHI         (SPR_FLATS+ 4)
#define	SPR_FLATCLE         (SPR_FLATS+ 5)
#define	SPR_FLATDAL         (SPR_FLATS+ 6)
#define	SPR_FLATDEN         (SPR_FLATS+ 7)
#define	SPR_FLATDET         (SPR_FLATS+ 8)
#define	SPR_FLATGS          (SPR_FLATS+ 9)
#define	SPR_FLATHOU         (SPR_FLATS+10)
#define	SPR_FLATIND         (SPR_FLATS+11)
#define	SPR_FLATLAC         (SPR_FLATS+12)
#define	SPR_FLATLAL         (SPR_FLATS+13)
#define	SPR_FLATMIA         (SPR_FLATS+14)
#define	SPR_FLATMIL         (SPR_FLATS+15)
#define	SPR_FLATMIN         (SPR_FLATS+16)
#define	SPR_FLATNJ          (SPR_FLATS+17)
#define	SPR_FLATNY          (SPR_FLATS+18)
#define	SPR_FLATORL         (SPR_FLATS+19)
#define	SPR_FLATPHI         (SPR_FLATS+20)
#define	SPR_FLATPHO         (SPR_FLATS+21)
#define	SPR_FLATPOR         (SPR_FLATS+22)
#define	SPR_FLATSAC         (SPR_FLATS+23)
#define	SPR_FLATSA          (SPR_FLATS+24)
#define	SPR_FLATSEA         (SPR_FLATS+25)
#define	SPR_FLATTOR         (SPR_FLATS+26)
#define	SPR_FLATUTA         (SPR_FLATS+27)
#define	SPR_FLATVAN         (SPR_FLATS+28)
#define	SPR_FLATWAS         (SPR_FLATS+29)
#define	SPR_FLATEAS         (SPR_FLATS+30)
#define	SPR_FLATWES         (SPR_FLATS+31)
#define	SPR_FLATLFP         (SPR_FLATS+32)
#define	SPR_FLATNIN         (SPR_FLATS+33)
#define	SPR_FLATNOA         (SPR_FLATS+34)

#define	SPR_LOGOS           (SPR_FLATS+35)

#define	SPR_LOGONUL_000     (SPR_LOGOS+0x0000)	// free agents
#define	SPR_LOGONUL_001     (SPR_LOGOS+0x0001)
#define	SPR_LOGONUL_002     (SPR_LOGOS+0x0002)
#define	SPR_LOGONUL_003     (SPR_LOGOS+0x0003)
#define	SPR_LOGONUL_004     (SPR_LOGOS+0x0004)
#define	SPR_LOGONUL_005     (SPR_LOGOS+0x0005)
#define	SPR_LOGONUL_006     (SPR_LOGOS+0x0006)
#define	SPR_LOGONUL_007     (SPR_LOGOS+0x0007)

#define	SPR_LOGOATL_000     (SPR_LOGOS+0x0008)
#define	SPR_LOGOATL_001     (SPR_LOGOS+0x0009)
#define	SPR_LOGOATL_002     (SPR_LOGOS+0x000A)
#define	SPR_LOGOATL_003     (SPR_LOGOS+0x000B)
#define	SPR_LOGOATL_004     (SPR_LOGOS+0x000C)
#define	SPR_LOGOATL_005     (SPR_LOGOS+0x000D)
#define	SPR_LOGOATL_006     (SPR_LOGOS+0x000E)
#define	SPR_LOGOATL_007     (SPR_LOGOS+0x000F)

#define	SPR_LOGOBOS_000     (SPR_LOGOS+0x0010)
#define	SPR_LOGOBOS_001     (SPR_LOGOS+0x0011)
#define	SPR_LOGOBOS_002     (SPR_LOGOS+0x0012)
#define	SPR_LOGOBOS_003     (SPR_LOGOS+0x0013)
#define	SPR_LOGOBOS_004     (SPR_LOGOS+0x0014)
#define	SPR_LOGOBOS_005     (SPR_LOGOS+0x0015)
#define	SPR_LOGOBOS_006     (SPR_LOGOS+0x0016)
#define	SPR_LOGOBOS_007     (SPR_LOGOS+0x0017)

#define	SPR_LOGOCHA_000     (SPR_LOGOS+0x0018)
#define	SPR_LOGOCHA_001     (SPR_LOGOS+0x0019)
#define	SPR_LOGOCHA_002     (SPR_LOGOS+0x001A)
#define	SPR_LOGOCHA_003     (SPR_LOGOS+0x001B)
#define	SPR_LOGOCHA_004     (SPR_LOGOS+0x001C)
#define	SPR_LOGOCHA_005     (SPR_LOGOS+0x001D)
#define	SPR_LOGOCHA_006     (SPR_LOGOS+0x001E)
#define	SPR_LOGOCHA_007     (SPR_LOGOS+0x001F)

#define	SPR_LOGOCHI_000     (SPR_LOGOS+0x0020)
#define	SPR_LOGOCHI_001     (SPR_LOGOS+0x0021)
#define	SPR_LOGOCHI_002     (SPR_LOGOS+0x0022)
#define	SPR_LOGOCHI_003     (SPR_LOGOS+0x0023)
#define	SPR_LOGOCHI_004     (SPR_LOGOS+0x0024)
#define	SPR_LOGOCHI_005     (SPR_LOGOS+0x0025)
#define	SPR_LOGOCHI_006     (SPR_LOGOS+0x0026)
#define	SPR_LOGOCHI_007     (SPR_LOGOS+0x0027)

#define	SPR_LOGOCLE_000     (SPR_LOGOS+0x0028)
#define	SPR_LOGOCLE_001     (SPR_LOGOS+0x0029)
#define	SPR_LOGOCLE_002     (SPR_LOGOS+0x002A)
#define	SPR_LOGOCLE_003     (SPR_LOGOS+0x002B)
#define	SPR_LOGOCLE_004     (SPR_LOGOS+0x002C)
#define	SPR_LOGOCLE_005     (SPR_LOGOS+0x002D)
#define	SPR_LOGOCLE_006     (SPR_LOGOS+0x002E)
#define	SPR_LOGOCLE_007     (SPR_LOGOS+0x002F)

#define	SPR_LOGODAL_000     (SPR_LOGOS+0x0030)
#define	SPR_LOGODAL_001     (SPR_LOGOS+0x0031)
#define	SPR_LOGODAL_002     (SPR_LOGOS+0x0032)
#define	SPR_LOGODAL_003     (SPR_LOGOS+0x0033)
#define	SPR_LOGODAL_004     (SPR_LOGOS+0x0034)
#define	SPR_LOGODAL_005     (SPR_LOGOS+0x0035)
#define	SPR_LOGODAL_006     (SPR_LOGOS+0x0036)
#define	SPR_LOGODAL_007     (SPR_LOGOS+0x0037)

#define	SPR_LOGODEN_000     (SPR_LOGOS+0x0038)
#define	SPR_LOGODEN_001     (SPR_LOGOS+0x0039)
#define	SPR_LOGODEN_002     (SPR_LOGOS+0x003A)
#define	SPR_LOGODEN_003     (SPR_LOGOS+0x003B)
#define	SPR_LOGODEN_004     (SPR_LOGOS+0x003C)
#define	SPR_LOGODEN_005     (SPR_LOGOS+0x003D)
#define	SPR_LOGODEN_006     (SPR_LOGOS+0x003E)
#define	SPR_LOGODEN_007     (SPR_LOGOS+0x003F)

#define	SPR_LOGODET_000     (SPR_LOGOS+0x0040)
#define	SPR_LOGODET_001     (SPR_LOGOS+0x0041)
#define	SPR_LOGODET_002     (SPR_LOGOS+0x0042)
#define	SPR_LOGODET_003     (SPR_LOGOS+0x0043)
#define	SPR_LOGODET_004     (SPR_LOGOS+0x0044)
#define	SPR_LOGODET_005     (SPR_LOGOS+0x0045)
#define	SPR_LOGODET_006     (SPR_LOGOS+0x0046)
#define	SPR_LOGODET_007     (SPR_LOGOS+0x0047)

#define	SPR_LOGOGS_000      (SPR_LOGOS+0x0048)
#define	SPR_LOGOGS_001      (SPR_LOGOS+0x0049)
#define	SPR_LOGOGS_002      (SPR_LOGOS+0x004A)
#define	SPR_LOGOGS_003      (SPR_LOGOS+0x004B)
#define	SPR_LOGOGS_004      (SPR_LOGOS+0x004C)
#define	SPR_LOGOGS_005      (SPR_LOGOS+0x004D)
#define	SPR_LOGOGS_006      (SPR_LOGOS+0x004E)
#define	SPR_LOGOGS_007      (SPR_LOGOS+0x004F)

#define	SPR_LOGOHOU_000     (SPR_LOGOS+0x0050)
#define	SPR_LOGOHOU_001     (SPR_LOGOS+0x0051)
#define	SPR_LOGOHOU_002     (SPR_LOGOS+0x0052)
#define	SPR_LOGOHOU_003     (SPR_LOGOS+0x0053)
#define	SPR_LOGOHOU_004     (SPR_LOGOS+0x0054)
#define	SPR_LOGOHOU_005     (SPR_LOGOS+0x0055)
#define	SPR_LOGOHOU_006     (SPR_LOGOS+0x0056)
#define	SPR_LOGOHOU_007     (SPR_LOGOS+0x0057)

#define	SPR_LOGOIND_000     (SPR_LOGOS+0x0058)
#define	SPR_LOGOIND_001     (SPR_LOGOS+0x0059)
#define	SPR_LOGOIND_002     (SPR_LOGOS+0x005A)
#define	SPR_LOGOIND_003     (SPR_LOGOS+0x005B)
#define	SPR_LOGOIND_004     (SPR_LOGOS+0x005C)
#define	SPR_LOGOIND_005     (SPR_LOGOS+0x005D)
#define	SPR_LOGOIND_006     (SPR_LOGOS+0x005E)
#define	SPR_LOGOIND_007     (SPR_LOGOS+0x005F)

#define	SPR_LOGOLAC_000     (SPR_LOGOS+0x0060)
#define	SPR_LOGOLAC_001     (SPR_LOGOS+0x0061)
#define	SPR_LOGOLAC_002     (SPR_LOGOS+0x0062)
#define	SPR_LOGOLAC_003     (SPR_LOGOS+0x0063)
#define	SPR_LOGOLAC_004     (SPR_LOGOS+0x0064)
#define	SPR_LOGOLAC_005     (SPR_LOGOS+0x0065)
#define	SPR_LOGOLAC_006     (SPR_LOGOS+0x0066)
#define	SPR_LOGOLAC_007     (SPR_LOGOS+0x0067)

#define	SPR_LOGOLAL_000     (SPR_LOGOS+0x0068)
#define	SPR_LOGOLAL_001     (SPR_LOGOS+0x0069)
#define	SPR_LOGOLAL_002     (SPR_LOGOS+0x006A)
#define	SPR_LOGOLAL_003     (SPR_LOGOS+0x006B)
#define	SPR_LOGOLAL_004     (SPR_LOGOS+0x006C)
#define	SPR_LOGOLAL_005     (SPR_LOGOS+0x006D)
#define	SPR_LOGOLAL_006     (SPR_LOGOS+0x006E)
#define	SPR_LOGOLAL_007     (SPR_LOGOS+0x006F)

#define	SPR_LOGOMIA_000     (SPR_LOGOS+0x0070)
#define	SPR_LOGOMIA_001     (SPR_LOGOS+0x0071)
#define	SPR_LOGOMIA_002     (SPR_LOGOS+0x0072)
#define	SPR_LOGOMIA_003     (SPR_LOGOS+0x0073)
#define	SPR_LOGOMIA_004     (SPR_LOGOS+0x0074)
#define	SPR_LOGOMIA_005     (SPR_LOGOS+0x0075)
#define	SPR_LOGOMIA_006     (SPR_LOGOS+0x0076)
#define	SPR_LOGOMIA_007     (SPR_LOGOS+0x0077)

#define	SPR_LOGOMIL_000     (SPR_LOGOS+0x0078)
#define	SPR_LOGOMIL_001     (SPR_LOGOS+0x0079)
#define	SPR_LOGOMIL_002     (SPR_LOGOS+0x007A)
#define	SPR_LOGOMIL_003     (SPR_LOGOS+0x007B)
#define	SPR_LOGOMIL_004     (SPR_LOGOS+0x007C)
#define	SPR_LOGOMIL_005     (SPR_LOGOS+0x007D)
#define	SPR_LOGOMIL_006     (SPR_LOGOS+0x007E)
#define	SPR_LOGOMIL_007     (SPR_LOGOS+0x007F)

#define	SPR_LOGOMIN_000     (SPR_LOGOS+0x0080)
#define	SPR_LOGOMIN_001     (SPR_LOGOS+0x0081)
#define	SPR_LOGOMIN_002     (SPR_LOGOS+0x0082)
#define	SPR_LOGOMIN_003     (SPR_LOGOS+0x0083)
#define	SPR_LOGOMIN_004     (SPR_LOGOS+0x0084)
#define	SPR_LOGOMIN_005     (SPR_LOGOS+0x0085)
#define	SPR_LOGOMIN_006     (SPR_LOGOS+0x0086)
#define	SPR_LOGOMIN_007     (SPR_LOGOS+0x0087)

#define	SPR_LOGONJ_000      (SPR_LOGOS+0x0088)
#define	SPR_LOGONJ_001      (SPR_LOGOS+0x0089)
#define	SPR_LOGONJ_002      (SPR_LOGOS+0x008A)
#define	SPR_LOGONJ_003      (SPR_LOGOS+0x008B)
#define	SPR_LOGONJ_004      (SPR_LOGOS+0x008C)
#define	SPR_LOGONJ_005      (SPR_LOGOS+0x008D)
#define	SPR_LOGONJ_006      (SPR_LOGOS+0x008E)
#define	SPR_LOGONJ_007      (SPR_LOGOS+0x008F)

#define	SPR_LOGONY_000      (SPR_LOGOS+0x0090)
#define	SPR_LOGONY_001      (SPR_LOGOS+0x0091)
#define	SPR_LOGONY_002      (SPR_LOGOS+0x0092)
#define	SPR_LOGONY_003      (SPR_LOGOS+0x0093)
#define	SPR_LOGONY_004      (SPR_LOGOS+0x0094)
#define	SPR_LOGONY_005      (SPR_LOGOS+0x0095)
#define	SPR_LOGONY_006      (SPR_LOGOS+0x0096)
#define	SPR_LOGONY_007      (SPR_LOGOS+0x0097)

#define	SPR_LOGOORL_000     (SPR_LOGOS+0x0098)
#define	SPR_LOGOORL_001     (SPR_LOGOS+0x0099)
#define	SPR_LOGOORL_002     (SPR_LOGOS+0x009A)
#define	SPR_LOGOORL_003     (SPR_LOGOS+0x009B)
#define	SPR_LOGOORL_004     (SPR_LOGOS+0x009C)
#define	SPR_LOGOORL_005     (SPR_LOGOS+0x009D)
#define	SPR_LOGOORL_006     (SPR_LOGOS+0x009E)
#define	SPR_LOGOORL_007     (SPR_LOGOS+0x009F)

#define	SPR_LOGOPHI_000     (SPR_LOGOS+0x00A0)
#define	SPR_LOGOPHI_001     (SPR_LOGOS+0x00A1)
#define	SPR_LOGOPHI_002     (SPR_LOGOS+0x00A2)
#define	SPR_LOGOPHI_003     (SPR_LOGOS+0x00A3)
#define	SPR_LOGOPHI_004     (SPR_LOGOS+0x00A4)
#define	SPR_LOGOPHI_005     (SPR_LOGOS+0x00A5)
#define	SPR_LOGOPHI_006     (SPR_LOGOS+0x00A6)
#define	SPR_LOGOPHI_007     (SPR_LOGOS+0x00A7)

#define	SPR_LOGOPHO_000     (SPR_LOGOS+0x00A8)
#define	SPR_LOGOPHO_001     (SPR_LOGOS+0x00A9)
#define	SPR_LOGOPHO_002     (SPR_LOGOS+0x00AA)
#define	SPR_LOGOPHO_003     (SPR_LOGOS+0x00AB)
#define	SPR_LOGOPHO_004     (SPR_LOGOS+0x00AC)
#define	SPR_LOGOPHO_005     (SPR_LOGOS+0x00AD)
#define	SPR_LOGOPHO_006     (SPR_LOGOS+0x00AE)
#define	SPR_LOGOPHO_007     (SPR_LOGOS+0x00AF)

#define	SPR_LOGOPOR_000     (SPR_LOGOS+0x00B0)
#define	SPR_LOGOPOR_001     (SPR_LOGOS+0x00B1)
#define	SPR_LOGOPOR_002     (SPR_LOGOS+0x00B2)
#define	SPR_LOGOPOR_003     (SPR_LOGOS+0x00B3)
#define	SPR_LOGOPOR_004     (SPR_LOGOS+0x00B4)
#define	SPR_LOGOPOR_005     (SPR_LOGOS+0x00B5)
#define	SPR_LOGOPOR_006     (SPR_LOGOS+0x00B6)
#define	SPR_LOGOPOR_007     (SPR_LOGOS+0x00B7)

#define	SPR_LOGOSAC_000     (SPR_LOGOS+0x00B8)
#define	SPR_LOGOSAC_001     (SPR_LOGOS+0x00B9)
#define	SPR_LOGOSAC_002     (SPR_LOGOS+0x00BA)
#define	SPR_LOGOSAC_003     (SPR_LOGOS+0x00BB)
#define	SPR_LOGOSAC_004     (SPR_LOGOS+0x00BC)
#define	SPR_LOGOSAC_005     (SPR_LOGOS+0x00BD)
#define	SPR_LOGOSAC_006     (SPR_LOGOS+0x00BE)
#define	SPR_LOGOSAC_007     (SPR_LOGOS+0x00BF)

#define	SPR_LOGOSA_000      (SPR_LOGOS+0x00C0)
#define	SPR_LOGOSA_001      (SPR_LOGOS+0x00C1)
#define	SPR_LOGOSA_002      (SPR_LOGOS+0x00C2)
#define	SPR_LOGOSA_003      (SPR_LOGOS+0x00C3)
#define	SPR_LOGOSA_004      (SPR_LOGOS+0x00C4)
#define	SPR_LOGOSA_005      (SPR_LOGOS+0x00C5)
#define	SPR_LOGOSA_006      (SPR_LOGOS+0x00C6)
#define	SPR_LOGOSA_007      (SPR_LOGOS+0x00C7)

#define	SPR_LOGOSEA_000     (SPR_LOGOS+0x00C8)
#define	SPR_LOGOSEA_001     (SPR_LOGOS+0x00C9)
#define	SPR_LOGOSEA_002     (SPR_LOGOS+0x00CA)
#define	SPR_LOGOSEA_003     (SPR_LOGOS+0x00CB)
#define	SPR_LOGOSEA_004     (SPR_LOGOS+0x00CC)
#define	SPR_LOGOSEA_005     (SPR_LOGOS+0x00CD)
#define	SPR_LOGOSEA_006     (SPR_LOGOS+0x00CE)
#define	SPR_LOGOSEA_007     (SPR_LOGOS+0x00CF)

#define	SPR_LOGOTOR_000     (SPR_LOGOS+0x00D0)
#define	SPR_LOGOTOR_001     (SPR_LOGOS+0x00D1)
#define	SPR_LOGOTOR_002     (SPR_LOGOS+0x00D2)
#define	SPR_LOGOTOR_003     (SPR_LOGOS+0x00D3)
#define	SPR_LOGOTOR_004     (SPR_LOGOS+0x00D4)
#define	SPR_LOGOTOR_005     (SPR_LOGOS+0x00D5)
#define	SPR_LOGOTOR_006     (SPR_LOGOS+0x00D6)
#define	SPR_LOGOTOR_007     (SPR_LOGOS+0x00D7)

#define	SPR_LOGOUTA_000     (SPR_LOGOS+0x00D8)
#define	SPR_LOGOUTA_001     (SPR_LOGOS+0x00D9)
#define	SPR_LOGOUTA_002     (SPR_LOGOS+0x00DA)
#define	SPR_LOGOUTA_003     (SPR_LOGOS+0x00DB)
#define	SPR_LOGOUTA_004     (SPR_LOGOS+0x00DC)
#define	SPR_LOGOUTA_005     (SPR_LOGOS+0x00DD)
#define	SPR_LOGOUTA_006     (SPR_LOGOS+0x00DE)
#define	SPR_LOGOUTA_007     (SPR_LOGOS+0x00DF)

#define	SPR_LOGOVAN_000     (SPR_LOGOS+0x00E0)
#define	SPR_LOGOVAN_001     (SPR_LOGOS+0x00E1)
#define	SPR_LOGOVAN_002     (SPR_LOGOS+0x00E2)
#define	SPR_LOGOVAN_003     (SPR_LOGOS+0x00E3)
#define	SPR_LOGOVAN_004     (SPR_LOGOS+0x00E4)
#define	SPR_LOGOVAN_005     (SPR_LOGOS+0x00E5)
#define	SPR_LOGOVAN_006     (SPR_LOGOS+0x00E6)
#define	SPR_LOGOVAN_007     (SPR_LOGOS+0x00E7)

#define	SPR_LOGOWAS_000     (SPR_LOGOS+0x00E8)
#define	SPR_LOGOWAS_001     (SPR_LOGOS+0x00E9)
#define	SPR_LOGOWAS_002     (SPR_LOGOS+0x00EA)
#define	SPR_LOGOWAS_003     (SPR_LOGOS+0x00EB)
#define	SPR_LOGOWAS_004     (SPR_LOGOS+0x00EC)
#define	SPR_LOGOWAS_005     (SPR_LOGOS+0x00ED)
#define	SPR_LOGOWAS_006     (SPR_LOGOS+0x00EE)
#define	SPR_LOGOWAS_007     (SPR_LOGOS+0x00EF)

#define	SPR_LOGOEAS_000     (SPR_LOGOS+0x00F0)
#define	SPR_LOGOEAS_001     (SPR_LOGOS+0x00F1)
#define	SPR_LOGOEAS_002     (SPR_LOGOS+0x00F2)
#define	SPR_LOGOEAS_003     (SPR_LOGOS+0x00F3)
#define	SPR_LOGOEAS_004     (SPR_LOGOS+0x00F4)
#define	SPR_LOGOEAS_005     (SPR_LOGOS+0x00F5)
#define	SPR_LOGOEAS_006     (SPR_LOGOS+0x00F6)
#define	SPR_LOGOEAS_007     (SPR_LOGOS+0x00F7)

#define	SPR_LOGOWES_000     (SPR_LOGOS+0x00F8)
#define	SPR_LOGOWES_001     (SPR_LOGOS+0x00F9)
#define	SPR_LOGOWES_002     (SPR_LOGOS+0x00FA)
#define	SPR_LOGOWES_003     (SPR_LOGOS+0x00FB)
#define	SPR_LOGOWES_004     (SPR_LOGOS+0x00FC)
#define	SPR_LOGOWES_005     (SPR_LOGOS+0x00FD)
#define	SPR_LOGOWES_006     (SPR_LOGOS+0x00FE)
#define	SPR_LOGOWES_007     (SPR_LOGOS+0x00FF)

#define	SPR_LOGOLFP_000     (SPR_LOGOS+0x0100)
#define	SPR_LOGOLFP_001     (SPR_LOGOS+0x0101)
#define	SPR_LOGOLFP_002     (SPR_LOGOS+0x0102)
#define	SPR_LOGOLFP_003     (SPR_LOGOS+0x0103)
#define	SPR_LOGOLFP_004     (SPR_LOGOS+0x0104)
#define	SPR_LOGOLFP_005     (SPR_LOGOS+0x0105)
#define	SPR_LOGOLFP_006     (SPR_LOGOS+0x0106)
#define	SPR_LOGOLFP_007     (SPR_LOGOS+0x0107)

#define	SPR_LOGONIN_000     (SPR_LOGOS+0x0108)
#define	SPR_LOGONIN_001     (SPR_LOGOS+0x0109)
#define	SPR_LOGONIN_002     (SPR_LOGOS+0x010A)
#define	SPR_LOGONIN_003     (SPR_LOGOS+0x010B)
#define	SPR_LOGONIN_004     (SPR_LOGOS+0x010C)
#define	SPR_LOGONIN_005     (SPR_LOGOS+0x010D)
#define	SPR_LOGONIN_006     (SPR_LOGOS+0x010E)
#define	SPR_LOGONIN_007     (SPR_LOGOS+0x010F)

#define	SPR_LOGONOA_000     (SPR_LOGOS+0x0110)
#define	SPR_LOGONOA_001     (SPR_LOGOS+0x0111)
#define	SPR_LOGONOA_002     (SPR_LOGOS+0x0112)
#define	SPR_LOGONOA_003     (SPR_LOGOS+0x0113)
#define	SPR_LOGONOA_004     (SPR_LOGOS+0x0114)
#define	SPR_LOGONOA_005     (SPR_LOGOS+0x0115)
#define	SPR_LOGONOA_006     (SPR_LOGOS+0x0116)
#define	SPR_LOGONOA_007     (SPR_LOGOS+0x0117)

//
//
//
#define	TOTAL_SPRITES       (SPR_LOGOS+0x0118)

// Define typefaces.


/*********  obsolete for Kobe 2
#define	FONT_TINY10         1
#define	FONT_BLKBT18        2
//#define	FONT_BLKBT22        3
#define	FONT_BLKBT24        4
#define	FONT_BLKCN18        5
// #define	FONT_BLKCN22        6
//#define	FONT_BLKCN24        7	//not used kobe2
//#define	FONT_BLKCN50        8	//not used kobe2
//#define	FONT_BLKEX26        9	//not used kobe2
//#define	FONT_EXBT18         10	//not used kobe2
**********/

//  these are the fonts from Kobe 1 that are used in Kobe 2 (see apul_sFntResShell [])
#define	FONT_TINY10         1
#define	FONT_BLKBT18        2
#define	FONT_BLKCN18        3
#define	FONT_BLKBT24        4

// Define typeface palettes.

#define	FPAL_BLACK          1
#define	FPAL_WHITE          2
#define	FPAL_GREY           3
#define	FPAL_RED            4
#define	FPAL_YELLOW         5
#define	FPAL_BLUE           6
#define	FPAL_GREEN          7
#define	FPAL_BENCH          8
#define	FPAL_PERSIL         9
#define	FPAL_LTGREY         10
#define	FPAL_BRIGHT_WHITE	11
#define	FPAL_ORANGE			12

// Useful macros.

#define	DP_RGB(nn)          ((nn*255)/99)

#define	SPR_PTR(nn)         ((SprTexture_T *) acl__gShellSpr[(nn)].pbf__Res)

#define min(a,b)	((a)<(b)?(a):(b))
#define max(a,b)	((a)>(b)?(a):(b))




#define BG_WIDTH_INC_VALUE	4
extern 	int		BGWidth;
extern	int		BGWidthInc;


//#define		START_BG_CYCLING	0xffff		// large number - passed to LoadBGSprite
//#define		NO_BACKGROUND		0xfffe		// large number - passed to LoadBGSprite

//enum shellbgmodes {
//	BG_MODE_NEED_INIT,		//power up, after game
//	BG_MODE_CYCLE,			// cycle thru all NBA teams
//	BG_MODE_NO_CYCLE,			// only show 1 team (no cycling)
//};


//
// GLOBAL VARIABLES
//

extern char *gLeftSideText;
extern	int                 fl___gShowingHelp;

extern	int                 fl___gDemoFlag;
extern	int                 si___gDemoTimer;
extern  int					demoTimeout;

extern	UB                  aub__gCustomHeads [CUSTOM_HEADS][2];

extern	UB                  aub__gValidTeam [];

extern	char *              pcz__gPopupTtl;
extern	char *              pcz__gPopupMsg;
extern	UB *                pub__gPopupPal;
extern	SI                  si___gPopupVal;

extern	SI                  fl___gShellOverlay;
extern	SB                  sb___gShellTune;

extern	UI                  ui___gFrameDrawn;
extern	SI                  si___gFramePause;

extern	struct openSet *    pcl__ShellRes;

extern	SprTexture_T *      pcl__gBackSpr[2];
extern	SprTexture_T *      pcl__gForeSpr;
//extern  global	UI			MainBGSlot;

extern global	UI			ShellBGMode;
extern global	UI			ShellBackBG;
extern global	UI			ShellForeBG;
extern global	UI			bgteam;
extern int					C3PT;   // part of phil's main.c - set if 3 Point contest

extern	UI                  ui___gShowLines;

// Button presses by joypad number.

extern	signed int          asi__gJoyPad [4];
extern	signed int          asi__gJoyBtn [4];
extern int					ControllerGameMode[4];

// Button presses by team (0=Home 1=Away 2=None 3=Both, 4=Any)

extern	signed int          asi__gTeamPad [5];
extern	signed int          asi__gTeamBtn [5];

extern	unsigned long *     apul_gTeamBackground [];

extern	SPR_LIST_T          acl__gShellSpr [];
extern	SPR_LIST_T          acl__gShellPal [];


#define FIRST_TEAM_PAL		(7-2)	//6

extern	UW *                puw__gPalette;
extern	UW *				puw__gContPal;
extern	UW *                puw__gMainPalH;
extern	UW *                puw__gMainPal2;
extern	UW *                puw__gMainPal3;

// new palette 8/13/99 - replace rainbow with pebbled basketball theme
#define MENU_BAR_PAL		puw__gMainPal3	//puw__gMainPalH


extern	UW *                puw__gPhoto0;
extern	UW *                puw__gPhoto1;

#define PHOTO_W		64
#define PHOTO_H		56


extern bool ArcadeMode;
extern int PracticeMode;

void SetArcadeModeGameParameters(void);
void InitNormalTeamSelectInfo(void);


//

extern	UB *                pub__gInfoFile;

extern	UB *                pub__gInfoCstr;
extern	UB *                pub__gInfoTeam;
extern	UB *                pub__gInfoRost;
extern	UB *                pub__gInfoPlyr;
extern	UB *                pub__gInfoDate;

extern	UD *                pud__gIndxPtex;
extern	UD *                pud__gIndxPimg;
extern	UD *                pud__gIndxPnam;
extern	UD *                pud__gIndxTalk;

extern	UW *                puw__gSuperPal;
extern	SL                  sl___gSuperPal;

extern	int                 si___gEepromNeed;
extern	int                 si___gMemPakNeed;


//
// GLOBAL FUNCTION PROTOTYPES
//

extern	void                ProcessJoypads          (signed int *, int);

extern	void                PrintToFile             (char *);

extern	void                InitRandomByte          (void);
extern	UI                  ReadRandomByte          (void);

extern	void                LegalOpen               (void *);

extern	void                LegalClose              (void *);

extern	void                LegalLogic              (signed int *);

extern	void                LegalRender             (
								dyn *               d,
								int                 draw_buffer,
								Gfx **              gl);

extern	void                ShellOpen               (void *);
extern	void                ShellClose              (void *);
extern	void                ShellLogic              (signed int *);
extern	void                ShellRender             (dyn *, int, Gfx **);

extern	int                 ShellLockDisplay        (void);
extern	void                ShellUnlockDisplay      (void);
extern	int                 ShellLocking            (void);

extern	int                 DoShellExec             (signed int *);

extern	int                 ScanAiffFile            (char *);

extern	void                ShellLoadPermData       (void);
extern	void                ShellLoadPalettes       (SPR_LIST_T *);

extern	void                ShellLoadTeamInfo       (void);
extern	void                ShellFreeTeamInfo       (void);

extern	void                LinkCustomPlyrs         (void);

extern	void                LoadPreferences         (Preferences_T *);
extern	void                SavePreferences         (Preferences_T *);

extern	int                 MakeEepromFile          (char **);
extern	int                 ReadEepromFile          (char *);
extern	int                 MakeMemPakFile          (char **);
extern	int                 ReadMemPakFile          (char *);
extern	UD                  MakeChecksum            (UD *, int);

extern	void                ShrinkTeamPlyStats      (TeamRamStat_T *, TeamRamStat_T *);
extern	void                ExpandTeamPlyStats      (TeamRamStat_T *, TeamRamStat_T *);

extern	int                 LoadSprPalettes         (SPR_LIST_T *);
extern	void                FreeSprPalettes         (SPR_LIST_T *);

extern	void                LoadMatchLogoPalettes   (void);
extern	void                FreeMatchLogoPalettes   (void);

extern	void                LoadShellBackgroundSpr  (unsigned long int);
extern	void                LoadShellBackgroundSpr1  (unsigned long int);
extern	void                LoadShellForegroundSpr  (unsigned long int);
extern	void                FreeShellBackground     (int slot);
extern	void                FreeShellForeground     (void);
extern	Gfx *               DrawShellBackground     (Gfx *, dyn *);

extern	void                InitAllSprites          (void);
extern	void                FreeAllSprites          (void);
extern	int                 LoadSpriteList          (UB *);
extern	void                FreeSpriteList          (UB *);

extern	int                 LoadTeamLogo            (int, int);
extern	void                FreeTeamLogo            (int);
extern	int                 TestTeamLogo            (int);
extern	void                FreeTeamLogos           (void);

extern	long                LoadFile                (
								char *              pcz__Name,
								unsigned char **    ppbf_Addr,
								long *              psl__Size);

extern	void                FindPlyrNam             (
								UL *                pul__Addr,
								UL *                pul__Size,
								PlyrRomData_T *     pcl__PlyrRom,
								UI                  ui___NameTyp);

extern	void                FindCommentary          (
								UL *                pul__Addr,
								UL *                pul__Size,
								UI                  ui___Phrase);




extern	void ShellFromGameOpen(void);
extern	void ShellFromGameClose(void);
extern	void ShellFromGameInitMenu(void);





void InitGenericScreenParameters(char *titletext);
global	Gfx *	DrawLeftSideBar(Gfx * gp, SprTexture_T * pcl__Spr,int x, int y);

extern global	char * gStateTitleText[];
extern global	char * gStateTitleText2[];	// column1 text (usually NULL)
extern global	char * SourceTypeText[];

extern global int oncolor;		//FPAL_BLACK;
extern global int offcolor;	// change in debugger
extern global	SI		ScreenTitleX;
extern global	SI		ScreenTitleY;

extern global int StatsScreenReturnState;
extern global int OptionScreenReturnState;

struct rcbox {

	SW	x;
	SW	y;
	UW	w;
	UW	h;
	UW	r;
	UW	g;
	UW	b;
	UW	a;
	UB  corners[4];

};

enum cornertypes {	// indexes of rcbox.corners[x]
	CN_TL,
	CN_TR,
	CN_BL,
	CN_BR
};


struct TwoDpoint {
	int x;
	int y;
};


extern	char  NumGamesInSeason [];	// 82, 56, 28, 14

#define NO_CORNERS 0,0,0,0,	
#define HLINE(x,y,w)  {x, y,  w, MENU_LINE_H, RGB_MENU_LINE_COLOR,NO_CORNERS}	
#define VLINE(x,y,h)  {x, y,  MENU_LINE_W, h, RGB_MENU_LINE_COLOR,NO_CORNERS}	

#define DRAW_MENU_HLINE(y)	gp = RenderTBOX(gp,0,y,512,MENU_LINE_H,RGB_MENU_LINE_COLOR)

global	Gfx *	DrawRCBoxes(Gfx * gp, struct rcbox * boxes);
global	Gfx *	DrawRCVLineRight(Gfx * gp, int x, int y1, int y2,int shadows);
global	Gfx *	DrawRCVLineLeft (Gfx * gp, int x, int y1, int y2,int shadows);
global	Gfx *	DrawRCVLineRightTopCurveOnly(Gfx * gp, int x, int y1, int y2,int shadowx);
global	Gfx *	DrawRCVLineLeftTopCurveOnly(Gfx * gp, int x, int y1, int y2,int shadowx);


global	Gfx *	DrawBlankBox(Gfx * gp, int x1, int x2, int y1, int y2, int flags);

// bit flag equates to pass to DrawBlankBox()

#define BB_LINE_L	0x1000	// lower bits reserved for sprite num (if non-standard w/h)
#define BB_LINE_R	0x2000
#define BB_SHAD_L	0x4000
#define BB_SHAD_T	0x8000

#define BB_FULL_BOX	(BB_LINE_L | BB_LINE_R | BB_SHAD_L | BB_SHAD_T)
#define BB_LEFT_BOX	(BB_LINE_L | BB_SHAD_L | BB_SHAD_T)		// left line - open to right
#define BB_RIGHT_BOX	(BB_LINE_R | BB_SHAD_T)  		// right line - open to left

#define NORMAL_CURVE_W	21	// size of cxx70es --> xx= tr,br,tl,bl
#define NORMAL_CURVE_H	16



extern int dbr,dbg,dbb,dba;	// for modifing colors in debugger

extern int gLineCurveH,gLineCurveW;

extern int ShellPlayerOnScreen;

// following in states.c
void LoadKobePhoto(void);
void FreeKobePhoto(void);
Gfx * DisplayKobePhoto(Gfx *gp, int x, int y);
int GetRandomKobeBG(void);


UW * FindTeamRosterStart(UW * leagueroster, int teamnum);	// stats.c
extern  void SeasonRosterToGameRoster(void);	//in screena.c
extern int SeasonRosterSameAsNBARoster(int team);

extern int EasterTeam[2];
extern int DemoMatchCounter;


enum easterteams {
	EASTER_TEAM_NONE0,
	EASTER_TEAM_NONE1,
	EASTER_TEAM_FIRST,	// not used - below here are valid
	
	EASTER_TEAM_KOBE,
	EASTER_TEAM_GRIFFEY,
	EASTER_TEAM_HENRY,

	EASTER_TEAM_LAST,
};

#define EASTER_TEAM_LFP		10
#define EASTER_TEAM_LFP1	(EASTER_TEAM_LFP + 36)



//  - Edit Player - Rookie Role lay stuff


#define ABILITY_RANGE		0
#define ABILITY_SHOOT		1
#define ABILITY_3PT			2
#define ABILITY_FT			3
#define ABILITY_DRIB		4
#define ABILITY_PASS		5
#define ABILITY_SPEED		6
#define ABILITY_JUMP		7
#define ABILITY_REB			8
#define ABILITY_STRENGTH	9
#define ABILITY_DUNK		10
#define ABILITY_STEAL		11
#define ABILITY_BLOCK		12
#define ABILITY_STAMINA		13
#define NUM_ABILITIES		14


#define ROOKIE_MODE_EXP		100	// in pExp - means non modifiable rookie in career mode

#define NUM_GAMES_RP_STATS	6

#define MAX_RP_BAR_LENGTH	100	// pixels of bar for rookie improvement

typedef struct RPstatdata {

	SW	StatTotal;
	UB  StatPerGame[NUM_GAMES_RP_STATS];	// stats over last 5 games (index 5 is bar length)
} RPstatdata_t;

typedef struct playerRPstatdata {

	RPstatdata_t RolePlayerAbilities[NUM_ABILITIES];		// 14x 8 bytes per player = 112

} playerRPstatdata_t;


extern playerRPstatdata_t  CustomPlyrStatsData[CUSTOM_PLYRS];	//112 x 20 = 2240 bytes

void ClearCustomPlayerStats(int cplyrindex);	// index is 0 - CUSTOM_PLYRS-1

int GetCustomPlayerHead(int trueplyrindex);
extern  PlyrRomData_T * gCustomPlayerPtr;
extern	Gfx * DrawUpArrow(Gfx *gp, int x, int y);// same as Help graphic
extern	Gfx * DrawDownArrow(Gfx *gp, int x, int y);// same as Help graphic


/**** don't need to cram the bits anymore - 7/13/99 -mjk
#define		EDIT_HEAD_MASK		0x1f	// lower 5 bits of ub___pCustomHeadType
#define		EDIT_HEAD_SHIFT		0
#define		EDIT_HAIR_MASK		0xE0	// upper 3 bits of ub___pCustomHeadType
#define		EDIT_HAIR_SHIFT		5
*******/

extern int	menu_controller;	// which controller (0-3) paused the game
extern int ControllerLockOnPlayer[MAX_CONTROLLERS];	// = { -1,-1,-1,-1};	// or 0-9 as plyrindex
extern int midgetMode;
extern int bigHeadMode;
extern int giraffeMode;
extern int superSecretMode;
extern int superSecretMode1;
extern int superSecretMode2;
extern int superSecretMode3;

extern int ExtraTeamMode;

//  stuff for custom users

typedef struct orderedlist {
	SI	user;
	SI	sortdata;
	SI	sortdata2;
} orderedlist_t;


extern orderedlist_t OrderedCustomUsersTable[MAX_CUSTOM_USERS];

extern  int	CUCurSlot;

void	InitCustomUsers(void);			// in stats.c
void	UpdateCustomUserStats(void);	// in stats.c
void	SaveCustomUserData(void);		// to game pak (in shell.c)
void	LoadCustomUsers(void);		// from Flash Rom - only on power up

void MoveCurrentRostersToSaveRosters(void);


extern UserTeamInfo_T UserTeams[MAX_CUSTOM_USERS]; 

extern int CurGameUserTeams[MAX_CONTROLLERS];

extern int	SelectedCustomUserSlot;		//-1 if no one selected
extern int	NeedCustomUserSave;		
extern int	NumCustomUsers;
extern int	WriteFRError;	// for debugging without the debugger
extern int	DecodeStep;		// for debugging without the debugger
extern int gameOver;		// 1 if game/3pt was quit


#define NUM_FOULOUT_CHOICES			6
extern	UB		aub__gPlyrFoulsOK  [NUM_FOULOUT_CHOICES];

void SetNumberOfTimeOuts(void);	// based on current quarter - call at start of quarter
int	 GetNumberTimeOutsRemaining(int team01);
void DecNumberTimeOutsRemaining(int team01);
void CheckFunkyTimeOutRules(void);


void SetAudioVolumesFromOptions(void);


extern int	DidIntro, DidSaveOptions;

enum leave_shell_methods {
	LEAVE_SHELL_TO_GAME,
	LEAVE_SHELL_TO_INTRO,
};

extern  int LeaveShellMethod;


extern  int		CreatePlayerMode;

enum create_player_modes {
	CREATE_PLAYER_EDIT,
	CREATE_PLAYER_CAREER,
	CREATE_PLAYER_NORMAL,
};


#define CREATE_PLAYER_ROOKIE	CREATE_PLAYER_CAREER

void RandomizeAllStarRosters(void);	
void RestoreDefaultAllStarRosters(void);		// called before attract mode (special demo game)
void SetDefaultAllStarRosters(void);			// called on ShellOpen

void RefreshAllPlayers();

void ClearCheatModes(void);

extern 	int HintCounter;
extern  int GameCodeFlag;

extern int	FindPlayerOriginalTeam(int pnum);

#define MAX_PLAYERS_IN_KOBE2	(348+36+20+4)

extern UB 	PlayerOriginalTeam[MAX_PLAYERS_IN_KOBE2];
void SetAllPlayersOriginalTeams(void);
void RandomizeLFPTeam(UW * roster, int team);	
extern	int		AllowCheatTeams;

extern int SecretModeX;


extern	char                aub__gError [256];

extern UW * DecodePlyrImgNum (int pindex, UW * puw__PlyrImg);

//
// End of __SHELL_h
//


#endif

// **************************************************************************
// **************************************************************************
// **************************************************************************
//	END OF SHELL.H
// **************************************************************************
// **************************************************************************
// **************************************************************************

