client: fix build

This commit is contained in:
Alibek Omarov 2020-09-01 18:07:37 +03:00
parent 78181ba33d
commit fbd76d6d68
43 changed files with 2260 additions and 99 deletions

View File

@ -22,8 +22,6 @@
#include "gl_local.h" #include "gl_local.h"
#include "gl_studio.h" #include "gl_studio.h"
#define DLLEXPORT __declspec( dllexport )
void Game_AddObjects( void ); void Game_AddObjects( void );
extern vec3_t v_origin; extern vec3_t v_origin;

View File

@ -6,6 +6,6 @@
#ifndef _GETFONT_H #ifndef _GETFONT_H
#define _GETFONT_H #define _GETFONT_H
Font* FontFromMessage(const char* &ptext); Font* FontFromMessage(const char* ptext);
#endif // _GETFONT_H #endif // _GETFONT_H

View File

@ -427,7 +427,7 @@ int CHudHealth::DrawDamage(float flTime)
// check for bits that should be expired // check for bits that should be expired
for ( i = 0; i < NUM_DMG_TYPES; i++ ) for (int i = 0; i < NUM_DMG_TYPES; i++ )
{ {
DAMAGE_IMAGE *pdmg = &m_dmg[i]; DAMAGE_IMAGE *pdmg = &m_dmg[i];

View File

@ -36,7 +36,7 @@
#include "studio.h" #include "studio.h"
#include "demo.h" #include "demo.h"
#include "demo_api.h" #include "demo_api.h"
#include "vgui_scorepanel.h" #include "vgui_ScorePanel.h"
#include "gl_local.h" // buz #include "gl_local.h" // buz
#include "r_studioint.h" #include "r_studioint.h"
@ -708,7 +708,7 @@ void CHud :: VidInit( void )
p = m_pSpriteList; p = m_pSpriteList;
int index = 0; int index = 0;
for ( j = 0; j < m_iSpriteCountAllRes; j++ ) for ( int j = 0; j < m_iSpriteCountAllRes; j++ )
{ {
if ( p->iRes == m_iRes ) if ( p->iRes == m_iRes )
{ {

View File

@ -158,7 +158,7 @@ int CHud :: Redraw( float flTime, int intermission )
m_fOldTime = m_flTime; // save time of previous redraw m_fOldTime = m_flTime; // save time of previous redraw
m_flTime = flTime; m_flTime = flTime;
m_flTimeDelta = (double)m_flTime - m_fOldTime; m_flTimeDelta = (double)m_flTime - m_fOldTime;
static m_flShotTime = 0; static int m_flShotTime = 0;
#if 0 #if 0
// g-cont. disabled for users request // g-cont. disabled for users request
@ -359,7 +359,8 @@ int CHud :: DrawHudNumberString( int xpos, int ypos, int iMinX, int iNumber, int
int CHud :: DrawHudStringReverse( int xpos, int ypos, int iMinX, char *szString, int r, int g, int b ) int CHud :: DrawHudStringReverse( int xpos, int ypos, int iMinX, char *szString, int r, int g, int b )
{ {
// find the end of the string // find the end of the string
for ( char *szIt = szString; *szIt != 0; szIt++ ) char *szIt;
for ( szIt = szString; *szIt != 0; szIt++ )
{ // we should count the length? { // we should count the length?
} }

View File

@ -12,7 +12,11 @@
#include "hud_servers.h" #include "hud_servers.h"
#include "net_api.h" #include "net_api.h"
#include <string.h> #include <string.h>
#if XASH_WIN32
#include <winsock.h> #include <winsock.h>
#else
#include <arpa/inet.h>
#endif
static int context_id; static int context_id;
@ -599,7 +603,7 @@ int CompareField( CHudServers::server_t *p1, CHudServers::server_t *p2, const ch
return stricmp( sz1, sz2 ); return stricmp( sz1, sz2 );
} }
int CALLBACK ServerListCompareFunc( CHudServers::server_t *p1, CHudServers::server_t *p2, const char *fieldname ) int ServerListCompareFunc( CHudServers::server_t *p1, CHudServers::server_t *p2, const char *fieldname )
{ {
if (!p1 || !p2) // No meaningful comparison if (!p1 || !p2) // No meaningful comparison
return 0; return 0;
@ -750,7 +754,7 @@ int CHudServers::LoadMasterAddresses( int maxservers, int *count, netadr_t *padr
char szMaster[ 256 ]; char szMaster[ 256 ];
char szMasterFile[256]; char szMasterFile[256];
char *pbuffer = NULL; char *pbuffer = NULL;
char *pstart = NULL ; const char *pstart = NULL ;
netadr_t adr; netadr_t adr;
char szAdr[64]; char szAdr[64];
int nPort; int nPort;

1628
cl_dll/input_goldsource.cpp Normal file

File diff suppressed because it is too large Load Diff

93
cl_dll/input_mouse.cpp Normal file
View File

@ -0,0 +1,93 @@
#include "input_mouse.h"
#include "exportdef.h"
#include "hud.h"
#include "cl_util.h"
// shared between backends
Vector dead_viewangles(0, 0, 0);
cvar_t *sensitivity;
cvar_t *in_joystick;
FWGSInput fwgsInput;
#ifdef SUPPORT_GOLDSOURCE_INPUT
GoldSourceInput goldSourceInput;
AbstractInput* currentInput = &goldSourceInput;
#else
AbstractInput* currentInput = &fwgsInput;
#endif
extern "C" void DLLEXPORT IN_ClientMoveEvent( float forwardmove, float sidemove )
{
currentInput->IN_ClientMoveEvent(forwardmove, sidemove);
}
extern "C" void DLLEXPORT IN_ClientLookEvent( float relyaw, float relpitch )
{
currentInput->IN_ClientLookEvent(relyaw, relpitch);
}
void IN_Move( float frametime, usercmd_t *cmd )
{
currentInput->IN_Move(frametime, cmd);
}
extern "C" void DLLEXPORT IN_MouseEvent( int mstate )
{
currentInput->IN_MouseEvent(mstate);
}
extern "C" void DLLEXPORT IN_ClearStates( void )
{
currentInput->IN_ClearStates();
}
extern "C" void DLLEXPORT IN_ActivateMouse( void )
{
currentInput->IN_ActivateMouse();
}
extern "C" void DLLEXPORT IN_DeactivateMouse( void )
{
currentInput->IN_DeactivateMouse();
}
extern "C" void DLLEXPORT IN_Accumulate( void )
{
currentInput->IN_Accumulate();
}
/*
===========
IN_ResetMouse
===========
*/
void IN_ResetMouse( void )
{
gEngfuncs.pfnSetMousePos( gEngfuncs.GetWindowCenterX(), gEngfuncs.GetWindowCenterY() );
}
void IN_Commands( void )
{
currentInput->IN_Commands();
}
void IN_Shutdown( void )
{
currentInput->IN_Shutdown();
}
void IN_Init( void )
{
#ifdef SUPPORT_GOLDSOURCE_INPUT
if (IsXashFWGS()) {
gEngfuncs.Con_Printf( "FWGS Xash3D input is in use\n" );
currentInput = &fwgsInput;
} else {
gEngfuncs.Con_Printf( "GoldSource input is in use\n" );
currentInput = &goldSourceInput;
}
#else
currentInput = &fwgsInput;
#endif
currentInput->IN_Init();
}

79
cl_dll/input_mouse.h Normal file
View File

@ -0,0 +1,79 @@
#pragma once
#ifndef INPUT_MOUSE_H
#define INPUT_MOUSE_H
#include "cl_dll.h"
#include "usercmd.h"
#include "in_defs.h"
class AbstractInput
{
public:
virtual void IN_ClientMoveEvent( float forwardmove, float sidemove ) = 0;
virtual void IN_ClientLookEvent( float relyaw, float relpitch ) = 0;
virtual void IN_Move( float frametime, usercmd_t *cmd ) = 0;
virtual void IN_MouseEvent( int mstate ) = 0;
virtual void IN_ClearStates( void ) = 0;
virtual void IN_ActivateMouse( void ) = 0;
virtual void IN_DeactivateMouse( void ) = 0;
virtual void IN_Accumulate( void ) = 0;
virtual void IN_Commands( void ) = 0;
virtual void IN_Shutdown( void ) = 0;
virtual void IN_Init( void ) = 0;
};
class FWGSInput : public AbstractInput
{
public:
virtual void IN_ClientMoveEvent( float forwardmove, float sidemove );
virtual void IN_ClientLookEvent( float relyaw, float relpitch );
virtual void IN_Move( float frametime, usercmd_t *cmd );
virtual void IN_MouseEvent( int mstate );
virtual void IN_ClearStates( void );
virtual void IN_ActivateMouse( void );
virtual void IN_DeactivateMouse( void );
virtual void IN_Accumulate( void );
virtual void IN_Commands( void );
virtual void IN_Shutdown( void );
virtual void IN_Init( void );
protected:
float ac_forwardmove;
float ac_sidemove;
int ac_movecount;
float rel_yaw;
float rel_pitch;
};
// No need for goldsource input support on the platforms that are not supported by GoldSource.
#if defined(GOLDSOURCE_SUPPORT) && (defined(_WIN32) || defined(__linux__) || defined(__APPLE__)) && (defined(__i386) || defined(_M_IX86))
#define SUPPORT_GOLDSOURCE_INPUT
class GoldSourceInput : public AbstractInput
{
public:
virtual void IN_ClientMoveEvent( float forwardmove, float sidemove ) {}
virtual void IN_ClientLookEvent( float relyaw, float relpitch ) {}
virtual void IN_Move( float frametime, usercmd_t *cmd );
virtual void IN_MouseEvent( int mstate );
virtual void IN_ClearStates( void );
virtual void IN_ActivateMouse( void );
virtual void IN_DeactivateMouse( void );
virtual void IN_Accumulate( void );
virtual void IN_Commands( void );
virtual void IN_Shutdown( void );
virtual void IN_Init( void );
protected:
void IN_GetMouseDelta( int *pOutX, int *pOutY);
void IN_MouseMove ( float frametime, usercmd_t *cmd);
void IN_StartupMouse (void);
int mouse_buttons;
int mouse_oldbuttonstate;
POINT current_pos;
int old_mouse_x, old_mouse_y, mx_accum, my_accum;
int mouseinitialized;
void* sdl2Lib;
};
#endif
#endif

293
cl_dll/input_xash3d.cpp Normal file
View File

@ -0,0 +1,293 @@
#include "hud.h"
#include "usercmd.h"
#include "cvardef.h"
#include "kbutton.h"
#include "keydefs.h"
#include "input_mouse.h"
extern cvar_t *sensitivity;
extern cvar_t *in_joystick;
extern kbutton_t in_strafe;
extern kbutton_t in_mlook;
extern kbutton_t in_speed;
extern kbutton_t in_jlook;
extern kbutton_t in_forward;
extern kbutton_t in_back;
extern kbutton_t in_moveleft;
extern kbutton_t in_moveright;
extern cvar_t *m_pitch;
extern cvar_t *m_yaw;
extern cvar_t *m_forward;
extern cvar_t *m_side;
extern cvar_t *lookstrafe;
extern cvar_t *lookspring;
extern cvar_t *cl_pitchdown;
extern cvar_t *cl_pitchup;
extern cvar_t *cl_yawspeed;
extern cvar_t *cl_sidespeed;
extern cvar_t *cl_forwardspeed;
extern cvar_t *cl_pitchspeed;
extern cvar_t *cl_movespeedkey;
cvar_t *cl_laddermode;
#define F 1U<<0 // Forward
#define B 1U<<1 // Back
#define L 1U<<2 // Left
#define R 1U<<3 // Right
#define T 1U<<4 // Forward stop
#define S 1U<<5 // Side stop
#define BUTTON_DOWN 1
#define IMPULSE_DOWN 2
#define IMPULSE_UP 4
int CL_IsDead( void );
int g_iVisibleMouse = 0;
extern int iMouseInUse;
extern Vector dead_viewangles;
void IN_ToggleButtons( float forwardmove, float sidemove )
{
static unsigned int moveflags = T | S;
if( forwardmove )
moveflags &= ~T;
else
{
//if( in_forward.state || in_back.state ) gEngfuncs.Con_Printf("Buttons pressed f%d b%d\n", in_forward.state, in_back.state);
if( !( moveflags & T ) )
{
//IN_ForwardUp();
//IN_BackUp();
//gEngfuncs.Con_Printf("Reset forwardmove state f%d b%d\n", in_forward.state, in_back.state);
in_forward.state &= ~BUTTON_DOWN;
in_back.state &= ~BUTTON_DOWN;
moveflags |= T;
}
}
if( sidemove )
moveflags &= ~S;
else
{
//gEngfuncs.Con_Printf("l%d r%d\n", in_moveleft.state, in_moveright.state);
//if( in_moveleft.state || in_moveright.state ) gEngfuncs.Con_Printf("Buttons pressed l%d r%d\n", in_moveleft.state, in_moveright.state);
if( !( moveflags & S ) )
{
//IN_MoverightUp();
//IN_MoveleftUp();
//gEngfuncs.Con_Printf("Reset sidemove state f%d b%d\n", in_moveleft.state, in_moveright.state);
in_moveleft.state &= ~BUTTON_DOWN;
in_moveright.state &= ~BUTTON_DOWN;
moveflags |= S;
}
}
if( forwardmove > 0.7f && !( moveflags & F ) )
{
moveflags |= F;
in_forward.state |= BUTTON_DOWN;
}
if( forwardmove < 0.7f && ( moveflags & F ) )
{
moveflags &= ~F;
in_forward.state &= ~BUTTON_DOWN;
}
if( forwardmove < -0.7f && !( moveflags & B ) )
{
moveflags |= B;
in_back.state |= BUTTON_DOWN;
}
if( forwardmove > -0.7f && ( moveflags & B ) )
{
moveflags &= ~B;
in_back.state &= ~BUTTON_DOWN;
}
if( sidemove > 0.9f && !( moveflags & R ) )
{
moveflags |= R;
in_moveright.state |= BUTTON_DOWN;
}
if( sidemove < 0.9f && ( moveflags & R ) )
{
moveflags &= ~R;
in_moveright.state &= ~BUTTON_DOWN;
}
if( sidemove < -0.9f && !( moveflags & L ) )
{
moveflags |= L;
in_moveleft.state |= BUTTON_DOWN;
}
if( sidemove > -0.9f && ( moveflags & L ) )
{
moveflags &= ~L;
in_moveleft.state &= ~BUTTON_DOWN;
}
}
void FWGSInput::IN_ClientMoveEvent( float forwardmove, float sidemove )
{
//gEngfuncs.Con_Printf("IN_MoveEvent\n");
ac_forwardmove += forwardmove;
ac_sidemove += sidemove;
ac_movecount++;
}
void FWGSInput::IN_ClientLookEvent( float relyaw, float relpitch )
{
rel_yaw += relyaw;
rel_pitch += relpitch;
}
// Rotate camera and add move values to usercmd
void FWGSInput::IN_Move( float frametime, usercmd_t *cmd )
{
Vector viewangles;
bool fLadder = false;
if( gHUD.m_iIntermission )
return; // we can't move during intermission
if( cl_laddermode->value != 2 )
{
cl_entity_t *pplayer = gEngfuncs.GetLocalPlayer();
if( pplayer )
fLadder = pplayer->curstate.movetype == MOVETYPE_FLY;
}
//if(ac_forwardmove || ac_sidemove)
//gEngfuncs.Con_Printf("Move: %f %f %f %f\n", ac_forwardmove, ac_sidemove, rel_pitch, rel_yaw);
#if 0
if( in_mlook.state & 1 )
{
V_StopPitchDrift();
}
#endif
if( CL_IsDead() )
{
viewangles = dead_viewangles; // HACKHACK: see below
}
else
{
gEngfuncs.GetViewAngles( viewangles );
}
if( gHUD.GetSensitivity() != 0 )
{
rel_yaw *= gHUD.GetSensitivity();
rel_pitch *= gHUD.GetSensitivity();
}
else
{
rel_yaw *= sensitivity->value;
rel_pitch *= sensitivity->value;
}
viewangles[YAW] += rel_yaw;
if( fLadder )
{
if( cl_laddermode->value == 1 )
viewangles[YAW] -= ac_sidemove * 5;
ac_sidemove = 0;
}
#if 0
if( gHUD.m_MOTD.m_bShow )
gHUD.m_MOTD.scroll += rel_pitch;
else
#endif
viewangles[PITCH] += rel_pitch;
if( viewangles[PITCH] > cl_pitchdown->value )
viewangles[PITCH] = cl_pitchdown->value;
if( viewangles[PITCH] < -cl_pitchup->value )
viewangles[PITCH] = -cl_pitchup->value;
// HACKHACK: change viewangles directly in viewcode,
// so viewangles when player is dead will not be changed on server
if( !CL_IsDead() )
{
gEngfuncs.SetViewAngles( viewangles );
}
dead_viewangles = viewangles; // keep them actual
if( ac_movecount )
{
IN_ToggleButtons( ac_forwardmove / ac_movecount, ac_sidemove / ac_movecount );
if( ac_forwardmove )
cmd->forwardmove = ac_forwardmove * cl_forwardspeed->value / ac_movecount;
if( ac_sidemove )
cmd->sidemove = ac_sidemove * cl_sidespeed->value / ac_movecount;
if( ( in_speed.state & 1 ) && ( ac_sidemove || ac_forwardmove ) )
{
cmd->forwardmove *= cl_movespeedkey->value;
cmd->sidemove *= cl_movespeedkey->value;
}
}
ac_sidemove = ac_forwardmove = rel_pitch = rel_yaw = 0;
ac_movecount = 0;
}
void FWGSInput::IN_MouseEvent( int mstate )
{
static int mouse_oldbuttonstate;
if ( iMouseInUse || g_iVisibleMouse )
return;
// perform button actions
for( int i = 0; i < 5; i++ )
{
if( ( mstate & ( 1 << i ) ) && !( mouse_oldbuttonstate & ( 1 << i ) ) )
{
gEngfuncs.Key_Event( K_MOUSE1 + i, 1 );
}
if( !( mstate & ( 1 << i ) ) && ( mouse_oldbuttonstate & ( 1 << i ) ) )
{
gEngfuncs.Key_Event( K_MOUSE1 + i, 0 );
}
}
mouse_oldbuttonstate = mstate;
}
// Stubs
void FWGSInput::IN_ClearStates( void )
{
//gEngfuncs.Con_Printf( "IN_ClearStates\n" );
}
void FWGSInput::IN_ActivateMouse( void )
{
//gEngfuncs.Con_Printf( "IN_ActivateMouse\n" );
}
void FWGSInput::IN_DeactivateMouse( void )
{
//gEngfuncs.Con_Printf( "IN_DeactivateMouse\n" );
}
void FWGSInput::IN_Accumulate( void )
{
//gEngfuncs.Con_Printf( "IN_Accumulate\n" );
}
void FWGSInput::IN_Commands( void )
{
//gEngfuncs.Con_Printf( "IN_Commands\n" );
}
void FWGSInput::IN_Shutdown( void )
{
}
// Register cvars and reset data
void FWGSInput::IN_Init( void )
{
sensitivity = gEngfuncs.pfnRegisterVariable( "sensitivity", "3", FCVAR_ARCHIVE );
in_joystick = gEngfuncs.pfnRegisterVariable( "joystick", "0", FCVAR_ARCHIVE );
cl_laddermode = gEngfuncs.pfnRegisterVariable( "cl_laddermode", "2", FCVAR_ARCHIVE );
ac_forwardmove = ac_sidemove = rel_yaw = rel_pitch = 0;
}

View File

@ -929,7 +929,9 @@ void CParticleSystem :: DrawSystem( void )
{ {
if( pParticle->m_fSize <= 0 || !ParticleIsVisible( pParticle )) if( pParticle->m_fSize <= 0 || !ParticleIsVisible( pParticle ))
continue; continue;
DrawParticle( pParticle, GetVLeft(), GetVUp( )); Vector vLeft = GetVLeft();
Vector vUp = GetVUp();
DrawParticle( pParticle, vLeft, vUp);
} }
} }
@ -1068,7 +1070,8 @@ void CParticleSystem :: DrawParticle( CParticle *part, const vec3_t &right, cons
point[3] = origin + up * -fSinSize + right * fCosSize; point[3] = origin + up * -fSinSize + right * fCosSize;
ClearBounds( absmin, absmax ); ClearBounds( absmin, absmax );
for( int i = 0; i < 4; i++ ) int i;
for( i = 0; i < 4; i++ )
AddPointToBounds( point[i], absmin, absmax ); AddPointToBounds( point[i], absmin, absmax );
int iContents = CONTENTS_NONE; int iContents = CONTENTS_NONE;

View File

@ -13,6 +13,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
*/ */
#include <stdarg.h>
#include "hud.h" #include "hud.h"
#include "cl_util.h" #include "cl_util.h"
#include "const.h" #include "const.h"

View File

@ -211,13 +211,13 @@ void CL_BuildCubemaps_f( void )
{ {
mcubemap_t *m = &world->defaultCubemap; mcubemap_t *m = &world->defaultCubemap;
FREE_TEXTURE( m->texture ); FREE_TEXTURE( m->texture );
m->valid = m->texture = false; m->valid = ( m->texture = false );
for( int i = 0; i < world->num_cubemaps; i++ ) for( int i = 0; i < world->num_cubemaps; i++ )
{ {
mcubemap_t *m = &world->cubemaps[i]; mcubemap_t *m = &world->cubemaps[i];
FREE_TEXTURE( m->texture ); FREE_TEXTURE( m->texture );
m->valid = m->texture = false; m->valid = ( m->texture = false );
} }
if( FBitSet( world->features, WORLD_HAS_SKYBOX )) if( FBitSet( world->features, WORLD_HAS_SKYBOX ))

View File

@ -422,7 +422,7 @@ static void GL_DrawBilateralFilter( word hProgram, int pass )
case UT_COLORMAP: case UT_COLORMAP:
if( pass == BILATERAL_PASS0 ) if( pass == BILATERAL_PASS0 )
u->SetValue( tr.fbo_light.GetTexture() ); u->SetValue( tr.fbo_light.GetTexture() );
else if( pass = BILATERAL_PASS1 ) else if( pass == BILATERAL_PASS1 )
u->SetValue( tr.fbo_filter.GetTexture() ); u->SetValue( tr.fbo_filter.GetTexture() );
else u->SetValue( tr.defscene_fbo->colortarget[0] ); else u->SetValue( tr.defscene_fbo->colortarget[0] );
break; break;
@ -435,7 +435,7 @@ static void GL_DrawBilateralFilter( word hProgram, int pass )
case UT_SCREENSIZEINV: case UT_SCREENSIZEINV:
if( pass == BILATERAL_PASS0 ) if( pass == BILATERAL_PASS0 )
u->SetValue( 1.0f / (float)glState.width, 0.0f ); u->SetValue( 1.0f / (float)glState.width, 0.0f );
else if( pass = BILATERAL_PASS1 ) else if( pass == BILATERAL_PASS1 )
u->SetValue( 0.0f, 1.0f / (float)glState.height ); u->SetValue( 0.0f, 1.0f / (float)glState.height );
else u->SetValue( 1.0f / (float)glState.width, 1.0f / (float)glState.height ); else u->SetValue( 1.0f / (float)glState.width, 1.0f / (float)glState.height );
break; break;

View File

@ -751,7 +751,7 @@ get_next_light:
int ignored = -1; int ignored = -1;
int light = 255; int light = 255;
for( i = 0; i < count; i++ ) for( int i = 0; i < count; i++ )
{ {
if( indexes[i][0] == -1.0f ) if( indexes[i][0] == -1.0f )
continue; continue;
@ -768,6 +768,7 @@ get_next_light:
if( ignored == -1 ) if( ignored == -1 )
return; return;
int i;
for( i = 0; i < (int)cv_deferred_maxlights->value && lights[i] != 255; i++ ); for( i = 0; i < (int)cv_deferred_maxlights->value && lights[i] != 255; i++ );
if( i < (int)cv_deferred_maxlights->value ) if( i < (int)cv_deferred_maxlights->value )
lights[i] = light; // nearest light for surf lights[i] = light; // nearest light for surf

View File

@ -13,8 +13,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
*/ */
#define EXTERN #define APIENTRY_LINKAGE
#include "hud.h" #include "hud.h"
#include "cl_util.h" #include "cl_util.h"
#include "gl_local.h" #include "gl_local.h"
@ -355,7 +354,7 @@ DebugCallback
For ARB_debug_output For ARB_debug_output
======================== ========================
*/ */
static void CALLBACK GL_DebugOutput( GLuint source, GLuint type, GLuint id, GLuint severity, GLint length, const GLcharARB *message, GLvoid *userParam ) static void APIENTRY GL_DebugOutput( GLuint source, GLuint type, GLuint id, GLuint severity, GLint length, const GLcharARB *message, GLvoid *userParam )
{ {
static char string[8192]; static char string[8192];
char *msg; char *msg;
@ -502,10 +501,10 @@ static void GL_InitExtensions( void )
} }
// get our various GL strings // get our various GL strings
glConfig.vendor_string = pglGetString( GL_VENDOR ); glConfig.vendor_string = (const char*)pglGetString( GL_VENDOR );
glConfig.renderer_string = pglGetString( GL_RENDERER ); glConfig.renderer_string = (const char*)pglGetString( GL_RENDERER );
glConfig.version_string = pglGetString( GL_VERSION ); glConfig.version_string = (const char*)pglGetString( GL_VERSION );
glConfig.extensions_string = pglGetString( GL_EXTENSIONS ); glConfig.extensions_string = (const char*)pglGetString( GL_EXTENSIONS );
if( Q_stristr( glConfig.renderer_string, "geforce" )) if( Q_stristr( glConfig.renderer_string, "geforce" ))
glConfig.hardware_type = GLHW_NVIDIA; glConfig.hardware_type = GLHW_NVIDIA;

View File

@ -1117,7 +1117,8 @@ find or add unique texture for grass
*/ */
byte R_GrassTextureForName( const char *name ) byte R_GrassTextureForName( const char *name )
{ {
for( byte i = 0; i < GRASS_TEXTURES && grasstexs[i].name[0]; i++ ) byte i;
for( i = 0; i < GRASS_TEXTURES && grasstexs[i].name[0]; i++ )
{ {
if( !Q_stricmp( grasstexs[i].name, name )) if( !Q_stricmp( grasstexs[i].name, name ))
return i; // found return i; // found

View File

@ -196,7 +196,7 @@ static int R_ComputeCropBounds( const matrix4x4 &lightViewProjection, Vector bou
} }
// add studio models too // add studio models too
for( i = 0; i < prevRI->frame.solid_meshes.Count(); i++ ) for( int i = 0; i < prevRI->frame.solid_meshes.Count(); i++ )
{ {
if( !R_StudioGetBounds( &prevRI->frame.solid_meshes[i], worldBounds )) if( !R_StudioGetBounds( &prevRI->frame.solid_meshes[i], worldBounds ))
continue; continue;

View File

@ -1137,7 +1137,7 @@ void CStudioModelRenderer :: AddDecalToModel( DecalBuildInfo_t& buildInfo )
float s = 1.0f / (float)ptexture->width; float s = 1.0f / (float)ptexture->width;
float t = 1.0f / (float)ptexture->height; float t = 1.0f / (float)ptexture->height;
while( numVerts = *( ptricmds++ )) while(( numVerts = *( ptricmds++ )))
{ {
bool strip = ( numVerts < 0 ) ? false : true; bool strip = ( numVerts < 0 ) ? false : true;
int vertexState = 0; int vertexState = 0;

View File

@ -146,7 +146,7 @@ check cubemap sides for valid
*/ */
static bool Mod_CheckCubemap( const char *name ) static bool Mod_CheckCubemap( const char *name )
{ {
char *suf[6] = { "px", "nx", "py", "ny", "pz", "nz" }; const char *suf[6] = { "px", "nx", "py", "ny", "pz", "nz" };
int valid_sides = 0; int valid_sides = 0;
char sidename[64]; char sidename[64];
int iCompare; int iCompare;
@ -175,7 +175,7 @@ remove cubemap images from HDD
*/ */
static void Mod_DeleteCubemap( const char *name ) static void Mod_DeleteCubemap( const char *name )
{ {
char *suf[6] = { "px", "nx", "py", "ny", "pz", "nz" }; const char *suf[6] = { "px", "nx", "py", "ny", "pz", "nz" };
char sidename[64]; char sidename[64];
for( int i = 0; i < 6; i++ ) for( int i = 0; i < 6; i++ )
@ -328,7 +328,7 @@ void GL_LoadAndRebuildCubemaps( int refParams )
// bind cubemaps onto world surfaces // bind cubemaps onto world surfaces
// so we don't need to search them again // so we don't need to search them again
for( i = 0; i < worldmodel->numsurfaces; i++ ) for( int i = 0; i < worldmodel->numsurfaces; i++ )
{ {
msurface_t *surf = &worldmodel->surfaces[i]; msurface_t *surf = &worldmodel->surfaces[i];
mextrasurf_t *es = surf->info; mextrasurf_t *es = surf->info;
@ -405,7 +405,7 @@ static void Mod_LoadCubemaps( const byte *base, const dlump_t *l )
cm->size = 4; cm->size = 4;
} }
for( i = 0; i < count; i++, in++, out++ ) for( int i = 0; i < count; i++, in++, out++ )
{ {
// build a cubemap name like enum // build a cubemap name like enum
Q_snprintf( out->name, sizeof( out->name ), "maps/env/%s/cube#%i", world->name, i ); Q_snprintf( out->name, sizeof( out->name ), "maps/env/%s/cube#%i", world->name, i );
@ -965,12 +965,12 @@ Mod_SurfaceCompareBuild
sort faces before lightmap building sort faces before lightmap building
================= =================
*/ */
static int Mod_SurfaceCompareBuild( const unsigned short **a, const unsigned short **b ) static int Mod_SurfaceCompareBuild( const unsigned short *a, const unsigned short *b )
{ {
msurface_t *surf1, *surf2; msurface_t *surf1, *surf2;
surf1 = &worldmodel->surfaces[(unsigned short)*a]; surf1 = &worldmodel->surfaces[*a];
surf2 = &worldmodel->surfaces[(unsigned short)*b]; surf2 = &worldmodel->surfaces[*b];
if( FBitSet( surf1->flags, SURF_DRAWSKY ) && !FBitSet( surf2->flags, SURF_DRAWSKY )) if( FBitSet( surf1->flags, SURF_DRAWSKY ) && !FBitSet( surf2->flags, SURF_DRAWSKY ))
return -1; return -1;
@ -1002,13 +1002,13 @@ Mod_SurfaceCompareInGame
sort faces to reduce shader switches sort faces to reduce shader switches
================= =================
*/ */
static int Mod_SurfaceCompareInGame( const unsigned short **a, const unsigned short **b ) static int Mod_SurfaceCompareInGame( const unsigned short *a, const unsigned short *b )
{ {
msurface_t *surf1, *surf2; msurface_t *surf1, *surf2;
mextrasurf_t *esrf1, *esrf2; mextrasurf_t *esrf1, *esrf2;
surf1 = &worldmodel->surfaces[(unsigned short)*a]; surf1 = &worldmodel->surfaces[*a];
surf2 = &worldmodel->surfaces[(unsigned short)*b]; surf2 = &worldmodel->surfaces[*b];
esrf1 = surf1->info; esrf1 = surf1->info;
esrf2 = surf2->info; esrf2 = surf2->info;

View File

@ -21,8 +21,6 @@
#include "com_model.h" #include "com_model.h"
#include "gl_local.h"// buz #include "gl_local.h"// buz
#define DLLEXPORT __declspec( dllexport )
extern "C" extern "C"
{ {
void DLLEXPORT HUD_DrawNormalTriangles( void ); void DLLEXPORT HUD_DrawNormalTriangles( void );

View File

@ -174,7 +174,8 @@ void CHudSayText :: SayTextPrint( const char *pszBuf, int iBufSize, int clientIn
} }
// find an empty string slot // find an empty string slot
for ( int i = 0; i < MAX_LINES; i++ ) int i;
for ( i = 0; i < MAX_LINES; i++ )
{ {
if ( ! *g_szLineBuffer[i] ) if ( ! *g_szLineBuffer[i] )
break; break;

View File

@ -107,7 +107,8 @@ int CHudStatusIcons::MsgFunc_StatusIcon( const char *pszName, int iSize, void *p
void CHudStatusIcons::EnableIcon( char *pszIconName, unsigned char red, unsigned char green, unsigned char blue ) void CHudStatusIcons::EnableIcon( char *pszIconName, unsigned char red, unsigned char green, unsigned char blue )
{ {
// check to see if the sprite is in the current list // check to see if the sprite is in the current list
for ( int i = 0; i < MAX_ICONSPRITES; i++ ) int i;
for ( i = 0; i < MAX_ICONSPRITES; i++ )
{ {
if ( !stricmp( m_IconList[i].szSpriteName, pszIconName ) ) if ( !stricmp( m_IconList[i].szSpriteName, pszIconName ) )
break; break;
@ -155,7 +156,7 @@ void CHudStatusIcons::DisableIcon( char *pszIconName )
if ( !stricmp( m_IconList[i].szSpriteName, pszIconName ) ) if ( !stricmp( m_IconList[i].szSpriteName, pszIconName ) )
{ {
// clear the item from the list // clear the item from the list
memset( &m_IconList[i], 0, sizeof icon_sprite_t ); memset( &m_IconList[i], 0, sizeof( icon_sprite_t ));
return; return;
} }
} }

View File

@ -18,9 +18,10 @@
// implementation of class-less helper functions // implementation of class-less helper functions
// //
#include "STDIO.H" #include <stdio.h>
#include "STDLIB.H" #include <stdlib.h>
#include "MATH.H" #include <math.h>
#include <stdarg.h>
#include "hud.h" #include "hud.h"
#include "cl_util.h" #include "cl_util.h"
@ -43,7 +44,7 @@ pfnAlertMessage
============= =============
*/ */
void ALERT( ALERT_TYPE level, char *szFmt, ... ) void ALERT( ALERT_TYPE level, const char *szFmt, ... )
{ {
char buffer[2048]; // must support > 1k messages char buffer[2048]; // must support > 1k messages
va_list args; va_list args;

View File

@ -32,7 +32,7 @@
#include "vgui_int.h" #include "vgui_int.h"
#include "vgui_TeamFortressViewport.h" #include "vgui_TeamFortressViewport.h"
#include "vgui_ServerBrowser.h" #include "vgui_ServerBrowser.h"
#include "../game_shared/vgui_LoadTGA.h" #include "../game_shared/vgui_loadtga.h"
// Arrow filenames // Arrow filenames
char *sArrowFilenames[] = char *sArrowFilenames[] =

View File

@ -303,7 +303,8 @@ void ScorePanel::Update()
void ScorePanel::SortTeams() void ScorePanel::SortTeams()
{ {
// clear out team scores // clear out team scores
for ( int i = 1; i <= m_iNumTeams; i++ ) int i;
for ( i = 1; i <= m_iNumTeams; i++ )
{ {
if ( !g_TeamInfo[i].scores_overriden ) if ( !g_TeamInfo[i].scores_overriden )
g_TeamInfo[i].frags = g_TeamInfo[i].deaths = 0; g_TeamInfo[i].frags = g_TeamInfo[i].deaths = 0;
@ -320,7 +321,8 @@ void ScorePanel::SortTeams()
continue; // skip over players who are not in a team continue; // skip over players who are not in a team
// find what team this player is in // find what team this player is in
for ( int j = 1; j <= m_iNumTeams; j++ ) int j;
for ( j = 1; j <= m_iNumTeams; j++ )
{ {
if ( !stricmp( g_PlayerExtraInfo[i].teamname, g_TeamInfo[j].name ) ) if ( !stricmp( g_PlayerExtraInfo[i].teamname, g_TeamInfo[j].name ) )
break; break;
@ -462,7 +464,8 @@ void ScorePanel::SortPlayers( int iTeam, char *team )
void ScorePanel::RebuildTeams() void ScorePanel::RebuildTeams()
{ {
// clear out player counts from teams // clear out player counts from teams
for ( int i = 1; i <= m_iNumTeams; i++ ) int i;
for ( i = 1; i <= m_iNumTeams; i++ )
{ {
g_TeamInfo[i].players = 0; g_TeamInfo[i].players = 0;
} }
@ -479,7 +482,8 @@ void ScorePanel::RebuildTeams()
continue; // skip over players who are not in a team continue; // skip over players who are not in a team
// is this player in an existing team? // is this player in an existing team?
for ( int j = 1; j <= m_iNumTeams; j++ ) int j;
for ( j = 1; j <= m_iNumTeams; j++ )
{ {
if ( g_TeamInfo[j].name[0] == '\0' ) if ( g_TeamInfo[j].name[0] == '\0' )
break; break;
@ -541,7 +545,8 @@ void ScorePanel::FillGrid()
bool bNextRowIsGap = false; bool bNextRowIsGap = false;
for(int row=0; row < NUM_ROWS; row++) int row;
for(row=0; row < NUM_ROWS; row++)
{ {
CGrid *pGridRow = &m_PlayerGrids[row]; CGrid *pGridRow = &m_PlayerGrids[row];
pGridRow->SetRowUnderline(0, false, 0, 0, 0, 0, 0); pGridRow->SetRowUnderline(0, false, 0, 0, 0, 0, 0);

View File

@ -1070,11 +1070,11 @@ try
pfile = gEngfuncs.COM_ParseFile(pfile, token); pfile = gEngfuncs.COM_ParseFile(pfile, token);
} }
} }
catch( CException *e ) catch( ... /* CException *e */ )
{ {
e; /*e;
//e->Delete(); //e->Delete();
e = NULL; e = NULL;*/
m_iInitialized = false; m_iInitialized = false;
return newIndex; return newIndex;
} }
@ -2366,7 +2366,8 @@ int TeamFortressViewport::MsgFunc_TeamScore( const char *pszName, int iSize, voi
char *TeamName = READ_STRING(); char *TeamName = READ_STRING();
// find the team matching the name // find the team matching the name
for ( int i = 1; i <= m_pScoreBoard->m_iNumTeams; i++ ) int i;
for ( i = 1; i <= m_pScoreBoard->m_iNumTeams; i++ )
{ {
if ( !stricmp( TeamName, g_TeamInfo[i].name ) ) if ( !stricmp( TeamName, g_TeamInfo[i].name ) )
break; break;

View File

@ -684,14 +684,14 @@ protected:
char m_pszCommand[MAX_COMMAND_SIZE]; char m_pszCommand[MAX_COMMAND_SIZE];
int m_iCloseVGUIMenu; int m_iCloseVGUIMenu;
public: public:
CMenuHandler_StringCommand( char *pszCommand ) CMenuHandler_StringCommand( const char *pszCommand )
{ {
strncpy( m_pszCommand, pszCommand, MAX_COMMAND_SIZE); strncpy( m_pszCommand, pszCommand, MAX_COMMAND_SIZE);
m_pszCommand[MAX_COMMAND_SIZE-1] = '\0'; m_pszCommand[MAX_COMMAND_SIZE-1] = '\0';
m_iCloseVGUIMenu = false; m_iCloseVGUIMenu = false;
} }
CMenuHandler_StringCommand( char *pszCommand, int iClose ) CMenuHandler_StringCommand( const char *pszCommand, int iClose )
{ {
strncpy( m_pszCommand, pszCommand, MAX_COMMAND_SIZE); strncpy( m_pszCommand, pszCommand, MAX_COMMAND_SIZE);
m_pszCommand[MAX_COMMAND_SIZE-1] = '\0'; m_pszCommand[MAX_COMMAND_SIZE-1] = '\0';
@ -715,11 +715,11 @@ class CMenuHandler_StringCommandWatch : public CMenuHandler_StringCommand
{ {
private: private:
public: public:
CMenuHandler_StringCommandWatch( char *pszCommand ) : CMenuHandler_StringCommand( pszCommand ) CMenuHandler_StringCommandWatch( const char *pszCommand ) : CMenuHandler_StringCommand( pszCommand )
{ {
} }
CMenuHandler_StringCommandWatch( char *pszCommand, int iClose ) : CMenuHandler_StringCommand( pszCommand, iClose ) CMenuHandler_StringCommandWatch( const char *pszCommand, int iClose ) : CMenuHandler_StringCommand( pszCommand, iClose )
{ {
} }
@ -745,11 +745,11 @@ class CMenuHandler_StringCommandClassSelect : public CMenuHandler_StringCommand
{ {
private: private:
public: public:
CMenuHandler_StringCommandClassSelect( char *pszCommand ) : CMenuHandler_StringCommand( pszCommand ) CMenuHandler_StringCommandClassSelect( const char *pszCommand ) : CMenuHandler_StringCommand( pszCommand )
{ {
} }
CMenuHandler_StringCommandClassSelect( char *pszCommand, int iClose ) : CMenuHandler_StringCommand( pszCommand, iClose ) CMenuHandler_StringCommandClassSelect( const char *pszCommand, int iClose ) : CMenuHandler_StringCommand( pszCommand, iClose )
{ {
} }

View File

@ -50,7 +50,7 @@ void CRadioIcon::Initialize()
CRadioIcon::CRadioIcon() : Panel(0, 0, 10, 10) CRadioIcon::CRadioIcon() : Panel(0, 0, 10, 10)
{ {
if( m_pSpeakerBitmap = vgui_LoadTGANoInvertAlpha("gfx/vgui/speaker4.tga" ) ) if(( m_pSpeakerBitmap = vgui_LoadTGANoInvertAlpha("gfx/vgui/speaker4.tga" ) ))
m_pSpeakerBitmap->setColor( Color(255,255,255,1) ); m_pSpeakerBitmap->setColor( Color(255,255,255,1) );
else else
gEngfuncs.Con_Printf("Cannot load gfx/vgui/speaker4.tga!\n"); gEngfuncs.Con_Printf("Cannot load gfx/vgui/speaker4.tga!\n");

View File

@ -7,9 +7,7 @@
using namespace vgui; using namespace vgui;
#include "vgui_shadowtext.h" #include "vgui_shadowtext.h"
#include "getfont.h"
Font* FontFromMessage(const char* &ptext);
class CScreenMessage : public ShadowTextPanel class CScreenMessage : public ShadowTextPanel
{ {

View File

@ -30,9 +30,6 @@ void ShowTip( client_textmessage_t *tempMessage )
gEngfuncs.Con_Printf("Tips error: m_pTips or ViewPort is not constructed!\n"); gEngfuncs.Con_Printf("Tips error: m_pTips or ViewPort is not constructed!\n");
} }
Font* FontFromMessage(const char* &ptext);
void CTips::Initialize() void CTips::Initialize()
{ {
setVisible(false); setVisible(false);

View File

@ -66,6 +66,7 @@ GNU General Public License for more details.
#define FreeLibrary( x ) dlclose( x ) #define FreeLibrary( x ) dlclose( x )
#define tell( a ) lseek(a, 0, SEEK_CUR) #define tell( a ) lseek(a, 0, SEEK_CUR)
#define HAVE_DUP #define HAVE_DUP
#define _aligned_malloc( x, y ) aligned_alloc( y, x ) // man 3 posix_memalign
#endif #endif
#if XASH_DOS4GW #if XASH_DOS4GW
@ -152,6 +153,14 @@ GNU General Public License for more details.
#include <string.h> #include <string.h>
#include <limits.h> #include <limits.h>
#if !defined MAX_PATH
#define MAX_PATH 4096 // 4k ought to be enough for anybody
#endif
#if __cplusplus >= 2011L
#define COMPILE_TIME_ASSERT static_assert
#endif
#if defined XASH_SDL && !defined REF_DLL #if defined XASH_SDL && !defined REF_DLL
#include <SDL.h> #include <SDL.h>
#endif #endif

View File

@ -96,6 +96,21 @@ void VectorAngles( const Vector &forward, Vector &angles );
void VectorAngles2( const Vector &forward, Vector &angles ); void VectorAngles2( const Vector &forward, Vector &angles );
void MakeAxial( float normal[3] ); void MakeAxial( float normal[3] );
// return the smallest power of two >= x.
// returns 0 if x == 0 or x > 0x80000000 (ie numbers that would be negative if x was signed)
// NOTE: the old code took an int, and if you pass in an int of 0x80000000 casted to a uint,
// you'll get 0x80000000, which is correct for uints, instead of 0, which was correct for ints
_forceinline uint SmallestPowerOfTwoGreaterOrEqual( uint x )
{
x -= 1;
x |= x >> 1;
x |= x >> 2;
x |= x >> 4;
x |= x >> 8;
x |= x >> 16;
return x + 1;
}
// Remap a value in the range [A,B] to [C,D]. // Remap a value in the range [A,B] to [C,D].
inline float RemapVal( float val, float A, float B, float C, float D) inline float RemapVal( float val, float A, float B, float C, float D)
{ {

View File

@ -244,7 +244,8 @@ void CUtlBlockMemory<T,I>::ChangeSize( int nBlocks )
if ( !m_pMemory ) if ( !m_pMemory )
{ {
Error( "CUtlBlockMemory overflow!\n" ); printf( "CUtlBlockMemory overflow!\n" );
abort();
} }
// allocate new blocks if growing // allocate new blocks if growing

33
game_shared/virtualfs.cpp Normal file
View File

@ -0,0 +1,33 @@
//=======================================================================
// Copyright (C) XashXT Group 2014
// virtualfs.h - Virtual FileSystem that writes into memory
//=======================================================================
#include "port.h"
#include <stdarg.h>
#include "mathlib.h"
#include "stringlib.h"
#include "virtualfs.h"
size_t CVirtualFS :: Printf( const char *fmt, ... )
{
size_t result;
va_list args;
va_start( args, fmt );
result = VPrintf( fmt, args );
va_end( args );
return result;
}
size_t CVirtualFS :: IPrintf( const char *fmt, ... )
{
size_t result;
va_list args;
va_start( args, fmt );
result = IVPrintf( fmt, args );
va_end( args );
return result;
}

@ -1 +1 @@
Subproject commit f5566261bda70bc5e0f2d277bfbadd2316c18bfb Subproject commit 93573075afe885618ea15831e72d44bdacd65bfb

View File

@ -255,7 +255,7 @@ def configure(conf):
pass pass
else: else:
conf.env.append_unique('DEFINES', ['stricmp=strcasecmp', 'strnicmp=strncasecmp', '_snprintf=snprintf', '_vsnprintf=vsnprintf', '_LINUX', 'LINUX']) conf.env.append_unique('DEFINES', ['stricmp=strcasecmp', 'strnicmp=strncasecmp', '_snprintf=snprintf', '_vsnprintf=vsnprintf', '_LINUX', 'LINUX'])
conf.env.append_unique('CXXFLAGS', ['-Wno-invalid-offsetof', '-fno-rtti', '-fno-exceptions']) conf.env.append_unique('CXXFLAGS', ['-Wno-invalid-offsetof', '-fno-rtti'])
# strip lib from pattern # strip lib from pattern
if conf.env.DEST_OS in ['linux', 'darwin']: if conf.env.DEST_OS in ['linux', 'darwin']: