Counter Strike : Global Offensive Source Code
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

522 lines
17 KiB

//========= Copyright © 1996-2004, Valve LLC, All rights reserved. ============
//
// Purpose: XBox HAL - Game to hardware abstraction
//
//=============================================================================
#pragma once
#define XBX_BREAK(x) if (x) {DebugBreak();}
//#define XBX_MAX_DPORTS 4
// PS3 supports up to 7 controllers!
#define XUSER_MAX_COUNT 7
#define XBX_MAX_EVENTS 32
#define XBX_MAX_BUTTONSAMPLE 32768
#define XBX_MAX_ANALOGSAMPLE 255
#define XBX_MAX_MESSAGE 1024
#define XBX_MAX_PATH MAX_PATH
#define XBX_MAX_RCMDLENGTH 256
#define XBX_MAX_RCMDNAMELEN 32
#define XBX_HDD_CLUSTERSIZE 16384
#define XBX_INVALID_STORAGE_ID ((DWORD)(-1))
#define XBX_STORAGE_DECLINED ((DWORD)(-2))
#define XBX_INVALID_USER_ID ((DWORD)(-1))
#define XBX_USER_SETTINGS_CONTAINER_DRIVE "CFG"
#define XBX_USER_SAVES_CONTAINER_DRIVE "SAV"
typedef uint64_t XUID;
#define IsEqualXUID( a, b ) ( ( a ) == ( b ) )
typedef struct {
BYTE ab[8]; // xbox to xbox key identifier
} XNKID;
typedef struct {
BYTE ab[16]; // xbox to xbox key exchange key
} XNKEY;
#define XCONTENT_MAX_DISPLAYNAME_LENGTH 128
#define XCONTENT_MAX_FILENAME_LENGTH 42
#define XCONTENTDEVICE_MAX_NAME_LENGTH 27
typedef DWORD XCONTENTDEVICEID, *PXCONTENTDEVICEID;
typedef struct _XCONTENT_DATA
{
XCONTENTDEVICEID DeviceID;
DWORD dwContentType;
wchar_t szDisplayName[XCONTENT_MAX_DISPLAYNAME_LENGTH];
char szFileName[XCONTENT_MAX_FILENAME_LENGTH];
} XCONTENT_DATA, *PXCONTENT_DATA;
// could be dvd or hdd, actual device depends on source of xbe launch
#define XBX_DVD_DRIVE "D:\\"
#define XBX_BOOT_DRIVE "D:\\"
#define XBX_SWAP_DIRECTORY "T:\\HL2\\HL2X\\SWAP\\"
#define XBX_PERSISTENT_DIR "T:\\HL2\\"
#define XBX_HDD_SAVE_DIRECTORY "U:\\"
#define XBX_IOTHREAD_STACKSIZE 32768
#define XBX_IOTHREAD_PRIORITY THREAD_PRIORITY_HIGHEST
#define XBX_SCREEN_WIDTH 640
#define XBX_SCREEN_HEIGHT 480
#define XBOX_MINBORDERSAFE 0.04f
#define XBOX_MAXBORDERSAFE 0.04f
#ifndef GPU_RESOLVE_ALIGNMENT
#define GPU_RESOLVE_ALIGNMENT 8
#endif
#define XBX_CALCSIG_TYPE XCALCSIG_FLAG_NON_ROAMABLE
#define XBX_VIRTUAL_BASEDIR "r:\\hl2"
#define XBX_GAMEDIR "hl2x"
#if defined( _DEBUG )
#define XBX_XBE_BASE_FILENAME "hl2d_xbox.xbe"
#elif defined( _RELEASE )
#define XBX_XBE_BASE_FILENAME "hl2r_xbox.xbe"
#else
#define XBX_XBE_BASE_FILENAME "hl2_xbox.xbe"
#endif
// Path to our running executable
#define XBX_XBE_PATH XBX_BOOT_DRIVE XBX_XBE_BASE_FILENAME
#define CLR_DEFAULT 0xFF000000
#define CLR_WARNING 0x0000FFFF
#define CLR_ERROR 0x000000FF
#define XBX_ALIGN(x,y) (((x)+((y)-1))&~((y)-1))
// disk space requirements
#define HL2_SAVEIMAGE_BYTES ( 1024 * 70 )
#define HL2_SAVEGAME_BYTES ( 1024 * 1024 * 10 )
#define HL2_CONFIGFILE_BYTES XBX_HDD_CLUSTERSIZE
#define HL2_PERSISTENT_BYTES_NEEDED ( HL2_CONFIGFILE_BYTES + HL2_SAVEGAME_BYTES * 2 )
#define HL2_USERSAVE_BYTES_NEEDED ( HL2_SAVEGAME_BYTES + HL2_SAVEIMAGE_BYTES + XBX_GetSaveGameOverhead() )
#define FILE_BEGIN 0
#define FILE_CURRENT 1
#define FILE_END 2
typedef enum
{
XC_NULL,
XC_NORMAL,
XC_IBEAM,
XC_WAIT,
XC_CROSS,
XC_UP,
XC_SIZENWSE,
XC_SIZENESW,
XC_SIZEWE,
XC_SIZENS,
XC_SIZEALL,
XC_NO,
XC_HAND,
XC_MAXCURSORS,
} xCursor_e;
typedef enum
{
XK_NULL,
XK_BUTTON_UP,
XK_BUTTON_DOWN,
XK_BUTTON_LEFT,
XK_BUTTON_RIGHT,
XK_BUTTON_START,
XK_BUTTON_BACK,
XK_BUTTON_STICK1,
XK_BUTTON_STICK2,
XK_BUTTON_A,
XK_BUTTON_B,
XK_BUTTON_X,
XK_BUTTON_Y,
XK_BUTTON_LEFT_SHOULDER,
XK_BUTTON_RIGHT_SHOULDER,
XK_BUTTON_LTRIGGER,
XK_BUTTON_RTRIGGER,
XK_STICK1_UP,
XK_STICK1_DOWN,
XK_STICK1_LEFT,
XK_STICK1_RIGHT,
XK_STICK2_UP,
XK_STICK2_DOWN,
XK_STICK2_LEFT,
XK_STICK2_RIGHT,
XK_BUTTON_INACTIVE_START, // Special key that is passed through on disabled controllers
XK_BUTTON_FIREMODE_SELECTOR_1,
XK_BUTTON_FIREMODE_SELECTOR_2,
XK_BUTTON_FIREMODE_SELECTOR_3,
XK_BUTTON_RELOAD,
XK_BUTTON_TRIGGER,
XK_BUTTON_PUMP_ACTION,
XK_XBUTTON_ROLL_RIGHT,
XK_XBUTTON_ROLL_LEFT,
XK_MAX_KEYS,
} xKey_t;
typedef enum
{
XVRB_NONE, // off
XVRB_ERROR, // fatal error
XVRB_ALWAYS, // no matter what
XVRB_WARNING, // non-fatal warnings
XVRB_STATUS, // status reports
XVRB_ALL,
} xverbose_e;
typedef enum
{
XOF_READ = 0x01, // read access
XOF_WRITE = 0x02, // write access
XOF_CREATE = 0x04, // create if not exist
} xopenfile_e;
typedef enum
{
XSF_SET = FILE_BEGIN,
XSF_CUR = FILE_CURRENT,
XSF_END = FILE_END,
} xseekfile_e;
typedef enum
{
XFA_LOCALONLY,
XFA_REMOTEONLY,
XFA_LOCALFIRST,
} xFileAccess_e;
typedef enum
{
XEV_NULL,
XEV_KEY,
XEV_REMOTECMD,
XEV_LISTENER_NOTIFICATION,
XEV_QUIT,
XEV_GAMEPAD_UNPLUGGED,
XEV_GAMEPAD_INSERTED,
} xevent_e;
typedef struct xevent_s
{
xevent_e event;
int arg1;
int arg2;
int arg3;
uint64 sysutil_status;
uint64 sysutil_param;
} xevent_t;
typedef struct xevent_SYS_SIGNINCHANGED_s
{
XUID xuid[ XUSER_MAX_COUNT ];
int state[ XUSER_MAX_COUNT ];
DWORD dwParam;
} xevent_SYS_SIGNINCHANGED_t;
typedef struct ps3syscbckeventhdlr_s
{
int (*pfnHandler)( xevent_t const &ev );
} ps3syscbckeventhdlr_t;
typedef enum
{
MDIR_NULL = 0x00,
MDIR_UP = 0x01,
MDIR_DOWN = 0x02,
MDIR_LEFT = 0x04,
MDIR_RIGHT = 0x08,
} xMouseDir_e;
typedef struct
{
const char *pName;
const char *pGroupName;
const char *pFormatName;
int size;
int width;
int height;
int depth;
int numLevels;
int binds;
int refCount;
int sRGB;
int edram;
int procedural;
int cacheableState;
int cacheableSize;
int final;
int failed;
int pwl;
int reduced;
} xTextureList_t;
typedef struct
{
const char *pName;
const char *pShaderName;
int refCount;
} xMaterialList_t;
typedef struct
{
char name[MAX_PATH];
char formatName[32];
int rate;
int bits;
int channels;
int looped;
int dataSize;
int numSamples;
int streamed;
int quality;
} xSoundList_t;
typedef struct
{
float position[3];
float angle[3];
char mapPath[256];
char savePath[256];
int build;
int skill;
char details[1024];
} xMapInfo_t;
/******************************************************************************
XBX_CONSOLE.CPP
******************************************************************************/
extern int XBX_rAddCommands(int numCommands, const char* commands[], const char* help[]);
extern int XBX_rTextureList(int nTextures, const xTextureList_t* pXTextureList);
extern int XBX_rTimeStampLog(float time, const char *pString);
#define XBX_rMaterialList if ( !g_pValvePS3Console ); else g_pValvePS3Console->MaterialList //(int nMaterials, const xMaterialList_t* pXMaterialList);
// inline int XBX_rSoundList(int nSounds, const xSoundList_t* pXSoundList) { return g_pValvePS3Console ? g_pValvePS3Console->SoundList( nSounds, pXSoundList ) : -1 ; }
#define XBX_rSoundList if ( !g_pValvePS3Console ); else g_pValvePS3Console->SoundList
extern int XBX_rMemDump( int nStatsID );
#define XBX_rMapInfo if ( !g_pValvePS3Console ) ; else g_pValvePS3Console->MapInfo //( xMapInfo_t *pMapInfo ) { return g_pValvePS3Console ? g_pValvePS3Console->MapInfo( pMapInfo ) : -1 ; }
/******************************************************************************
XBX_DEBUG.CPP
******************************************************************************/
// extern void XBX_SendRemoteCommand(const char* dbgCommand, bool async);
#define XBX_SendRemoteCommand if ( !g_pValvePS3Console ) ; else g_pValvePS3Console->SendRemoteCommand
#define XBX_SendPrefixedMsg if ( !g_pValvePS3Console ) ; else g_pValvePS3Console->SendPrefixedDECIMessage
// extern void XBX_DebugString(xverbose_e verbose, COLORREF color, const char* format, ...);
#define XBX_DebugString if ( !g_pValvePS3Console ) ; else g_pValvePS3Console->DebugString
extern void XBX_SetVerbose(xverbose_e verbose);
extern void XBX_InitDebug(void);
extern void XBX_Log( const char *pString );
extern bool g_xbx_bNoVXConsole;
/******************************************************************************
XBX_DEVICES.CPP
******************************************************************************/
extern void XBX_InitDevices(void);
extern void XBX_SampleDevices(void);
extern void XBX_SetRumble( float fLeftMotor, float fRightMotor );
extern void XBX_StopRumble( void );
extern void XBX_SetActiveController( int port );
extern int XBX_GetActiveController();
extern bool XBX_IsControllerValid( int port );
/******************************************************************************
XBX_DISPLAY.CPP
******************************************************************************/
extern u32_t XBX_GetDisplayTime(void);
extern void XBX_CreateDisplay(void);
extern void XBX_BeginFrame(void);
extern void XBX_EndFrame(void);
//EAPS3extern void XBX_HookD3DDevice(IDirect3DDevice8* pD3DDevice);
//EAPS3extern IDirect3DDevice8 *g_xbx_pD3DDevice;
extern u32_t g_xbx_numVBlanks;
extern u32_t g_xbx_frameTime;
extern int g_xbx_numFrames;
/******************************************************************************
XBX_FILEIO.CPP
******************************************************************************/
enum xFileDevice_e
{
XFD_NULL,
XFD_LOCALHDD,
XFD_REMOTEHDD,
XFD_DVDROM,
XFD_TITLE_PERSISTENT_HDD,
};
enum XFileMode_t
{
XFM_BINARY,
XFM_TEXT
};
//EAPS3 : XBox structure
struct WIN32_FIND_DATA
{
};
//EAPS3 : XBox structure
struct XGAME_FIND_DATA
{
};
extern void XBX_FixupFilename(const char* input, char* output, xFileDevice_e& outFileDevice, bool bWarnInvalid = true);
extern void XBX_SetRemotePath(const char* remotePath);
extern void XBX_SetLocalPath(const char* localPath);
extern const char *XBX_GetLocalPath();
extern FILE* XBX_fopen(const char* filename, const char* options);
extern int XBX_setvbuf( FILE *fp, char *,int mode, size_t size );
extern int XBX_fclose(FILE* fp);
extern int XBX_fseek(FILE *fp, long pos, int seekType);
extern long XBX_ftell(FILE *fp);
extern int XBX_feof(FILE *fp);
extern size_t XBX_fread(void *dest, size_t size, size_t count, FILE *fp);
extern size_t XBX_fwrite(const void *src, size_t size, size_t count, FILE *fp);
extern bool XBX_setmode( FILE *fp, int mode );
extern size_t XBX_vfprintf(FILE *fp, const char *fmt, va_list list);
extern int XBX_ferror(FILE *fp);
extern int XBX_fflush(FILE *fp);
extern char* XBX_fgets(char *dest, int destSize, FILE *fp);
extern int XBX_stat(const char *path, struct _stat *buf);
//extern int XBX_unlink(const char* filename);
extern int XBX_rename(const char* pszFrom, const char* pszTo);
extern HANDLE XBX_FindFirstFile(const char *findname, WIN32_FIND_DATA *dat);
extern BOOL XBX_FindNextFile(HANDLE handle, WIN32_FIND_DATA *dat);
extern BOOL XBX_FindClose(HANDLE handle);
extern void XBX_SetFileAccess(xFileAccess_e mode);
extern void XBX_EnableFileSync(bool bSync);
//extern int XBX_mkdir( const char * );
extern void XBX_rFileSync(const char *pFileName);
extern DWORD XBX_GetSigSize( DWORD sigType );
extern void XBX_CalculateSignature( BYTE *buff, void *pSig, DWORD buffSize, DWORD sigType );
extern bool XBX_ValidateSignature( BYTE *pBuffer, DWORD size, DWORD sigType );
extern bool g_xbx_bFileSync;
extern DWORD XBX_GetSigSize( DWORD sigType );
extern void XBX_CalculateSignature( BYTE *buff, void *pSig, DWORD buffSize, DWORD sigType );
extern bool XBX_ValidateSignature( BYTE *pBuffer, DWORD size, DWORD sigType );
extern bool XBX_SaveFileExists( const wchar_t *pName, XGAME_FIND_DATA *fileData );
extern bool XBX_SaveNumberExists( const int number, XGAME_FIND_DATA *fileData );
/******************************************************************************
XBX_MEMORY.CPP
******************************************************************************/
extern void XBX_InitMemory(void);
extern void XBX_EnableMemoryTrace(bool enable);
extern unsigned int g_xbx_memoryD3DCost;
/******************************************************************************
XBX_PROFILE.CPP
******************************************************************************/
class xVProfNodeItem_t;
extern int XBX_rSetProfileAttributes(const char *pProfileName, int numCounters, const char *names[], COLORREF colors[]);
extern void XBX_rSetProfileData( const char *pProfileName, int numCounters, unsigned int *counters );
extern void XBX_rVProfNodeList( int nItems, const xVProfNodeItem_t *pItems );
/******************************************************************************
XBX_SYSTEM.CPP
******************************************************************************/
extern void XBX_StringCopyToWide( WCHAR *pDst, const char *pSrc );
extern u32_t XBX_GetSystemTime(void);
ULARGE_INTEGER XBX_GetFreeBytes( const char *drive );
extern unsigned int XBX_GetBlocksNeeded( const char *drive, DWORD bytesRequested );
extern DWORD XBX_GetSaveGameOverhead( void );
extern void XBX_Error(const char* format, ...);
extern void XBX_Init();
extern bool XBX_IsRetailMode();
extern void XBX_RelaunchHL2( unsigned int contextCode = 0, const char *pszArgs = "", void *pRelaunchData = NULL, unsigned nBytesRelaunchData = 0 );
extern bool XBX_GetRelaunchContext( unsigned int *pContextCode, __int64 *pStartTime );
extern bool XBX_GetRelaunchData( void *pRelaunchData, unsigned maxBytes );
extern void XBX_LaunchInstaller( unsigned int contextCode );
extern void XBX_LaunchDashboard( char chDrive, int spaceNeeded );
extern LPSTR g_xbx_pCmdLine;
extern const char* g_xbx_version;
extern bool XBX_NoXBDM();
typedef HRESULT (STDCALL *DmSendNotificationStringFunc_t)(LPCSTR sz);
typedef HRESULT (STDCALL *DmRegisterCommandProcessorFunc_t)(LPCSTR szProcessor, PVOID /*HACK:/needsport/ WAS:PDM_CMDPROC /Vitaliy/ */ pfn);
typedef HRESULT (STDCALL *DmCaptureStackBackTraceFunc_t)(ULONG FramesToCapture, PVOID *BackTrace);
typedef BOOL (STDCALL *DmIsDebuggerPresentFunc_t)(void);
extern DmSendNotificationStringFunc_t CallDmSendNotificationString;
extern DmRegisterCommandProcessorFunc_t CallDmRegisterCommandProcessor;
extern DmCaptureStackBackTraceFunc_t CallDmCaptureStackBackTrace;
extern DmIsDebuggerPresentFunc_t CallDmIsDebuggerPresent;
/******************************************************************************
XBX_EVENTS.CPP
******************************************************************************/
// Event handling
PLATFORM_INTERFACE bool XBX_NotifyCreateListener( uint64_t categories );
PLATFORM_INTERFACE void XBX_QueueEvent( xevent_e event, int arg1, int arg2, int arg3 );
PLATFORM_INTERFACE void XBX_ProcessEvents( void );
PLATFORM_INTERFACE void XBX_DispatchEventsQueue( void );
// Accessors
PLATFORM_INTERFACE const char* XBX_GetLanguageString( void );
PLATFORM_INTERFACE bool XBX_IsLocalized( void );
PLATFORM_INTERFACE bool XBX_IsAudioLocalized( void );
PLATFORM_INTERFACE const char *XBX_GetNextSupportedLanguage( const char *pLanguage, bool *pbHasAudio );
PLATFORM_INTERFACE bool XBX_IsRestrictiveLanguage( void );
PLATFORM_INTERFACE u32_t XBX_GetImageChangelist( void );
//
// Storage devices management
//
PLATFORM_INTERFACE void XBX_ResetStorageDeviceInfo();
PLATFORM_INTERFACE DWORD XBX_DescribeStorageDevice( DWORD nStorageID );
PLATFORM_INTERFACE char const *XBX_MakeStorageContainerRoot( int iController, char const *szRootName, char *pBuffer, int numBufferBytes );
PLATFORM_INTERFACE DWORD XBX_GetStorageDeviceId( int iController );
PLATFORM_INTERFACE void XBX_SetStorageDeviceId( int iController, DWORD id );
//
// Information about game primary user
//
PLATFORM_INTERFACE DWORD XBX_GetPrimaryUserId( void );
PLATFORM_INTERFACE void XBX_SetPrimaryUserId( DWORD id );
PLATFORM_INTERFACE DWORD XBX_GetPrimaryUserIsGuest( void );
PLATFORM_INTERFACE void XBX_SetPrimaryUserIsGuest( DWORD bPrimaryUserIsGuest );
//
// Disabling and enabling input from controllers
//
PLATFORM_INTERFACE void XBX_ResetUserIdSlots();
PLATFORM_INTERFACE void XBX_ClearUserIdSlots();
//
// Mapping between game slots and controllers
//
PLATFORM_INTERFACE int XBX_GetUserId( int nSlot );
PLATFORM_INTERFACE int XBX_GetSlotByUserId( int idx );
PLATFORM_INTERFACE void XBX_SetUserId( int nSlot, int idx );
PLATFORM_INTERFACE void XBX_ClearSlot( int nSlot );
PLATFORM_INTERFACE void XBX_ClearUserId( int idx );
PLATFORM_INTERFACE DWORD XBX_GetUserIsGuest( int nSlot );
PLATFORM_INTERFACE void XBX_SetUserIsGuest( int nSlot, DWORD dwUserIsGuest );
//
// Number of game users
//
PLATFORM_INTERFACE DWORD XBX_GetNumGameUsers( void );
PLATFORM_INTERFACE void XBX_SetNumGameUsers( DWORD numGameUsers );
//
// Invite related functions
//
PLATFORM_INTERFACE XNKID XBX_GetInviteSessionId( void );
PLATFORM_INTERFACE void XBX_SetInviteSessionId( XNKID nSessionId );
PLATFORM_INTERFACE XUID XBX_GetInvitedUserXuid( void );
PLATFORM_INTERFACE void XBX_SetInvitedUserXuid( XUID xuid );
PLATFORM_INTERFACE DWORD XBX_GetInvitedUserId( void );
PLATFORM_INTERFACE void XBX_SetInvitedUserId( DWORD nUserId );