diff --git a/code/client/cl_ui.cpp b/code/client/cl_ui.cpp index 2cc784e..55ed93b 100644 --- a/code/client/cl_ui.cpp +++ b/code/client/cl_ui.cpp @@ -234,10 +234,10 @@ void CL_InitUI( void ) { uii.R_RegisterShader = re.RegisterShader; uii.R_RegisterShaderNoMip = re.RegisterShaderNoMip; uii.R_RegisterFont = re.RegisterFont; -#ifndef _XBOX - uii.R_Font_StrLenPixels = re.Font_StrLenPixels; - uii.R_Font_HeightPixels = re.Font_HeightPixels; - uii.R_Font_DrawString = re.Font_DrawString; +#if defined(_XBOX) || defined(__GNUC__) + uii._R_Font_StrLenPixels = re._Font_StrLenPixels; + uii._R_Font_HeightPixels = re._Font_HeightPixels; + uii._R_Font_DrawString = re._Font_DrawString; #endif uii.R_Font_StrLenChars = re.Font_StrLenChars; uii.Language_IsAsian = re.Language_IsAsian; diff --git a/code/game/bg_public.h b/code/game/bg_public.h index 6d41508..90558e4 100644 --- a/code/game/bg_public.h +++ b/code/game/bg_public.h @@ -102,7 +102,7 @@ typedef enum { #define PMF_FIX_MINS (1<<19)//524288 // Mins raised for dual forward jump, fix them #define PMF_ALL_TIMES (PMF_TIME_WATERJUMP|PMF_TIME_LAND|PMF_TIME_KNOCKBACK|PMF_TIME_NOFRICTION) -#if defined(_XBOX) && !defined(_TRACE_FUNCTOR_T_DEFINED_) +#if (defined(_XBOX) || defined(__GNUC__)) && !defined(_TRACE_FUNCTOR_T_DEFINED_) // Function objects to replace the function pointers used for trace in pmove_t // We can't have default arguments on function pointers, but this allows us to // do the same thing with minimal impact elsewhere. @@ -153,7 +153,7 @@ typedef struct { // callbacks to test the world // these will be different functions during game and cgame -#ifdef _XBOX +#if defined(_XBOX) || defined(__GNUC__) Trace_Functor_t trace; #else void (*trace)( trace_t *results, const vec3_t start, const vec3_t mins, const vec3_t maxs, const vec3_t end, diff --git a/code/game/g_public.h b/code/game/g_public.h index 6b5be00..870f0e7 100644 --- a/code/game/g_public.h +++ b/code/game/g_public.h @@ -108,7 +108,7 @@ Ghoul2 Insert End //=============================================================== -#if defined(_XBOX) && !defined(_TRACE_FUNCTOR_T_DEFINED_) +#if (defined(_XBOX) || defined(__GNUC__)) && !defined(_TRACE_FUNCTOR_T_DEFINED_) // Function objects to replace the function pointers used for trace // We can't have default arguments on function pointers, but this allows us to // do the same thing with minimal impact elsewhere. @@ -131,30 +131,6 @@ struct Trace_Functor_t #define _TRACE_FUNCTOR_T_DEFINED_ #endif -#ifdef _XBOX -// Declare all the functions that we use in the inlined member functions -/* -extern int G2API_InitGhoul2Model(CGhoul2Info_v &ghoul2, const char *fileName, int modelIndex, qhandle_t customSkin = NULL, - qhandle_t customShader = NULL, int modelFlags = 0, int lodBias = 0); -extern qboolean G2API_SetSkin(CGhoul2Info *ghlInfo, qhandle_t customSkin, qhandle_t renderSkin = 0); -extern qboolean G2API_SetBoneAnim(CGhoul2Info *ghlInfo, const char *boneName, const int startFrame, const int endFrame, - const int flags, const float animSpeed, const int currentTime, const float setFrame = -1, const int blendTime = -1); -extern qboolean G2API_SetBoneAngles(CGhoul2Info *ghlInfo, const char *boneName, const vec3_t angles, const int flags, - const Eorientations up, const Eorientations right, const Eorientations forward, qhandle_t *modelList, - int blendTime = 0, int currentTime = 0); -extern qboolean G2API_SetBoneAnglesMatrix(CGhoul2Info *ghlInfo, const char *boneName, const mdxaBone_t &matrix, const int flags, - qhandle_t *modelList, int blendTime = 0, int currentTime = 0); -extern void G2API_CopyGhoul2Instance(CGhoul2Info_v &Ghoul2From, CGhoul2Info_v &Ghoul2To, int modelIndex = -1); -extern qboolean G2API_SetBoneAnglesIndex(CGhoul2Info *ghlInfo, const int index, const vec3_t angles, const int flags, - const Eorientations yaw, const Eorientations pitch, const Eorientations roll, - qhandle_t *modelList, int blendTime, int currentTime); -extern qboolean G2API_SetBoneAnimIndex(CGhoul2Info *ghlInfo, const int index, const int startFrame, const int endFrame, const int flags, const float animSpeed, const int currentTime, const float setFrame, const int blendTime); -*/ -#include "../ghoul2/G2.h" -extern int SG_Read (unsigned long chid, void *pvAddress, int iLength, void **ppvAddressPtr); -extern int SG_ReadOptional (unsigned long chid, void *pvAddress, int iLength, void **ppvAddressPtr); -#endif - // // functions provided by the main engine // @@ -203,20 +179,23 @@ typedef struct { // Savegame handling // - qboolean (*AppendToSaveGame)(unsigned long chid, const void *data, int length); -#ifdef _XBOX // No default arguments through function pointers - int ReadFromSaveGame(unsigned long chid, void *pvAddress, int iLength, void **ppvAddressPtr = NULL) + qboolean (*AppendToSaveGame)(unsigned int chid, const void *data, int length); +#if defined(_XBOX) || defined(__GNUC__) // No default arguments through function pointers + int (*_ReadFromSaveGame)(unsigned int chid, void *pvAddress, int iLength, void **ppvAddressPtr); + int (*_ReadFromSaveGameOptional)(unsigned int chid, void *pvAddress, int iLength, void **ppvAddressPtr); + + int ReadFromSaveGame(unsigned int chid, void *pvAddress, int iLength, void **ppvAddressPtr = NULL) { - return SG_Read(chid, pvAddress, iLength, ppvAddressPtr); + return (*_ReadFromSaveGame)(chid, pvAddress, iLength, ppvAddressPtr); } - int ReadFromSaveGameOptional(unsigned long chid, void *pvAddress, int iLength, void **ppvAddressPtr = NULL) + int ReadFromSaveGameOptional(unsigned int chid, void *pvAddress, int iLength, void **ppvAddressPtr = NULL) { - return SG_ReadOptional(chid, pvAddress, iLength, ppvAddressPtr); + return (*_ReadFromSaveGameOptional)(chid, pvAddress, iLength, ppvAddressPtr); } #else - int (*ReadFromSaveGame)(unsigned long chid, void *pvAddress, int iLength, void **ppvAddressPtr = NULL); - int (*ReadFromSaveGameOptional)(unsigned long chid, void *pvAddress, int iLength, void **ppvAddressPtr = NULL); + int (*ReadFromSaveGame)(unsigned int chid, void *pvAddress, int iLength, void **ppvAddressPtr = NULL); + int (*ReadFromSaveGameOptional)(unsigned int chid, void *pvAddress, int iLength, void **ppvAddressPtr = NULL); #endif // add commands to the console as if they were typed in // for map changing, etc @@ -253,7 +232,7 @@ typedef struct { void (*SetBrushModel)( gentity_t *ent, const char *name ); // collision detection against all linked entities -#ifdef _XBOX +#if defined(_XBOX) || defined(__GNUC__) Trace_Functor_t trace; #else void (*trace)( trace_t *results, const vec3_t start, const vec3_t mins, const vec3_t maxs, const vec3_t end, @@ -296,52 +275,70 @@ Ghoul2 Insert Start */ qhandle_t (*G2API_PrecacheGhoul2Model)(const char *fileName); -#ifdef _XBOX // No default arguments through function pointers +#if defined(_XBOX) || defined(__GNUC__) // No default arguments through function pointers + +int (*_G2API_InitGhoul2Model)(CGhoul2Info_v &ghoul2, const char *fileName, int modelIndex, qhandle_t customSkin, + qhandle_t customShader, int modelFlags, int lodBias); +qboolean (*_G2API_SetSkin)(CGhoul2Info *ghlInfo, qhandle_t customSkin, qhandle_t renderSkin); +qboolean (*_G2API_SetBoneAnim)(CGhoul2Info *ghlInfo, const char *boneName, const int startFrame, const int endFrame, + const int flags, const float animSpeed, const int currentTime, const float setFrame, const int blendTime); +qboolean (*_G2API_SetBoneAngles)(CGhoul2Info *ghlInfo, const char *boneName, const vec3_t angles, + const int flags, const Eorientations up, const Eorientations right, const Eorientations forward, + qhandle_t *modelList, int blendTime, int blendStart); +qboolean (*_G2API_SetBoneAnglesIndex)(CGhoul2Info *ghlInfo, const int index, const vec3_t angles, const int flags, + const Eorientations yaw, const Eorientations pitch, const Eorientations roll, + qhandle_t *modelList, int blendTime, int currentTime); +qboolean (*_G2API_SetBoneAnglesMatrix)(CGhoul2Info *ghlInfo, const char *boneName, const mdxaBone_t &matrix, const int flags, + qhandle_t *modelList, int blendTime, int currentTime); +void (*_G2API_CopyGhoul2Instance)(CGhoul2Info_v &ghoul2From, CGhoul2Info_v &ghoul2To, int modelIndex); +qboolean (*_G2API_SetBoneAnimIndex)(CGhoul2Info *ghlInfo, const int index, const int startFrame, const int endFrame, const int flags, const float animSpeed, const int currentTime, const float setFrame, const int blendTime); + + int G2API_InitGhoul2Model(CGhoul2Info_v &ghoul2, const char *fileName, int modelIndex, qhandle_t customSkin = NULL, qhandle_t customShader = NULL, int modelFlags = 0, int lodBias = 0) { - return ::G2API_InitGhoul2Model(ghoul2, fileName, modelIndex, customSkin, customShader, modelFlags, lodBias); + return (*_G2API_InitGhoul2Model)(ghoul2, fileName, modelIndex, customSkin, customShader, modelFlags, lodBias); } qboolean G2API_SetSkin(CGhoul2Info *ghlInfo, qhandle_t customSkin, qhandle_t renderSkin = 0 ) { - return ::G2API_SetSkin(ghlInfo, customSkin, renderSkin); + return (*_G2API_SetSkin)(ghlInfo, customSkin, renderSkin); } qboolean G2API_SetBoneAnim(CGhoul2Info *ghlInfo, const char *boneName, const int startFrame, const int endFrame, const int flags, const float animSpeed, const int currentTime, const float setFrame = -1, const int blendTime = -1) { - return ::G2API_SetBoneAnim(ghlInfo, boneName, startFrame, endFrame, flags, animSpeed, currentTime, setFrame, blendTime); + return (*_G2API_SetBoneAnim)(ghlInfo, boneName, startFrame, endFrame, flags, animSpeed, currentTime, setFrame, blendTime); } qboolean G2API_SetBoneAngles(CGhoul2Info *ghlInfo, const char *boneName, const vec3_t angles, const int flags, const Eorientations up, const Eorientations right, const Eorientations forward, qhandle_t *modelList, int blendTime = 0, int blendStart = 0) { - return ::G2API_SetBoneAngles(ghlInfo, boneName, angles, flags, up, right, forward, modelList, blendTime, blendStart); + return (*_G2API_SetBoneAngles)(ghlInfo, boneName, angles, flags, up, right, forward, modelList, blendTime, blendStart); } qboolean G2API_SetBoneAnglesMatrix(CGhoul2Info *ghlInfo, const char *boneName, const mdxaBone_t &matrix, const int flags, qhandle_t *modelList, int blendTime = 0, int currentTime = 0) { - return ::G2API_SetBoneAnglesMatrix(ghlInfo, boneName, matrix, flags, modelList, blendTime, currentTime); + return (*_G2API_SetBoneAnglesMatrix)(ghlInfo, boneName, matrix, flags, modelList, blendTime, currentTime); } void G2API_CopyGhoul2Instance(CGhoul2Info_v &ghoul2From, CGhoul2Info_v &ghoul2To, int modelIndex = -1) { - ::G2API_CopyGhoul2Instance(ghoul2From, ghoul2To, modelIndex); + (*_G2API_CopyGhoul2Instance)(ghoul2From, ghoul2To, modelIndex); } qboolean G2API_SetBoneAnglesIndex(CGhoul2Info *ghlInfo, const int index, const vec3_t angles, const int flags, const Eorientations yaw, const Eorientations pitch, const Eorientations roll, qhandle_t *modelList, int blendTime = 0, int currentTime = 0) { - return ::G2API_SetBoneAnglesIndex(ghlInfo, index, angles, flags, yaw, pitch, roll, modelList, blendTime, currentTime); + return (*_G2API_SetBoneAnglesIndex)(ghlInfo, index, angles, flags, yaw, pitch, roll, modelList, blendTime, currentTime); } qboolean G2API_SetBoneAnimIndex(CGhoul2Info *ghlInfo, const int index, const int startFrame, const int endFrame, const int flags, const float animSpeed, const int currentTime, const float setFrame = -1, const int blendTime = -1) { - return ::G2API_SetBoneAnimIndex(ghlInfo, index, startFrame, endFrame, flags, animSpeed, currentTime, setFrame, blendTime); + return (*_G2API_SetBoneAnimIndex)(ghlInfo, index, startFrame, endFrame, flags, animSpeed, currentTime, setFrame, blendTime); } #else diff --git a/code/renderer/tr_init.cpp b/code/renderer/tr_init.cpp index a5a1eef..043ff02 100644 --- a/code/renderer/tr_init.cpp +++ b/code/renderer/tr_init.cpp @@ -1622,7 +1622,11 @@ refexport_t *GetRefAPI ( int apiVersion ) { re.GetBModelVerts = RE_GetBModelVerts; re.RegisterFont = RE_RegisterFont; -#ifndef _XBOX +#if defined(_XBOX) || defined(__GNUC__) + re._Font_StrLenPixels = RE_Font_StrLenPixels; + re._Font_HeightPixels = RE_Font_HeightPixels; + re._Font_DrawString = RE_Font_DrawString; +#else re.Font_StrLenPixels = RE_Font_StrLenPixels; re.Font_HeightPixels = RE_Font_HeightPixels; re.Font_DrawString = RE_Font_DrawString; diff --git a/code/renderer/tr_public.h b/code/renderer/tr_public.h index a24516d..271587e 100644 --- a/code/renderer/tr_public.h +++ b/code/renderer/tr_public.h @@ -113,18 +113,22 @@ typedef struct { void (*WorldEffectCommand)(const char *command); int (*RegisterFont)(const char *name); -#ifdef _XBOX // No default arguments through function pointers. +#if defined(_XBOX) || defined(__GNUC__) // No default arguments through function pointers. + int (*_Font_HeightPixels)(const int index, const float scale); + int (*_Font_StrLenPixels)(const char *s, const int index, const float scale); + void (*_Font_DrawString)(int x, int y, const char *s, const float *rgba, const int iFontHandle, int iMaxPixelWidth, const float scale); + int Font_HeightPixels(const int index, const float scale = 1.0f) { - return RE_Font_HeightPixels(index, scale); + return (*_Font_HeightPixels)(index, scale); } int Font_StrLenPixels(const char *s, const int index, const float scale = 1.0f) { - return RE_Font_StrLenPixels(s, index, scale); + return (*_Font_StrLenPixels)(s, index, scale); } void Font_DrawString(int x, int y, const char *s, const float *rgba, const int iFontHandle, int iMaxPixelWidth, const float scale = 1.0f) { - return RE_Font_DrawString(x, y, s, rgba, iFontHandle, iMaxPixelWidth, scale); + return (*_Font_DrawString)(x, y, s, rgba, iFontHandle, iMaxPixelWidth, scale); } #else int (*Font_HeightPixels)(const int index, const float scale = 1.0f); diff --git a/code/server/sv_game.cpp b/code/server/sv_game.cpp index 2439e3a..6c6049d 100644 --- a/code/server/sv_game.cpp +++ b/code/server/sv_game.cpp @@ -542,7 +542,10 @@ void SV_InitGameProgs (void) { import.FS_GetFileList = FS_GetFileList; import.AppendToSaveGame = SG_Append; -#ifndef _XBOX +#if defined(_XBOX) || defined(__GNUC__) + import._ReadFromSaveGame = SG_Read; + import._ReadFromSaveGameOptional = SG_ReadOptional; +#else import.ReadFromSaveGame = SG_Read; import.ReadFromSaveGameOptional = SG_ReadOptional; #endif @@ -571,7 +574,16 @@ Ghoul2 Insert Start import.G2API_GetBoneAnimIndex = G2API_GetBoneAnimIndex; import.G2API_AddSurface = G2API_AddSurface; import.G2API_HaveWeGhoul2Models =G2API_HaveWeGhoul2Models; -#ifndef _XBOX +#if defined(_XBOX) || defined(__GNUC__) + import._G2API_InitGhoul2Model = G2API_InitGhoul2Model; + import._G2API_SetBoneAngles = G2API_SetBoneAngles; + import._G2API_SetBoneAnglesMatrix = G2API_SetBoneAnglesMatrix; + import._G2API_SetBoneAnim = G2API_SetBoneAnim; + import._G2API_SetSkin = G2API_SetSkin; + import._G2API_CopyGhoul2Instance = G2API_CopyGhoul2Instance; + import._G2API_SetBoneAnglesIndex = G2API_SetBoneAnglesIndex; + import._G2API_SetBoneAnimIndex = G2API_SetBoneAnimIndex; +#else import.G2API_InitGhoul2Model = G2API_InitGhoul2Model; import.G2API_SetBoneAngles = G2API_SetBoneAngles; import.G2API_SetBoneAnglesMatrix = G2API_SetBoneAnglesMatrix; diff --git a/code/ui/ui_main.cpp b/code/ui/ui_main.cpp index bfd7751..59a9558 100644 --- a/code/ui/ui_main.cpp +++ b/code/ui/ui_main.cpp @@ -2564,12 +2564,16 @@ void _UI_Init( qboolean inGameLoad ) uiInfo.uiDC.registerSkin = re.RegisterSkin; -#ifndef _XBOX +#if defined(_XBOX) || defined(__GNUC__) + uiInfo.uiDC._g2_SetSkin = G2API_SetSkin; + uiInfo.uiDC._g2_SetBoneAnim = G2API_SetBoneAnim; + uiInfo.uiDC._g2_InitGhoul2Model = G2API_InitGhoul2Model; +#else uiInfo.uiDC.g2_SetSkin = G2API_SetSkin; uiInfo.uiDC.g2_SetBoneAnim = G2API_SetBoneAnim; + uiInfo.uiDC.g2_InitGhoul2Model = G2API_InitGhoul2Model; #endif uiInfo.uiDC.g2_RemoveGhoul2Model = G2API_RemoveGhoul2Model; - uiInfo.uiDC.g2_InitGhoul2Model = G2API_InitGhoul2Model; uiInfo.uiDC.g2_CleanGhoul2Models = G2API_CleanGhoul2Models; uiInfo.uiDC.g2_AddBolt = G2API_AddBolt; uiInfo.uiDC.g2_GetBoltMatrix = G2API_GetBoltMatrix; diff --git a/code/ui/ui_public.h b/code/ui/ui_public.h index b8b0fc7..a816577 100644 --- a/code/ui/ui_public.h +++ b/code/ui/ui_public.h @@ -48,18 +48,22 @@ typedef struct { qhandle_t (*R_RegisterShader)( const char *name ); // returns white if not found qhandle_t (*R_RegisterShaderNoMip)( const char *name ); // returns white if not found qhandle_t (*R_RegisterFont)( const char *name ); // returns 0 for bad font -#ifdef _XBOX // No default arguments on function pointers +#if defined(_XBOX) || defined(__GNUC__) // No default arguments on function pointers + int (*_R_Font_StrLenPixels)(const char *text, const int setIndex, const float scale); + int (*_R_Font_HeightPixels)(const int setIndex, const float scale); + void (*_R_Font_DrawString)(int ox, int oy, const char *text, const float *rgba, const int setIndex, int iMaxPixelWidth, const float scale); + int R_Font_StrLenPixels(const char *text, const int setIndex, const float scale = 1.0f) { - return RE_Font_StrLenPixels(text, setIndex, scale); + return (*_R_Font_StrLenPixels)(text, setIndex, scale); } int R_Font_HeightPixels(const int setIndex, const float scale = 1.0f) { - return RE_Font_HeightPixels(setIndex, scale); + return (*_R_Font_HeightPixels)(setIndex, scale); } void R_Font_DrawString(int ox, int oy, const char *text, const float *rgba, const int setIndex, int iMaxPixelWidth, const float scale = 1.0f) { - RE_Font_DrawString(ox, oy, text, rgba, setIndex, iMaxPixelWidth, scale); + (*_R_Font_DrawString)(ox, oy, text, rgba, setIndex, iMaxPixelWidth, scale); } #else int (*R_Font_StrLenPixels)(const char *text, const int setIndex, const float scale = 1.0f); diff --git a/code/ui/ui_shared.h b/code/ui/ui_shared.h index 3765f5a..cee0ebd 100644 --- a/code/ui/ui_shared.h +++ b/code/ui/ui_shared.h @@ -214,23 +214,33 @@ typedef struct { qhandle_t (*registerSkin)( const char *name ); //rww - ghoul2 stuff. Add whatever you need here, remember to set it in _UI_Init or it will crash when you try to use it. -#ifdef _XBOX // No default arguments on function pointers +#if defined(_XBOX) || defined(__GNUC__) // No default arguments on function pointers + qboolean (*_g2_SetSkin)(CGhoul2Info *ghlInfo, qhandle_t customSkin, qhandle_t); + qboolean (*_g2_SetBoneAnim)(CGhoul2Info *ghlInfo, const char *boneName, const int startFrame, const int endFrame, + const int flags, const float animSpeed, const int currentTime, const float, const int); + int (*_g2_InitGhoul2Model)(CGhoul2Info_v &ghoul2, const char *fileName, int, qhandle_t customSkin, qhandle_t customShader, int modelFlags, int); + qboolean g2_SetSkin(CGhoul2Info *ghlInfo, qhandle_t customSkin, qhandle_t renderSkin = 0) { - return G2API_SetSkin(ghlInfo, customSkin, renderSkin); + return (*_g2_SetSkin)(ghlInfo, customSkin, renderSkin); } qboolean g2_SetBoneAnim(CGhoul2Info *ghlInfo, const char *boneName, const int startFrame, const int endFrame, const int flags, const float animSpeed, const int currentTime, const float setFrame = -1, const int blendTime = -1) { - return G2API_SetBoneAnim(ghlInfo, boneName, startFrame, endFrame, flags, animSpeed, currentTime, setFrame, blendTime); + return (*_g2_SetBoneAnim)(ghlInfo, boneName, startFrame, endFrame, flags, animSpeed, currentTime, setFrame, blendTime); + } + + int g2_InitGhoul2Model(CGhoul2Info_v &ghoul2, const char *fileName, int modelIndex, qhandle_t customSkin = NULL, qhandle_t customShader = NULL, int modelFlags = 0, int lodBias = 0) + { + return (*_g2_InitGhoul2Model)(ghoul2, fileName, modelIndex, customSkin, customShader, modelFlags, lodBias); } #else qboolean (*g2_SetSkin)(CGhoul2Info *ghlInfo, qhandle_t customSkin, qhandle_t renderSkin = 0); qboolean (*g2_SetBoneAnim)(CGhoul2Info *ghlInfo, const char *boneName, const int startFrame, const int endFrame, const int flags, const float animSpeed, const int currentTime, const float setFrame = -1, const int blendTime = -1); + int (*g2_InitGhoul2Model)(CGhoul2Info_v &ghoul2, const char *fileName, int, qhandle_t customSkin = NULL, qhandle_t customShader = NULL, int modelFlags = 0, int lodBias = 0); #endif qboolean (*g2_RemoveGhoul2Model)(CGhoul2Info_v &ghlInfo, const int modelIndex); - int (*g2_InitGhoul2Model)(CGhoul2Info_v &ghoul2, const char *fileName, int, qhandle_t customSkin, qhandle_t customShader, int modelFlags, int lodBias); void (*g2_CleanGhoul2Models)(CGhoul2Info_v &ghoul2); int (*g2_AddBolt)(CGhoul2Info *ghlInfo, const char *boneName); qboolean (*g2_GetBoltMatrix)(CGhoul2Info_v &ghoul2, const int modelIndex, const int boltIndex, mdxaBone_t *matrix,