20 Aug 2010

This commit is contained in:
g-cont 2010-08-20 00:00:00 +04:00 committed by Alibek Omarov
parent 777ee15670
commit 522c5f872e
59 changed files with 1871 additions and 2556 deletions

View File

@ -1,149 +0,0 @@
<html>
<body>
<pre>
<h1>Build Log</h1>
<h3>
--------------------Configuration: client - Win32 Debug--------------------
</h3>
<h3>Command Lines</h3>
Creating temporary file "C:\DOCUME~1\ÌÈØÀ\LOCALS~1\Temp\RSP566.tmp" with contents
[
/nologo /MDd /W3 /Gm /GX /ZI /Od /I "./" /I "../common" /I "global" /I "hud" /I "../game_shared" /I "../dlls" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR"..\temp\client\!debug/" /Fo"..\temp\client\!debug/" /Fd"..\temp\client\!debug/" /FD /c
"D:\Xash3D\src_main\client\global\aurora.cpp"
"D:\Xash3D\src_main\client\global\cl_tent.cpp"
"D:\Xash3D\src_main\client\global\dll_int.cpp"
"D:\Xash3D\src_main\client\global\ev_common.cpp"
"D:\Xash3D\src_main\client\global\ev_hldm.cpp"
"D:\Xash3D\src_main\client\hud\hud.cpp"
"D:\Xash3D\src_main\client\hud\hud_ammo.cpp"
"D:\Xash3D\src_main\client\hud\hud_ammohistory.cpp"
"D:\Xash3D\src_main\client\hud\hud_battery.cpp"
"D:\Xash3D\src_main\client\hud\hud_death.cpp"
"D:\Xash3D\src_main\client\hud\hud_flashlight.cpp"
"D:\Xash3D\src_main\client\hud\hud_geiger.cpp"
"D:\Xash3D\src_main\client\hud\hud_health.cpp"
"D:\Xash3D\src_main\client\hud\hud_icons.cpp"
"D:\Xash3D\src_main\client\hud\hud_menu.cpp"
"D:\Xash3D\src_main\client\hud\hud_message.cpp"
"D:\Xash3D\src_main\client\hud\hud_motd.cpp"
"D:\Xash3D\src_main\client\hud\hud_msg.cpp"
"D:\Xash3D\src_main\client\hud\hud_saytext.cpp"
"D:\Xash3D\src_main\client\hud\hud_scoreboard.cpp"
"D:\Xash3D\src_main\client\hud\hud_statusbar.cpp"
"D:\Xash3D\src_main\client\hud\hud_text.cpp"
"D:\Xash3D\src_main\client\hud\hud_train.cpp"
"D:\Xash3D\src_main\client\global\input.cpp"
"D:\Xash3D\src_main\game_shared\pm_debug.cpp"
"D:\Xash3D\src_main\game_shared\pm_math.cpp"
"D:\Xash3D\src_main\game_shared\pm_shared.cpp"
"D:\Xash3D\src_main\client\global\r_beams.cpp"
"D:\Xash3D\src_main\client\global\r_particle.cpp"
"D:\Xash3D\src_main\client\global\r_tempents.cpp"
"D:\Xash3D\src_main\client\global\r_tracer.cpp"
"D:\Xash3D\src_main\client\global\r_weather.cpp"
"D:\Xash3D\src_main\client\global\studio.cpp"
"D:\Xash3D\src_main\client\global\triapi.cpp"
"D:\Xash3D\src_main\client\global\utils.cpp"
"D:\Xash3D\src_main\client\global\view.cpp"
]
Creating command line "cl.exe @"C:\DOCUME~1\ÌÈØÀ\LOCALS~1\Temp\RSP566.tmp""
Creating temporary file "C:\DOCUME~1\ÌÈØÀ\LOCALS~1\Temp\RSP567.tmp" with contents
[
msvcrtd.lib /nologo /subsystem:windows /dll /incremental:yes /pdb:"..\temp\client\!debug/client.pdb" /debug /machine:I386 /nodefaultlib:"libc.lib" /def:".\client.def" /out:"..\temp\client\!debug/client.dll" /implib:"..\temp\client\!debug/client.lib" /pdbtype:sept /libpath:"..\common\libs"
"\Xash3D\src_main\temp\client\!debug\aurora.obj"
"\Xash3D\src_main\temp\client\!debug\cl_tent.obj"
"\Xash3D\src_main\temp\client\!debug\dll_int.obj"
"\Xash3D\src_main\temp\client\!debug\ev_common.obj"
"\Xash3D\src_main\temp\client\!debug\ev_hldm.obj"
"\Xash3D\src_main\temp\client\!debug\hud.obj"
"\Xash3D\src_main\temp\client\!debug\hud_ammo.obj"
"\Xash3D\src_main\temp\client\!debug\hud_ammohistory.obj"
"\Xash3D\src_main\temp\client\!debug\hud_battery.obj"
"\Xash3D\src_main\temp\client\!debug\hud_death.obj"
"\Xash3D\src_main\temp\client\!debug\hud_flashlight.obj"
"\Xash3D\src_main\temp\client\!debug\hud_geiger.obj"
"\Xash3D\src_main\temp\client\!debug\hud_health.obj"
"\Xash3D\src_main\temp\client\!debug\hud_icons.obj"
"\Xash3D\src_main\temp\client\!debug\hud_menu.obj"
"\Xash3D\src_main\temp\client\!debug\hud_message.obj"
"\Xash3D\src_main\temp\client\!debug\hud_motd.obj"
"\Xash3D\src_main\temp\client\!debug\hud_msg.obj"
"\Xash3D\src_main\temp\client\!debug\hud_saytext.obj"
"\Xash3D\src_main\temp\client\!debug\hud_scoreboard.obj"
"\Xash3D\src_main\temp\client\!debug\hud_statusbar.obj"
"\Xash3D\src_main\temp\client\!debug\hud_text.obj"
"\Xash3D\src_main\temp\client\!debug\hud_train.obj"
"\Xash3D\src_main\temp\client\!debug\input.obj"
"\Xash3D\src_main\temp\client\!debug\pm_debug.obj"
"\Xash3D\src_main\temp\client\!debug\pm_math.obj"
"\Xash3D\src_main\temp\client\!debug\pm_shared.obj"
"\Xash3D\src_main\temp\client\!debug\r_beams.obj"
"\Xash3D\src_main\temp\client\!debug\r_particle.obj"
"\Xash3D\src_main\temp\client\!debug\r_tempents.obj"
"\Xash3D\src_main\temp\client\!debug\r_tracer.obj"
"\Xash3D\src_main\temp\client\!debug\r_weather.obj"
"\Xash3D\src_main\temp\client\!debug\studio.obj"
"\Xash3D\src_main\temp\client\!debug\triapi.obj"
"\Xash3D\src_main\temp\client\!debug\utils.obj"
"\Xash3D\src_main\temp\client\!debug\view.obj"
]
Creating command line "link.exe @"C:\DOCUME~1\ÌÈØÀ\LOCALS~1\Temp\RSP567.tmp""
Creating temporary file "C:\DOCUME~1\ÌÈØÀ\LOCALS~1\Temp\RSP568.bat" with contents
[
@echo off
copy \Xash3D\src_main\temp\client\!debug\client.dll "D:\Xash3D\valve\bin\client.dll"
]
Creating command line ""C:\DOCUME~1\ÌÈØÀ\LOCALS~1\Temp\RSP568.bat""
Compiling...
pm_debug.cpp
pm_shared.cpp
Generating Code...
Compiling...
aurora.cpp
ev_common.cpp
ev_hldm.cpp
input.cpp
r_tempents.cpp
r_weather.cpp
view.cpp
Generating Code...
Skipping... (no relevant changes detected)
cl_tent.cpp
dll_int.cpp
hud.cpp
hud_ammo.cpp
hud_ammohistory.cpp
hud_battery.cpp
hud_death.cpp
hud_flashlight.cpp
hud_geiger.cpp
hud_health.cpp
hud_icons.cpp
hud_menu.cpp
hud_message.cpp
hud_motd.cpp
hud_msg.cpp
hud_saytext.cpp
hud_scoreboard.cpp
hud_statusbar.cpp
hud_text.cpp
hud_train.cpp
pm_math.cpp
r_beams.cpp
r_particle.cpp
r_tracer.cpp
studio.cpp
triapi.cpp
utils.cpp
Linking...
<h3>Output Window</h3>
Performing Custom Build Step on \Xash3D\src_main\temp\client\!debug\client.dll
‘ª®¯¨à®¢ ­® ä ©«®¢: 1.
<h3>Results</h3>
client.dll - 0 error(s), 0 warning(s)
</pre>
</body>
</html>

View File

@ -148,7 +148,7 @@ void ParticleSystemManager::UpdateSystems( void )
}
}
}
g_engfuncs.pTriAPI->RenderMode(kRenderNormal);
gEngfuncs.pTriAPI->RenderMode(kRenderNormal);
}
void ParticleSystemManager::ClearSystems( void )
@ -494,7 +494,7 @@ ParticleType *ParticleSystem::ParseType( const char **szFile )
else if ( !stricmp( szToken, "sprite" ) )
{
szToken = COM_ParseToken( szFile );
pType->m_SpriteIndex = g_engfuncs.pEventAPI->EV_FindModelIndex( szToken );
pType->m_SpriteIndex = gEngfuncs.pEventAPI->EV_FindModelIndex( szToken );
}
else if ( !stricmp( szToken, "startalpha" ) )
{
@ -874,7 +874,7 @@ bool ParticleSystem::UpdateParticle( particle *part, float frametime )
if( part->pType->m_bBouncing )
{
Vector vecTarget = part->origin + frametime * part->velocity;
pmtrace_t *tr = g_engfuncs.PM_TraceLine( part->origin, vecTarget, PM_TRACELINE_PHYSENTSONLY, 2, -1 );
pmtrace_t *tr = gEngfuncs.PM_TraceLine( part->origin, vecTarget, PM_TRACELINE_PHYSENTSONLY, 2, -1 );
if( tr->fraction < 1.0f )
{
@ -961,7 +961,7 @@ void ParticleSystem::DrawParticle( particle *part, Vector &right, Vector &up )
int iContents = 0;
g_engfuncs.pTriAPI->Enable( TRI_SHADER );
gEngfuncs.pTriAPI->Enable( TRI_SHADER );
for ( particle *pDraw = part; pDraw; pDraw = pDraw->m_pOverlay )
{
@ -990,25 +990,25 @@ void ParticleSystem::DrawParticle( particle *part, Vector &right, Vector &up )
HSPRITE m_hSprite;
m_hSprite = g_engfuncs.pTriAPI->GetSpriteTexture( pDraw->pType->m_SpriteIndex, int( pDraw->frame ));
g_engfuncs.pTriAPI->RenderMode( pDraw->pType->m_iRenderMode );
g_engfuncs.pTriAPI->Color4f( pDraw->m_fRed, pDraw->m_fGreen, pDraw->m_fBlue, pDraw->m_fAlpha );
m_hSprite = gEngfuncs.pTriAPI->GetSpriteTexture( pDraw->pType->m_SpriteIndex, int( pDraw->frame ));
gEngfuncs.pTriAPI->RenderMode( pDraw->pType->m_iRenderMode );
gEngfuncs.pTriAPI->Color4f( pDraw->m_fRed, pDraw->m_fGreen, pDraw->m_fBlue, pDraw->m_fAlpha );
g_engfuncs.pTriAPI->Bind( m_hSprite, int( pDraw->frame ));
gEngfuncs.pTriAPI->Bind( m_hSprite, int( pDraw->frame ));
g_engfuncs.pTriAPI->Begin( TRI_QUADS );
g_engfuncs.pTriAPI->TexCoord2f ( 0, 0 );
g_engfuncs.pTriAPI->Vertex3fv( point1 );
gEngfuncs.pTriAPI->Begin( TRI_QUADS );
gEngfuncs.pTriAPI->TexCoord2f ( 0, 0 );
gEngfuncs.pTriAPI->Vertex3fv( point1 );
g_engfuncs.pTriAPI->TexCoord2f ( 1, 0 );
g_engfuncs.pTriAPI->Vertex3fv ( point2 );
gEngfuncs.pTriAPI->TexCoord2f ( 1, 0 );
gEngfuncs.pTriAPI->Vertex3fv ( point2 );
g_engfuncs.pTriAPI->TexCoord2f ( 1, 1 );
g_engfuncs.pTriAPI->Vertex3fv ( point3 );
gEngfuncs.pTriAPI->TexCoord2f ( 1, 1 );
gEngfuncs.pTriAPI->Vertex3fv ( point3 );
g_engfuncs.pTriAPI->TexCoord2f ( 0, 1 );
g_engfuncs.pTriAPI->Vertex3fv ( point4 );
g_engfuncs.pTriAPI->End();
gEngfuncs.pTriAPI->TexCoord2f ( 0, 1 );
gEngfuncs.pTriAPI->Vertex3fv ( point4 );
gEngfuncs.pTriAPI->End();
}
g_engfuncs.pTriAPI->Disable( TRI_SHADER );
gEngfuncs.pTriAPI->Disable( TRI_SHADER );
}

View File

@ -157,7 +157,7 @@ void TE_ParseExplosion( void )
dlight_t *dl;
// big flash
dl = g_engfuncs.pEfxAPI->CL_AllocDLight( 0 );
dl = gEngfuncs.pEfxAPI->CL_AllocDLight( 0 );
dl->origin = pos2;
dl->radius = 200;
dl->color[0] = dl->color[1] = 250;
@ -166,7 +166,7 @@ void TE_ParseExplosion( void )
dl->decay = 800;
// red glow
dl = g_engfuncs.pEfxAPI->CL_AllocDLight( 0 );
dl = gEngfuncs.pEfxAPI->CL_AllocDLight( 0 );
dl->origin = pos2;
dl->radius = 150;
dl->color[0] = 255;
@ -330,7 +330,7 @@ void TE_ParseSparks( void )
pos.y = READ_COORD();
pos.z = READ_COORD();
g_pTempEnts->DoSparks( pos );
g_pTempEnts->SparkShower( pos );
}
/*
@ -391,7 +391,7 @@ void TE_ParseExplosion2( void )
g_pParticles->ParticleExplosion2( pos, colorIndex, numColors );
dl = g_engfuncs.pEfxAPI->CL_AllocDLight( 0 );
dl = gEngfuncs.pEfxAPI->CL_AllocDLight( 0 );
dl->origin = pos;
dl->radius = 350;
dl->die = gpGlobals->time + 0.5f;
@ -678,11 +678,11 @@ void TE_ParseDynamicLight( int type )
if( type == TE_ELIGHT )
{
dl = g_engfuncs.pEfxAPI->CL_AllocELight( 0 );
dl = gEngfuncs.pEfxAPI->CL_AllocELight( 0 );
}
else
{
dl = g_engfuncs.pEfxAPI->CL_AllocDLight( 0 );
dl = gEngfuncs.pEfxAPI->CL_AllocDLight( 0 );
}
dl->origin = pos;
@ -993,7 +993,7 @@ void TE_ParseArmorRicochet( void )
pos.z = READ_COORD();
radius = (float)(READ_BYTE() * 0.1f);
int modelIndex = g_engfuncs.pEventAPI->EV_FindModelIndex( "sprites/richo1.spr" );
int modelIndex = gEngfuncs.pEventAPI->EV_FindModelIndex( "sprites/richo1.spr" );
g_pTempEnts->RicochetSprite( pos, modelIndex, radius );
sprintf( soundpath, "weapons/ric%i.wav", RANDOM_LONG( 1, 5 ));
@ -1026,8 +1026,8 @@ void TE_ParsePlayerDecal( void )
color[2] = 255;
color[3] = 255; // alpha
HSPRITE hDecal = g_engfuncs.pEfxAPI->CL_DecalIndex( decalIndex );
g_engfuncs.pEfxAPI->R_PlayerDecal( hDecal, entityIndex, pos, 0 );
HSPRITE hDecal = gEngfuncs.pEfxAPI->CL_DecalIndex( decalIndex );
gEngfuncs.pEfxAPI->R_PlayerDecal( hDecal, entityIndex, pos, 0 );
}
/*

View File

@ -19,7 +19,7 @@
#include "pm_movevars.h"
#include "entity_types.h"
cl_enginefuncs_t g_engfuncs;
cl_enginefuncs_t gEngfuncs;
cl_globalvars_t *gpGlobals;
movevars_t *gpMovevars = NULL;
ref_params_t *gpViewParams = NULL;
@ -82,7 +82,7 @@ int CreateAPI( HUD_FUNCTIONS *pFunctionTable, cl_enginefuncs_t* pEngfuncsFromEng
// copy HUD_FUNCTIONS table to engine, copy engfuncs table from engine
memcpy( pFunctionTable, &gFunctionTable, sizeof( HUD_FUNCTIONS ));
memcpy( &g_engfuncs, pEngfuncsFromEngine, sizeof( cl_enginefuncs_t ));
memcpy( &gEngfuncs, pEngfuncsFromEngine, sizeof( cl_enginefuncs_t ));
gpGlobals = pGlobals;
gpViewParams = gpGlobals->pViewParms;
@ -145,16 +145,16 @@ void HUD_ShutdownEffects( void )
void HUD_Init( void )
{
g_engfuncs.pfnAddCommand ("noclip", NULL, "enable or disable no clipping mode" );
g_engfuncs.pfnAddCommand ("notarget", NULL, "notarget mode (monsters do not see you)" );
g_engfuncs.pfnAddCommand ("fullupdate", NULL, "re-init HUD on start demo recording" );
g_engfuncs.pfnAddCommand ("give", NULL, "give specified item or weapon" );
g_engfuncs.pfnAddCommand ("drop", NULL, "drop current/specified item or weapon" );
g_engfuncs.pfnAddCommand ("intermission", NULL, "go to intermission" );
g_engfuncs.pfnAddCommand ("spectate", NULL, "enable spectator mode" );
g_engfuncs.pfnAddCommand ("gametitle", NULL, "show game logo" );
g_engfuncs.pfnAddCommand ("god", NULL, "classic cheat" );
g_engfuncs.pfnAddCommand ("fov", NULL, "set client field of view" );
gEngfuncs.pfnAddCommand ("noclip", NULL, "enable or disable no clipping mode" );
gEngfuncs.pfnAddCommand ("notarget", NULL, "notarget mode (monsters do not see you)" );
gEngfuncs.pfnAddCommand ("fullupdate", NULL, "re-init HUD on start demo recording" );
gEngfuncs.pfnAddCommand ("give", NULL, "give specified item or weapon" );
gEngfuncs.pfnAddCommand ("drop", NULL, "drop current/specified item or weapon" );
gEngfuncs.pfnAddCommand ("intermission", NULL, "go to intermission" );
gEngfuncs.pfnAddCommand ("spectate", NULL, "enable spectator mode" );
gEngfuncs.pfnAddCommand ("gametitle", NULL, "show game logo" );
gEngfuncs.pfnAddCommand ("god", NULL, "classic cheat" );
gEngfuncs.pfnAddCommand ("fov", NULL, "set client field of view" );
HUD_ShutdownEffects ();
@ -467,14 +467,14 @@ void HUD_Shutdown( void )
IN_Shutdown ();
// perform shutdown operations
g_engfuncs.pfnDelCommand ("noclip" );
g_engfuncs.pfnDelCommand ("notarget" );
g_engfuncs.pfnDelCommand ("fullupdate" );
g_engfuncs.pfnDelCommand ("give" );
g_engfuncs.pfnDelCommand ("drop" );
g_engfuncs.pfnDelCommand ("intermission" );
g_engfuncs.pfnDelCommand ("spectate" );
g_engfuncs.pfnDelCommand ("gametitle" );
g_engfuncs.pfnDelCommand ("god" );
g_engfuncs.pfnDelCommand ("fov" );
gEngfuncs.pfnDelCommand ("noclip" );
gEngfuncs.pfnDelCommand ("notarget" );
gEngfuncs.pfnDelCommand ("fullupdate" );
gEngfuncs.pfnDelCommand ("give" );
gEngfuncs.pfnDelCommand ("drop" );
gEngfuncs.pfnDelCommand ("intermission" );
gEngfuncs.pfnDelCommand ("spectate" );
gEngfuncs.pfnDelCommand ("gametitle" );
gEngfuncs.pfnDelCommand ("god" );
gEngfuncs.pfnDelCommand ("fov" );
}

View File

@ -7,148 +7,148 @@
#define ENGINECALLBACKS_H
// built-in memory manager
#define MALLOC( x ) (*g_engfuncs.pfnMemAlloc)( x, __FILE__, __LINE__ )
#define CALLOC( x, y ) (*g_engfuncs.pfnMemAlloc)((x) * (y), __FILE__, __LINE__ )
#define FREE( x ) (*g_engfuncs.pfnMemFree)( x, __FILE__, __LINE__ )
#define MALLOC( x ) (*gEngfuncs.pfnMemAlloc)( x, __FILE__, __LINE__ )
#define CALLOC( x, y ) (*gEngfuncs.pfnMemAlloc)((x) * (y), __FILE__, __LINE__ )
#define FREE( x ) (*gEngfuncs.pfnMemFree)( x, __FILE__, __LINE__ )
// screen handlers
#define SPR_GetList (*g_engfuncs.pfnSPR_GetList)
#define SPR_Frames (*g_engfuncs.pfnSPR_Frames)
#define SPR_Width (*g_engfuncs.pfnSPR_Width)
#define SPR_Height (*g_engfuncs.pfnSPR_Height)
#define SPR_EnableScissor (*g_engfuncs.pfnSPR_EnableScissor)
#define SPR_DisableScissor (*g_engfuncs.pfnSPR_DisableScissor)
#define FillRGBA (*g_engfuncs.pfnFillRGBA)
#define GetScreenInfo (*g_engfuncs.pfnGetScreenInfo)
#define SPR_GetList (*gEngfuncs.pfnSPR_GetList)
#define SPR_Frames (*gEngfuncs.pfnSPR_Frames)
#define SPR_Width (*gEngfuncs.pfnSPR_Width)
#define SPR_Height (*gEngfuncs.pfnSPR_Height)
#define SPR_EnableScissor (*gEngfuncs.pfnSPR_EnableScissor)
#define SPR_DisableScissor (*gEngfuncs.pfnSPR_DisableScissor)
#define FillRGBA (*gEngfuncs.pfnFillRGBA)
#define GetScreenInfo (*gEngfuncs.pfnGetScreenInfo)
#define SPR_Load (*g_engfuncs.pfnSPR_Load)
#define TEX_Load( x ) (*g_engfuncs.pTriAPI->LoadShader)( x, false )
#define TEX_LoadNoMip( x ) (*g_engfuncs.pTriAPI->LoadShader)( x, true )
#define SetCrosshair (*g_engfuncs.pfnSetCrosshair)
#define SPR_Load (*gEngfuncs.pfnSPR_Load)
#define TEX_Load( x ) (*gEngfuncs.pTriAPI->LoadShader)( x, false )
#define TEX_LoadNoMip( x ) (*gEngfuncs.pTriAPI->LoadShader)( x, true )
#define SetCrosshair (*gEngfuncs.pfnSetCrosshair)
#define SendWeaponAnim (*g_engfuncs.pEventAPI->EV_WeaponAnimation)
#define GetModelType (*g_engfuncs.pfnGetModelType)
#define GetModelFrames (*g_engfuncs.pfnGetModFrames)
#define GetModelBounds (*g_engfuncs.pfnGetModBounds)
#define CVAR_REGISTER (*g_engfuncs.pfnRegisterVariable)
#define CVAR_SET_FLOAT (*g_engfuncs.pfnCvarSetValue)
#define CVAR_GET_FLOAT (*g_engfuncs.pfnGetCvarFloat)
#define CVAR_GET_STRING (*g_engfuncs.pfnGetCvarString)
#define SERVER_COMMAND (*g_engfuncs.pfnServerCmd)
#define CLIENT_COMMAND (*g_engfuncs.pfnClientCmd)
#define GetPlayerInfo (*g_engfuncs.pfnGetPlayerInfo)
#define TextMessageGet (*g_engfuncs.pfnTextMessageGet)
#define Cmd_AddCommand (*g_engfuncs.pfnAddCommand)
#define Cmd_RemoveCommand (*g_engfuncs.pfnDelCommand)
#define CMD_ARGC (*g_engfuncs.pfnCmdArgc)
#define CMD_ARGV (*g_engfuncs.pfnCmdArgv)
#define Con_Printf (*g_engfuncs.Con_Printf)
#define Con_DPrintf (*g_engfuncs.Con_DPrintf)
#define IN_GAME (*g_engfuncs.pfnIsInGame)
#define SendWeaponAnim (*gEngfuncs.pEventAPI->EV_WeaponAnimation)
#define GetModelType (*gEngfuncs.pfnGetModelType)
#define GetModelFrames (*gEngfuncs.pfnGetModFrames)
#define GetModelBounds (*gEngfuncs.pfnGetModBounds)
#define CVAR_REGISTER (*gEngfuncs.pfnRegisterVariable)
#define CVAR_SET_FLOAT (*gEngfuncs.pfnCvarSetValue)
#define CVAR_GET_FLOAT (*gEngfuncs.pfnGetCvarFloat)
#define CVAR_GET_STRING (*gEngfuncs.pfnGetCvarString)
#define SERVER_COMMAND (*gEngfuncs.pfnServerCmd)
#define CLIENT_COMMAND (*gEngfuncs.pfnClientCmd)
#define GetPlayerInfo (*gEngfuncs.pfnGetPlayerInfo)
#define TextMessageGet (*gEngfuncs.pfnTextMessageGet)
#define Cmd_AddCommand (*gEngfuncs.pfnAddCommand)
#define Cmd_RemoveCommand (*gEngfuncs.pfnDelCommand)
#define CMD_ARGC (*gEngfuncs.pfnCmdArgc)
#define CMD_ARGV (*gEngfuncs.pfnCmdArgv)
#define Con_Printf (*gEngfuncs.Con_Printf)
#define Con_DPrintf (*gEngfuncs.Con_DPrintf)
#define IN_GAME (*gEngfuncs.pfnIsInGame)
inline void SPR_Set( HSPRITE hPic, int r, int g, int b )
{
g_engfuncs.pfnSPR_Set( hPic, r, g, b, 255 );
gEngfuncs.pfnSPR_Set( hPic, r, g, b, 255 );
}
inline void SPR_Set( HSPRITE hPic, int r, int g, int b, int a )
{
g_engfuncs.pfnSPR_Set( hPic, r, g, b, a );
gEngfuncs.pfnSPR_Set( hPic, r, g, b, a );
}
inline void SPR_Draw( int frame, int x, int y, const wrect_t *prc )
{
g_engfuncs.pfnSPR_Draw( frame, x, y, -1, -1, prc );
gEngfuncs.pfnSPR_Draw( frame, x, y, -1, -1, prc );
}
inline void SPR_Draw( int frame, int x, int y, int width, int height )
{
g_engfuncs.pfnSPR_Draw( frame, x, y, width, height, NULL );
gEngfuncs.pfnSPR_Draw( frame, x, y, width, height, NULL );
}
inline void SPR_DrawTransColor( int frame, int x, int y, const wrect_t *prc )
{
g_engfuncs.pfnSPR_DrawTrans( frame, x, y, -1, -1, prc );
gEngfuncs.pfnSPR_DrawTrans( frame, x, y, -1, -1, prc );
}
inline void SPR_DrawTransColor( int frame, int x, int y, int width, int height )
{
g_engfuncs.pfnSPR_DrawTrans( frame, x, y, width, height, NULL );
gEngfuncs.pfnSPR_DrawTrans( frame, x, y, width, height, NULL );
}
inline void SPR_DrawHoles( int frame, int x, int y, const wrect_t *prc )
{
g_engfuncs.pfnSPR_DrawHoles( frame, x, y, -1, -1, prc );
gEngfuncs.pfnSPR_DrawHoles( frame, x, y, -1, -1, prc );
}
inline void SPR_DrawHoles( int frame, int x, int y, int width, int height )
{
g_engfuncs.pfnSPR_DrawHoles( frame, x, y, width, height, NULL );
gEngfuncs.pfnSPR_DrawHoles( frame, x, y, width, height, NULL );
}
inline void SPR_DrawAdditive( int frame, int x, int y, const wrect_t *prc )
{
g_engfuncs.pfnSPR_DrawAdditive( frame, x, y, -1, -1, prc );
gEngfuncs.pfnSPR_DrawAdditive( frame, x, y, -1, -1, prc );
}
inline void SPR_DrawAdditive( int frame, int x, int y, int width, int height )
{
g_engfuncs.pfnSPR_DrawAdditive( frame, x, y, width, height, NULL );
gEngfuncs.pfnSPR_DrawAdditive( frame, x, y, width, height, NULL );
}
inline void CL_PlaySound( const char *szSound, float flVolume, float pitch = PITCH_NORM )
{
g_engfuncs.pfnPlaySoundByName( szSound, flVolume, pitch, NULL );
gEngfuncs.pfnPlaySoundByName( szSound, flVolume, pitch, NULL );
}
inline void CL_PlaySound( int iSound, float flVolume, float pitch = PITCH_NORM )
{
g_engfuncs.pfnPlaySoundByIndex( iSound, flVolume, pitch, NULL );
gEngfuncs.pfnPlaySoundByIndex( iSound, flVolume, pitch, NULL );
}
inline void CL_PlaySound( const char *szSound, float flVolume, Vector &pos, float pitch = PITCH_NORM )
{
g_engfuncs.pfnPlaySoundByName( szSound, flVolume, pitch, pos );
gEngfuncs.pfnPlaySoundByName( szSound, flVolume, pitch, pos );
}
inline void CL_PlaySound( int iSound, float flVolume, Vector &pos, float pitch = PITCH_NORM )
{
g_engfuncs.pfnPlaySoundByIndex( iSound, flVolume, pitch, pos );
gEngfuncs.pfnPlaySoundByIndex( iSound, flVolume, pitch, pos );
}
#define TextMessageDrawChar (*g_engfuncs.pfnDrawCharacter)
#define TextMessageSetColor (*g_engfuncs.pfnDrawSetTextColor)
#define DrawConsoleString (*g_engfuncs.pfnDrawConsoleString)
#define GetConsoleStringSize (*g_engfuncs.pfnDrawConsoleStringLen)
#define AngleVectors (*g_engfuncs.pfnAngleVectors)
#define CenterPrint (*g_engfuncs.pfnCenterPrint)
#define ConsolePrint (*g_engfuncs.pfnConsolePrint)
#define GetViewAngles (*g_engfuncs.pfnGetViewAngles)
#define SetViewAngles (*g_engfuncs.pfnSetViewAngles)
#define GetLocalPlayer (*g_engfuncs.pfnGetLocalPlayer)
#define GetClientMaxspeed (*g_engfuncs.pfnGetClientMaxspeed)
#define IsSpectateOnly (*g_engfuncs.pfnIsSpectateOnly)
#define GetClientTime (*g_engfuncs.pfnGetClientTime)
#define GetLerpFrac (*g_engfuncs.pfnGetLerpFrac)
#define GetViewModel (*g_engfuncs.pfnGetViewModel)
#define GetModelPtr (*g_engfuncs.pfnGetModelPtr)
#define CL_GetPaletteColor (*g_engfuncs.pEfxAPI->R_GetPaletteColor)
#define CL_AddEntity (*g_engfuncs.pEfxAPI->R_AddEntity)
#define POINT_CONTENTS( x ) (*g_engfuncs.pfnPointContents)( x, NULL )
#define TRACE_LINE (*g_engfuncs.pfnTraceLine)
#define TRACE_HULL (*g_engfuncs.pfnTraceHull)
#define RANDOM_LONG (*g_engfuncs.pfnRandomLong)
#define RANDOM_FLOAT (*g_engfuncs.pfnRandomFloat)
#define LOAD_FILE (*g_engfuncs.pfnLoadFile)
#define FILE_EXISTS (*g_engfuncs.pfnFileExists)
#define FREE_FILE (*g_engfuncs.pfnFreeFile)
#define GET_GAME_DIR (*g_engfuncs.pfnGetGameDir)
#define LOAD_LIBRARY (*g_engfuncs.pfnLoadLibrary)
#define GET_PROC_ADDRESS (*g_engfuncs.pfnGetProcAddress)
#define FREE_LIBRARY (*g_engfuncs.pfnFreeLibrary)
#define HOST_ERROR (*g_engfuncs.pfnHostError)
#define COM_ParseToken (*g_engfuncs.pfnParseToken)
#define MAKE_ENVSHOT( x, y ) (*g_engfuncs.R_EnvShot)( x, y, 0 )
#define MAKE_SKYSHOT( x, y ) (*g_engfuncs.R_EnvShot)( x, y, 1 )
#define TextMessageDrawChar (*gEngfuncs.pfnDrawCharacter)
#define TextMessageSetColor (*gEngfuncs.pfnDrawSetTextColor)
#define DrawConsoleString (*gEngfuncs.pfnDrawConsoleString)
#define GetConsoleStringSize (*gEngfuncs.pfnDrawConsoleStringLen)
#define AngleVectors (*gEngfuncs.pfnAngleVectors)
#define CenterPrint (*gEngfuncs.pfnCenterPrint)
#define ConsolePrint (*gEngfuncs.pfnConsolePrint)
#define GetViewAngles (*gEngfuncs.pfnGetViewAngles)
#define SetViewAngles (*gEngfuncs.pfnSetViewAngles)
#define GetLocalPlayer (*gEngfuncs.pfnGetLocalPlayer)
#define GetClientMaxspeed (*gEngfuncs.pfnGetClientMaxspeed)
#define IsSpectateOnly (*gEngfuncs.pfnIsSpectateOnly)
#define GetClientTime (*gEngfuncs.pfnGetClientTime)
#define GetLerpFrac (*gEngfuncs.pfnGetLerpFrac)
#define GetViewModel (*gEngfuncs.pfnGetViewModel)
#define GetModelPtr (*gEngfuncs.pfnGetModelPtr)
#define CL_GetPaletteColor (*gEngfuncs.pEfxAPI->R_GetPaletteColor)
#define CL_AddEntity (*gEngfuncs.pEfxAPI->R_AddEntity)
#define POINT_CONTENTS( x ) (*gEngfuncs.PM_PointContents)( x, NULL )
#define TRACE_LINE (*gEngfuncs.pfnTraceLine)
#define TRACE_HULL (*gEngfuncs.pfnTraceHull)
#define RANDOM_LONG (*gEngfuncs.pfnRandomLong)
#define RANDOM_FLOAT (*gEngfuncs.pfnRandomFloat)
#define LOAD_FILE (*gEngfuncs.pfnLoadFile)
#define FILE_EXISTS (*gEngfuncs.pfnFileExists)
#define FREE_FILE (*gEngfuncs.pfnFreeFile)
#define GET_GAME_DIR (*gEngfuncs.pfnGetGameDir)
#define LOAD_LIBRARY (*gEngfuncs.pfnLoadLibrary)
#define GET_PROC_ADDRESS (*gEngfuncs.pfnGetProcAddress)
#define FREE_LIBRARY (*gEngfuncs.pfnFreeLibrary)
#define HOST_ERROR (*gEngfuncs.pfnHostError)
#define COM_ParseToken (*gEngfuncs.pfnParseToken)
#define MAKE_ENVSHOT( x, y ) (*gEngfuncs.R_EnvShot)( x, y, 0 )
#define MAKE_SKYSHOT( x, y ) (*gEngfuncs.R_EnvShot)( x, y, 1 )
#endif//ENGINECALLBACKS_H

View File

@ -12,49 +12,50 @@
extern ref_params_t *gpViewParams;
extern "C"
{
void EV_EjectBrass( event_args_t *args );
void EV_FireNull( event_args_t *args );
void EV_FireCrowbar( event_args_t *args );
void EV_PlayEmptySound( event_args_t *args );
void EV_FireGlock1( event_args_t *args );
void EV_FireMP5( event_args_t *args );
void EV_FirePython( event_args_t *args );
void EV_FireGauss( event_args_t *args );
void EV_SpinGauss( event_args_t *args );
void EV_EgonFire( event_args_t *args );
void EV_EgonStop( event_args_t *args );
void EV_FireShotGunSingle( event_args_t *args );
void EV_FireShotGunDouble( event_args_t *args );
void EV_SnarkFire( event_args_t *args );
void EV_TrainPitchAdjust( event_args_t *args );
void EV_Decals( event_args_t *args );
}
void EV_FireGlock1( struct event_args_s *args );
void EV_FireGlock2( struct event_args_s *args );
void EV_FireShotGunSingle( struct event_args_s *args );
void EV_FireShotGunDouble( struct event_args_s *args );
void EV_FireMP5( struct event_args_s *args );
void EV_FireMP52( struct event_args_s *args );
void EV_FirePython( struct event_args_s *args );
void EV_FireGauss( struct event_args_s *args );
void EV_SpinGauss( struct event_args_s *args );
void EV_Crowbar( struct event_args_s *args );
void EV_FireCrossbow( struct event_args_s *args );
void EV_FireCrossbow2( struct event_args_s *args );
void EV_FireRpg( struct event_args_s *args );
void EV_EgonFire( struct event_args_s *args );
void EV_EgonStop( struct event_args_s *args );
void EV_HornetGunFire( struct event_args_s *args );
void EV_TripmineFire( struct event_args_s *args );
void EV_SnarkFire( struct event_args_s *args );
void EV_TrainPitchAdjust( struct event_args_s *args );
//======================
// Game_HookEvents
//======================
void EV_HookEvents( void )
{
g_engfuncs.pfnHookEvent( "events/crowbar.sc", EV_FireCrowbar );
g_engfuncs.pfnHookEvent( "events/glock1.sc", EV_FireGlock1 );
g_engfuncs.pfnHookEvent( "events/shotgun1.sc", EV_FireShotGunSingle );
g_engfuncs.pfnHookEvent( "events/shotgun2.sc", EV_FireShotGunDouble );
g_engfuncs.pfnHookEvent( "events/mp5.sc", EV_FireMP5 );
g_engfuncs.pfnHookEvent( "events/python.sc", EV_FirePython );
g_engfuncs.pfnHookEvent( "events/gauss.sc", EV_FireGauss );
g_engfuncs.pfnHookEvent( "events/gaussspin.sc", EV_SpinGauss );
g_engfuncs.pfnHookEvent( "events/egon_fire.sc", EV_EgonFire );
g_engfuncs.pfnHookEvent( "events/egon_stop.sc", EV_EgonStop );
g_engfuncs.pfnHookEvent( "events/train.sc", EV_TrainPitchAdjust );
g_engfuncs.pfnHookEvent( "events/snarkfire.sc", EV_SnarkFire );
// legacy. attempt to be removed
g_engfuncs.pfnHookEvent( "evEjectBrass", EV_EjectBrass );
g_engfuncs.pfnHookEvent( "evNull", EV_FireNull );
g_engfuncs.pfnHookEvent( "evEmptySound", EV_PlayEmptySound );
g_engfuncs.pfnHookEvent( "evDecals", EV_Decals );
gEngfuncs.pfnHookEvent( "events/glock1.sc", EV_FireGlock1 );
gEngfuncs.pfnHookEvent( "events/glock2.sc", EV_FireGlock2 );
gEngfuncs.pfnHookEvent( "events/shotgun1.sc", EV_FireShotGunSingle );
gEngfuncs.pfnHookEvent( "events/shotgun2.sc", EV_FireShotGunDouble );
gEngfuncs.pfnHookEvent( "events/mp5.sc", EV_FireMP5 );
gEngfuncs.pfnHookEvent( "events/mp52.sc", EV_FireMP52 );
gEngfuncs.pfnHookEvent( "events/python.sc", EV_FirePython );
gEngfuncs.pfnHookEvent( "events/gauss.sc", EV_FireGauss );
gEngfuncs.pfnHookEvent( "events/gaussspin.sc", EV_SpinGauss );
gEngfuncs.pfnHookEvent( "events/train.sc", EV_TrainPitchAdjust );
gEngfuncs.pfnHookEvent( "events/crowbar.sc", EV_Crowbar );
gEngfuncs.pfnHookEvent( "events/crossbow1.sc", EV_FireCrossbow );
gEngfuncs.pfnHookEvent( "events/crossbow2.sc", EV_FireCrossbow2 );
gEngfuncs.pfnHookEvent( "events/rpg.sc", EV_FireRpg );
gEngfuncs.pfnHookEvent( "events/egon_fire.sc", EV_EgonFire );
gEngfuncs.pfnHookEvent( "events/egon_stop.sc", EV_EgonStop );
gEngfuncs.pfnHookEvent( "events/firehornet.sc", EV_HornetGunFire );
gEngfuncs.pfnHookEvent( "events/tripfire.sc", EV_TripmineFire );
gEngfuncs.pfnHookEvent( "events/snarkfire.sc", EV_SnarkFire );
}
/*
@ -106,7 +107,7 @@ int EV_IsPlayer( int idx )
//=================
int EV_IsLocal( int idx )
{
return g_engfuncs.pEventAPI->EV_IsLocal( idx - 1 ) ? true : false;
return gEngfuncs.pEventAPI->EV_IsLocal( idx - 1 ) ? true : false;
}
@ -129,7 +130,7 @@ void EV_GetGunPosition( event_args_t *args, float *pos, float *origin )
if ( EV_IsLocal( idx ))
{
// Grab predicted result for local player
g_engfuncs.pEventAPI->EV_LocalPlayerViewheight( view_ofs );
gEngfuncs.pEventAPI->EV_LocalPlayerViewheight( view_ofs );
}
else if ( args->ducking == 1 )
{
@ -171,7 +172,7 @@ void EV_GetDefaultShellInfo( event_args_t *args, float *origin, float *velocity,
{
if ( EV_IsLocal( idx ) )
{
g_engfuncs.pEventAPI->EV_LocalPlayerViewheight( view_ofs );
gEngfuncs.pEventAPI->EV_LocalPlayerViewheight( view_ofs );
}
else if ( args->ducking == 1 )
{
@ -235,7 +236,7 @@ void EV_UpadteFlashlight( cl_entity_t *pEnt )
{
if ( EV_IsLocal( pEnt->index ) )
{
g_engfuncs.pEventAPI->EV_LocalPlayerViewheight( view_ofs );
gEngfuncs.pEventAPI->EV_LocalPlayerViewheight( view_ofs );
}
else if ( pEnt->curstate.usehull == 1 ) // NOTE: needs changes in delta.lst
{
@ -247,14 +248,14 @@ void EV_UpadteFlashlight( cl_entity_t *pEnt )
vecEnd = vecSrc + forward * 512;
int ignore = PM_FindPhysEntByIndex( pEnt->index );
trace = g_engfuncs.PM_TraceLine( vecSrc, vecEnd, PM_TRACELINE_PHYSENTSONLY, 2, ignore );
trace = gEngfuncs.PM_TraceLine( vecSrc, vecEnd, PM_TRACELINE_PHYSENTSONLY, 2, ignore );
if( trace->fraction != 1.0f )
vecPos = trace->endpos + (trace->plane.normal * -16.0f);
else vecPos = trace->endpos;
// update flashlight endpos
dlight_t *dl = g_engfuncs.pEfxAPI->CL_AllocDLight( pEnt->index );
dlight_t *dl = gEngfuncs.pEfxAPI->CL_AllocDLight( pEnt->index );
dl->origin = vecPos;
dl->die = gpGlobals->time + 0.001f; // die on next frame

File diff suppressed because it is too large Load Diff

View File

@ -16,58 +16,59 @@
#define VEC_DUCK_HULL_MIN Vector(-16, -16, -18 )
#define VEC_DUCK_HULL_MAX Vector( 16, 16, 18 )
enum crowbar_e
// bullet types
typedef enum
{
CROWBAR_IDLE = 0,
CROWBAR_DRAW,
CROWBAR_HOLSTER,
CROWBAR_ATTACK1HIT,
CROWBAR_ATTACK1MISS,
CROWBAR_ATTACK2MISS,
CROWBAR_ATTACK2HIT,
CROWBAR_ATTACK3MISS,
CROWBAR_ATTACK3HIT
};
BULLET_NONE = 0,
BULLET_PLAYER_9MM, // glock
BULLET_PLAYER_MP5, // mp5
BULLET_PLAYER_357, // python
BULLET_PLAYER_BUCKSHOT, // shotgun
BULLET_PLAYER_CROWBAR, // crowbar swipe
enum shotgun_e
{
SHOTGUN_IDLE = 0,
SHOTGUN_DRAW,
SHOTGUN_HOLSTER,
SHOTGUN_FIRE,
SHOTGUN_FIRE2,
SHOTGUN_START_RELOAD,
SHOTGUN_RELOAD,
SHOTGUN_PUMP
};
BULLET_MONSTER_9MM,
BULLET_MONSTER_MP5,
BULLET_MONSTER_12MM,
} Bullet;
enum glock_e
{
GLOCK_IDLE1 = 0,
GLOCK_IDLE2,
GLOCK_IDLE3,
GLOCK_DRAW,
GLOCK_HOLSTER,
GLOCK_SHOOT,
GLOCK_SHOOT_EMPTY,
GLOCK_RELOAD,
GLOCK_RELOAD_NOT_EMPTY,
GLOCK_HOLSTER2,
GLOCK_ADD_SILENCER,
GLOCK_DEL_SILENCER
GLOCK_DRAW,
GLOCK_HOLSTER,
GLOCK_ADD_SILENCER
};
enum shotgun_e
{
SHOTGUN_IDLE = 0,
SHOTGUN_FIRE,
SHOTGUN_FIRE2,
SHOTGUN_RELOAD,
SHOTGUN_PUMP,
SHOTGUN_START_RELOAD,
SHOTGUN_DRAW,
SHOTGUN_HOLSTER,
SHOTGUN_IDLE4,
SHOTGUN_IDLE_DEEP
};
enum mp5_e
{
MP5_IDLE = 0,
MP5_LONGIDLE = 0,
MP5_IDLE1,
MP5_LAUNCH,
MP5_RELOAD,
MP5_DEPLOY,
MP5_HOLSTER,
MP5_FIRE1,
MP5_FIRE2,
MP5_FIRE3,
MP5_LAUNCH,
MP5_RELOAD
};
enum python_e
@ -95,18 +96,87 @@ enum gauss_e
GAUSS_DRAW
};
enum crowbar_e
{
CROWBAR_IDLE = 0,
CROWBAR_DRAW,
CROWBAR_HOLSTER,
CROWBAR_ATTACK1HIT,
CROWBAR_ATTACK1MISS,
CROWBAR_ATTACK2MISS,
CROWBAR_ATTACK2HIT,
CROWBAR_ATTACK3MISS,
CROWBAR_ATTACK3HIT
};
enum crossbow_e
{
CROSSBOW_IDLE1 = 0, // full
CROSSBOW_IDLE2, // empty
CROSSBOW_FIDGET1, // full
CROSSBOW_FIDGET2, // empty
CROSSBOW_FIRE1, // full
CROSSBOW_FIRE2, // reload
CROSSBOW_FIRE3, // empty
CROSSBOW_RELOAD, // from empty
CROSSBOW_DRAW1, // full
CROSSBOW_DRAW2, // empty
CROSSBOW_HOLSTER1, // full
CROSSBOW_HOLSTER2, // empty
};
enum rpg_e
{
RPG_IDLE = 0,
RPG_FIDGET,
RPG_RELOAD, // to reload
RPG_FIRE2, // to empty
RPG_HOLSTER1, // loaded
RPG_DRAW1, // loaded
RPG_HOLSTER2, // unloaded
RPG_DRAW_UL, // unloaded
RPG_IDLE_UL, // unloaded idle
RPG_FIDGET_UL, // unloaded fidget
};
enum egon_e
{
EGON_IDLE1 = 0,
EGON_FIDGET1,
EGON_ALTFIREON,
EGON_ALTFIRECYCLE,
EGON_ALTFIREOFF,
EGON_FIRESTOP,
EGON_FIRECYCLE,
EGON_FIRE1,
EGON_FIRE2,
EGON_FIRE3,
EGON_FIRE4,
EGON_DRAW,
EGON_HOLSTER
};
enum hgun_e
{
HGUN_IDLE1 = 0,
HGUN_FIDGETSWAY,
HGUN_FIDGETSHAKE,
HGUN_DOWN,
HGUN_UP,
HGUN_SHOOT
};
enum tripmine_e
{
TRIPMINE_IDLE1 = 0,
TRIPMINE_IDLE2,
TRIPMINE_ARM1,
TRIPMINE_ARM2,
TRIPMINE_FIDGET,
TRIPMINE_HOLSTER,
TRIPMINE_DRAW,
TRIPMINE_WORLD,
TRIPMINE_GROUND,
};
enum squeak_e
{
SQUEAK_IDLE1 = 0,

View File

@ -529,7 +529,7 @@ void IN_CreateMove( usercmd_t *cmd, int msec, int active )
if( freelook->integer )
{
if( !mlook_active && lookspring->value )
if( !mlook_active && lookspring->integer )
V_StartPitchDrift();
}
}
@ -675,8 +675,8 @@ void IN_Init( void )
cl_lw = CVAR_REGISTER( "cl_lw", "1", FCVAR_ARCHIVE|FCVAR_USERINFO, "enable client weapon predicting" );
cl_movespeedkey = CVAR_REGISTER ( "cl_movespeedkey", "0.3", 0, "global scale factor between run and walk" );
cl_pitchup = CVAR_REGISTER ( "cl_pitchup", "70", 0, "how many pitch up" );
cl_pitchdown = CVAR_REGISTER ( "cl_pitchdown", "80", 0, "how many pitch down" );
cl_pitchup = CVAR_REGISTER ( "cl_pitchup", "89", 0, "how many pitch up" );
cl_pitchdown = CVAR_REGISTER ( "cl_pitchdown", "89", 0, "how many pitch down" );
freelook = CVAR_REGISTER( "freelook", "1", FCVAR_ARCHIVE, "enables mouse look" );
lookspring = CVAR_REGISTER( "lookspring", "0", FCVAR_ARCHIVE, "allow look spring" );

View File

@ -89,11 +89,11 @@ void CBeamSegDraw::Start( int nSegs, HSPRITE m_hSprite, kRenderMode_t nRenderMod
ASSERT( nSegs >= 2 );
g_engfuncs.pTriAPI->Enable( TRI_SHADER );
g_engfuncs.pTriAPI->RenderMode( nRenderMode );
g_engfuncs.pTriAPI->Bind( m_hSprite, frame ); // GetSpriteTexture already set frame
gEngfuncs.pTriAPI->Enable( TRI_SHADER );
gEngfuncs.pTriAPI->RenderMode( nRenderMode );
gEngfuncs.pTriAPI->Bind( m_hSprite, frame ); // GetSpriteTexture already set frame
g_engfuncs.pTriAPI->Begin( TRI_TRIANGLE_STRIP );
gEngfuncs.pTriAPI->Begin( TRI_TRIANGLE_STRIP );
}
inline void CBeamSegDraw::ComputeNormal( const Vector &vStartPos, const Vector &vNextPos, Vector *pNormal )
@ -128,17 +128,17 @@ inline void CBeamSegDraw::SpecifySeg( const Vector &vNormal )
vPoint2 = m_Seg.m_vPos + (-m_Seg.m_flWidth * 0.5f) * vNormal;
// Specify the points.
g_engfuncs.pTriAPI->Color4f( m_Seg.m_vColor[0], m_Seg.m_vColor[1], m_Seg.m_vColor[2], m_Seg.m_flAlpha );
g_engfuncs.pTriAPI->TexCoord2f( 0.0f, m_Seg.m_flTexCoord );
g_engfuncs.pTriAPI->Normal3fv( vNormal );
// g_engfuncs.pTriAPI->Tangent3fv( vTangentY );
g_engfuncs.pTriAPI->Vertex3fv( vPoint2 );
gEngfuncs.pTriAPI->Color4f( m_Seg.m_vColor[0], m_Seg.m_vColor[1], m_Seg.m_vColor[2], m_Seg.m_flAlpha );
gEngfuncs.pTriAPI->TexCoord2f( 0.0f, m_Seg.m_flTexCoord );
gEngfuncs.pTriAPI->Normal3fv( vNormal );
// gEngfuncs.pTriAPI->Tangent3fv( vTangentY );
gEngfuncs.pTriAPI->Vertex3fv( vPoint2 );
g_engfuncs.pTriAPI->Color4f( m_Seg.m_vColor[0], m_Seg.m_vColor[1], m_Seg.m_vColor[2], m_Seg.m_flAlpha );
g_engfuncs.pTriAPI->TexCoord2f( 1.0f, m_Seg.m_flTexCoord );
g_engfuncs.pTriAPI->Normal3fv( vNormal );
// g_engfuncs.pTriAPI->Tangent3fv( vTangentY );
g_engfuncs.pTriAPI->Vertex3fv( vPoint1 );
gEngfuncs.pTriAPI->Color4f( m_Seg.m_vColor[0], m_Seg.m_vColor[1], m_Seg.m_vColor[2], m_Seg.m_flAlpha );
gEngfuncs.pTriAPI->TexCoord2f( 1.0f, m_Seg.m_flTexCoord );
gEngfuncs.pTriAPI->Normal3fv( vNormal );
// gEngfuncs.pTriAPI->Tangent3fv( vTangentY );
gEngfuncs.pTriAPI->Vertex3fv( vPoint1 );
}
@ -177,8 +177,8 @@ void CBeamSegDraw::NextSeg( CBeamSeg *pSeg )
void CBeamSegDraw::End()
{
g_engfuncs.pTriAPI->End();
g_engfuncs.pTriAPI->Disable( TRI_SHADER );
gEngfuncs.pTriAPI->End();
gEngfuncs.pTriAPI->Disable( TRI_SHADER );
}
//-----------------------------------------------------------------------------
@ -550,9 +550,9 @@ int CViewRenderBeams::CullBeam( const Vector &start, const Vector &end, int pvsO
}
// check bbox
if( g_engfuncs.pEfxAPI->CL_IsBoxVisible( mins, maxs ))
if( gEngfuncs.pEfxAPI->CL_IsBoxVisible( mins, maxs ))
{
if ( pvsOnly || !g_engfuncs.pEfxAPI->R_CullBox( mins, maxs ) )
if ( pvsOnly || !gEngfuncs.pEfxAPI->R_CullBox( mins, maxs ) )
{
// Beam is visible
return 1;
@ -862,7 +862,7 @@ Beam_t *CViewRenderBeams::CreateBeamPoints( BeamInfo_t &beamInfo )
// Model index.
if (( beamInfo.m_pszModelName ) && ( beamInfo.m_nModelIndex == -1 ) )
{
beamInfo.m_nModelIndex = g_engfuncs.pEventAPI->EV_FindModelIndex( beamInfo.m_pszModelName );
beamInfo.m_nModelIndex = gEngfuncs.pEventAPI->EV_FindModelIndex( beamInfo.m_pszModelName );
}
// Create the new beam.
@ -1352,14 +1352,14 @@ void CViewRenderBeams::DrawBeamFollow( int spriteIndex, Beam_t *pbeam, int frame
if ( !pnew && div != 0 )
{
delta = pbeam->attachment[0];
g_engfuncs.pTriAPI->WorldToScreen( pbeam->attachment[0], screenLast );
g_engfuncs.pTriAPI->WorldToScreen( particles->org, screen );
gEngfuncs.pTriAPI->WorldToScreen( pbeam->attachment[0], screenLast );
gEngfuncs.pTriAPI->WorldToScreen( particles->org, screen );
}
else if ( particles && particles->next )
{
delta = particles->org;
g_engfuncs.pTriAPI->WorldToScreen( particles->org, screenLast );
g_engfuncs.pTriAPI->WorldToScreen( particles->next->org, screen );
gEngfuncs.pTriAPI->WorldToScreen( particles->org, screenLast );
gEngfuncs.pTriAPI->WorldToScreen( particles->next->org, screen );
particles = particles->next;
}
else
@ -1790,7 +1790,7 @@ void DrawSegs( int noise_divisions, float *prgNoise, int modelIndex, float frame
return;
ASSERT( fadeLength >= 0.0f );
HSPRITE m_hSprite = g_engfuncs.pTriAPI->GetSpriteTexture( modelIndex, frame );
HSPRITE m_hSprite = gEngfuncs.pTriAPI->GetSpriteTexture( modelIndex, frame );
if ( !m_hSprite )
return;
@ -1984,7 +1984,7 @@ void DrawDisk( int noise_divisions, float *prgNoise, int modelIndex, float frame
Vector point;
float w;
HSPRITE m_hSprite = g_engfuncs.pTriAPI->GetSpriteTexture( modelIndex, frame );
HSPRITE m_hSprite = gEngfuncs.pTriAPI->GetSpriteTexture( modelIndex, frame );
if ( !m_hSprite )
return;
@ -2010,11 +2010,11 @@ void DrawDisk( int noise_divisions, float *prgNoise, int modelIndex, float frame
w = freq * delta[2];
g_engfuncs.pTriAPI->Enable( TRI_SHADER );
g_engfuncs.pTriAPI->RenderMode( (kRenderMode_t)rendermode );
g_engfuncs.pTriAPI->Bind( m_hSprite, 0 ); // GetSpriteTexture already set frame
gEngfuncs.pTriAPI->Enable( TRI_SHADER );
gEngfuncs.pTriAPI->RenderMode( (kRenderMode_t)rendermode );
gEngfuncs.pTriAPI->Bind( m_hSprite, 0 ); // GetSpriteTexture already set frame
g_engfuncs.pTriAPI->Begin( TRI_TRIANGLE_STRIP );
gEngfuncs.pTriAPI->Begin( TRI_TRIANGLE_STRIP );
// NOTE: We must force the degenerate triangles to be on the edge
for ( i = 0; i < segments; i++ )
@ -2026,9 +2026,9 @@ void DrawDisk( int noise_divisions, float *prgNoise, int modelIndex, float frame
point[1] = source[1];
point[2] = source[2];
g_engfuncs.pTriAPI->Color4f( color[0], color[1], color[2], 1.0f );
g_engfuncs.pTriAPI->TexCoord2f( 1.0f, vLast );
g_engfuncs.pTriAPI->Vertex3fv( point );
gEngfuncs.pTriAPI->Color4f( color[0], color[1], color[2], 1.0f );
gEngfuncs.pTriAPI->TexCoord2f( 1.0f, vLast );
gEngfuncs.pTriAPI->Vertex3fv( point );
s = sin( fraction * 2 * M_PI );
c = cos( fraction * 2 * M_PI );
@ -2036,15 +2036,15 @@ void DrawDisk( int noise_divisions, float *prgNoise, int modelIndex, float frame
point[1] = c * w + source[1];
point[2] = source[2];
g_engfuncs.pTriAPI->Color4f( color[0], color[1], color[2], 1.0f );
g_engfuncs.pTriAPI->TexCoord2f( 0.0f, vLast );
g_engfuncs.pTriAPI->Vertex3fv( point );
gEngfuncs.pTriAPI->Color4f( color[0], color[1], color[2], 1.0f );
gEngfuncs.pTriAPI->TexCoord2f( 0.0f, vLast );
gEngfuncs.pTriAPI->Vertex3fv( point );
vLast += vStep; // Advance texture scroll (v axis only)
}
g_engfuncs.pTriAPI->End();
g_engfuncs.pTriAPI->Disable( TRI_SHADER );
gEngfuncs.pTriAPI->End();
gEngfuncs.pTriAPI->Disable( TRI_SHADER );
}
//-----------------------------------------------------------------------------
@ -2071,7 +2071,7 @@ void DrawCylinder( int noise_divisions, float *prgNoise, int modelIndex, float f
float div, length, fraction, vLast, vStep;
Vector point;
HSPRITE m_hSprite = g_engfuncs.pTriAPI->GetSpriteTexture( modelIndex, frame );
HSPRITE m_hSprite = gEngfuncs.pTriAPI->GetSpriteTexture( modelIndex, frame );
if ( !m_hSprite )
return;
@ -2095,12 +2095,12 @@ void DrawCylinder( int noise_divisions, float *prgNoise, int modelIndex, float f
vLast = fmod(freq * speed, 1.0f );
scale = scale * length;
g_engfuncs.pTriAPI->Enable( TRI_SHADER );
g_engfuncs.pTriAPI->CullFace( TRI_NONE );
g_engfuncs.pTriAPI->RenderMode( (kRenderMode_t)rendermode );
g_engfuncs.pTriAPI->Bind( m_hSprite, 0 ); // GetSpriteTexture already set frame
gEngfuncs.pTriAPI->Enable( TRI_SHADER );
gEngfuncs.pTriAPI->CullFace( TRI_NONE );
gEngfuncs.pTriAPI->RenderMode( (kRenderMode_t)rendermode );
gEngfuncs.pTriAPI->Bind( m_hSprite, 0 ); // GetSpriteTexture already set frame
g_engfuncs.pTriAPI->Begin( TRI_TRIANGLE_STRIP );
gEngfuncs.pTriAPI->Begin( TRI_TRIANGLE_STRIP );
float radius = delta[2];
for ( i = 0; i < segments; i++ )
@ -2114,24 +2114,24 @@ void DrawCylinder( int noise_divisions, float *prgNoise, int modelIndex, float f
point[1] = c * freq * radius + source[1];
point[2] = source[2] + width;
g_engfuncs.pTriAPI->Color4f( 0.0f, 0.0f, 0.0f, 1.0f );
g_engfuncs.pTriAPI->TexCoord2f( 1.0f, vLast );
g_engfuncs.pTriAPI->Vertex3fv( point );
gEngfuncs.pTriAPI->Color4f( 0.0f, 0.0f, 0.0f, 1.0f );
gEngfuncs.pTriAPI->TexCoord2f( 1.0f, vLast );
gEngfuncs.pTriAPI->Vertex3fv( point );
point[0] = s * freq * (radius + width) + source[0];
point[1] = c * freq * (radius + width) + source[1];
point[2] = source[2] - width;
g_engfuncs.pTriAPI->Color4f( color[0], color[1], color[2], 1.0f );
g_engfuncs.pTriAPI->TexCoord2f( 0.0f, vLast );
g_engfuncs.pTriAPI->Vertex3fv( point );
gEngfuncs.pTriAPI->Color4f( color[0], color[1], color[2], 1.0f );
gEngfuncs.pTriAPI->TexCoord2f( 0.0f, vLast );
gEngfuncs.pTriAPI->Vertex3fv( point );
vLast += vStep; // Advance texture scroll (v axis only)
}
g_engfuncs.pTriAPI->End();
g_engfuncs.pTriAPI->Disable( TRI_SHADER );
g_engfuncs.pTriAPI->CullFace( TRI_FRONT );
gEngfuncs.pTriAPI->End();
gEngfuncs.pTriAPI->Disable( TRI_SHADER );
gEngfuncs.pTriAPI->CullFace( TRI_FRONT );
}
//-----------------------------------------------------------------------------
@ -2151,7 +2151,7 @@ void DrawRing( int noise_divisions, float *prgNoise, void (*pfnNoise)( float *no
float radius, x, y, scale;
Vector d;
HSPRITE m_hSprite = g_engfuncs.pTriAPI->GetSpriteTexture( modelIndex, frame );
HSPRITE m_hSprite = gEngfuncs.pTriAPI->GetSpriteTexture( modelIndex, frame );
if ( !m_hSprite )
return;
@ -2200,7 +2200,7 @@ void DrawRing( int noise_divisions, float *prgNoise, void (*pfnNoise)( float *no
screen = center - last1; // mins
// Is that box in PVS && frustum?
if ( !g_engfuncs.pEfxAPI->CL_IsBoxVisible( screen, tmp ) || g_engfuncs.pEfxAPI->R_CullBox( screen, tmp ))
if ( !gEngfuncs.pEfxAPI->CL_IsBoxVisible( screen, tmp ) || gEngfuncs.pEfxAPI->R_CullBox( screen, tmp ))
{
return;
}
@ -2214,11 +2214,11 @@ void DrawRing( int noise_divisions, float *prgNoise, void (*pfnNoise)( float *no
j = segments / 8;
g_engfuncs.pTriAPI->Enable( TRI_SHADER );
g_engfuncs.pTriAPI->RenderMode( (kRenderMode_t)rendermode );
g_engfuncs.pTriAPI->Bind( m_hSprite, 0 ); // GetSpriteTexture already set frame
gEngfuncs.pTriAPI->Enable( TRI_SHADER );
gEngfuncs.pTriAPI->RenderMode( (kRenderMode_t)rendermode );
gEngfuncs.pTriAPI->Bind( m_hSprite, 0 ); // GetSpriteTexture already set frame
g_engfuncs.pTriAPI->Begin( TRI_TRIANGLE_STRIP );
gEngfuncs.pTriAPI->Begin( TRI_TRIANGLE_STRIP );
for ( i = 0; i < segments + 1; i++ )
{
@ -2239,7 +2239,7 @@ void DrawRing( int noise_divisions, float *prgNoise, void (*pfnNoise)( float *no
point = point + (gpViewParams->right * factor);
// Transform point into screen space
g_engfuncs.pTriAPI->WorldToScreen( point, screen );
gEngfuncs.pTriAPI->WorldToScreen( point, screen );
if ( i != 0 )
{
@ -2256,13 +2256,13 @@ void DrawRing( int noise_divisions, float *prgNoise, void (*pfnNoise)( float *no
last2 = point + (normal * -width);
vLast += vStep; // Advance texture scroll (v axis only)
g_engfuncs.pTriAPI->Color4f( color[0], color[1], color[2], 1.0f );
g_engfuncs.pTriAPI->TexCoord2f( 1.0f, vLast );
g_engfuncs.pTriAPI->Vertex3fv( last2 );
gEngfuncs.pTriAPI->Color4f( color[0], color[1], color[2], 1.0f );
gEngfuncs.pTriAPI->TexCoord2f( 1.0f, vLast );
gEngfuncs.pTriAPI->Vertex3fv( last2 );
g_engfuncs.pTriAPI->Color4f( color[0], color[1], color[2], 1.0f );
g_engfuncs.pTriAPI->TexCoord2f( 0.0f, vLast );
g_engfuncs.pTriAPI->Vertex3fv( last1 );
gEngfuncs.pTriAPI->Color4f( color[0], color[1], color[2], 1.0f );
gEngfuncs.pTriAPI->TexCoord2f( 0.0f, vLast );
gEngfuncs.pTriAPI->Vertex3fv( last1 );
}
screenLast = screen;
@ -2276,8 +2276,8 @@ void DrawRing( int noise_divisions, float *prgNoise, void (*pfnNoise)( float *no
}
}
g_engfuncs.pTriAPI->End();
g_engfuncs.pTriAPI->Disable( TRI_SHADER );
gEngfuncs.pTriAPI->End();
gEngfuncs.pTriAPI->Disable( TRI_SHADER );
}
//-----------------------------------------------------------------------------
@ -2306,7 +2306,7 @@ void DrawBeamFollow( int modelIndex, BeamTrail_t* pHead, int frame, int rendermo
Vector last1, last2, tmp, normal;
float scaledColor[3];
HSPRITE m_hSprite = g_engfuncs.pTriAPI->GetSpriteTexture( modelIndex, frame );
HSPRITE m_hSprite = gEngfuncs.pTriAPI->GetSpriteTexture( modelIndex, frame );
if ( !m_hSprite )
return;
@ -2337,25 +2337,25 @@ void DrawBeamFollow( int modelIndex, BeamTrail_t* pHead, int frame, int rendermo
nColor[1] = (byte)bound( 0, (int)(scaledColor[1] * 255.0f), 255 );
nColor[2] = (byte)bound( 0, (int)(scaledColor[2] * 255.0f), 255 );
g_engfuncs.pTriAPI->Enable( TRI_SHADER );
g_engfuncs.pTriAPI->RenderMode( (kRenderMode_t)rendermode );
g_engfuncs.pTriAPI->Bind( m_hSprite, 0 ); // GetSpriteTexture already set frame
gEngfuncs.pTriAPI->Enable( TRI_SHADER );
gEngfuncs.pTriAPI->RenderMode( (kRenderMode_t)rendermode );
gEngfuncs.pTriAPI->Bind( m_hSprite, 0 ); // GetSpriteTexture already set frame
g_engfuncs.pTriAPI->Begin( TRI_QUADS );
gEngfuncs.pTriAPI->Begin( TRI_QUADS );
while ( pHead )
{
// Con_Printf( "%.2f ", fraction );
g_engfuncs.pTriAPI->Color4ub( nColor[0], nColor[1], nColor[2], 255 );
g_engfuncs.pTriAPI->TexCoord2f( 1.0f, 1.0f );
g_engfuncs.pTriAPI->Vertex3fv( last2 );
gEngfuncs.pTriAPI->Color4ub( nColor[0], nColor[1], nColor[2], 255 );
gEngfuncs.pTriAPI->TexCoord2f( 1.0f, 1.0f );
gEngfuncs.pTriAPI->Vertex3fv( last2 );
g_engfuncs.pTriAPI->Color4ub( nColor[0], nColor[1], nColor[2], 255 );
g_engfuncs.pTriAPI->TexCoord2f( 0.0f, 1.0f );
g_engfuncs.pTriAPI->Vertex3fv( last1 );
gEngfuncs.pTriAPI->Color4ub( nColor[0], nColor[1], nColor[2], 255 );
gEngfuncs.pTriAPI->TexCoord2f( 0.0f, 1.0f );
gEngfuncs.pTriAPI->Vertex3fv( last1 );
// Transform point into screen space
g_engfuncs.pTriAPI->WorldToScreen( pHead->org, screen );
gEngfuncs.pTriAPI->WorldToScreen( pHead->org, screen );
// Build world-space normal to screen-space direction vector
tmp = screen - screenLast;
@ -2387,19 +2387,19 @@ void DrawBeamFollow( int modelIndex, BeamTrail_t* pHead, int frame, int rendermo
nColor[0] = nColor[1] = nColor[2] = 0;
}
g_engfuncs.pTriAPI->Color4ub( nColor[0], nColor[1], nColor[2], 255 );
g_engfuncs.pTriAPI->TexCoord2f( 0.0f, 0.0f );
g_engfuncs.pTriAPI->Vertex3fv( last1 );
gEngfuncs.pTriAPI->Color4ub( nColor[0], nColor[1], nColor[2], 255 );
gEngfuncs.pTriAPI->TexCoord2f( 0.0f, 0.0f );
gEngfuncs.pTriAPI->Vertex3fv( last1 );
g_engfuncs.pTriAPI->Color4ub( nColor[0], nColor[1], nColor[2], 255 );
g_engfuncs.pTriAPI->TexCoord2f( 1.0f, 0.0f );
g_engfuncs.pTriAPI->Vertex3fv( last2 );
gEngfuncs.pTriAPI->Color4ub( nColor[0], nColor[1], nColor[2], 255 );
gEngfuncs.pTriAPI->TexCoord2f( 1.0f, 0.0f );
gEngfuncs.pTriAPI->Vertex3fv( last2 );
screenLast = screen;
pHead = pHead->next;
}
g_engfuncs.pTriAPI->End();
g_engfuncs.pTriAPI->Disable( TRI_SHADER );
gEngfuncs.pTriAPI->End();
gEngfuncs.pTriAPI->Disable( TRI_SHADER );
}

View File

@ -150,12 +150,12 @@ CBaseParticle *CParticleSystem :: AllocParticle( HSPRITE m_hSpr )
void CParticleSystem :: DrawParticle( HSPRITE hSprite, const Vector &pos, const byte color[4], float size )
{
// draw the particle
g_engfuncs.pTriAPI->Enable( TRI_SHADER );
gEngfuncs.pTriAPI->Enable( TRI_SHADER );
g_engfuncs.pTriAPI->RenderMode( kRenderTransTexture );
g_engfuncs.pTriAPI->Color4ub( color[0], color[1], color[2], color[3] );
gEngfuncs.pTriAPI->RenderMode( kRenderTransTexture );
gEngfuncs.pTriAPI->Color4ub( color[0], color[1], color[2], color[3] );
g_engfuncs.pTriAPI->Bind( hSprite, 0 );
gEngfuncs.pTriAPI->Bind( hSprite, 0 );
if ( hSprite == m_hDefaultParticle )
{
@ -175,22 +175,22 @@ void CParticleSystem :: DrawParticle( HSPRITE hSprite, const Vector &pos, const
up = gpViewParams->up * size;
// Add the 4 corner vertices.
g_engfuncs.pTriAPI->Begin( TRI_QUADS );
g_engfuncs.pTriAPI->TexCoord2f ( 0.0f, 1.0f );
g_engfuncs.pTriAPI->Vertex3fv ( pos - right + up );
gEngfuncs.pTriAPI->Begin( TRI_QUADS );
gEngfuncs.pTriAPI->TexCoord2f ( 0.0f, 1.0f );
gEngfuncs.pTriAPI->Vertex3fv ( pos - right + up );
g_engfuncs.pTriAPI->TexCoord2f ( 0.0f, 0.0f );
g_engfuncs.pTriAPI->Vertex3fv ( pos + right + up );
gEngfuncs.pTriAPI->TexCoord2f ( 0.0f, 0.0f );
gEngfuncs.pTriAPI->Vertex3fv ( pos + right + up );
g_engfuncs.pTriAPI->TexCoord2f ( 1.0f, 0.0f );
g_engfuncs.pTriAPI->Vertex3fv ( pos + right - up );
gEngfuncs.pTriAPI->TexCoord2f ( 1.0f, 0.0f );
gEngfuncs.pTriAPI->Vertex3fv ( pos + right - up );
g_engfuncs.pTriAPI->TexCoord2f ( 1.0f, 1.0f );
g_engfuncs.pTriAPI->Vertex3fv ( pos - right - up );
gEngfuncs.pTriAPI->TexCoord2f ( 1.0f, 1.0f );
gEngfuncs.pTriAPI->Vertex3fv ( pos - right - up );
g_engfuncs.pTriAPI->End();
gEngfuncs.pTriAPI->End();
g_engfuncs.pTriAPI->Disable( TRI_SHADER );
gEngfuncs.pTriAPI->Disable( TRI_SHADER );
}
void CParticleSystem :: SimulateAndRender( CBaseParticle *pParticle )
@ -829,4 +829,15 @@ void CParticleSystem :: BulletTracer( const Vector& start, const Vector& end )
p->m_flLength = RANDOM_FLOAT( 0.05f, 0.06f );
p->m_Velocity = dir * vel;
p->pfnCallback = pfnBulletTracerDraw;
}
/*
===============
BulletImpactParticles
===============
*/
void CParticleSystem :: BulletImpactParticles( const Vector &pos )
{
// FIXME: implement
}

View File

@ -136,6 +136,7 @@ public:
void SparkleTracer( const Vector& pos, const Vector& dir );
void BulletTracer( const Vector& pos, const Vector& end );
void StreakTracer( const Vector& pos, const Vector& velocity, int color );
void BulletImpactParticles( const Vector &pos );
};
extern CParticleSystem *g_pParticles;

View File

@ -129,13 +129,13 @@ int CTempEnts::TE_Update( TEMPENTITY *pTemp )
// that the client has the player list. We run this code once when we detect any COLLIDEALL
// tent, then set this BOOL to true so the code doesn't get run again if there's more than
// one COLLIDEALL ent for this update. (often are).
g_engfuncs.pEventAPI->EV_SetUpPlayerPrediction( false, true );
gEngfuncs.pEventAPI->EV_SetUpPlayerPrediction( false, true );
// Store off the old count
g_engfuncs.pEventAPI->EV_PushPMStates();
gEngfuncs.pEventAPI->EV_PushPMStates();
// Now add in all of the players.
g_engfuncs.pEventAPI->EV_SetSolidPlayers ( -1 );
gEngfuncs.pEventAPI->EV_SetSolidPlayers ( -1 );
// save oldorigin
pTemp->entity.prevstate.origin = pTemp->entity.origin;
@ -147,7 +147,7 @@ int CTempEnts::TE_Update( TEMPENTITY *pTemp )
if( gpGlobals->time > pTemp->entity.baseline.scale )
{
// show Sparks
DoSparks( pTemp->entity.origin );
SparkShower( pTemp->entity.origin );
// reduce life
pTemp->entity.baseline.framerate -= 0.1f;
@ -172,9 +172,35 @@ int CTempEnts::TE_Update( TEMPENTITY *pTemp )
if( pClient )
{
if( EV_IsLocal( pClient->index ))
{
// NOTE: if this a local client ?
// relink attachment with her viewmodel
pClient = GetViewEntity();
}
pTemp->entity.origin = pClient->origin + pTemp->tentOffset;
}
}
// same as FTENT_PLYRATTACHMENT but offset will be updated every frame
else if( pTemp->flags & FTENT_ATTACHMENT )
{
cl_entity_t *pClient = GetEntityByIndex( pTemp->clientIndex );
if( pClient )
{
if( EV_IsLocal( pClient->index ))
{
// NOTE: if this a local client ?
// relink attachment with her viewmodel
pClient = GetViewEntity();
}
pTemp->entity.origin = pClient->origin;
if( pTemp->entity.baseline.body > 0 )
pTemp->entity.origin += pClient->attachment_origin[pTemp->entity.baseline.body - 1];
}
}
else if( pTemp->flags & FTENT_SINEWAVE )
{
pTemp->x += pTemp->entity.baseline.origin.x * frametime;
@ -214,7 +240,7 @@ int CTempEnts::TE_Update( TEMPENTITY *pTemp )
pTemp->die = 0.0f;
// restore state info
g_engfuncs.pEventAPI->EV_PopPMStates();
gEngfuncs.pEventAPI->EV_PopPMStates();
return false;
}
}
@ -253,12 +279,12 @@ int CTempEnts::TE_Update( TEMPENTITY *pTemp )
pmtrace_t pmtrace;
physent_t *pe;
g_engfuncs.pEventAPI->EV_SetTraceHull( 2 );
g_engfuncs.pEventAPI->EV_PlayerTrace( pTemp->entity.prevstate.origin, pTemp->entity.origin, PM_STUDIO_BOX, -1, &pmtrace );
gEngfuncs.pEventAPI->EV_SetTraceHull( 2 );
gEngfuncs.pEventAPI->EV_PlayerTrace( pTemp->entity.prevstate.origin, pTemp->entity.origin, PM_STUDIO_BOX, -1, &pmtrace );
if ( pmtrace.fraction != 1 )
{
pe = g_engfuncs.pEventAPI->EV_GetPhysent( pmtrace.ent );
pe = gEngfuncs.pEventAPI->EV_GetPhysent( pmtrace.ent );
if( !pmtrace.ent || ( pe->info != pTemp->clientIndex ))
{
@ -274,8 +300,8 @@ int CTempEnts::TE_Update( TEMPENTITY *pTemp )
{
pmtrace_t pmtrace;
g_engfuncs.pEventAPI->EV_SetTraceHull( 2 );
g_engfuncs.pEventAPI->EV_PlayerTrace( pTemp->entity.prevstate.origin, pTemp->entity.origin, PM_STUDIO_BOX|PM_WORLD_ONLY, -1, &pmtrace );
gEngfuncs.pEventAPI->EV_SetTraceHull( 2 );
gEngfuncs.pEventAPI->EV_PlayerTrace( pTemp->entity.prevstate.origin, pTemp->entity.origin, PM_STUDIO_BOX|PM_WORLD_ONLY, -1, &pmtrace );
if( pmtrace.fraction != 1.0f )
{
@ -355,7 +381,7 @@ int CTempEnts::TE_Update( TEMPENTITY *pTemp )
// FIXME: this code is right ???
if(( pTemp->flags & FTENT_FLICKER ) && m_iTempEntFrame == pTemp->entity.curstate.effects )
{
dlight_t *dl = g_engfuncs.pEfxAPI->CL_AllocDLight( 0 );
dlight_t *dl = gEngfuncs.pEfxAPI->CL_AllocDLight( 0 );
dl->origin = pTemp->entity.origin;
dl->radius = 60;
@ -378,7 +404,7 @@ int CTempEnts::TE_Update( TEMPENTITY *pTemp )
if( pTemp->flags & FTENT_CLIENTCUSTOM )
{
if( pTemp->callback )
(*pTemp->callback)( pTemp );
(*pTemp->callback)( pTemp, frametime, GetClientTime( ));
}
if( pTemp->flags & FTENT_WINDBLOWN )
@ -407,7 +433,7 @@ int CTempEnts::TE_Update( TEMPENTITY *pTemp )
}
// restore state info
g_engfuncs.pEventAPI->EV_PopPMStates();
gEngfuncs.pEventAPI->EV_PopPMStates();
return true;
}
@ -485,10 +511,10 @@ void CTempEnts::Clear( void )
m_iTempEntFrame = 0;
// update muzzleflash indexes
m_iMuzzleFlash[0] = g_engfuncs.pEventAPI->EV_FindModelIndex( "sprites/muzzleflash1.spr" );
m_iMuzzleFlash[1] = g_engfuncs.pEventAPI->EV_FindModelIndex( "sprites/muzzleflash2.spr" );
m_iMuzzleFlash[2] = g_engfuncs.pEventAPI->EV_FindModelIndex( "sprites/muzzleflash3.spr" );
m_iMuzzleFlash[3] = g_engfuncs.pEventAPI->EV_FindModelIndex( "sprites/muzzleflash.spr" );
m_iMuzzleFlash[0] = gEngfuncs.pEventAPI->EV_FindModelIndex( "sprites/muzzleflash1.spr" );
m_iMuzzleFlash[1] = gEngfuncs.pEventAPI->EV_FindModelIndex( "sprites/muzzleflash2.spr" );
m_iMuzzleFlash[2] = gEngfuncs.pEventAPI->EV_FindModelIndex( "sprites/muzzleflash3.spr" );
m_iMuzzleFlash[3] = gEngfuncs.pEventAPI->EV_FindModelIndex( "sprites/muzzleflash.spr" );
hSprGlowShell = TEX_Load( "renderfx/glowshell" );
@ -622,7 +648,7 @@ TEMPENTITY *CTempEnts::TempEntAllocNoModel( const Vector& org )
return TempEntAlloc( org, 0 );
}
TEMPENTITY *CTempEnts::TempEntAllocCustom( const Vector& org, int modelIndex, int high, ENTCALLBACK pfnCallback )
TEMPENTITY *CTempEnts::TempEntAllocCustom( const Vector& org, int modelIndex, int high, void ( *callback )( struct tempent_s *ent, float frametime, float currenttime ))
{
TEMPENTITY *pTemp;
@ -635,9 +661,9 @@ TEMPENTITY *CTempEnts::TempEntAllocCustom( const Vector& org, int modelIndex, in
pTemp = TempEntAlloc( org, modelIndex );
}
if( pTemp && pfnCallback )
if( pTemp && callback )
{
pTemp->callback = pfnCallback;
pTemp->callback = callback;
pTemp->flags |= FTENT_CLIENTCUSTOM;
}
@ -1043,7 +1069,7 @@ void CTempEnts::RocketFlare( const Vector& pos )
int modelIndex;
int nframeCount;
modelIndex = g_engfuncs.pEventAPI->EV_FindModelIndex( "sprites/animglow01.spr" );
modelIndex = gEngfuncs.pEventAPI->EV_FindModelIndex( "sprites/animglow01.spr" );
if( !modelIndex ) return;
nframeCount = GetModelFrames( modelIndex );
@ -1077,19 +1103,15 @@ void CTempEnts::MuzzleFlash( cl_entity_t *pEnt, int iAttachment, int type )
if( !modelIndex ) return;
frameCount = GetModelFrames( modelIndex );
pos = pEnt->origin;
if( iAttachment > 0 )
pos += pEnt->attachment_origin[iAttachment - 1];
if( pos == pEnt->origin )
if( iAttachment > 0 && pEnt->attachment_origin[iAttachment - 1] == g_vecZero )
{
Con_Printf( "Invalid muzzleflash entity!\n" );
return;
}
// must set position for right culling on render
pTemp = TempEntAlloc( pos, modelIndex );
pTemp = TempEntAlloc( pEnt->origin, modelIndex );
if( !pTemp ) return;
pTemp->entity.curstate.rendermode = kRenderTransAdd;
@ -1098,7 +1120,18 @@ void CTempEnts::MuzzleFlash( cl_entity_t *pEnt, int iAttachment, int type )
pTemp->die = gpGlobals->time + 0.05; // die at next frame
pTemp->entity.curstate.frame = RANDOM_LONG( 0, frameCount - 1 );
pTemp->frameMax = frameCount - 1;
pTemp->clientIndex = pEnt->index;
// because viewentity doesn't have a valid index
if( pEnt->curstate.entityType == ET_VIEWENTITY )
pTemp->clientIndex = GetLocalPlayer()->index;
else pTemp->clientIndex = pEnt->index;
if( iAttachment > 0 )
{
// store attachment as baseline->body
pTemp->entity.baseline.body = iAttachment;
pTemp->flags |= FTENT_ATTACHMENT;
}
if( index == 0 )
{
@ -1111,9 +1144,6 @@ void CTempEnts::MuzzleFlash( cl_entity_t *pEnt, int iAttachment, int type )
pTemp->entity.curstate.scale = scale;
pTemp->entity.angles[2] = RANDOM_LONG( 0, 359 );
}
// render now (guranteed that muzzleflash will be draw)
CL_AddEntity( &pTemp->entity, ET_TEMPENTITY, -1 );
}
void CTempEnts::BloodSprite( const Vector &org, int colorIndex, int modelIndex, int modelIndex2, float size )
@ -1224,11 +1254,11 @@ void CTempEnts::BreakModel( const Vector &pos, const Vector &size, const Vector
}
}
void CTempEnts::TempModel( const Vector &pos, const Vector &dir, const Vector &ang, float life, int modelIndex, int soundtype )
TEMPENTITY *CTempEnts::TempModel( const Vector &pos, const Vector &dir, const Vector &ang, float life, int modelIndex, int soundtype )
{
// alloc a new tempent
TEMPENTITY *pTemp = TempEntAlloc( pos, modelIndex );
if( !pTemp ) return;
if( !pTemp ) return NULL;
// keep track of shell type
switch( soundtype )
@ -1249,6 +1279,8 @@ void CTempEnts::TempModel( const Vector &pos, const Vector &dir, const Vector &a
pTemp->entity.curstate.rendermode = kRenderNormal;
pTemp->entity.baseline.renderamt = 255;
pTemp->die = gpGlobals->time + life;
return pTemp;
}
TEMPENTITY *CTempEnts::DefaultSprite( const Vector &pos, int spriteIndex, float framerate )
@ -1570,7 +1602,7 @@ void CTempEnts::Large_Funnel( Vector pos, int spriteIndex, int flags )
}
}
void CTempEnts::DoSparks( const Vector& pos )
void CTempEnts::SparkShower( const Vector& pos )
{
Vector m_vecPos, m_vecDir;
@ -1579,7 +1611,7 @@ void CTempEnts::DoSparks( const Vector& pos )
m_vecPos.y = pos.y + RANDOM_FLOAT( -2, 2 );
m_vecPos.z = pos.z + RANDOM_FLOAT( -2, 2 );
int modelIndex = g_engfuncs.pEventAPI->EV_FindModelIndex( "sprites/richo1.spr" );
int modelIndex = gEngfuncs.pEventAPI->EV_FindModelIndex( "sprites/richo1.spr" );
RicochetSprite( m_vecPos, modelIndex, RANDOM_FLOAT( 0.4, 0.6f ));
// create a 8 random spakle tracers
@ -1631,8 +1663,8 @@ void CTempEnts::PlaceDecal( Vector pos, int entityIndex, int decalIndex )
pEnt = GetEntityByIndex( entityIndex );
if( pEnt ) modelIndex = pEnt->curstate.modelindex;
hDecal = g_engfuncs.pEfxAPI->CL_DecalIndex( decalIndex );
g_engfuncs.pEfxAPI->R_DecalShoot( hDecal, entityIndex, modelIndex, pos, 0 );
hDecal = gEngfuncs.pEfxAPI->CL_DecalIndex( decalIndex );
gEngfuncs.pEfxAPI->R_DecalShoot( hDecal, entityIndex, modelIndex, pos, 0 );
}
void CTempEnts::PlaceDecal( Vector pos, int entityIndex, const char *decalname )
@ -1643,8 +1675,8 @@ void CTempEnts::PlaceDecal( Vector pos, int entityIndex, const char *decalname )
pEnt = GetEntityByIndex( entityIndex );
if( pEnt ) modelIndex = pEnt->curstate.modelindex;
hDecal = g_engfuncs.pEfxAPI->CL_DecalIndexFromName( decalname );
g_engfuncs.pEfxAPI->R_DecalShoot( hDecal, entityIndex, modelIndex, pos, 0 );
hDecal = gEngfuncs.pEfxAPI->CL_DecalIndexFromName( decalname );
gEngfuncs.pEfxAPI->R_DecalShoot( hDecal, entityIndex, modelIndex, pos, 0 );
}
void CTempEnts::AllocDLight( Vector pos, byte r, byte g, byte b, float radius, float time, float decay )
@ -1653,7 +1685,7 @@ void CTempEnts::AllocDLight( Vector pos, byte r, byte g, byte b, float radius, f
dlight_t *dl;
dl = g_engfuncs.pEfxAPI->CL_AllocDLight( 0 );
dl = gEngfuncs.pEfxAPI->CL_AllocDLight( 0 );
dl->origin = pos;
dl->die = gpGlobals->time + time;

View File

@ -6,11 +6,71 @@
#ifndef R_TEMPENTS_H
#define R_TEMPENTS_H
#include "effects_api.h"
//-----------------------------------------------------------------------------
// Purpose: implementation for temp entities
//-----------------------------------------------------------------------------
#include "tmpent_def.h"
#include "effects_api.h"
// TEMPENTITY priority
#define TENTPRIORITY_LOW 0
#define TENTPRIORITY_HIGH 1
// TEMPENTITY flags
#define FTENT_NONE 0
#define FTENT_SINEWAVE (1<<0)
#define FTENT_GRAVITY (1<<1)
#define FTENT_ROTATE (1<<2)
#define FTENT_SLOWGRAVITY (1<<3)
#define FTENT_SMOKETRAIL (1<<4)
#define FTENT_COLLIDEWORLD (1<<5)
#define FTENT_FLICKER (1<<6)
#define FTENT_FADEOUT (1<<7)
#define FTENT_SPRANIMATE (1<<8)
#define FTENT_HITSOUND (1<<9)
#define FTENT_SPIRAL (1<<10)
#define FTENT_SPRCYCLE (1<<11)
#define FTENT_COLLIDEALL (1<<12) // will collide with world and slideboxes
#define FTENT_PERSIST (1<<13) // tent is not removed when unable to draw
#define FTENT_COLLIDEKILL (1<<14) // tent is removed upon collision with anything
#define FTENT_PLYRATTACHMENT (1<<15) // tent is attached to a player (owner)
#define FTENT_SPRANIMATELOOP (1<<16) // animating sprite doesn't die when last frame is displayed
#define FTENT_SCALE (1<<17) // an experiment
#define FTENT_SPARKSHOWER (1<<18)
#define FTENT_NOMODEL (1<<19) // sets by engine, never draw (it just triggers other things)
#define FTENT_CLIENTCUSTOM (1<<20) // Must specify callback. Callback function is responsible
// for killing tempent and updating fields
// ( unless other flags specify how to do things )
#define FTENT_WINDBLOWN (1<<21) // This is set when the temp entity is blown by the wind
#define FTENT_NEVERDIE (1<<22) // Don't die as long as die != 0
#define FTENT_BEOCCLUDED (1<<23) // Don't draw if my specified normal's facing away from the view
#define FTENT_ATTACHMENT (1<<24) // This is a dynamically relinked attachment (update every frame)
typedef struct tempent_s TEMPENTITY;
struct tempent_s
{
int flags;
float die;
float frameMax; // this is also animtime for studiomodels
float x, y, z; // probably z isn't used
float fadeSpeed;
float bounceFactor;
int hitSound;
void (*hitcallback)( struct tempent_s *ent, struct pmtrace_s *ptr );
void (*callback)( struct tempent_s *ent, float frametime, float currenttime );
TEMPENTITY *next;
int priority; // 0 - low, 1 - high
short clientIndex; // if attached, this is the index of the client to stick to
// if COLLIDEALL, this is the index of the client to ignore
// TENTS with FTENT_PLYRATTACHMENT MUST set the clientindex!
vec3_t tentOffset; // if attached, client origin + tentOffset = tent origin.
cl_entity_t entity;
// baseline.origin - velocity
// baseline.renderamt - starting fadeout intensity
// baseline.angles - angle velocity
};
#define MAX_TEMP_ENTITIES 500
#define TENT_WIND_ACCEL 50
@ -33,7 +93,7 @@ public:
void BloodSprite( const Vector &org, int colorIndex, int modelIndex, int modelIndex2, float size );
void RicochetSprite( const Vector &pos, int modelIndex, float scale );
void MuzzleFlash( cl_entity_t *pEnt, int iAttachment, int type );
void TempModel( const Vector &pos, const Vector &dir, const Vector &ang, float life, int modelIndex, int soundtype );
TEMPENTITY *TempModel( const Vector &pos, const Vector &dir, const Vector &ang, float life, int modelIndex, int soundtype );
void BreakModel( const Vector &pos, const Vector &size, const Vector &dir, float random, float life, int count, int modelIndex, char flags );
void Bubbles( const Vector &mins, const Vector &maxs, float height, int modelIndex, int count, float speed );
void BubbleTrail( const Vector &start, const Vector &end, float height, int modelIndex, int count, float speed );
@ -56,7 +116,7 @@ public:
void AllocDLight( Vector pos, float radius, float time, float decay = 0.0f );
void RocketTrail( Vector start, Vector end, int type );
void Large_Funnel( Vector pos, int spriteIndex, int flags );
void DoSparks( const Vector& pos );
void SparkShower( const Vector& pos );
void StreakSplash( const Vector &pos, const Vector &dir, int color, int count, int speed, int velMin, int velMax );
// Data
private:
@ -78,7 +138,7 @@ public:
TEMPENTITY *TempEntAllocNoModel( const Vector& org );
TEMPENTITY *TempEntAlloc( const Vector& org, int modelindex );
TEMPENTITY *TempEntAllocHigh( const Vector& org, int modelIndex );
TEMPENTITY *TempEntAllocCustom( const Vector& org, int modelIndex, int high, ENTCALLBACK pfnCallback );
TEMPENTITY *TempEntAllocCustom( const Vector& org, int modelIndex, int high, void ( *callback )( struct tempent_s *ent, float frametime, float currenttime ));
// misc utility shaders
HSPRITE hSprGlowShell; // glowshell shader

View File

@ -43,7 +43,7 @@ static bool CullTracer( const Vector &start, const Vector &end )
}
// check bbox
if( g_engfuncs.pEfxAPI->R_CullBox( mins, maxs ) )
if( gEngfuncs.pEfxAPI->R_CullBox( mins, maxs ) )
return true; // culled
return false;
@ -66,8 +66,8 @@ static bool Tracer_ComputeVerts( const Vector &pos, const Vector &delta, float w
Vector screenStart, screenEnd;
// transform point into the screen space
g_engfuncs.pTriAPI->WorldToScreen( (float *)start, screenStart );
g_engfuncs.pTriAPI->WorldToScreen( (float *)end, screenEnd );
gEngfuncs.pTriAPI->WorldToScreen( (float *)start, screenStart );
gEngfuncs.pTriAPI->WorldToScreen( (float *)end, screenEnd );
Vector tmp, normal;
@ -103,26 +103,26 @@ void Tracer_Draw( HSPRITE hSprite, Vector& start, Vector& delta, float width, by
// NOTE: Gotta get the winding right so it's not backface culled
// (we need to turn of backface culling for these bad boys)
g_engfuncs.pTriAPI->Enable( TRI_SHADER );
g_engfuncs.pTriAPI->RenderMode( kRenderTransTexture );
if ( color ) g_engfuncs.pTriAPI->Color4ub( color[0], color[1], color[2], color[3] );
else g_engfuncs.pTriAPI->Color4ub( 255, 255, 255, 255 );
gEngfuncs.pTriAPI->Enable( TRI_SHADER );
gEngfuncs.pTriAPI->RenderMode( kRenderTransTexture );
if ( color ) gEngfuncs.pTriAPI->Color4ub( color[0], color[1], color[2], color[3] );
else gEngfuncs.pTriAPI->Color4ub( 255, 255, 255, 255 );
g_engfuncs.pTriAPI->Bind( hSprite, 0 );
g_engfuncs.pTriAPI->Begin( TRI_QUADS );
gEngfuncs.pTriAPI->Bind( hSprite, 0 );
gEngfuncs.pTriAPI->Begin( TRI_QUADS );
g_engfuncs.pTriAPI->TexCoord2f( 0.0f, endV );
g_engfuncs.pTriAPI->Vertex3fv( verts[2] );
gEngfuncs.pTriAPI->TexCoord2f( 0.0f, endV );
gEngfuncs.pTriAPI->Vertex3fv( verts[2] );
g_engfuncs.pTriAPI->TexCoord2f( 1.0f, endV );
g_engfuncs.pTriAPI->Vertex3fv( verts[3] );
gEngfuncs.pTriAPI->TexCoord2f( 1.0f, endV );
gEngfuncs.pTriAPI->Vertex3fv( verts[3] );
g_engfuncs.pTriAPI->TexCoord2f( 1.0f, startV );
g_engfuncs.pTriAPI->Vertex3fv( verts[1] );
gEngfuncs.pTriAPI->TexCoord2f( 1.0f, startV );
gEngfuncs.pTriAPI->Vertex3fv( verts[1] );
g_engfuncs.pTriAPI->TexCoord2f( 0.0f, startV );
g_engfuncs.pTriAPI->Vertex3fv( verts[0] );
gEngfuncs.pTriAPI->TexCoord2f( 0.0f, startV );
gEngfuncs.pTriAPI->Vertex3fv( verts[0] );
g_engfuncs.pTriAPI->End();
g_engfuncs.pTriAPI->Disable( TRI_SHADER );
gEngfuncs.pTriAPI->End();
gEngfuncs.pTriAPI->Disable( TRI_SHADER );
}

View File

@ -147,8 +147,8 @@ void ProcessRain( void )
vecEnd[2] = -4096;
pmtrace_t pmtrace;
g_engfuncs.pEventAPI->EV_SetTraceHull( 2 );
g_engfuncs.pEventAPI->EV_PlayerTrace( vecStart, vecStart + vecEnd, PM_STUDIO_IGNORE, -1, &pmtrace );
gEngfuncs.pEventAPI->EV_SetTraceHull( 2 );
gEngfuncs.pEventAPI->EV_PlayerTrace( vecStart, vecStart + vecEnd, PM_STUDIO_IGNORE, -1, &pmtrace );
if ( pmtrace.startsolid || pmtrace.allsolid )
{
@ -163,7 +163,7 @@ void ProcessRain( void )
{
// NOTE: in Xash3D PM_WaterEntity always return a valid water volume or NULL
// so not needs to run additional checks here
cl_entity_t *pWater = g_engfuncs.pfnWaterEntity( pmtrace.endpos );
cl_entity_t *pWater = gEngfuncs.pfnWaterEntity( pmtrace.endpos );
if ( pWater )
{
deathHeight = pWater->curstate.maxs[2];
@ -506,7 +506,7 @@ void SetPoint( float x, float y, float z, float (*matrix)[4] )
result.y = DotProduct( point, matrix[1] ) + matrix[1][3];
result.z = DotProduct( point, matrix[2] ) + matrix[2][3];
g_engfuncs.pTriAPI->Vertex3f( result[0], result[1], result[2] );
gEngfuncs.pTriAPI->Vertex3f( result[0], result[1], result[2] );
}
/*
@ -526,14 +526,14 @@ void DrawRain( void )
if ( gHUD.Rain.weatherMode == 0 )
{
// load rain sprite
int modelIndex = g_engfuncs.pEventAPI->EV_FindModelIndex( "sprites/hi_rain.spr" );
hsprDripTexture = g_engfuncs.pTriAPI->GetSpriteTexture( modelIndex, 0 );
int modelIndex = gEngfuncs.pEventAPI->EV_FindModelIndex( "sprites/hi_rain.spr" );
hsprDripTexture = gEngfuncs.pTriAPI->GetSpriteTexture( modelIndex, 0 );
}
else
{
// load snow sprite
int modelIndex = g_engfuncs.pEventAPI->EV_FindModelIndex( "sprites/snowflake.spr" );
hsprDripTexture = g_engfuncs.pTriAPI->GetSpriteTexture( modelIndex, 0 );
int modelIndex = gEngfuncs.pEventAPI->EV_FindModelIndex( "sprites/snowflake.spr" );
hsprDripTexture = gEngfuncs.pTriAPI->GetSpriteTexture( modelIndex, 0 );
}
}
if( hsprDripTexture <= 0 ) return;
@ -541,10 +541,10 @@ void DrawRain( void )
float visibleHeight = gHUD.Rain.globalHeight - SNOWFADEDIST;
// usual triapi stuff
g_engfuncs.pTriAPI->Enable( TRI_SHADER );
g_engfuncs.pTriAPI->Bind( hsprDripTexture, 0 );
g_engfuncs.pTriAPI->RenderMode( kRenderTransAdd );
g_engfuncs.pTriAPI->CullFace( TRI_NONE );
gEngfuncs.pTriAPI->Enable( TRI_SHADER );
gEngfuncs.pTriAPI->Bind( hsprDripTexture, 0 );
gEngfuncs.pTriAPI->RenderMode( kRenderTransAdd );
gEngfuncs.pTriAPI->CullFace( TRI_NONE );
// go through drips list
cl_drip *Drip = FirstChainDrip.p_Next;
@ -568,19 +568,19 @@ void DrawRain( void )
float shiftX = (Drip->xDelta / DRIPSPEED) * DRIP_SPRITE_HALFHEIGHT;
float shiftY = (Drip->yDelta / DRIPSPEED) * DRIP_SPRITE_HALFHEIGHT;
g_engfuncs.pTriAPI->Color4f( 1.0, 1.0, 1.0, Drip->alpha );
g_engfuncs.pTriAPI->Begin( TRI_TRIANGLES );
gEngfuncs.pTriAPI->Color4f( 1.0, 1.0, 1.0, Drip->alpha );
gEngfuncs.pTriAPI->Begin( TRI_TRIANGLES );
g_engfuncs.pTriAPI->TexCoord2f( 0, 0 );
g_engfuncs.pTriAPI->Vertex3f( Drip->origin[0]-toPlayer.y - shiftX, Drip->origin[1]+toPlayer.x - shiftY,Drip->origin[2] + DRIP_SPRITE_HALFHEIGHT );
gEngfuncs.pTriAPI->TexCoord2f( 0, 0 );
gEngfuncs.pTriAPI->Vertex3f( Drip->origin[0]-toPlayer.y - shiftX, Drip->origin[1]+toPlayer.x - shiftY,Drip->origin[2] + DRIP_SPRITE_HALFHEIGHT );
g_engfuncs.pTriAPI->TexCoord2f( 0.5, 1 );
g_engfuncs.pTriAPI->Vertex3f( Drip->origin[0] + shiftX, Drip->origin[1] + shiftY, Drip->origin[2]-DRIP_SPRITE_HALFHEIGHT );
gEngfuncs.pTriAPI->TexCoord2f( 0.5, 1 );
gEngfuncs.pTriAPI->Vertex3f( Drip->origin[0] + shiftX, Drip->origin[1] + shiftY, Drip->origin[2]-DRIP_SPRITE_HALFHEIGHT );
g_engfuncs.pTriAPI->TexCoord2f( 1, 0 );
g_engfuncs.pTriAPI->Vertex3f( Drip->origin[0]+toPlayer.y - shiftX, Drip->origin[1]-toPlayer.x - shiftY, Drip->origin[2]+DRIP_SPRITE_HALFHEIGHT);
gEngfuncs.pTriAPI->TexCoord2f( 1, 0 );
gEngfuncs.pTriAPI->Vertex3f( Drip->origin[0]+toPlayer.y - shiftX, Drip->origin[1]-toPlayer.x - shiftY, Drip->origin[2]+DRIP_SPRITE_HALFHEIGHT);
g_engfuncs.pTriAPI->End();
gEngfuncs.pTriAPI->End();
Drip = nextdDrip;
}
}
@ -605,26 +605,26 @@ void DrawRain( void )
// apply start fading effect
float alpha = (Drip->origin[2] <= visibleHeight) ? Drip->alpha : ((gHUD.Rain.globalHeight - Drip->origin[2]) / (float)SNOWFADEDIST) * Drip->alpha;
g_engfuncs.pTriAPI->Color4f( 1.0, 1.0, 1.0, alpha );
g_engfuncs.pTriAPI->Begin( TRI_QUADS );
gEngfuncs.pTriAPI->Color4f( 1.0, 1.0, 1.0, alpha );
gEngfuncs.pTriAPI->Begin( TRI_QUADS );
g_engfuncs.pTriAPI->TexCoord2f( 0, 0 );
gEngfuncs.pTriAPI->TexCoord2f( 0, 0 );
SetPoint( 0, SNOW_SPRITE_HALFSIZE, SNOW_SPRITE_HALFSIZE, matrix );
g_engfuncs.pTriAPI->TexCoord2f( 0, 1 );
gEngfuncs.pTriAPI->TexCoord2f( 0, 1 );
SetPoint( 0, SNOW_SPRITE_HALFSIZE, -SNOW_SPRITE_HALFSIZE, matrix );
g_engfuncs.pTriAPI->TexCoord2f( 1, 1 );
gEngfuncs.pTriAPI->TexCoord2f( 1, 1 );
SetPoint( 0, -SNOW_SPRITE_HALFSIZE, -SNOW_SPRITE_HALFSIZE, matrix );
g_engfuncs.pTriAPI->TexCoord2f( 1, 0 );
gEngfuncs.pTriAPI->TexCoord2f( 1, 0 );
SetPoint( 0, -SNOW_SPRITE_HALFSIZE, SNOW_SPRITE_HALFSIZE, matrix );
g_engfuncs.pTriAPI->End();
gEngfuncs.pTriAPI->End();
Drip = nextdDrip;
}
}
g_engfuncs.pTriAPI->Disable( TRI_SHADER );
gEngfuncs.pTriAPI->Disable( TRI_SHADER );
}
/*
@ -643,16 +643,16 @@ void DrawFXObjects( void )
if( hsprWaterRing == 0 ) // in case what we don't want search it if not found
{
// load water ring sprite
int modelIndex = g_engfuncs.pEventAPI->EV_FindModelIndex( "sprites/waterring.spr" );
hsprWaterRing = g_engfuncs.pTriAPI->GetSpriteTexture( modelIndex, 0 );
int modelIndex = gEngfuncs.pEventAPI->EV_FindModelIndex( "sprites/waterring.spr" );
hsprWaterRing = gEngfuncs.pTriAPI->GetSpriteTexture( modelIndex, 0 );
}
if( hsprWaterRing <= 0 ) return; // don't waste time
g_engfuncs.pTriAPI->Enable( TRI_SHADER );
g_engfuncs.pTriAPI->Bind( hsprWaterRing, 0 );
g_engfuncs.pTriAPI->RenderMode( kRenderTransAdd );
g_engfuncs.pTriAPI->CullFace( TRI_NONE );
gEngfuncs.pTriAPI->Enable( TRI_SHADER );
gEngfuncs.pTriAPI->Bind( hsprWaterRing, 0 );
gEngfuncs.pTriAPI->RenderMode( kRenderTransAdd );
gEngfuncs.pTriAPI->CullFace( TRI_NONE );
// go through objects list
cl_rainfx* curFX = FirstChainFX.p_Next;
@ -666,28 +666,28 @@ void DrawFXObjects( void )
float color[3];
// UNDONE: calc lighting right
g_engfuncs.pEfxAPI->R_LightForPoint( (const float *)curFX->origin, color );
gEngfuncs.pEfxAPI->R_LightForPoint( (const float *)curFX->origin, color );
// Con_Printf( "color %g %g %g\n", color[0], color[1], color[2] );
g_engfuncs.pTriAPI->Color4f( 0.4 + color[0], 0.4 + color[1], 0.4 + color[2], alpha );
g_engfuncs.pTriAPI->Begin( TRI_QUADS );
gEngfuncs.pTriAPI->Color4f( 0.4 + color[0], 0.4 + color[1], 0.4 + color[2], alpha );
gEngfuncs.pTriAPI->Begin( TRI_QUADS );
g_engfuncs.pTriAPI->TexCoord2f( 0, 0 );
g_engfuncs.pTriAPI->Vertex3f( curFX->origin[0] - size, curFX->origin[1] - size, curFX->origin[2] );
gEngfuncs.pTriAPI->TexCoord2f( 0, 0 );
gEngfuncs.pTriAPI->Vertex3f( curFX->origin[0] - size, curFX->origin[1] - size, curFX->origin[2] );
g_engfuncs.pTriAPI->TexCoord2f( 0, 1 );
g_engfuncs.pTriAPI->Vertex3f( curFX->origin[0] - size, curFX->origin[1] + size, curFX->origin[2] );
gEngfuncs.pTriAPI->TexCoord2f( 0, 1 );
gEngfuncs.pTriAPI->Vertex3f( curFX->origin[0] - size, curFX->origin[1] + size, curFX->origin[2] );
g_engfuncs.pTriAPI->TexCoord2f( 1, 1 );
g_engfuncs.pTriAPI->Vertex3f( curFX->origin[0] + size, curFX->origin[1] + size, curFX->origin[2] );
gEngfuncs.pTriAPI->TexCoord2f( 1, 1 );
gEngfuncs.pTriAPI->Vertex3f( curFX->origin[0] + size, curFX->origin[1] + size, curFX->origin[2] );
g_engfuncs.pTriAPI->TexCoord2f( 1, 0 );
g_engfuncs.pTriAPI->Vertex3f( curFX->origin[0] + size, curFX->origin[1] - size, curFX->origin[2] );
gEngfuncs.pTriAPI->TexCoord2f( 1, 0 );
gEngfuncs.pTriAPI->Vertex3f( curFX->origin[0] + size, curFX->origin[1] - size, curFX->origin[2] );
g_engfuncs.pTriAPI->End();
gEngfuncs.pTriAPI->End();
curFX = nextFX;
}
g_engfuncs.pTriAPI->Disable( TRI_SHADER );
gEngfuncs.pTriAPI->Disable( TRI_SHADER );
}
/*

View File

@ -22,7 +22,7 @@ void EV_DrawBeam ( void )
cl_entity_t *view = GetViewModel();
float life = 1.05; // animtime
int m_iBeam = g_engfuncs.pEventAPI->EV_FindModelIndex( "sprites/plasma.spr" );
int m_iBeam = gEngfuncs.pEventAPI->EV_FindModelIndex( "sprites/plasma.spr" );
int idx = GetLocalPlayer()->index; // link with client
g_pViewRenderBeams->CreateBeamEnts( idx | 0x1000, idx | 0x2000, m_iBeam, life, 0.8, 0.5, 127, 0.6, 0, 10, 20, 100, 0 );
@ -42,7 +42,7 @@ void EV_EjectShell( const mstudioevent_t *event, cl_entity_t *entity )
float fR, fU;
int shell = g_engfuncs.pEventAPI->EV_FindModelIndex( event->options );
int shell = gEngfuncs.pEventAPI->EV_FindModelIndex( event->options );
origin.z = origin.z - entity->curstate.usehull ? 12 : 28;
for( int j = 0; j < 3; j++ )

View File

@ -232,6 +232,36 @@ void AngleMatrix( const vec3_t angles, float (*matrix)[4] )
matrix[2][3] = 0.0;
}
// g-cont. copied here from pm_math.cpp
void VectorAngles( const Vector &forward, Vector &angles )
{
float tmp, yaw, pitch;
if (forward[1] == 0 && forward[0] == 0)
{
yaw = 0;
if (forward[2] > 0)
pitch = 90;
else
pitch = 270;
}
else
{
yaw = (atan2(forward[1], forward[0]) * 180 / M_PI);
if (yaw < 0)
yaw += 360;
tmp = sqrt (forward[0]*forward[0] + forward[1]*forward[1]);
pitch = (atan2(forward[2], tmp) * 180 / M_PI);
if (pitch < 0)
pitch += 360;
}
angles[0] = pitch;
angles[1] = yaw;
angles[2] = 0;
}
//
// hl2 fade - this supports multiple fading
// FIXME: make Class CHudFade instead of C-style code?
@ -436,13 +466,13 @@ UTIL_Probe
client explosion utility
====================
*/
float UTIL_Probe( const Vector &origin, Vector *vecDirection, float strength )
float UTIL_Probe( Vector &origin, Vector *vecDirection, float strength )
{
// press out
Vector endpos = origin + (( *vecDirection ) * strength );
// Trace into the world
pmtrace_t *trace = g_engfuncs.PM_TraceLine( origin, endpos, PM_TRACELINE_PHYSENTSONLY, 2, -1 );
pmtrace_t *trace = gEngfuncs.PM_TraceLine( origin, endpos, PM_TRACELINE_PHYSENTSONLY, 2, -1 );
// push back a proportional amount to the probe
(*vecDirection) = -(*vecDirection) * (1.0f - trace->fraction);
@ -453,7 +483,7 @@ float UTIL_Probe( const Vector &origin, Vector *vecDirection, float strength )
return (1.0f - trace->fraction);
}
void UTIL_GetForceDirection( const Vector &origin, float magnitude, Vector *resultDirection, float *resultForce )
void UTIL_GetForceDirection( Vector &origin, float magnitude, Vector *resultDirection, float *resultForce )
{
Vector d[6];

View File

@ -6,7 +6,7 @@
#ifndef UTILS_H
#define UTILS_H
extern cl_enginefuncs_t g_engfuncs;
extern cl_enginefuncs_t gEngfuncs;
#include "event_api.h"
#include "enginecallback.h"
@ -38,7 +38,7 @@ void DBG_AssertFunction( BOOL fExpr, const char* szExpr, const char* szFile, int
#ifdef _DEBUG
#define GetEntityByIndex(e) DBG_GetEntityByIndex( e, __FILE__, __LINE__ )
#else
#define GetEntityByIndex (*g_engfuncs.pfnGetEntityByIndex)
#define GetEntityByIndex (*gEngfuncs.pfnGetEntityByIndex)
#endif
extern DLL_GLOBAL const Vector g_vecZero;
@ -90,7 +90,7 @@ typedef struct dllfunction_s
#include "cvardef.h"
// macros to hook function calls into the HUD object
#define HOOK_MESSAGE( x ) (*g_engfuncs.pfnHookUserMsg)( #x, __MsgFunc_##x );
#define HOOK_MESSAGE( x ) (*gEngfuncs.pfnHookUserMsg)( #x, __MsgFunc_##x );
#define DECLARE_MESSAGE( y, x ) int __MsgFunc_##x(const char *pszName, int iSize, void *pbuf) \
{ \
@ -102,7 +102,7 @@ typedef struct dllfunction_s
return gHUD.MsgFunc_##x(pszName, iSize, pbuf ); \
}
#define HOOK_COMMAND( x, y ) (*g_engfuncs.pfnAddCommand)( x, __CmdFunc_##y, "user-defined command" );
#define HOOK_COMMAND( x, y ) (*gEngfuncs.pfnAddCommand)( x, __CmdFunc_##y, "user-defined command" );
#define DECLARE_HUDCOMMAND( x ) void __CmdFunc_##x( void ) \
{ \
gHUD.UserCmd_##x( ); \
@ -195,7 +195,7 @@ inline int ConsoleStringLen( const char *string )
inline cl_entity_t *DBG_GetEntityByIndex( int entnum, const char *file, const int line )
{
DBG_AssertFunction(( entnum >= 0 && entnum < gpGlobals->numEntities ), "Invalid entnum", file, line, NULL );
return (*g_engfuncs.pfnGetEntityByIndex)( entnum );
return (*gEngfuncs.pfnGetEntityByIndex)( entnum );
}
#endif
@ -214,8 +214,7 @@ extern float READ_HIRESANGLE( void );
extern void END_READ( void );
// misc utilities
extern float UTIL_Probe( const Vector &origin, Vector *vecDirection, float strength );
extern void UTIL_GetForceDirection( const Vector &origin, float magnitude, Vector *resultDirection, float *resultForce );
extern void UTIL_GetForceDirection( Vector &origin, float magnitude, Vector *resultDirection, float *resultForce );
extern void RotatePointAroundVector( Vector &dst, const Vector &dir, const Vector &point, float degrees );
// client fade
@ -236,6 +235,7 @@ extern void Tracer_Draw( HSPRITE hSpr, Vector& start, Vector& delta, float width
// mathlib
extern void AngleMatrix( const vec3_t angles, float (*matrix)[4] );
extern void VectorAngles( const Vector &forward, Vector &angles );
// from cl_view.c
extern void DrawProgressBar( void );

View File

@ -116,30 +116,30 @@ void V_PunchAxis( int axis, float punch )
//==========================
void V_Init( void )
{
scr_ofsx = g_engfuncs.pfnRegisterVariable( "scr_ofsx", "0", 0, "screen offset by X" );
scr_ofsy = g_engfuncs.pfnRegisterVariable( "scr_ofsy", "0", 0, "screen offset by Y" );
scr_ofsz = g_engfuncs.pfnRegisterVariable( "scr_ofsz", "0", 0, "screen offset by Z" );
r_studio_lerping = g_engfuncs.pfnRegisterVariable( "r_studio_lerping", "1", FCVAR_ARCHIVE, "enables studio model animation lerping" ); // get copy of engine cvar
scr_ofsx = gEngfuncs.pfnRegisterVariable( "scr_ofsx", "0", 0, "screen offset by X" );
scr_ofsy = gEngfuncs.pfnRegisterVariable( "scr_ofsy", "0", 0, "screen offset by Y" );
scr_ofsz = gEngfuncs.pfnRegisterVariable( "scr_ofsz", "0", 0, "screen offset by Z" );
r_studio_lerping = gEngfuncs.pfnRegisterVariable( "r_studio_lerping", "1", FCVAR_ARCHIVE, "enables studio model animation lerping" ); // get copy of engine cvar
cl_vsmoothing = g_engfuncs.pfnRegisterVariable( "cl_vsmoothing", "0.05", 0, "enables lepring in multiplayer" );
cl_stairsmooth = g_engfuncs.pfnRegisterVariable( "cl_vstairsmooth", "100", FCVAR_ARCHIVE, "how fast your view moves upward/downward when running up/down stairs" );
cl_vsmoothing = gEngfuncs.pfnRegisterVariable( "cl_vsmoothing", "0.05", 0, "enables lepring in multiplayer" );
cl_stairsmooth = gEngfuncs.pfnRegisterVariable( "cl_vstairsmooth", "100", FCVAR_ARCHIVE, "how fast your view moves upward/downward when running up/down stairs" );
v_iyaw_cycle = g_engfuncs.pfnRegisterVariable( "v_iyaw_cycle", "2", 0, "viewing inverse yaw cycle" );
v_iroll_cycle = g_engfuncs.pfnRegisterVariable( "v_iroll_cycle", "0.5", 0, "viewing inverse roll cycle" );
v_ipitch_cycle = g_engfuncs.pfnRegisterVariable( "v_ipitch_cycle", "1", 0, "viewing inverse pitch cycle" );
v_iyaw_level = g_engfuncs.pfnRegisterVariable( "v_iyaw_level", "0.3", 0, "viewing inverse yaw level" );
v_iroll_level = g_engfuncs.pfnRegisterVariable( "v_iroll_level", "0.1", 0, "viewing inverse roll level" );
v_ipitch_level = g_engfuncs.pfnRegisterVariable( "v_iyaw_level", "0.3", 0, "viewing inverse pitch level" );
v_dark = g_engfuncs.pfnRegisterVariable( "v_dark", "0", 0, "gross hack to make first frame black. half-life legacy" );
v_iyaw_cycle = gEngfuncs.pfnRegisterVariable( "v_iyaw_cycle", "2", 0, "viewing inverse yaw cycle" );
v_iroll_cycle = gEngfuncs.pfnRegisterVariable( "v_iroll_cycle", "0.5", 0, "viewing inverse roll cycle" );
v_ipitch_cycle = gEngfuncs.pfnRegisterVariable( "v_ipitch_cycle", "1", 0, "viewing inverse pitch cycle" );
v_iyaw_level = gEngfuncs.pfnRegisterVariable( "v_iyaw_level", "0.3", 0, "viewing inverse yaw level" );
v_iroll_level = gEngfuncs.pfnRegisterVariable( "v_iroll_level", "0.1", 0, "viewing inverse roll level" );
v_ipitch_level = gEngfuncs.pfnRegisterVariable( "v_iyaw_level", "0.3", 0, "viewing inverse pitch level" );
v_dark = gEngfuncs.pfnRegisterVariable( "v_dark", "0", 0, "gross hack to make first frame black. half-life legacy" );
cl_weaponlag = g_engfuncs.pfnRegisterVariable( "v_viewmodel_lag", "0.0", FCVAR_ARCHIVE, "add some lag to viewmodel like in HL2" );
cl_bobcycle = g_engfuncs.pfnRegisterVariable( "cl_bobcycle","0.8", 0, "bob full cycle" );
cl_bob = g_engfuncs.pfnRegisterVariable( "cl_bob", "0.01", 0, "bob value" );
cl_bobup = g_engfuncs.pfnRegisterVariable( "cl_bobup", "0.5", 0, "bob upper limit" );
cl_waterdist = g_engfuncs.pfnRegisterVariable( "cl_waterdist", "4", 0, "distance between viewofs and water plane" );
cl_chasedist = g_engfuncs.pfnRegisterVariable( "cl_chasedist", "112", 0, "max distance to chase camera" );
g_engfuncs.pfnAddCommand( "thirdperson", V_ThirdPerson, "change camera to thirdperson" );
g_engfuncs.pfnAddCommand( "firstperson", V_FirstPerson, "change camera to firstperson" );
cl_weaponlag = gEngfuncs.pfnRegisterVariable( "v_viewmodel_lag", "0.0", FCVAR_ARCHIVE, "add some lag to viewmodel like in HL2" );
cl_bobcycle = gEngfuncs.pfnRegisterVariable( "cl_bobcycle","0.8", 0, "bob full cycle" );
cl_bob = gEngfuncs.pfnRegisterVariable( "cl_bob", "0.01", 0, "bob value" );
cl_bobup = gEngfuncs.pfnRegisterVariable( "cl_bobup", "0.5", 0, "bob upper limit" );
cl_waterdist = gEngfuncs.pfnRegisterVariable( "cl_waterdist", "4", 0, "distance between viewofs and water plane" );
cl_chasedist = gEngfuncs.pfnRegisterVariable( "cl_chasedist", "112", 0, "max distance to chase camera" );
gEngfuncs.pfnAddCommand( "thirdperson", V_ThirdPerson, "change camera to thirdperson" );
gEngfuncs.pfnAddCommand( "firstperson", V_FirstPerson, "change camera to firstperson" );
}
//==========================
@ -364,7 +364,7 @@ void V_PreRender( ref_params_t *pparams )
void V_CalcGlobalFog( ref_params_t *pparams )
{
int bOn = (pparams->waterlevel < 2) && (gHUD.m_flStartDist > 0) && (gHUD.m_flEndDist > 0 && gHUD.m_flStartDist);
g_engfuncs.pTriAPI->Fog( gHUD.m_vecFogColor, gHUD.m_flStartDist, gHUD.m_flEndDist, bOn );
gEngfuncs.pTriAPI->Fog( gHUD.m_vecFogColor, gHUD.m_flStartDist, gHUD.m_flEndDist, bOn );
}
//==========================
@ -488,7 +488,7 @@ void V_GetChaseOrigin( Vector angles, Vector origin, float distance, Vector &res
while( maxLoops > 0 )
{
trace = g_engfuncs.PM_TraceLine( vecStart, vecEnd, PM_TRACELINE_PHYSENTSONLY, 2, ignoreent );
trace = gEngfuncs.PM_TraceLine( vecStart, vecEnd, PM_TRACELINE_PHYSENTSONLY, 2, ignoreent );
if( trace->ent <= 0 ) break; // we hit the world or nothing, stop trace
ent = GetEntityByIndex( PM_GetPhysEntInfo( trace->ent ));
@ -767,7 +767,7 @@ float V_CalcWaterLevel( ref_params_t *pparams )
float waterDist = cl_waterdist->value;
Vector point;
cl_entity_t *pwater = g_engfuncs.pfnWaterEntity( pparams->simorg );
cl_entity_t *pwater = gEngfuncs.pfnWaterEntity( pparams->simorg );
if( pwater ) waterDist += ( pwater->curstate.scale * 16 );
point = pparams->vieworg;

View File

@ -6,14 +6,11 @@
#define CLGAME_API_H
typedef int HSPRITE; // handle to a graphic
typedef struct tempent_s TEMPENTITY;
typedef struct dlight_s dlight_t;
typedef struct usercmd_s usercmd_t;
typedef struct skyportal_s skyportal_t;
typedef struct ref_params_s ref_params_t;
typedef struct mstudioevent_s mstudioevent_t;
typedef void (*ENTCALLBACK)( TEMPENTITY *ent );
typedef void (*HITCALLBACK)( TEMPENTITY *ent, struct pmtrace_s *ptr );
typedef int (*pfnUserMsgHook)( const char *pszName, int iSize, void *pbuf ); // user message handle
#include "wrect.h"
@ -203,9 +200,9 @@ typedef struct cl_enginefuncs_s
float (*pfnGetClientTime)( void ); // can use gpGlobals->time instead
void (*pfnFadeClientVolume)( float fadePercent, float fadeOutSeconds, float holdTime, float fadeInSeconds ); // was V_CalcShake
int (*pfnPointContents)( const float *rgflPos, int *truecontents );
int (*PM_PointContents)( const float *rgflPos, int *truecontents );
struct cl_entity_s *(*pfnWaterEntity)( const float *rgflPos );
struct pmtrace_s *(*PM_TraceLine)( const float *start, const float *end, int flags, int usehull, int ignore_pe );
struct pmtrace_s *(*PM_TraceLine)( float *start, float *end, int flags, int usehull, int ignore_pe );
modtype_t (*pfnGetModelType)( int modelIndex );
void (*pfnGetModBounds)( int modelIndex, float *mins, float *maxs );

View File

@ -156,7 +156,7 @@ typedef struct local_state_s
{
entity_state_t playerstate;
clientdata_t client;
weapon_data_t weapondata[32]; // WEAPON_BACKUP
weapon_data_t weapondata[32]; // store 32 weapons
} local_state_t;
#endif//ENTITY_STATE_H

View File

@ -49,7 +49,7 @@ typedef struct event_api_s
void (*EV_WeaponAnimation)( int sequence, int body );
word (*EV_PrecacheEvent)( int type, const char* psz );
void (*EV_PlaybackEvent)( int flags, const struct cl_entity_s *pInvoker, word eventindex, float delay, float *origin, float *angles, float fparam1, float fparam2, int iparam1, int iparam2, int bparam1, int bparam2 );
const char *(*EV_TraceTexture)( int ground, const float *v1, const float *v2 );
const char *(*EV_TraceTexture)( int ground, float *vstart, float *vend );
void (*EV_StopAllSounds)( int ent, int entchannel );
void (*EV_KillEvents)( int entnum, const char *eventname );
} event_api_t;

View File

@ -1055,9 +1055,6 @@ int AddToFullPack( struct entity_state_s *state, int e, edict_t *ent, edict_t *h
// Copy state data
//
#ifdef DEBUG
strncpy( state->classname, STRING( ent->v.classname ), sizeof( state->classname ));
#endif
// Round animtime to nearest millisecond
state->animtime = (int)(1000.0 * ent->v.animtime ) / 1000.0;
@ -1170,6 +1167,9 @@ Creates baselines used for network encoding, especially for player data since pl
void CreateBaseline( int player, int eindex, struct entity_state_s *baseline, struct edict_s *entity, int playermodelindex, vec3_t player_mins, vec3_t player_maxs )
{
#ifdef DEBUG
// NOTE: edit delta.lst if you want to get it work: add new field
// DEFINE_DELTA( classname, DT_STRING, 1, 1.0 ),
// into Entity_Encode, Player_Encode and Custom_Encode structures
strncpy( baseline->classname, STRING( entity->v.classname ), sizeof( baseline->classname ));
#endif
baseline->origin = entity->v.origin;

View File

@ -152,6 +152,13 @@ void CCrowbar::PrimaryAttack()
}
}
void CCrowbar::Smack( )
{
DecalGunshot( &m_trHit, BULLET_PLAYER_CROWBAR );
}
void CCrowbar::SwingAgain( void )
{
Swing( 0 );
@ -201,6 +208,10 @@ int CCrowbar::Swing( int fFirst )
{
if ( fFirst )
{
PLAYBACK_EVENT_FULL( flags, m_pPlayer->edict(), m_usCrowbar,
0.0, (float *)&g_vecZero, (float *)&g_vecZero, 0, 0, 0,
0.0, 0, 0.0 );
// miss
m_flNextPrimaryAttack = m_pPlayer->WeaponTimeBase() + 0.5;
@ -210,6 +221,16 @@ int CCrowbar::Swing( int fFirst )
}
else
{
switch( ((m_iSwing++) % 2) + 1 )
{
case 0:
SendWeaponAnim( CROWBAR_ATTACK1HIT ); break;
case 1:
SendWeaponAnim( CROWBAR_ATTACK2HIT ); break;
case 2:
SendWeaponAnim( CROWBAR_ATTACK3HIT ); break;
}
// player "shoot" animation
m_pPlayer->SetAnimation( PLAYER_ATTACK1 );
@ -241,15 +262,19 @@ int CCrowbar::Swing( int fFirst )
{
if ( pEntity->Classify() != CLASS_NONE && pEntity->Classify() != CLASS_MACHINE )
{
bHit = TRUE;//play hitbody sound on client
// play thwack or smack sound
switch( RANDOM_LONG(0,2) )
{
case 0:
EMIT_SOUND(ENT(m_pPlayer->pev), CHAN_ITEM, "weapons/cbar_hitbod1.wav", 1, ATTN_NORM); break;
case 1:
EMIT_SOUND(ENT(m_pPlayer->pev), CHAN_ITEM, "weapons/cbar_hitbod2.wav", 1, ATTN_NORM); break;
case 2:
EMIT_SOUND(ENT(m_pPlayer->pev), CHAN_ITEM, "weapons/cbar_hitbod3.wav", 1, ATTN_NORM); break;
}
m_pPlayer->m_iWeaponVolume = CROWBAR_BODYHIT_VOLUME;
if ( !pEntity->IsAlive() )
{
PLAYBACK_EVENT_FULL( flags, m_pPlayer->edict(), m_usCrowbar,
0.0, (float *)&g_vecZero, (float *)&g_vecZero, 0, 0, 0,
fFirst, bHit, 0 );
return TRUE;
}
return TRUE;
else
flVol = 0.1;
@ -257,15 +282,45 @@ int CCrowbar::Swing( int fFirst )
}
}
// play texture hit sound
// UNDONE: Calculate the correct point of intersection when we hit with the hull instead of the line
if (fHitWorld)
{
float fvolbar = TEXTURETYPE_PlaySound(&tr, vecSrc, vecSrc + (vecEnd-vecSrc)*2, BULLET_PLAYER_CROWBAR);
if ( g_pGameRules->IsMultiplayer() )
{
// override the volume here, cause we don't play texture sounds in multiplayer,
// and fvolbar is going to be 0 from the above call.
fvolbar = 1;
}
// also play crowbar strike
switch( RANDOM_LONG(0,1) )
{
case 0:
EMIT_SOUND_DYN(ENT(m_pPlayer->pev), CHAN_ITEM, "weapons/cbar_hit1.wav", fvolbar, ATTN_NORM, 0, 98 + RANDOM_LONG(0,3));
break;
case 1:
EMIT_SOUND_DYN(ENT(m_pPlayer->pev), CHAN_ITEM, "weapons/cbar_hit2.wav", fvolbar, ATTN_NORM, 0, 98 + RANDOM_LONG(0,3));
break;
}
// delay the decal a bit
m_trHit = tr;
}
m_pPlayer->m_iWeaponVolume = flVol * CROWBAR_WALLHIT_VOLUME;
#endif
m_flNextPrimaryAttack = m_pPlayer->WeaponTimeBase() + 0.25;
SetThink( Smack );
pev->nextthink = m_pPlayer->WeaponTimeBase() + 0.2;
}
PLAYBACK_EVENT_FULL( flags, m_pPlayer->edict(), m_usCrowbar,
0.0, (float *)&g_vecZero, (float *)&g_vecZero, 0, 0, 0,
fFirst, bHit, 0 );
return fDidHit;
}

View File

@ -465,7 +465,6 @@ void CEgon::CreateEffect( void )
void CEgon::DestroyEffect( void )
{
#ifndef CLIENT_DLL
if ( m_pBeam )
{
@ -486,7 +485,6 @@ void CEgon::DestroyEffect( void )
m_pSprite = NULL;
}
#endif
}

View File

@ -184,6 +184,17 @@ void CGauss::SecondaryAttack()
return;
}
int flags;
if( IsLocalWeapon( ))
{
flags = FEV_NOTHOST;
}
else
{
flags = 0;
}
if ( m_fInAttack == 0 )
{
if ( m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0 )
@ -207,7 +218,7 @@ void CGauss::SecondaryAttack()
m_pPlayer->m_flStartCharge = gpGlobals->time;
m_pPlayer->m_flAmmoStartCharge = m_pPlayer->WeaponTimeBase() + GetFullChargeTime();
PLAYBACK_EVENT_FULL( FEV_NOTHOST, m_pPlayer->edict(), m_usGaussSpin, 0.0, (float *)&g_vecZero, (float *)&g_vecZero, 0.0, 0.0, 110, 0, 0, 0 );
PLAYBACK_EVENT_FULL( flags, m_pPlayer->edict(), m_usGaussSpin, 0.0, (float *)&g_vecZero, (float *)&g_vecZero, 0.0, 0.0, 110, 0, 0, 0 );
m_iSoundState = SND_CHANGE_PITCH;
}
@ -261,7 +272,7 @@ void CGauss::SecondaryAttack()
if ( m_iSoundState == 0 )
ALERT( at_console, "sound state %d\n", m_iSoundState );
PLAYBACK_EVENT_FULL( FEV_NOTHOST, m_pPlayer->edict(), m_usGaussSpin, 0.0, (float *)&g_vecZero, (float *)&g_vecZero, 0.0, 0.0, pitch, 0, ( m_iSoundState == SND_CHANGE_PITCH ) ? 1 : 0, 0 );
PLAYBACK_EVENT_FULL( flags, m_pPlayer->edict(), m_usGaussSpin, 0.0, (float *)&g_vecZero, (float *)&g_vecZero, 0.0, 0.0, pitch, 0, ( m_iSoundState == SND_CHANGE_PITCH ) ? 1 : 0, 0 );
m_iSoundState = SND_CHANGE_PITCH; // hack for going through level transitions
@ -372,15 +383,25 @@ void CGauss::Fire( Vector vecOrigSrc, Vector vecDir, float flDamage )
if ( m_fPrimaryFire == false )
g_irunninggausspred = true;
#endif
int flags;
if( IsLocalWeapon( ))
{
flags = FEV_NOTHOST;
}
else
{
flags = 0;
}
// The main firing event is sent unreliably so it won't be delayed.
PLAYBACK_EVENT_FULL( FEV_NOTHOST, m_pPlayer->edict(), m_usGaussFire, 0.0, (float *)&m_pPlayer->pev->origin, (float *)&m_pPlayer->pev->angles, flDamage, 0.0, 0, 0, m_fPrimaryFire ? 1 : 0, 0 );
PLAYBACK_EVENT_FULL( flags, m_pPlayer->edict(), m_usGaussFire, 0.0, (float *)&m_pPlayer->pev->origin, (float *)&m_pPlayer->pev->angles, flDamage, 0.0, 0, 0, m_fPrimaryFire ? 1 : 0, 0 );
// This reliable event is used to stop the spinning sound
// It's delayed by a fraction of second to make sure it is delayed by 1 frame on the client
// It's sent reliably anyway, which could lead to other delays
PLAYBACK_EVENT_FULL( FEV_NOTHOST | FEV_RELIABLE, m_pPlayer->edict(), m_usGaussFire, 0.01, (float *)&m_pPlayer->pev->origin, (float *)&m_pPlayer->pev->angles, 0.0, 0.0, 0, 0, 0, 1 );
PLAYBACK_EVENT_FULL( flags | FEV_RELIABLE, m_pPlayer->edict(), m_usGaussFire, 0.01, (float *)&m_pPlayer->pev->origin, (float *)&m_pPlayer->pev->angles, 0.0, 0.0, 0, 0, 0, 1 );
/*ALERT( at_console, "%f %f %f\n%f %f %f\n",

View File

@ -1,347 +0,0 @@
<html>
<body>
<pre>
<h1>Build Log</h1>
<h3>
--------------------Configuration: hl - Win32 Debug--------------------
</h3>
<h3>Command Lines</h3>
Creating temporary file "C:\DOCUME~1\ÌÈØÀ\LOCALS~1\Temp\RSP562.tmp" with contents
[
/nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\dlls" /I "..\common" /I "..\game_shared" /I "..\\" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR"..\temp\hl\!debug/" /Fo"..\temp\hl\!debug/" /Fd"..\temp\hl\!debug/" /FD /c
"D:\Xash3D\src_main\dlls\aflock.cpp"
"D:\Xash3D\src_main\dlls\agrunt.cpp"
"D:\Xash3D\src_main\dlls\airtank.cpp"
"D:\Xash3D\src_main\dlls\animating.cpp"
"D:\Xash3D\src_main\dlls\animation.cpp"
"D:\Xash3D\src_main\dlls\apache.cpp"
"D:\Xash3D\src_main\dlls\barnacle.cpp"
"D:\Xash3D\src_main\dlls\barney.cpp"
"D:\Xash3D\src_main\dlls\bigmomma.cpp"
"D:\Xash3D\src_main\dlls\bloater.cpp"
"D:\Xash3D\src_main\dlls\bmodels.cpp"
"D:\Xash3D\src_main\dlls\bullsquid.cpp"
"D:\Xash3D\src_main\dlls\buttons.cpp"
"D:\Xash3D\src_main\dlls\cbase.cpp"
"D:\Xash3D\src_main\dlls\client.cpp"
"D:\Xash3D\src_main\dlls\combat.cpp"
"D:\Xash3D\src_main\dlls\controller.cpp"
"D:\Xash3D\src_main\dlls\crossbow.cpp"
"D:\Xash3D\src_main\dlls\crowbar.cpp"
"D:\Xash3D\src_main\dlls\defaultai.cpp"
"D:\Xash3D\src_main\dlls\doors.cpp"
"D:\Xash3D\src_main\dlls\effects.cpp"
"D:\Xash3D\src_main\dlls\egon.cpp"
"D:\Xash3D\src_main\dlls\explode.cpp"
"D:\Xash3D\src_main\dlls\flyingmonster.cpp"
"D:\Xash3D\src_main\dlls\func_break.cpp"
"D:\Xash3D\src_main\dlls\func_tank.cpp"
"D:\Xash3D\src_main\dlls\game.cpp"
"D:\Xash3D\src_main\dlls\gamerules.cpp"
"D:\Xash3D\src_main\dlls\gargantua.cpp"
"D:\Xash3D\src_main\dlls\gauss.cpp"
"D:\Xash3D\src_main\dlls\genericmonster.cpp"
"D:\Xash3D\src_main\dlls\ggrenade.cpp"
"D:\Xash3D\src_main\dlls\globals.cpp"
"D:\Xash3D\src_main\dlls\glock.cpp"
"D:\Xash3D\src_main\dlls\gman.cpp"
"D:\Xash3D\src_main\dlls\h_ai.cpp"
"D:\Xash3D\src_main\dlls\h_battery.cpp"
"D:\Xash3D\src_main\dlls\h_cine.cpp"
"D:\Xash3D\src_main\dlls\h_cycler.cpp"
"D:\Xash3D\src_main\dlls\h_export.cpp"
"D:\Xash3D\src_main\dlls\handgrenade.cpp"
"D:\Xash3D\src_main\dlls\hassassin.cpp"
"D:\Xash3D\src_main\dlls\headcrab.cpp"
"D:\Xash3D\src_main\dlls\healthkit.cpp"
"D:\Xash3D\src_main\dlls\hgrunt.cpp"
"D:\Xash3D\src_main\dlls\hornet.cpp"
"D:\Xash3D\src_main\dlls\hornetgun.cpp"
"D:\Xash3D\src_main\dlls\houndeye.cpp"
"D:\Xash3D\src_main\dlls\ichthyosaur.cpp"
"D:\Xash3D\src_main\dlls\islave.cpp"
"D:\Xash3D\src_main\dlls\items.cpp"
"D:\Xash3D\src_main\dlls\leech.cpp"
"D:\Xash3D\src_main\dlls\lights.cpp"
"D:\Xash3D\src_main\dlls\maprules.cpp"
"D:\Xash3D\src_main\dlls\monstermaker.cpp"
"D:\Xash3D\src_main\dlls\monsters.cpp"
"D:\Xash3D\src_main\dlls\monsterstate.cpp"
"D:\Xash3D\src_main\dlls\mortar.cpp"
"D:\Xash3D\src_main\dlls\mp5.cpp"
"D:\Xash3D\src_main\dlls\multiplay_gamerules.cpp"
"D:\Xash3D\src_main\dlls\nihilanth.cpp"
"D:\Xash3D\src_main\dlls\nodes.cpp"
"D:\Xash3D\src_main\dlls\osprey.cpp"
"D:\Xash3D\src_main\dlls\pathcorner.cpp"
"D:\Xash3D\src_main\dlls\plane.cpp"
"D:\Xash3D\src_main\dlls\plats.cpp"
"D:\Xash3D\src_main\dlls\player.cpp"
"D:\Xash3D\src_main\game_shared\pm_debug.cpp"
"D:\Xash3D\src_main\game_shared\pm_math.cpp"
"D:\Xash3D\src_main\game_shared\pm_shared.cpp"
"D:\Xash3D\src_main\dlls\python.cpp"
"D:\Xash3D\src_main\dlls\rat.cpp"
"D:\Xash3D\src_main\dlls\roach.cpp"
"D:\Xash3D\src_main\dlls\rpg.cpp"
"D:\Xash3D\src_main\dlls\satchel.cpp"
"D:\Xash3D\src_main\dlls\schedule.cpp"
"D:\Xash3D\src_main\dlls\scientist.cpp"
"D:\Xash3D\src_main\dlls\scripted.cpp"
"D:\Xash3D\src_main\dlls\shotgun.cpp"
"D:\Xash3D\src_main\dlls\singleplay_gamerules.cpp"
"D:\Xash3D\src_main\dlls\skill.cpp"
"D:\Xash3D\src_main\dlls\sound.cpp"
"D:\Xash3D\src_main\dlls\soundent.cpp"
"D:\Xash3D\src_main\dlls\spectator.cpp"
"D:\Xash3D\src_main\dlls\squadmonster.cpp"
"D:\Xash3D\src_main\dlls\squeakgrenade.cpp"
"D:\Xash3D\src_main\dlls\subs.cpp"
"D:\Xash3D\src_main\dlls\talkmonster.cpp"
"D:\Xash3D\src_main\dlls\teamplay_gamerules.cpp"
"D:\Xash3D\src_main\dlls\tentacle.cpp"
"D:\Xash3D\src_main\dlls\triggers.cpp"
"D:\Xash3D\src_main\dlls\tripmine.cpp"
"D:\Xash3D\src_main\dlls\turret.cpp"
"D:\Xash3D\src_main\dlls\util.cpp"
"D:\Xash3D\src_main\dlls\weapons.cpp"
"D:\Xash3D\src_main\dlls\world.cpp"
"D:\Xash3D\src_main\dlls\xen.cpp"
"D:\Xash3D\src_main\dlls\zombie.cpp"
]
Creating command line "cl.exe @"C:\DOCUME~1\ÌÈØÀ\LOCALS~1\Temp\RSP562.tmp""
Creating temporary file "C:\DOCUME~1\ÌÈØÀ\LOCALS~1\Temp\RSP563.tmp" with contents
[
msvcrtd.lib /nologo /subsystem:windows /dll /incremental:yes /pdb:"..\temp\hl\!debug/hl.pdb" /debug /machine:I386 /nodefaultlib:"libc.lib" /def:".\hl.def" /out:"..\temp\hl\!debug/hl.dll" /implib:"..\temp\hl\!debug/hl.lib" /pdbtype:sept
"\Xash3D\src_main\temp\hl\!debug\aflock.obj"
"\Xash3D\src_main\temp\hl\!debug\agrunt.obj"
"\Xash3D\src_main\temp\hl\!debug\airtank.obj"
"\Xash3D\src_main\temp\hl\!debug\animating.obj"
"\Xash3D\src_main\temp\hl\!debug\animation.obj"
"\Xash3D\src_main\temp\hl\!debug\apache.obj"
"\Xash3D\src_main\temp\hl\!debug\barnacle.obj"
"\Xash3D\src_main\temp\hl\!debug\barney.obj"
"\Xash3D\src_main\temp\hl\!debug\bigmomma.obj"
"\Xash3D\src_main\temp\hl\!debug\bloater.obj"
"\Xash3D\src_main\temp\hl\!debug\bmodels.obj"
"\Xash3D\src_main\temp\hl\!debug\bullsquid.obj"
"\Xash3D\src_main\temp\hl\!debug\buttons.obj"
"\Xash3D\src_main\temp\hl\!debug\cbase.obj"
"\Xash3D\src_main\temp\hl\!debug\client.obj"
"\Xash3D\src_main\temp\hl\!debug\combat.obj"
"\Xash3D\src_main\temp\hl\!debug\controller.obj"
"\Xash3D\src_main\temp\hl\!debug\crossbow.obj"
"\Xash3D\src_main\temp\hl\!debug\crowbar.obj"
"\Xash3D\src_main\temp\hl\!debug\defaultai.obj"
"\Xash3D\src_main\temp\hl\!debug\doors.obj"
"\Xash3D\src_main\temp\hl\!debug\effects.obj"
"\Xash3D\src_main\temp\hl\!debug\egon.obj"
"\Xash3D\src_main\temp\hl\!debug\explode.obj"
"\Xash3D\src_main\temp\hl\!debug\flyingmonster.obj"
"\Xash3D\src_main\temp\hl\!debug\func_break.obj"
"\Xash3D\src_main\temp\hl\!debug\func_tank.obj"
"\Xash3D\src_main\temp\hl\!debug\game.obj"
"\Xash3D\src_main\temp\hl\!debug\gamerules.obj"
"\Xash3D\src_main\temp\hl\!debug\gargantua.obj"
"\Xash3D\src_main\temp\hl\!debug\gauss.obj"
"\Xash3D\src_main\temp\hl\!debug\genericmonster.obj"
"\Xash3D\src_main\temp\hl\!debug\ggrenade.obj"
"\Xash3D\src_main\temp\hl\!debug\globals.obj"
"\Xash3D\src_main\temp\hl\!debug\glock.obj"
"\Xash3D\src_main\temp\hl\!debug\gman.obj"
"\Xash3D\src_main\temp\hl\!debug\h_ai.obj"
"\Xash3D\src_main\temp\hl\!debug\h_battery.obj"
"\Xash3D\src_main\temp\hl\!debug\h_cine.obj"
"\Xash3D\src_main\temp\hl\!debug\h_cycler.obj"
"\Xash3D\src_main\temp\hl\!debug\h_export.obj"
"\Xash3D\src_main\temp\hl\!debug\handgrenade.obj"
"\Xash3D\src_main\temp\hl\!debug\hassassin.obj"
"\Xash3D\src_main\temp\hl\!debug\headcrab.obj"
"\Xash3D\src_main\temp\hl\!debug\healthkit.obj"
"\Xash3D\src_main\temp\hl\!debug\hgrunt.obj"
"\Xash3D\src_main\temp\hl\!debug\hornet.obj"
"\Xash3D\src_main\temp\hl\!debug\hornetgun.obj"
"\Xash3D\src_main\temp\hl\!debug\houndeye.obj"
"\Xash3D\src_main\temp\hl\!debug\ichthyosaur.obj"
"\Xash3D\src_main\temp\hl\!debug\islave.obj"
"\Xash3D\src_main\temp\hl\!debug\items.obj"
"\Xash3D\src_main\temp\hl\!debug\leech.obj"
"\Xash3D\src_main\temp\hl\!debug\lights.obj"
"\Xash3D\src_main\temp\hl\!debug\maprules.obj"
"\Xash3D\src_main\temp\hl\!debug\monstermaker.obj"
"\Xash3D\src_main\temp\hl\!debug\monsters.obj"
"\Xash3D\src_main\temp\hl\!debug\monsterstate.obj"
"\Xash3D\src_main\temp\hl\!debug\mortar.obj"
"\Xash3D\src_main\temp\hl\!debug\mp5.obj"
"\Xash3D\src_main\temp\hl\!debug\multiplay_gamerules.obj"
"\Xash3D\src_main\temp\hl\!debug\nihilanth.obj"
"\Xash3D\src_main\temp\hl\!debug\nodes.obj"
"\Xash3D\src_main\temp\hl\!debug\osprey.obj"
"\Xash3D\src_main\temp\hl\!debug\pathcorner.obj"
"\Xash3D\src_main\temp\hl\!debug\plane.obj"
"\Xash3D\src_main\temp\hl\!debug\plats.obj"
"\Xash3D\src_main\temp\hl\!debug\player.obj"
"\Xash3D\src_main\temp\hl\!debug\pm_debug.obj"
"\Xash3D\src_main\temp\hl\!debug\pm_math.obj"
"\Xash3D\src_main\temp\hl\!debug\pm_shared.obj"
"\Xash3D\src_main\temp\hl\!debug\python.obj"
"\Xash3D\src_main\temp\hl\!debug\rat.obj"
"\Xash3D\src_main\temp\hl\!debug\roach.obj"
"\Xash3D\src_main\temp\hl\!debug\rpg.obj"
"\Xash3D\src_main\temp\hl\!debug\satchel.obj"
"\Xash3D\src_main\temp\hl\!debug\schedule.obj"
"\Xash3D\src_main\temp\hl\!debug\scientist.obj"
"\Xash3D\src_main\temp\hl\!debug\scripted.obj"
"\Xash3D\src_main\temp\hl\!debug\shotgun.obj"
"\Xash3D\src_main\temp\hl\!debug\singleplay_gamerules.obj"
"\Xash3D\src_main\temp\hl\!debug\skill.obj"
"\Xash3D\src_main\temp\hl\!debug\sound.obj"
"\Xash3D\src_main\temp\hl\!debug\soundent.obj"
"\Xash3D\src_main\temp\hl\!debug\spectator.obj"
"\Xash3D\src_main\temp\hl\!debug\squadmonster.obj"
"\Xash3D\src_main\temp\hl\!debug\squeakgrenade.obj"
"\Xash3D\src_main\temp\hl\!debug\subs.obj"
"\Xash3D\src_main\temp\hl\!debug\talkmonster.obj"
"\Xash3D\src_main\temp\hl\!debug\teamplay_gamerules.obj"
"\Xash3D\src_main\temp\hl\!debug\tempmonster.obj"
"\Xash3D\src_main\temp\hl\!debug\tentacle.obj"
"\Xash3D\src_main\temp\hl\!debug\triggers.obj"
"\Xash3D\src_main\temp\hl\!debug\tripmine.obj"
"\Xash3D\src_main\temp\hl\!debug\turret.obj"
"\Xash3D\src_main\temp\hl\!debug\util.obj"
"\Xash3D\src_main\temp\hl\!debug\weapons.obj"
"\Xash3D\src_main\temp\hl\!debug\world.obj"
"\Xash3D\src_main\temp\hl\!debug\xen.obj"
"\Xash3D\src_main\temp\hl\!debug\zombie.obj"
]
Creating command line "link.exe @"C:\DOCUME~1\ÌÈØÀ\LOCALS~1\Temp\RSP563.tmp""
Creating temporary file "C:\DOCUME~1\ÌÈØÀ\LOCALS~1\Temp\RSP564.bat" with contents
[
@echo off
copy \Xash3D\src_main\temp\hl\!debug\hl.dll "D:\Xash3D\valve\bin\server.dll"
]
Creating command line ""C:\DOCUME~1\ÌÈØÀ\LOCALS~1\Temp\RSP564.bat""
Compiling...
aflock.cpp
Generating Code...
Compiling...
agrunt.cpp
airtank.cpp
animating.cpp
animation.cpp
apache.cpp
barnacle.cpp
barney.cpp
bigmomma.cpp
bloater.cpp
bmodels.cpp
bullsquid.cpp
buttons.cpp
cbase.cpp
client.cpp
combat.cpp
controller.cpp
crossbow.cpp
crowbar.cpp
defaultai.cpp
doors.cpp
Generating Code...
Compiling...
effects.cpp
egon.cpp
explode.cpp
flyingmonster.cpp
func_break.cpp
func_tank.cpp
game.cpp
gamerules.cpp
gargantua.cpp
gauss.cpp
genericmonster.cpp
ggrenade.cpp
globals.cpp
glock.cpp
gman.cpp
h_ai.cpp
h_battery.cpp
h_cine.cpp
h_cycler.cpp
h_export.cpp
Generating Code...
Compiling...
handgrenade.cpp
hassassin.cpp
headcrab.cpp
healthkit.cpp
hgrunt.cpp
hornet.cpp
hornetgun.cpp
houndeye.cpp
ichthyosaur.cpp
islave.cpp
items.cpp
leech.cpp
lights.cpp
maprules.cpp
monstermaker.cpp
monsters.cpp
monsterstate.cpp
mortar.cpp
mp5.cpp
multiplay_gamerules.cpp
Generating Code...
Compiling...
nihilanth.cpp
nodes.cpp
osprey.cpp
pathcorner.cpp
plane.cpp
plats.cpp
player.cpp
python.cpp
rat.cpp
roach.cpp
rpg.cpp
satchel.cpp
schedule.cpp
scientist.cpp
scripted.cpp
shotgun.cpp
singleplay_gamerules.cpp
skill.cpp
sound.cpp
soundent.cpp
Generating Code...
Compiling...
spectator.cpp
squadmonster.cpp
squeakgrenade.cpp
subs.cpp
talkmonster.cpp
teamplay_gamerules.cpp
tentacle.cpp
triggers.cpp
tripmine.cpp
turret.cpp
util.cpp
weapons.cpp
world.cpp
xen.cpp
zombie.cpp
Generating Code...
Skipping... (no relevant changes detected)
pm_debug.cpp
pm_math.cpp
pm_shared.cpp
Linking...
<h3>Output Window</h3>
Performing Custom Build Step on \Xash3D\src_main\temp\hl\!debug\hl.dll
‘ª®¯¨à®¢ ­® ä ©«®¢: 1.
<h3>Results</h3>
hl.dll - 0 error(s), 0 warning(s)
</pre>
</body>
</html>

View File

@ -47,13 +47,21 @@ LINK_ENTITY_TO_CLASS( laser_spot, CLaserSpot );
//=========================================================
//=========================================================
CLaserSpot *CLaserSpot::CreateSpot( void )
CLaserSpot *CLaserSpot::CreateSpot( entvars_t *pevOwner )
{
CLaserSpot *pSpot = GetClassPtr( (CLaserSpot *)NULL );
pSpot->Spawn();
pSpot->pev->classname = MAKE_STRING("laser_spot");
if( pevOwner )
{
// predictable laserspot (cl_lw must be set to 1)
pSpot->pev->flags |= FL_SKIPLOCALHOST;
pSpot->pev->owner = ENT( pevOwner );
pevOwner->effects |= EF_LASERSPOT;
}
return pSpot;
}
@ -79,6 +87,8 @@ void CLaserSpot::Spawn( void )
void CLaserSpot::Suspend( float flSuspendTime )
{
pev->effects |= EF_NODRAW;
if( pev->owner )
pev->owner->v.effects &= ~EF_LASERSPOT;
SetThink( Revive );
pev->nextthink = gpGlobals->time + flSuspendTime;
@ -91,6 +101,9 @@ void CLaserSpot::Revive( void )
{
pev->effects &= ~EF_NODRAW;
if( pev->owner )
pev->owner->v.effects |= EF_LASERSPOT;
SetThink( NULL );
}
@ -433,6 +446,7 @@ void CRpg::Holster( void )
if (m_pSpot)
{
m_pSpot->Killed( NULL, GIB_NEVER );
m_pPlayer->pev->effects &= ~EF_LASERSPOT;
m_pSpot = NULL;
}
#endif
@ -496,6 +510,7 @@ void CRpg::SecondaryAttack()
if (!m_fSpotActive && m_pSpot)
{
m_pSpot->Killed( NULL, GIB_NORMAL );
m_pPlayer->pev->effects &= ~EF_LASERSPOT;
m_pSpot = NULL;
}
#endif
@ -554,11 +569,11 @@ void CRpg::UpdateSpot( void )
{
if (!m_pSpot)
{
m_pSpot = CLaserSpot::CreateSpot();
m_pSpot = CLaserSpot::CreateSpot( m_pPlayer->pev );
}
UTIL_MakeVectors( m_pPlayer->pev->v_angle );
Vector vecSrc = m_pPlayer->GetGunPosition( );;
Vector vecSrc = m_pPlayer->GetGunPosition( );
Vector vecAiming = gpGlobals->v_forward;
TraceResult tr;

View File

@ -413,7 +413,6 @@ void W_Precache(void)
g_sModelIndexLaser = PRECACHE_MODEL( (char *)g_pModelNameLaser );
g_sModelIndexLaserDot = PRECACHE_MODEL("sprites/laserdot.spr");
// used by explosions
PRECACHE_MODEL ("models/grenade.mdl");
PRECACHE_MODEL ("sprites/explode1.spr");
@ -431,6 +430,20 @@ void W_Precache(void)
PRECACHE_SOUND ("items/weapondrop1.wav");// weapon falls to the ground
// g-cont. precache here resources that was precached in the engine (in original HL of course)
// custom muzzleflashes
PRECACHE_MODEL ("sprites/muzzleflash1.spr");
PRECACHE_MODEL ("sprites/muzzleflash2.spr");
PRECACHE_MODEL ("sprites/muzzleflash3.spr");
PRECACHE_MODEL ("sprites/muzzleflash.spr");
// ricochet sprite
PRECACHE_MODEL ("sprites/richo1.spr");
// rocket flare
PRECACHE_MODEL ("sprites/animglow01.spr");
}

View File

@ -492,6 +492,7 @@ public:
void Precache( void );
int iItemSlot( void ) { return 1; }
void EXPORT SwingAgain( void );
void EXPORT Smack( void );
int GetItemInfo(ItemInfo *p);
void PrimaryAttack( void );
@ -499,6 +500,8 @@ public:
BOOL Deploy( void );
void Holster( void );
void WeaponIdle( void );
int m_iSwing;
TraceResult m_trHit;
private:
unsigned short m_usCrowbar;
};
@ -609,7 +612,7 @@ public:
void Suspend( float flSuspendTime );
void EXPORT Revive( void );
static CLaserSpot *CreateSpot( void );
static CLaserSpot *CreateSpot( entvars_t *pevOwner = NULL );
};
class CRpg : public CBasePlayerWeapon

View File

@ -18,6 +18,9 @@ FRAME PARSING
*/
void CL_UpdateEntityFields( cl_entity_t *ent )
{
// set player state
ent->player = ( ent->curstate.entityType == ET_PLAYER ) ? true : false;
// FIXME: this very-very temporary stuffffffff
// make me lerping
VectorCopy( ent->curstate.origin, ent->origin );

View File

@ -12,7 +12,7 @@
#include "triangle_api.h"
#include "effects_api.h"
#include "event_flags.h"
#include "pm_defs.h"
#include "pm_local.h"
/*
====================
@ -737,6 +737,7 @@ void CL_FreeEntity( cl_entity_t *pEdict )
if( pEdict->index == -1 )
return;
CL_UnlinkEdict( pEdict );
clgame.dllFuncs.pfnUpdateOnRemove( pEdict );
pEdict->index = -1; // freed
}
@ -1520,18 +1521,12 @@ pfnTraceLine
=============
*/
static pmtrace_t *pfnTraceLine( const float *start, const float *end, int flags, int usehull, int ignore_pe )
static pmtrace_t *pfnTraceLine( float *start, float *end, int flags, int usehull, int ignore_pe )
{
static pmtrace_t trace;
static pmtrace_t tr;
// FIXME: implement traceline
Mem_Set( &trace, 0, sizeof( pmtrace_t ));
VectorCopy( end, trace.endpos );
trace.fraction = 1.0f;
trace.allsolid = true;
trace.hitgroup = -1;
return &trace;
tr = PM_PlayerTrace( clgame.pmove, start, end, flags, usehull, ignore_pe, NULL );
return &tr;
}
/*
@ -1708,7 +1703,11 @@ pfnIndexFromTrace
*/
int pfnIndexFromTrace( struct pmtrace_s *pTrace )
{
// FIXME: implement
if( pTrace->ent >= 0 && pTrace->ent < clgame.pmove->numphysent )
{
// return cl.entities number
return clgame.pmove->physents[pTrace->ent].info;
}
return -1;
}
@ -1720,7 +1719,11 @@ pfnGetPhysent
*/
physent_t *pfnGetPhysent( int idx )
{
// FIXME: implement
if( idx >= 0 && idx < clgame.pmove->numphysent )
{
// return physent
return &clgame.pmove->physents[idx];
}
return NULL;
}
@ -1743,7 +1746,7 @@ pfnPushPMStates
*/
void pfnPushPMStates( void )
{
// FIXME: implement
clgame.oldcount = clgame.pmove->numphysent;
}
/*
@ -1754,18 +1757,7 @@ pfnPopPMStates
*/
void pfnPopPMStates( void )
{
// FIXME: implement
}
/*
=============
pfnSetSolidPlayers
=============
*/
void pfnSetSolidPlayers( int playernum )
{
// FIXME: implement
clgame.pmove->numphysent = clgame.oldcount;
}
/*
@ -1776,7 +1768,7 @@ pfnSetTraceHull
*/
void pfnSetTraceHull( int hull )
{
// FIXME: implement
clgame.trace_hull = bound( 0, hull, 3 );
}
/*
@ -1787,7 +1779,9 @@ pfnPlayerTrace
*/
static void pfnPlayerTrace( float *start, float *end, int traceFlags, int ignore_pe, pmtrace_t *tr )
{
// FIXME: implement
if( !tr ) return;
*tr = PM_PlayerTrace( clgame.pmove, start, end, traceFlags, clgame.trace_hull, ignore_pe, NULL );
}
/*
@ -1796,10 +1790,15 @@ pfnTraceTexture
=============
*/
static const char *pfnTraceTexture( int ground, const float *v1, const float *v2 )
static const char *pfnTraceTexture( int ground, float *vstart, float *vend )
{
// FIXME: implement
return NULL;
physent_t *pe;
if( ground < 0 || ground >= clgame.pmove->numphysent )
return NULL; // bad ground
pe = &clgame.pmove->physents[ground];
return PM_TraceTexture( pe, vstart, vend );
}
/*
@ -2296,7 +2295,7 @@ static event_api_t gEventApi =
pfnSetUpPlayerPrediction,
pfnPushPMStates,
pfnPopPMStates,
pfnSetSolidPlayers,
CL_SetSolidPlayers,
pfnSetTraceHull,
pfnPlayerTrace,
CL_WeaponAnim,

View File

@ -21,6 +21,7 @@ cvar_t *cl_showfps;
cvar_t *cl_nodelta;
cvar_t *cl_crosshair;
cvar_t *cl_idealpitchscale;
cvar_t *cl_solid_players;
cvar_t *cl_shownet;
cvar_t *cl_showmiss;
cvar_t *userinfo;
@ -1011,6 +1012,9 @@ void CL_ReadPackets( void )
CL_ReadDemoMessage();
else CL_ReadNetMessage();
// build list of all solid entities per frame (exclude clients)
CL_SetSolidEntities ();
// singleplayer never has connection timeout
if( NET_IsLocalAddress( cls.netchan.remote_address ))
return;
@ -1239,6 +1243,7 @@ void CL_InitLocal( void )
cl_crosshair = Cvar_Get( "crosshair", "1", CVAR_ARCHIVE|CVAR_USERINFO, "show weapon chrosshair" );
cl_nodelta = Cvar_Get ("cl_nodelta", "0", 0, "disable delta-compression for usercommnds" );
cl_idealpitchscale = Cvar_Get( "cl_idealpitchscale", "0.8", 0, "how much to look up/down slopes and stairs when not using freelook" );
cl_solid_players = Cvar_Get( "cl_solid_players", "1", 0, "Make all players not solid (can't traceline them)" );
cl_shownet = Cvar_Get( "cl_shownet", "0", 0, "client show network packets" );
cl_showmiss = Cvar_Get( "cl_showmiss", "0", CVAR_ARCHIVE, "client show prediction errors" );

View File

@ -523,24 +523,12 @@ static cl_entity_t* pfnGetPlayerModel( void )
pfnSetPlayerModel
for drawing playermodel previews
FIXME: move all this shit on the gameui.dll
====================
*/
static void pfnSetPlayerModel( cl_entity_t *ent, const char *path )
{
re->RegisterModel( path, MAX_MODELS - 1 );
ent->curstate.modelindex = MAX_MODELS - 1;
// setup latched controllers state to avoid unexpected poses :)
ent->curstate.controller[0] = 127;
ent->curstate.controller[1] = 127;
ent->curstate.controller[2] = 127;
ent->curstate.controller[3] = 127;
ent->latched.prevcontroller[0] = 127;
ent->latched.prevcontroller[1] = 127;
ent->latched.prevcontroller[2] = 127;
ent->latched.prevcontroller[3] = 127;
}
/*

View File

@ -580,6 +580,9 @@ void CL_ParseServerData( sizebuf_t *msg )
cl.video_prepped = false;
cl.audio_prepped = false;
Mem_Set( &clgame.movevars, 0, sizeof( clgame.movevars ));
Mem_Set( &clgame.oldmovevars, 0, sizeof( clgame.oldmovevars ));
// initialize world and clients
CL_InitWorld ();
}
@ -1044,5 +1047,6 @@ void CL_ParseServerMessage( sizebuf_t *msg )
break;
}
}
cls_message_debug.parsing = false; // done
}

View File

@ -25,13 +25,12 @@ bool CL_CopyEntityToPhysEnt( physent_t *pe, cl_entity_t *ent )
if( !mod || mod->type == mod_bad )
return false;
pe->player = false;
pe->player = ent->player;
if( ent->index > 0 && ent->index < clgame.globals->maxClients )
if( pe->player )
{
// client or bot
com.strncpy( pe->name, "player", sizeof( pe->name ));
pe->player = true;
}
else if( ent == clgame.entities )
{
@ -96,6 +95,91 @@ bool CL_CopyEntityToPhysEnt( physent_t *pe, cl_entity_t *ent )
return true;
}
/*
====================
CL_AddLinksToPmove
collect solid entities
====================
*/
void CL_AddLinksToPmove( areanode_t *node, const vec3_t pmove_mins, const vec3_t pmove_maxs )
{
link_t *l, *next;
cl_entity_t *check;
physent_t *pe;
// touch linked edicts
for( l = node->solid_edicts.next; l != &node->solid_edicts; l = next )
{
next = l->next;
check = CL_GetEntityByIndex( l->entnum );
// don't add the world and clients here
if( !check || check == &clgame.entities[0] || check->player )
continue;
if(check->curstate.solid == SOLID_BSP || check->curstate.solid == SOLID_BBOX || check->curstate.solid == SOLID_SLIDEBOX)
{
if( !BoundsIntersect( pmove_mins, pmove_maxs, check->absmin, check->absmax ))
continue;
if( clgame.pmove->numphysent == MAX_PHYSENTS )
return;
pe = &clgame.pmove->physents[clgame.pmove->numphysent];
if( CL_CopyEntityToPhysEnt( pe, check ))
clgame.pmove->numphysent++;
}
}
// recurse down both sides
if( node->axis == -1 ) return;
if( pmove_maxs[node->axis] > node->dist )
CL_AddLinksToPmove( node->children[0], pmove_mins, pmove_maxs );
if( pmove_mins[node->axis] < node->dist )
CL_AddLinksToPmove( node->children[1], pmove_mins, pmove_maxs );
}
/*
===============
CL_SetSolid
Builds all the pmove physents for the current frame
Note that CL_SetUpPlayerPrediction() must be called first!
pmove must be setup with world and solid entity hulls before calling
(via CL_PredictMove)
===============
*/
void CL_SetSolidPlayers( int playernum )
{
int j;
extern vec3_t player_mins;
extern vec3_t player_maxs;
cl_entity_t *ent;
physent_t *pe;
if( !cl_solid_players->integer )
return;
// FIXME: create predicted_players array
for( j = 0; j < clgame.globals->maxClients; j++ )
{
// the player object never gets added
if( j == playernum ) continue;
ent = CL_GetEntityByIndex( j + 1 );
if( !ent || !ent->player )
continue; // not present this frame
pe = &clgame.pmove->physents[clgame.pmove->numphysent];
if( CL_CopyEntityToPhysEnt( pe, ent ))
clgame.pmove->numphysent++;
}
}
static void pfnParticle( float *origin, int color, float life, int zpos, int zvel )
{
vec3_t dir;
@ -341,4 +425,119 @@ void CL_InitClientMove( void )
// initalize pmove
clgame.dllFuncs.pfnPM_Init( clgame.pmove );
}
static void PM_CheckMovingGround( clientdata_t *cd, entity_state_t *state, float frametime )
{
if(!( cd->flags & FL_BASEVELOCITY ))
{
// apply momentum (add in half of the previous frame of velocity first)
VectorMA( cd->velocity, 1.0f + (frametime * 0.5f), state->basevelocity, cd->velocity );
VectorClear( state->basevelocity );
}
cd->flags &= ~FL_BASEVELOCITY;
}
void CL_SetSolidEntities( void )
{
physent_t *pe;
vec3_t absmin, absmax;
cl_entity_t *touch[MAX_EDICTS];
int i, count;
// world not initialized
if( !cl.frame.valid ) return;
// setup physents
clgame.pmove->numvisent = 0; // FIXME: add visents for debugging
clgame.pmove->numphysent = 0;
clgame.pmove->nummoveent = 0;
for( i = 0; i < 3; i++ )
{
absmin[i] = cl.frame.cd.origin[i] - 256;
absmax[i] = cl.frame.cd.origin[i] + 256;
}
CL_CopyEntityToPhysEnt( &clgame.pmove->physents[0], &clgame.entities[0] );
clgame.pmove->numphysent = 1; // always have world
CL_AddLinksToPmove( cl_areanodes, absmin, absmax );
count = CL_AreaEdicts( absmin, absmax, touch, MAX_EDICTS, AREA_CUSTOM );
// build list of ladders around player
for( i = 0; i < count; i++ )
{
if( clgame.pmove->nummoveent >= MAX_MOVEENTS )
{
MsgDev( D_ERROR, "PM_PlayerMove: too many ladders in PVS\n" );
break;
}
if( touch[i] == CL_GetLocalPlayer( )) continue;
pe = &clgame.pmove->moveents[clgame.pmove->nummoveent];
if( CL_CopyEntityToPhysEnt( pe, touch[i] ))
clgame.pmove->nummoveent++;
}
}
static void PM_SetupMove( playermove_t *pmove, clientdata_t *cd, entity_state_t *state, usercmd_t *ucmd )
{
pmove->player_index = cl.playernum;
pmove->multiplayer = (clgame.globals->maxClients > 1) ? true : false;
pmove->time = sv_time(); // probably never used
VectorCopy( cd->origin, pmove->origin );
VectorCopy( cl.refdef.cl_viewangles, pmove->angles );
VectorCopy( cl.refdef.cl_viewangles, pmove->oldangles );
VectorCopy( cd->velocity, pmove->velocity );
VectorCopy( state->basevelocity, pmove->basevelocity );
VectorCopy( cd->view_ofs, pmove->view_ofs );
VectorClear( pmove->movedir );
pmove->flDuckTime = cd->flDuckTime;
pmove->bInDuck = cd->bInDuck;
pmove->usehull = (cd->flags & FL_DUCKING) ? 1 : 0; // reset hull
pmove->flTimeStepSound = cd->flTimeStepSound;
pmove->iStepLeft = state->iStepLeft;
pmove->flFallVelocity = state->flFallVelocity;
pmove->flSwimTime = cd->flSwimTime;
VectorCopy( cd->punchangle, pmove->punchangle );
pmove->flSwimTime = cd->flSwimTime;
pmove->flNextPrimaryAttack = 0.0f; // not used by PM_ code
pmove->effects = state->effects;
pmove->flags = cd->flags;
pmove->gravity = state->gravity;
pmove->friction = state->friction;
pmove->oldbuttons = state->oldbuttons;
pmove->waterjumptime = cd->waterjumptime;
pmove->dead = (cd->health <= 0.0f ) ? true : false;
pmove->deadflag = cd->deadflag;
pmove->spectator = 0; // FIXME: implement
pmove->movetype = state->movetype;
pmove->onground = -1; // will be set by PM_ code
pmove->waterlevel = cd->waterlevel;
pmove->watertype = cd->watertype;
pmove->maxspeed = clgame.movevars.maxspeed;
pmove->clientmaxspeed = cd->maxspeed;
pmove->iuser1 = cd->iuser1;
pmove->iuser2 = cd->iuser2;
pmove->iuser3 = cd->iuser3;
pmove->iuser4 = cd->iuser4;
pmove->fuser1 = cd->fuser1;
pmove->fuser2 = cd->fuser2;
pmove->fuser3 = cd->fuser3;
pmove->fuser4 = cd->fuser4;
VectorCopy( cd->vuser1, pmove->vuser1 );
VectorCopy( cd->vuser2, pmove->vuser2 );
VectorCopy( cd->vuser3, pmove->vuser3 );
VectorCopy( cd->vuser4, pmove->vuser4 );
pmove->cmd = *ucmd; // setup current cmds
com.strncpy( pmove->physinfo, cd->physinfo, MAX_INFO_STRING );
}
static void PM_FinishMove( playermove_t *pmove, clientdata_t *cd, entity_state_t *state )
{
cd->waterjumptime = pmove->waterjumptime;
state->onground = pmove->onground;
}

View File

@ -7,7 +7,7 @@
#include "client.h"
#include "matrix_lib.h"
#include "const.h"
#include "pm_defs.h"
#include "pm_local.h"
#include "protocol.h"
#include "net_encode.h"
@ -101,13 +101,13 @@ CL_SetIdealPitch
void CL_SetIdealPitch( cl_entity_t *ent )
{
float angleval, sinval, cosval;
trace_t tr;
pmtrace_t tr;
vec3_t top, bottom;
float z[MAX_FORWARD];
int i, j;
int step, dir, steps;
if( ent->curstate.onground == -1 )
if( !( cl.frame.cd.flags & FL_ONGROUND ))
return;
angleval = ent->angles[YAW] * M_PI * 2 / 360;
@ -123,15 +123,14 @@ void CL_SetIdealPitch( cl_entity_t *ent )
bottom[1] = top[1];
bottom[2] = top[2] - 160;
// FIXME: write client trace
// tr = CL_Move( top, vec3_origin, vec3_origin, bottom, MOVE_NOMONSTERS, ent );
if( tr.fAllSolid )
return; // looking at a wall, leave ideal the way is was
// skip any monsters (only world and brush models)
tr = PM_PlayerTrace( clgame.pmove, top, bottom, PM_STUDIO_IGNORE, 2, -1, NULL );
if( tr.allsolid ) return; // looking at a wall, leave ideal the way is was
if( tr.flFraction == 1.0f )
if( tr.fraction == 1.0f )
return; // near a dropoff
z[i] = top[2] + tr.flFraction * (bottom[2] - top[2]);
z[i] = top[2] + tr.fraction * (bottom[2] - top[2]);
}
dir = 0;

View File

@ -5,8 +5,8 @@
#include "common.h"
#include "client.h"
#include "tmpent_def.h"
#include "event_flags.h"
#include "entity_types.h"
/*
==============================================================
@ -33,6 +33,8 @@ void CL_WeaponAnim( int iAnim, int body )
view->latched.prevanimtime = view->curstate.animtime;
}
com.strncpy( view->curstate.classname, "viewentity", sizeof( view->curstate.classname ));
view->curstate.entityType = ET_VIEWENTITY;
view->curstate.animtime = clgame.globals->time; // start immediately
view->curstate.framerate = 1.0f;
view->curstate.sequence = iAnim;

View File

@ -35,7 +35,7 @@ void V_SetupRefDef( void )
VectorCopy( cl.frame.cd.punchangle, cl.refdef.punchangle );
cl.refdef.movevars = &clgame.movevars;
cl.refdef.onground = ( clent->curstate.onground == -1 ) ? false : true;
cl.refdef.onground = ( cl.frame.cd.flags & FL_ONGROUND ) ? 1 : 0;
cl.refdef.health = cl.frame.cd.health;
cl.refdef.movetype = clent->curstate.movetype;
cl.refdef.num_entities = clgame.globals->numEntities;

View File

@ -196,7 +196,8 @@ void CL_AreaEdicts_r( areanode_t *node, area_t *ap )
for( l = start->next; l != start; l = next )
{
next = l->next;
check = EDICT_FROM_AREA( l );
check = CL_GetEntityByIndex( l->entnum );
if( !check ) continue;
if( check->curstate.solid == SOLID_NOT && check->curstate.skin == CONTENTS_NONE )
continue; // deactivated

View File

@ -221,6 +221,9 @@ typedef struct
movevars_t oldmovevars;
playermove_t *pmove; // pmove state
int trace_hull; // used by PM_SetTraceHull
int oldcount; // used by PM_Push\Pop state
vec3_t player_mins[4]; // 4 hulls allowed
vec3_t player_maxs[4]; // 4 hulls allowed
@ -326,6 +329,7 @@ extern cvar_t *cl_nodelta;
extern cvar_t *cl_crosshair;
extern cvar_t *cl_showmiss;
extern cvar_t *cl_testlights;
extern cvar_t *cl_solid_players;
extern cvar_t *cl_idealpitchscale;
extern cvar_t *cl_allow_levelshots;
extern cvar_t *cl_levelshot_name;
@ -454,8 +458,10 @@ void V_PostRender( void );
void V_RenderView( void );
//
// cl_move.c
// cl_pmove.c
//
void CL_SetSolidEntities( void );
void CL_SetSolidPlayers( int playernum );
void CL_InitClientMove( void );
void CL_PredictMovement( void );
void CL_CheckPredictionError( void );
@ -534,6 +540,8 @@ void CL_PlayVideo_f( void );
//
// cl_world.c
//
extern areanode_t cl_areanodes[];
void CL_ClearWorld( void );
void CL_UnlinkEdict( cl_entity_t *ent );
void CL_LinkEdict( cl_entity_t *ent );

View File

@ -46,6 +46,9 @@ const char *PM_TraceTexture( physent_t *pe, vec3_t v1, vec3_t v2 )
if( !bmodel || bmodel->type != mod_brush && bmodel->type != mod_world )
return NULL;
// making trace adjustments
VectorSubtract( v1, pe->origin, vecStartPos );
// rotate start and end into the models frame of reference
if( pe->solid == SOLID_BSP && !VectorIsNull( pe->angles ))
{
@ -54,8 +57,9 @@ const char *PM_TraceTexture( physent_t *pe, vec3_t v1, vec3_t v2 )
Matrix4x4_CreateFromEntity( matrix, pe->origin[0], pe->origin[1], pe->origin[2], pe->angles[PITCH], pe->angles[YAW], pe->angles[ROLL], 1.0f );
Matrix4x4_Invert_Simple( imatrix, matrix );
VectorCopy( vecStartPos, temp );
Matrix4x4_VectorTransform( imatrix, temp, vecStartPos );
VectorCopy( trace.endpos, temp );
Matrix4x4_VectorTransform( imatrix, v1, vecStartPos );
Matrix4x4_VectorTransform( imatrix, temp, trace.endpos );
}

View File

@ -1,171 +0,0 @@
<html>
<body>
<pre>
<h1>Build Log</h1>
<h3>
--------------------Configuration: engine - Win32 Debug--------------------
</h3>
<h3>Command Lines</h3>
Creating temporary file "C:\DOCUME~1\ÌÈØÀ\LOCALS~1\Temp\RSP56A.tmp" with contents
[
/nologo /MDd /W3 /Gm /Gi /GX /ZI /Od /I "./" /I "common" /I "server" /I "client" /I "uimenu" /I "../public" /I "../common" /I "../game_shared" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR"..\temp\engine\!debug/" /Fo"..\temp\engine\!debug/" /Fd"..\temp\engine\!debug/" /FD /c
"D:\Xash3D\src_main\engine\server\sv_frame.c"
"D:\Xash3D\src_main\engine\server\sv_game.c"
"D:\Xash3D\src_main\engine\server\sv_world.c"
]
Creating command line "cl.exe @"C:\DOCUME~1\ÌÈØÀ\LOCALS~1\Temp\RSP56A.tmp""
Creating temporary file "C:\DOCUME~1\ÌÈØÀ\LOCALS~1\Temp\RSP56B.tmp" with contents
[
user32.lib msvcrtd.lib /nologo /subsystem:windows /dll /incremental:yes /pdb:"..\temp\engine\!debug/engine.pdb" /debug /machine:I386 /nodefaultlib:"msvcrt.lib" /out:"..\temp\engine\!debug/engine.dll" /implib:"..\temp\engine\!debug/engine.lib" /pdbtype:sept
"\Xash3D\src_main\temp\engine\!debug\build.obj"
"\Xash3D\src_main\temp\engine\!debug\cinematic.obj"
"\Xash3D\src_main\temp\engine\!debug\cl_cmds.obj"
"\Xash3D\src_main\temp\engine\!debug\cl_demo.obj"
"\Xash3D\src_main\temp\engine\!debug\cl_frame.obj"
"\Xash3D\src_main\temp\engine\!debug\cl_game.obj"
"\Xash3D\src_main\temp\engine\!debug\cl_main.obj"
"\Xash3D\src_main\temp\engine\!debug\cl_menu.obj"
"\Xash3D\src_main\temp\engine\!debug\cl_parse.obj"
"\Xash3D\src_main\temp\engine\!debug\cl_pmove.obj"
"\Xash3D\src_main\temp\engine\!debug\cl_pred.obj"
"\Xash3D\src_main\temp\engine\!debug\cl_scrn.obj"
"\Xash3D\src_main\temp\engine\!debug\cl_tent.obj"
"\Xash3D\src_main\temp\engine\!debug\cl_video.obj"
"\Xash3D\src_main\temp\engine\!debug\cl_view.obj"
"\Xash3D\src_main\temp\engine\!debug\cm_debug.obj"
"\Xash3D\src_main\temp\engine\!debug\cm_light.obj"
"\Xash3D\src_main\temp\engine\!debug\cm_main.obj"
"\Xash3D\src_main\temp\engine\!debug\cm_model.obj"
"\Xash3D\src_main\temp\engine\!debug\cm_portals.obj"
"\Xash3D\src_main\temp\engine\!debug\cm_studio.obj"
"\Xash3D\src_main\temp\engine\!debug\cm_test.obj"
"\Xash3D\src_main\temp\engine\!debug\cm_trace.obj"
"\Xash3D\src_main\temp\engine\!debug\con_utils.obj"
"\Xash3D\src_main\temp\engine\!debug\console.obj"
"\Xash3D\src_main\temp\engine\!debug\engfuncs.obj"
"\Xash3D\src_main\temp\engine\!debug\export.obj"
"\Xash3D\src_main\temp\engine\!debug\host.obj"
"\Xash3D\src_main\temp\engine\!debug\infostring.obj"
"\Xash3D\src_main\temp\engine\!debug\input.obj"
"\Xash3D\src_main\temp\engine\!debug\keys.obj"
"\Xash3D\src_main\temp\engine\!debug\net_buffer.obj"
"\Xash3D\src_main\temp\engine\!debug\net_chan.obj"
"\Xash3D\src_main\temp\engine\!debug\net_encode.obj"
"\Xash3D\src_main\temp\engine\!debug\net_huff.obj"
"\Xash3D\src_main\temp\engine\!debug\pm_studio.obj"
"\Xash3D\src_main\temp\engine\!debug\pm_surface.obj"
"\Xash3D\src_main\temp\engine\!debug\pm_trace.obj"
"\Xash3D\src_main\temp\engine\!debug\pm_utils.obj"
"\Xash3D\src_main\temp\engine\!debug\sv_client.obj"
"\Xash3D\src_main\temp\engine\!debug\sv_cmds.obj"
"\Xash3D\src_main\temp\engine\!debug\sv_frame.obj"
"\Xash3D\src_main\temp\engine\!debug\sv_game.obj"
"\Xash3D\src_main\temp\engine\!debug\sv_init.obj"
"\Xash3D\src_main\temp\engine\!debug\sv_main.obj"
"\Xash3D\src_main\temp\engine\!debug\sv_move.obj"
"\Xash3D\src_main\temp\engine\!debug\sv_phys.obj"
"\Xash3D\src_main\temp\engine\!debug\sv_pmove.obj"
"\Xash3D\src_main\temp\engine\!debug\sv_save.obj"
"\Xash3D\src_main\temp\engine\!debug\sv_world.obj"
"\Xash3D\src_main\temp\engine\!debug\titles.obj"
"\Xash3D\src_main\temp\engine\!debug\world.obj"
]
Creating command line "link.exe @"C:\DOCUME~1\ÌÈØÀ\LOCALS~1\Temp\RSP56B.tmp""
Creating temporary file "C:\DOCUME~1\ÌÈØÀ\LOCALS~1\Temp\RSP56C.bat" with contents
[
@echo off
copy \Xash3D\src_main\temp\engine\!debug\engine.dll "D:\Xash3D\bin\engine.dll"
]
Creating command line ""C:\DOCUME~1\ÌÈØÀ\LOCALS~1\Temp\RSP56C.bat""
Compiling...
sv_frame.c
d:\xash3d\src_main\engine\server\sv_frame.c(172) : error C2039: 'pvEngineData' : is not a member of 'edict_s'
d:\xash3d\src_main\common\edict.h(13) : see declaration of 'edict_s'
d:\xash3d\src_main\engine\server\sv_frame.c(186) : error C2039: 'pvEngineData' : is not a member of 'edict_s'
d:\xash3d\src_main\common\edict.h(13) : see declaration of 'edict_s'
sv_game.c
d:\xash3d\src_main\engine\server\sv_game.c(405) : error C2039: 'pvEngineData' : is not a member of 'edict_s'
d:\xash3d\src_main\common\edict.h(13) : see declaration of 'edict_s'
d:\xash3d\src_main\engine\server\sv_game.c(408) : error C2039: 'pvEngineData' : is not a member of 'edict_s'
d:\xash3d\src_main\common\edict.h(13) : see declaration of 'edict_s'
d:\xash3d\src_main\engine\server\sv_game.c(408) : error C2065: 'sv_priv_t' : undeclared identifier
d:\xash3d\src_main\engine\server\sv_game.c(408) : error C2059: syntax error : ')'
d:\xash3d\src_main\engine\server\sv_game.c(422) : error C2039: 'pvEngineData' : is not a member of 'edict_s'
d:\xash3d\src_main\common\edict.h(13) : see declaration of 'edict_s'
d:\xash3d\src_main\engine\server\sv_game.c(422) : error C2039: 'pvEngineData' : is not a member of 'edict_s'
d:\xash3d\src_main\common\edict.h(13) : see declaration of 'edict_s'
d:\xash3d\src_main\engine\server\sv_game.c(422) : warning C4047: 'function' : 'const char *' differs in levels of indirection from 'int '
d:\xash3d\src_main\engine\server\sv_game.c(422) : warning C4024: 'com' : different types for formal and actual parameter 2
d:\xash3d\src_main\engine\server\sv_game.c(422) : error C2198: 'com' : too few actual parameters
d:\xash3d\src_main\engine\server\sv_game.c(504) : error C2039: 'pvEngineData' : is not a member of 'edict_s'
d:\xash3d\src_main\common\edict.h(13) : see declaration of 'edict_s'
d:\xash3d\src_main\engine\server\sv_game.c(540) : error C2039: 'pvEngineData' : is not a member of 'edict_s'
d:\xash3d\src_main\common\edict.h(13) : see declaration of 'edict_s'
d:\xash3d\src_main\engine\server\sv_game.c(607) : error C2065: 'sv_ent' : undeclared identifier
d:\xash3d\src_main\engine\server\sv_game.c(607) : warning C4552: '*' : operator has no effect; expected operator with side-effect
d:\xash3d\src_main\engine\server\sv_game.c(608) : error C2275: 'sv_client_t' : illegal use of this type as an expression
d:\xash3d\src_main\engine\server\server.h(158) : see declaration of 'sv_client_t'
d:\xash3d\src_main\engine\server\sv_game.c(608) : error C2065: 'cl' : undeclared identifier
d:\xash3d\src_main\engine\server\sv_game.c(610) : error C2039: 'pvEngineData' : is not a member of 'edict_s'
d:\xash3d\src_main\common\edict.h(13) : see declaration of 'edict_s'
d:\xash3d\src_main\engine\server\sv_game.c(613) : warning C4047: '=' : 'int ' differs in levels of indirection from 'struct sv_client_s *'
d:\xash3d\src_main\engine\server\sv_game.c(616) : error C2223: left of '->modelindex' must point to struct/union
d:\xash3d\src_main\engine\server\sv_game.c(616) : error C2223: left of '->modelindex' must point to struct/union
d:\xash3d\src_main\engine\server\sv_game.c(1358) : error C2039: 'pvEngineData' : is not a member of 'edict_s'
d:\xash3d\src_main\common\edict.h(13) : see declaration of 'edict_s'
d:\xash3d\src_main\engine\server\sv_game.c(1402) : error C2039: 'pvEngineData' : is not a member of 'edict_s'
d:\xash3d\src_main\common\edict.h(13) : see declaration of 'edict_s'
d:\xash3d\src_main\engine\server\sv_game.c(2225) : error C2039: 'pvEngineData' : is not a member of 'edict_s'
d:\xash3d\src_main\common\edict.h(13) : see declaration of 'edict_s'
d:\xash3d\src_main\engine\server\sv_game.c(3280) : error C2039: 'pvEngineData' : is not a member of 'edict_s'
d:\xash3d\src_main\common\edict.h(13) : see declaration of 'edict_s'
d:\xash3d\src_main\engine\server\sv_game.c(3283) : error C2039: 'pvEngineData' : is not a member of 'edict_s'
d:\xash3d\src_main\common\edict.h(13) : see declaration of 'edict_s'
d:\xash3d\src_main\engine\server\sv_game.c(3286) : error C2039: 'pvEngineData' : is not a member of 'edict_s'
d:\xash3d\src_main\common\edict.h(13) : see declaration of 'edict_s'
d:\xash3d\src_main\engine\server\sv_game.c(3286) : warning C4047: 'function' : 'int ' differs in levels of indirection from 'unsigned char *'
d:\xash3d\src_main\engine\server\sv_game.c(3286) : warning C4024: 'CM_HeadnodeVisible' : different types for formal and actual parameter 1
d:\xash3d\src_main\engine\server\sv_game.c(3286) : error C2198: 'CM_HeadnodeVisible' : too few actual parameters
d:\xash3d\src_main\engine\server\sv_game.c(3292) : error C2039: 'pvEngineData' : is not a member of 'edict_s'
d:\xash3d\src_main\common\edict.h(13) : see declaration of 'edict_s'
d:\xash3d\src_main\engine\server\sv_game.c(3294) : error C2039: 'pvEngineData' : is not a member of 'edict_s'
d:\xash3d\src_main\common\edict.h(13) : see declaration of 'edict_s'
d:\xash3d\src_main\engine\server\sv_game.c(3300) : error C2039: 'pvEngineData' : is not a member of 'edict_s'
d:\xash3d\src_main\common\edict.h(13) : see declaration of 'edict_s'
sv_world.c
d:\xash3d\src_main\engine\server\sv_world.c(133) : error C2039: 'pvEngineData' : is not a member of 'edict_s'
d:\xash3d\src_main\common\edict.h(13) : see declaration of 'edict_s'
d:\xash3d\src_main\engine\server\sv_world.c(136) : error C2039: 'pvEngineData' : is not a member of 'edict_s'
d:\xash3d\src_main\common\edict.h(13) : see declaration of 'edict_s'
d:\xash3d\src_main\engine\server\sv_world.c(136) : error C2198: 'RemoveLink' : too few actual parameters
d:\xash3d\src_main\engine\server\sv_world.c(137) : error C2039: 'pvEngineData' : is not a member of 'edict_s'
d:\xash3d\src_main\common\edict.h(13) : see declaration of 'edict_s'
d:\xash3d\src_main\engine\server\sv_world.c(138) : error C2039: 'pvEngineData' : is not a member of 'edict_s'
d:\xash3d\src_main\common\edict.h(13) : see declaration of 'edict_s'
d:\xash3d\src_main\engine\server\sv_world.c(182) : error C2065: 'sv_priv_t' : undeclared identifier
d:\xash3d\src_main\engine\server\sv_world.c(182) : error C2065: 'sv_ent' : undeclared identifier
d:\xash3d\src_main\engine\server\sv_world.c(182) : warning C4552: '*' : operator has no effect; expected operator with side-effect
d:\xash3d\src_main\engine\server\sv_world.c(184) : error C2039: 'pvEngineData' : is not a member of 'edict_s'
d:\xash3d\src_main\common\edict.h(13) : see declaration of 'edict_s'
d:\xash3d\src_main\engine\server\sv_world.c(187) : error C2223: left of '->area' must point to struct/union
d:\xash3d\src_main\engine\server\sv_world.c(195) : error C2223: left of '->num_leafs' must point to struct/union
d:\xash3d\src_main\engine\server\sv_world.c(211) : error C2223: left of '->num_leafs' must point to struct/union
d:\xash3d\src_main\engine\server\sv_world.c(212) : error C2223: left of '->headnode' must point to struct/union
d:\xash3d\src_main\engine\server\sv_world.c(216) : error C2223: left of '->num_leafs' must point to struct/union
d:\xash3d\src_main\engine\server\sv_world.c(231) : error C2223: left of '->num_leafs' must point to struct/union
d:\xash3d\src_main\engine\server\sv_world.c(234) : error C2223: left of '->num_leafs' must point to struct/union
d:\xash3d\src_main\engine\server\sv_world.c(235) : error C2223: left of '->headnode' must point to struct/union
d:\xash3d\src_main\engine\server\sv_world.c(238) : error C2223: left of '->leafnums' must point to struct/union
d:\xash3d\src_main\engine\server\sv_world.c(238) : error C2223: left of '->num_leafs' must point to struct/union
d:\xash3d\src_main\engine\server\sv_world.c(238) : fatal error C1903: unable to recover from previous error(s); stopping compilation
Generating Code...
Error executing cl.exe.
<h3>Output Window</h3>
<h3>Results</h3>
engine.dll - 46 error(s), 7 warning(s)
</pre>
</body>
</html>

View File

@ -666,16 +666,10 @@ void SV_PutClientInServer( edict_t *ent )
{
if( ent->v.flags & FL_SPECTATOR )
{
// setup spectatormaxspeed and refresh physinfo
SV_SetClientMaxspeed( client, svgame.movevars.spectatormaxspeed );
svgame.dllFuncs.pfnSpectatorConnect( ent );
}
else
{
// setup maxspeed and refresh physinfo
SV_SetClientMaxspeed( client, svgame.movevars.maxspeed );
if( sv_maxclients->integer > 1 )
ent->v.netname = MAKE_STRING(Info_ValueForKey( client->userinfo, "name" ));
else ent->v.netname = MAKE_STRING( "player" );
@ -686,9 +680,6 @@ void SV_PutClientInServer( edict_t *ent )
}
else
{
// setup maxspeed and refresh physinfo
SV_SetClientMaxspeed( client, svgame.movevars.maxspeed );
// NOTE: we needs to setup angles on restore here
if( ent->v.fixangle == 1 )
{

View File

@ -193,26 +193,6 @@ send updates to client if changed
*/
void SV_UpdateMovevars( void )
{
if( sv_maxspeed->modified )
{
sv_client_t *cl;
int i;
// maxspeed is modified, refresh maxspeed for each client
for( i = 0, cl = svs.clients; i < sv_maxclients->integer; i++, cl++ )
{
if( !SV_IsValidEdict( cl->edict ))
continue;
// can update even if client it's not active
SV_SetClientMaxspeed( cl, sv_maxspeed->value );
}
if( sv.state == ss_active )
SV_BroadcastPrintf( PRINT_HIGH, "sv_maxspeed is changed to %g\n", sv_maxspeed->value );
sv_maxspeed->modified = false;
}
if( !physinfo->modified ) return;
svgame.movevars.gravity = sv_gravity->value;
@ -634,7 +614,7 @@ void SV_Init( void )
sv_skyvec_y = Cvar_Get ("sv_skyvec_y", "0", CVAR_PHYSICINFO, "sky direction y (hl1 compatibility)" );
sv_skyvec_z = Cvar_Get ("sv_skyvec_z", "-1", CVAR_PHYSICINFO, "sky direction z (hl1 compatibility)" );
sv_skyname = Cvar_Get ("sv_skyname", "2desert", CVAR_PHYSICINFO, "skybox name (can be dynamically changed in-game)" );
sv_footsteps = Cvar_Get ("mp_footsteps", "0", CVAR_PHYSICINFO, "can hear footsteps from other players" );
sv_footsteps = Cvar_Get ("mp_footsteps", "1", CVAR_PHYSICINFO, "can hear footsteps from other players" );
rcon_password = Cvar_Get( "rcon_password", "", 0, "remote connect password" );
sv_fps = Cvar_Get( "sv_fps", "60", CVAR_SERVERINFO|CVAR_ARCHIVE, "network game server fps" );

View File

@ -529,11 +529,9 @@ static void PM_SetupMove( playermove_t *pmove, edict_t *clent, usercmd_t *ucmd,
// setup physents
pmove->numvisent = 0; // FIXME: add visents for debugging
pmove->numphysent = 0;
pmove->nummoveent = 0;
VectorCopy( clent->v.absmin, absmin );
VectorCopy( clent->v.absmax, absmax );
for( i = 0; i < 3; i++ )
{
absmin[i] = clent->v.origin[i] - 256;

View File

@ -1,114 +0,0 @@
<html>
<body>
<pre>
<h1>Build Log</h1>
<h3>
--------------------Configuration: gameui - Win32 Debug--------------------
</h3>
<h3>Command Lines</h3>
Creating temporary file "C:\DOCUME~1\ĚČŘŔ\LOCALS~1\Temp\RSP56E.tmp" with contents
[
/nologo /MDd /W3 /Gm /GX /ZI /Od /I "./" /I "../common" /I "../game_shared" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR"..\temp\gameui\!debug/" /Fo"..\temp\gameui\!debug/" /Fd"..\temp\gameui\!debug/" /FD /GZ /c
"D:\Xash3D\src_main\gameui\basemenu.cpp"
"D:\Xash3D\src_main\gameui\menu_advcontrols.cpp"
"D:\Xash3D\src_main\gameui\menu_audio.cpp"
"D:\Xash3D\src_main\gameui\menu_configuration.cpp"
"D:\Xash3D\src_main\gameui\menu_controls.cpp"
"D:\Xash3D\src_main\gameui\menu_creategame.cpp"
"D:\Xash3D\src_main\gameui\menu_credits.cpp"
"D:\Xash3D\src_main\gameui\menu_customgame.cpp"
"D:\Xash3D\src_main\gameui\menu_gameoptions.cpp"
"D:\Xash3D\src_main\gameui\menu_langame.cpp"
"D:\Xash3D\src_main\gameui\menu_loadgame.cpp"
"D:\Xash3D\src_main\gameui\menu_main.cpp"
"D:\Xash3D\src_main\gameui\menu_multiplayer.cpp"
"D:\Xash3D\src_main\gameui\menu_newgame.cpp"
"D:\Xash3D\src_main\gameui\menu_playdemo.cpp"
"D:\Xash3D\src_main\gameui\menu_playersetup.cpp"
"D:\Xash3D\src_main\gameui\menu_playrec.cpp"
"D:\Xash3D\src_main\gameui\menu_recdemo.cpp"
"D:\Xash3D\src_main\gameui\menu_savegame.cpp"
"D:\Xash3D\src_main\gameui\menu_saveload.cpp"
"D:\Xash3D\src_main\gameui\menu_video.cpp"
"D:\Xash3D\src_main\gameui\menu_vidmodes.cpp"
"D:\Xash3D\src_main\gameui\menu_vidoptions.cpp"
"D:\Xash3D\src_main\gameui\udll_int.cpp"
"D:\Xash3D\src_main\gameui\utils.cpp"
]
Creating command line "cl.exe @"C:\DOCUME~1\ĚČŘŔ\LOCALS~1\Temp\RSP56E.tmp""
Creating temporary file "C:\DOCUME~1\ĚČŘŔ\LOCALS~1\Temp\RSP56F.tmp" with contents
[
msvcrtd.lib /nologo /dll /incremental:yes /pdb:"..\temp\gameui\!debug/gameui.pdb" /debug /machine:I386 /nodefaultlib:"msvcrt.lib" /def:".\gameui.def" /out:"..\temp\gameui\!debug/gameui.dll" /implib:"..\temp\gameui\!debug/gameui.lib" /pdbtype:sept
"\Xash3D\src_main\temp\gameui\!debug\basemenu.obj"
"\Xash3D\src_main\temp\gameui\!debug\menu_advcontrols.obj"
"\Xash3D\src_main\temp\gameui\!debug\menu_audio.obj"
"\Xash3D\src_main\temp\gameui\!debug\menu_configuration.obj"
"\Xash3D\src_main\temp\gameui\!debug\menu_controls.obj"
"\Xash3D\src_main\temp\gameui\!debug\menu_creategame.obj"
"\Xash3D\src_main\temp\gameui\!debug\menu_credits.obj"
"\Xash3D\src_main\temp\gameui\!debug\menu_customgame.obj"
"\Xash3D\src_main\temp\gameui\!debug\menu_gameoptions.obj"
"\Xash3D\src_main\temp\gameui\!debug\menu_langame.obj"
"\Xash3D\src_main\temp\gameui\!debug\menu_loadgame.obj"
"\Xash3D\src_main\temp\gameui\!debug\menu_main.obj"
"\Xash3D\src_main\temp\gameui\!debug\menu_multiplayer.obj"
"\Xash3D\src_main\temp\gameui\!debug\menu_newgame.obj"
"\Xash3D\src_main\temp\gameui\!debug\menu_playdemo.obj"
"\Xash3D\src_main\temp\gameui\!debug\menu_playersetup.obj"
"\Xash3D\src_main\temp\gameui\!debug\menu_playrec.obj"
"\Xash3D\src_main\temp\gameui\!debug\menu_recdemo.obj"
"\Xash3D\src_main\temp\gameui\!debug\menu_savegame.obj"
"\Xash3D\src_main\temp\gameui\!debug\menu_saveload.obj"
"\Xash3D\src_main\temp\gameui\!debug\menu_video.obj"
"\Xash3D\src_main\temp\gameui\!debug\menu_vidmodes.obj"
"\Xash3D\src_main\temp\gameui\!debug\menu_vidoptions.obj"
"\Xash3D\src_main\temp\gameui\!debug\udll_int.obj"
"\Xash3D\src_main\temp\gameui\!debug\utils.obj"
]
Creating command line "link.exe @"C:\DOCUME~1\ĚČŘŔ\LOCALS~1\Temp\RSP56F.tmp""
Creating temporary file "C:\DOCUME~1\ĚČŘŔ\LOCALS~1\Temp\RSP570.bat" with contents
[
@echo off
copy \Xash3D\src_main\temp\gameui\!debug\gameui.dll "D:\Xash3D\valve\bin\GameUI.dll"
]
Creating command line ""C:\DOCUME~1\ĚČŘŔ\LOCALS~1\Temp\RSP570.bat""
Compiling...
basemenu.cpp
Generating Code...
Skipping... (no relevant changes detected)
menu_advcontrols.cpp
menu_audio.cpp
menu_configuration.cpp
menu_controls.cpp
menu_creategame.cpp
menu_credits.cpp
menu_customgame.cpp
menu_gameoptions.cpp
menu_langame.cpp
menu_loadgame.cpp
menu_main.cpp
menu_multiplayer.cpp
menu_newgame.cpp
menu_playdemo.cpp
menu_playersetup.cpp
menu_playrec.cpp
menu_recdemo.cpp
menu_savegame.cpp
menu_saveload.cpp
menu_video.cpp
menu_vidmodes.cpp
menu_vidoptions.cpp
udll_int.cpp
utils.cpp
Linking...
<h3>Output Window</h3>
Performing Custom Build Step on \Xash3D\src_main\temp\gameui\!debug\gameui.dll
‘Ş®Ż¨ŕ®˘ ­® ä ©«®˘: 1.
<h3>Results</h3>
gameui.dll - 0 error(s), 0 warning(s)
</pre>
</body>
</html>

View File

@ -407,6 +407,10 @@ static void UI_PlayerSetup_Init( void )
uiPlayerSetup.ent->curstate.controller[1] = 127;
uiPlayerSetup.ent->curstate.controller[2] = 127;
uiPlayerSetup.ent->curstate.controller[3] = 127;
uiPlayerSetup.ent->latched.prevcontroller[0] = 127;
uiPlayerSetup.ent->latched.prevcontroller[1] = 127;
uiPlayerSetup.ent->latched.prevcontroller[2] = 127;
uiPlayerSetup.ent->latched.prevcontroller[3] = 127;
uiPlayerSetup.ent->origin[0] = 92;
uiPlayerSetup.ent->origin[2] = 2;
uiPlayerSetup.ent->angles[1] = 180;

View File

@ -1,128 +0,0 @@
<html>
<body>
<pre>
<h1>Build Log</h1>
<h3>
--------------------Configuration: launch - Win32 Debug--------------------
</h3>
<h3>Command Lines</h3>
Creating temporary file "C:\DOCUME~1\ĚČŘŔ\LOCALS~1\Temp\RSP572.tmp" with contents
[
/nologo /MDd /W3 /Gm /Gi /GX /ZI /Od /I "./" /I "imagelib" /I "../public" /I "../common" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR"..\temp\launch\!debug/" /Fo"..\temp\launch\!debug/" /Fd"..\temp\launch\!debug/" /FD /GZ /c
"D:\Xash3D\src_main\launch\cmd.c"
"D:\Xash3D\src_main\launch\console.c"
"D:\Xash3D\src_main\launch\cpuinfo.c"
"D:\Xash3D\src_main\launch\crclib.c"
"D:\Xash3D\src_main\launch\cvar.c"
"D:\Xash3D\src_main\launch\export.c"
"D:\Xash3D\src_main\launch\filesystem.c"
"D:\Xash3D\src_main\launch\imagelib\img_bmp.c"
"D:\Xash3D\src_main\launch\imagelib\img_dds.c"
"D:\Xash3D\src_main\launch\imagelib\img_jpg.c"
"D:\Xash3D\src_main\launch\imagelib\img_main.c"
"D:\Xash3D\src_main\launch\imagelib\img_pcx.c"
"D:\Xash3D\src_main\launch\imagelib\img_png.c"
"D:\Xash3D\src_main\launch\imagelib\img_tga.c"
"D:\Xash3D\src_main\launch\imagelib\img_utils.c"
"D:\Xash3D\src_main\launch\imagelib\img_vtf.c"
"D:\Xash3D\src_main\launch\imagelib\img_wad.c"
"D:\Xash3D\src_main\launch\library.c"
"D:\Xash3D\src_main\launch\memlib.c"
"D:\Xash3D\src_main\launch\network.c"
"D:\Xash3D\src_main\launch\parselib.c"
"D:\Xash3D\src_main\launch\soundlib\snd_main.c"
"D:\Xash3D\src_main\launch\soundlib\snd_ogg.c"
"D:\Xash3D\src_main\launch\soundlib\snd_raw.c"
"D:\Xash3D\src_main\launch\soundlib\snd_utils.c"
"D:\Xash3D\src_main\launch\soundlib\snd_wav.c"
"D:\Xash3D\src_main\launch\stdlib.c"
"D:\Xash3D\src_main\launch\system.c"
"D:\Xash3D\src_main\launch\utils.c"
]
Creating command line "cl.exe @"C:\DOCUME~1\ĚČŘŔ\LOCALS~1\Temp\RSP572.tmp""
Creating temporary file "C:\DOCUME~1\ĚČŘŔ\LOCALS~1\Temp\RSP573.tmp" with contents
[
zlib.lib png.lib jpg.lib ogg.lib vorbis.lib user32.lib gdi32.lib shell32.lib advapi32.lib winmm.lib /nologo /dll /incremental:yes /pdb:"..\temp\launch\!debug/launch.pdb" /debug /machine:I386 /nodefaultlib:"libcmt" /nodefaultlib:"libc" /out:"..\temp\launch\!debug/launch.dll" /implib:"..\temp\launch\!debug/launch.lib" /pdbtype:sept /libpath:"./imagelib" /libpath:"./soundlib"
"\Xash3D\src_main\temp\launch\!debug\cmd.obj"
"\Xash3D\src_main\temp\launch\!debug\console.obj"
"\Xash3D\src_main\temp\launch\!debug\cpuinfo.obj"
"\Xash3D\src_main\temp\launch\!debug\crclib.obj"
"\Xash3D\src_main\temp\launch\!debug\cvar.obj"
"\Xash3D\src_main\temp\launch\!debug\export.obj"
"\Xash3D\src_main\temp\launch\!debug\filesystem.obj"
"\Xash3D\src_main\temp\launch\!debug\img_bmp.obj"
"\Xash3D\src_main\temp\launch\!debug\img_dds.obj"
"\Xash3D\src_main\temp\launch\!debug\img_jpg.obj"
"\Xash3D\src_main\temp\launch\!debug\img_main.obj"
"\Xash3D\src_main\temp\launch\!debug\img_pcx.obj"
"\Xash3D\src_main\temp\launch\!debug\img_png.obj"
"\Xash3D\src_main\temp\launch\!debug\img_tga.obj"
"\Xash3D\src_main\temp\launch\!debug\img_utils.obj"
"\Xash3D\src_main\temp\launch\!debug\img_vtf.obj"
"\Xash3D\src_main\temp\launch\!debug\img_wad.obj"
"\Xash3D\src_main\temp\launch\!debug\library.obj"
"\Xash3D\src_main\temp\launch\!debug\memlib.obj"
"\Xash3D\src_main\temp\launch\!debug\network.obj"
"\Xash3D\src_main\temp\launch\!debug\parselib.obj"
"\Xash3D\src_main\temp\launch\!debug\snd_main.obj"
"\Xash3D\src_main\temp\launch\!debug\snd_ogg.obj"
"\Xash3D\src_main\temp\launch\!debug\snd_raw.obj"
"\Xash3D\src_main\temp\launch\!debug\snd_utils.obj"
"\Xash3D\src_main\temp\launch\!debug\snd_wav.obj"
"\Xash3D\src_main\temp\launch\!debug\stdlib.obj"
"\Xash3D\src_main\temp\launch\!debug\system.obj"
"\Xash3D\src_main\temp\launch\!debug\utils.obj"
]
Creating command line "link.exe @"C:\DOCUME~1\ĚČŘŔ\LOCALS~1\Temp\RSP573.tmp""
Creating temporary file "C:\DOCUME~1\ĚČŘŔ\LOCALS~1\Temp\RSP574.bat" with contents
[
@echo off
copy \Xash3D\src_main\temp\launch\!debug\launch.dll "D:\Xash3D\bin\launch.dll"
]
Creating command line ""C:\DOCUME~1\ĚČŘŔ\LOCALS~1\Temp\RSP574.bat""
Compiling...
cmd.c
console.c
cpuinfo.c
crclib.c
cvar.c
export.c
filesystem.c
img_bmp.c
img_dds.c
img_jpg.c
img_main.c
img_pcx.c
img_png.c
img_tga.c
img_utils.c
img_vtf.c
img_wad.c
library.c
memlib.c
network.c
Generating Code...
Compiling...
parselib.c
snd_main.c
snd_ogg.c
snd_raw.c
snd_utils.c
snd_wav.c
stdlib.c
system.c
utils.c
Generating Code...
Linking...
Creating library ..\temp\launch\!debug/launch.lib and object ..\temp\launch\!debug/launch.exp
<h3>Output Window</h3>
Performing Custom Build Step on \Xash3D\src_main\temp\launch\!debug\launch.dll
‘Ş®Ż¨ŕ®˘ ­® ä ©«®˘: 1.
<h3>Results</h3>
launch.dll - 0 error(s), 0 warning(s)
</pre>
</body>
</html>

View File

@ -1,69 +0,0 @@
<html>
<body>
<pre>
<h1>Build Log</h1>
<h3>
--------------------Configuration: snd_dx - Win32 Debug--------------------
</h3>
<h3>Command Lines</h3>
Creating temporary file "C:\DOCUME~1\ÌÈØÀ\LOCALS~1\Temp\RSP581.tmp" with contents
[
/nologo /MDd /W3 /Gm /Gi /GX /ZI /Od /I "./" /I "../public" /I "../common" /I "../game_shared" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR"..\temp\snd_dx\!debug/" /Fo"..\temp\snd_dx\!debug/" /Fd"..\temp\snd_dx\!debug/" /FD /GZ /c
"D:\Xash3D\src_main\snd_dx\s_backend.c"
"D:\Xash3D\src_main\snd_dx\s_dsp.c"
"D:\Xash3D\src_main\snd_dx\s_export.c"
"D:\Xash3D\src_main\snd_dx\s_load.c"
"D:\Xash3D\src_main\snd_dx\s_main.c"
"D:\Xash3D\src_main\snd_dx\s_mix.c"
"D:\Xash3D\src_main\snd_dx\s_mouth.c"
"D:\Xash3D\src_main\snd_dx\s_stream.c"
"D:\Xash3D\src_main\snd_dx\s_utils.c"
"D:\Xash3D\src_main\snd_dx\s_vox.c"
]
Creating command line "cl.exe @"C:\DOCUME~1\ÌÈØÀ\LOCALS~1\Temp\RSP581.tmp""
Creating temporary file "C:\DOCUME~1\ÌÈØÀ\LOCALS~1\Temp\RSP582.tmp" with contents
[
winmm.lib /nologo /dll /incremental:yes /pdb:"..\temp\snd_dx\!debug/snd_dx.pdb" /debug /machine:I386 /nodefaultlib:"libcmt.lib" /out:"..\temp\snd_dx\!debug/snd_dx.dll" /implib:"..\temp\snd_dx\!debug/snd_dx.lib" /pdbtype:sept
"\Xash3D\src_main\temp\snd_dx\!debug\s_backend.obj"
"\Xash3D\src_main\temp\snd_dx\!debug\s_dsp.obj"
"\Xash3D\src_main\temp\snd_dx\!debug\s_export.obj"
"\Xash3D\src_main\temp\snd_dx\!debug\s_load.obj"
"\Xash3D\src_main\temp\snd_dx\!debug\s_main.obj"
"\Xash3D\src_main\temp\snd_dx\!debug\s_mix.obj"
"\Xash3D\src_main\temp\snd_dx\!debug\s_mouth.obj"
"\Xash3D\src_main\temp\snd_dx\!debug\s_stream.obj"
"\Xash3D\src_main\temp\snd_dx\!debug\s_utils.obj"
"\Xash3D\src_main\temp\snd_dx\!debug\s_vox.obj"
]
Creating command line "link.exe @"C:\DOCUME~1\ÌÈØÀ\LOCALS~1\Temp\RSP582.tmp""
Creating temporary file "C:\DOCUME~1\ÌÈØÀ\LOCALS~1\Temp\RSP583.bat" with contents
[
@echo off
copy \Xash3D\src_main\temp\snd_dx\!debug\snd_dx.dll "D:\Xash3D\bin\snd_dx.dll"
]
Creating command line ""C:\DOCUME~1\ÌÈØÀ\LOCALS~1\Temp\RSP583.bat""
Compiling...
s_backend.c
s_dsp.c
s_export.c
s_load.c
s_main.c
s_mix.c
s_mouth.c
s_stream.c
s_utils.c
s_vox.c
Generating Code...
Linking...
Creating library ..\temp\snd_dx\!debug/snd_dx.lib and object ..\temp\snd_dx\!debug/snd_dx.exp
<h3>Output Window</h3>
Performing Custom Build Step on \Xash3D\src_main\temp\snd_dx\!debug\snd_dx.dll
‘ª®¯¨à®¢ ­® ä ©«®¢: 1.
<h3>Results</h3>
snd_dx.dll - 0 error(s), 0 warning(s)
</pre>
</body>
</html>

View File

@ -800,7 +800,7 @@ void R_FreeSkydome( skydome_t *skydome );
void R_ClearSkyBox( void );
void R_DrawSky( ref_shader_t *shader );
bool R_AddSkySurface( msurface_t *fa );
ref_shader_t *R_SetupSky( const char *name );
void R_SetupSky( const char *name );
void R_FreeSky( void );
//====================================================================

View File

@ -980,10 +980,13 @@ static void R_SetupFrame( void )
RI.vup = RI.viewAxis[2];
// ambient lighting
mapConfig.environmentColor[0] = RI.refdef.movevars->skycolor_r;
mapConfig.environmentColor[1] = RI.refdef.movevars->skycolor_g;
mapConfig.environmentColor[2] = RI.refdef.movevars->skycolor_b;
mapConfig.environmentColor[3] = 255;
if( r_worldmodel && !( RI.refdef.flags & RDF_NOWORLDMODEL ))
{
mapConfig.environmentColor[0] = RI.refdef.movevars->skycolor_r;
mapConfig.environmentColor[1] = RI.refdef.movevars->skycolor_g;
mapConfig.environmentColor[2] = RI.refdef.movevars->skycolor_b;
mapConfig.environmentColor[3] = 255;
}
if( RI.params & RP_SHADOWMAPVIEW )
return;
@ -2243,7 +2246,8 @@ shader_t Mod_RegisterShader( const char *name, int shaderType )
src = CL_LoadSprite( name ); // hud sprites
break;
case SHADER_SKY:
src = R_SetupSky( name );
R_SetupSky( name );
src = tr.currentSkyShader;
break;
default:
MsgDev( D_WARN, "Mod_RegisterShader: invalid shader type (%i)\n", shaderType );

View File

@ -433,7 +433,9 @@ static void R_BatchMeshBuffer( const meshbuffer_t *mb, const meshbuffer_t *nextm
{
// draw sky
if(!( RI.params & RP_NOSKY ))
{
R_DrawSky( tr.currentSkyShader );
}
return;
}

View File

@ -28,7 +28,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "byteorder.h"
#include "bspfile.h"
#include "cl_entity.h"
#include "pm_movevars.h"
#define Mod_CopyString( m, str ) com.stralloc( (m)->mempool, str, __FILE__, __LINE__ )
#define MAX_SIDE_VERTS 256 // per one polygon
@ -262,7 +261,6 @@ void Mod_FreeModel( ref_model_t *mod )
{
if( !mod || !mod->mempool ) return;
if( mod == r_worldmodel ) R_FreeSky();
Mem_FreePool( &mod->mempool );
Mem_Set( mod, 0, sizeof( *mod ));
}
@ -1621,10 +1619,12 @@ static void Mod_LoadSurfaces( const dlump_t *l )
out->numstyles++;
}
if( !tr.currentSkyShader && ( out->flags & SURF_DRAWSKY || out->shader->flags & SHADER_SKYPARMS ))
if( out->flags & SURF_DRAWSKY )
{
// because sky shader may missing skyParms, but always has surfaceparm 'sky'
tr.currentSkyShader = out->shader;
// create fake skyshader for detect it while drawing
out->shader->flags |= SHADER_SKYPARMS;
out->shader->sort = SORT_SKY;
out->shader->skyParms = NULL;
}
// create lightmap

View File

@ -1034,6 +1034,7 @@ static void R_FreeMedia( void )
if( !glState.initializedMedia )
return;
R_FreeSky();
R_ShutdownOcclusionQueries();
R_ShutdownDecals();
R_ShutdownShadows();

View File

@ -2615,7 +2615,9 @@ bool R_ShaderCheckCache( const char *name )
void R_RegisterBuiltinShaders( void )
{
tr.defaultShader = R_LoadShader( MAP_DEFAULT_SHADER, SHADER_NOMIP, true, (TF_NOMIPMAP|TF_NOPICMIP), SHADER_UNKNOWN );
tr.fillShader = R_LoadShader( "*white", SHADER_GENERIC, true, (TF_CLAMP|TF_NOMIPMAP|TF_NOPICMIP), SHADER_UNKNOWN );
tr.fillShader = R_LoadShader( "*white", SHADER_NOMIP, true, (TF_CLAMP|TF_NOMIPMAP|TF_NOPICMIP), SHADER_UNKNOWN );
tr.currentSkyShader = R_LoadShader( "*sky", SHADER_GENERIC, true, (TF_CLAMP|TF_NOMIPMAP|TF_NOPICMIP), SHADER_UNKNOWN );
tr.currentSkyShader->flags |= SHADER_STATIC;
}
void R_InitShaders( void )
@ -3655,7 +3657,7 @@ static ref_shader_t *Shader_CreateDefault( ref_shader_t *shader, int type, int a
pass->num_textures++;
break;
case SHADER_SKY:
shader->type = SHADER_SKY;
shader->type = SHADER_SKY|SHADER_STATIC;
shader->name = Shader_Malloc( length + 1 );
strcpy( shader->name, shortname );
// create simple sky parms, when Shader_SkyParms parsing it properly
@ -3668,7 +3670,7 @@ static ref_shader_t *Shader_CreateDefault( ref_shader_t *shader, int type, int a
shader->type = SHADER_FARBOX;
shader->features = MF_STCOORDS;
shader->sort = SORT_SKY;
shader->flags = SHADER_SKYPARMS;
shader->flags = SHADER_SKYPARMS|SHADER_STATIC;
shader->num_stages = 1;
shader->name = Shader_Malloc( length + 1 + sizeof( ref_stage_t ) * shader->num_stages );
strcpy( shader->name, shortname );
@ -3687,7 +3689,7 @@ static ref_shader_t *Shader_CreateDefault( ref_shader_t *shader, int type, int a
shader->features = MF_STCOORDS;
shader->sort = SORT_SKY;
shader->num_stages = 1;
shader->flags = SHADER_SKYPARMS;
shader->flags = SHADER_SKYPARMS|SHADER_STATIC;
shader->name = Shader_Malloc( length + 1 + sizeof( ref_stage_t ) * shader->num_stages );
strcpy( shader->name, shortname );
shader->stages = ( ref_stage_t * )( ( byte * )shader->name + length + 1 );
@ -4120,130 +4122,117 @@ void R_SetAnimFrequency( float anim_fps )
R_SetupSky
=================
*/
ref_shader_t *R_SetupSky( const char *name )
void R_SetupSky( const char *name )
{
string loadname;
bool shader_valid = false;
bool force_default = false;
ref_script_t *cache;
ref_shader_t *shader;
uint hashKey;
int index;
if( name && name[0] )
{
ref_script_t *cache;
ref_shader_t *shader;
uint hashKey;
if( !name || !name[0] ) return;
com.snprintf( loadname, sizeof( loadname ), "%s/%s", SI->envpath, name );
com.snprintf( loadname, sizeof( loadname ), "%s/%s", SI->envpath, name );
// make sure what new shader it's a skyShader and existing
hashKey = Com_HashKey( loadname, SHADERS_HASH_SIZE );
// make sure what new shader it's a skyShader and existing
hashKey = Com_HashKey( loadname, SHADERS_HASH_SIZE );
for( shader = r_shadersHash[hashKey]; shader; shader = shader->nextHash )
{
if( !com.stricmp( shader->name, loadname ))
break;
}
for( shader = r_shadersHash[hashKey]; shader; shader = shader->nextHash )
{
if( !com.stricmp( shader->name, loadname ))
break;
}
if( shader )
{
// already loaded, check parms
if( shader->flags & SHADER_SKYPARMS && shader->skyParms )
shader_valid = true;
}
else
{
cache = Shader_GetCache( loadname, SHADER_INVALID, hashKey );
if( cache )
{
script_t *script = Com_OpenScript( cache->name, cache->buffer, cache->size );
token_t tok;
while( Com_ReadToken( script, SC_ALLOW_NEWLINES, &tok ))
{
if( !com.stricmp( "skyParms", tok.string ))
{
// check only far skybox images for existing
// because near skybox without far will be ignored by engine
if( Com_ReadToken( script, SC_ALLOW_PATHNAMES2, &tok ))
{
if( com.stricmp( "-", tok.string ))
{
if( Shader_CheckSkybox( tok.string ))
{
shader_valid = true;
break;
}
}
else
{
shader_valid = true;
break; // new shader just reset skybox
}
}
}
else if( !com.stricmp( "surfaceParm", tok.string ))
{
// check only far skybox images for existing
// because near skybox without far will be ignored by engine
if( Com_ReadToken( script, SC_ALLOW_PATHNAMES2, &tok ))
{
if( !com.stricmp( "sky", tok.string ))
{
shader_valid = true;
break; // yes it's q3-style skyshader
}
}
}
}
Com_CloseScript( script );
}
else
{
if( !Shader_CheckSkybox( loadname ))
{
if( Shader_CheckSkybox( loadname ))
shader_valid = true;
else shader_valid = true;
}
else shader_valid = true;
force_default = true;
}
}
if( shader )
{
// already loaded, check parms
if( shader->flags & SHADER_SKYPARMS && shader->skyParms )
shader_valid = true;
}
else
{
// NULL names force to get current sky shader by user requesting
return (tr.currentSkyShader) ? tr.currentSkyShader : tr.defaultShader;
cache = Shader_GetCache( loadname, SHADER_INVALID, hashKey );
if( cache )
{
script_t *script = Com_OpenScript( cache->name, cache->buffer, cache->size );
token_t tok;
while( Com_ReadToken( script, SC_ALLOW_NEWLINES, &tok ))
{
if( !com.stricmp( "skyParms", tok.string ))
{
// check only far skybox images for existing
// because near skybox without far will be ignored by engine
if( Com_ReadToken( script, SC_ALLOW_PATHNAMES2, &tok ))
{
if( com.stricmp( "-", tok.string ))
{
if( Shader_CheckSkybox( tok.string ))
{
shader_valid = true;
break;
}
}
else
{
shader_valid = true;
break; // new shader just reset skybox
}
}
}
else if( !com.stricmp( "surfaceParm", tok.string ))
{
// check only far skybox images for existing
// because near skybox without far will be ignored by engine
if( Com_ReadToken( script, SC_ALLOW_PATHNAMES2, &tok ))
{
if( !com.stricmp( "sky", tok.string ))
{
shader_valid = true;
break; // yes it's q3-style skyshader
}
}
}
}
Com_CloseScript( script );
}
else
{
if( Shader_CheckSkybox( loadname ))
shader_valid = true;
force_default = true;
}
}
if( !shader_valid )
{
MsgDev( D_ERROR, "R_SetupSky: 'couldn't find shader '%s'\n", name );
return (tr.currentSkyShader) ? tr.currentSkyShader : tr.defaultShader;
return;
}
if( tr.currentSkyShader == NULL )
{
if( !r_worldmodel ) MsgDev( D_ERROR, "R_SetupSky: map not loaded\n" );
else MsgDev( D_NOTE, "R_SetupSky: map %s not contain sky surfaces\n", r_worldmodel->name );
return (tr.currentSkyShader) ? tr.currentSkyShader : tr.defaultShader;
MsgDev( D_ERROR, "R_SetupSky: tr.currentSkyShader == NULL\n" );
return;
}
index = tr.currentSkyShader->shadernum;
Shader_FreeShader( tr.currentSkyShader, FREE_FORCE ); // release old sky
// new sky shader
tr.currentSkyShader = R_LoadShader( loadname, SHADER_SKY, force_default, 0, SHADER_INVALID );
tr.currentSkyShader = R_LoadShader( loadname, SHADER_SKY, true, 0, SHADER_INVALID );
if( index != tr.currentSkyShader->shadernum )
MsgDev( D_ERROR, "R_SetupSky: mismatch shader indexes %i != %i\n", index, tr.currentSkyShader->shadernum );
return tr.currentSkyShader;
Msg( "R_SetupSky( %s )\n", name );
}
void R_FreeSky( void )
{
if( tr.currentSkyShader == NULL ) return; // already freed
// already freed ?
if( tr.currentSkyShader == NULL ) return;
Shader_FreeShader( tr.currentSkyShader, FREE_FORCE );
tr.currentSkyShader = NULL;
}

View File

@ -1,107 +0,0 @@
<html>
<body>
<pre>
<h1>Build Log</h1>
<h3>
--------------------Configuration: vid_gl - Win32 Debug--------------------
</h3>
<h3>Command Lines</h3>
Creating temporary file "C:\DOCUME~1\ÌÈØÀ\LOCALS~1\Temp\RSP579.tmp" with contents
[
/nologo /MDd /W3 /Gm /Gi /GX /ZI /Od /I "../public" /I "../common" /I "../game_shared" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR"..\temp\vid_gl\!debug/" /Fo"..\temp\vid_gl\!debug/" /Fd"..\temp\vid_gl\!debug/" /FD /c
"D:\Xash3D\src_main\vid_gl\r_backend.c"
"D:\Xash3D\src_main\vid_gl\r_bloom.c"
"D:\Xash3D\src_main\vid_gl\r_cin.c"
"D:\Xash3D\src_main\vid_gl\r_cull.c"
"D:\Xash3D\src_main\vid_gl\r_decals.c"
"D:\Xash3D\src_main\vid_gl\r_draw.c"
"D:\Xash3D\src_main\vid_gl\r_image.c"
"D:\Xash3D\src_main\vid_gl\r_light.c"
"D:\Xash3D\src_main\vid_gl\r_main.c"
"D:\Xash3D\src_main\vid_gl\r_math.c"
"D:\Xash3D\src_main\vid_gl\r_mesh.c"
"D:\Xash3D\src_main\vid_gl\r_model.c"
"D:\Xash3D\src_main\vid_gl\r_opengl.c"
"D:\Xash3D\src_main\vid_gl\r_poly.c"
"D:\Xash3D\src_main\vid_gl\r_program.c"
"D:\Xash3D\src_main\vid_gl\r_register.c"
"D:\Xash3D\src_main\vid_gl\r_shader.c"
"D:\Xash3D\src_main\vid_gl\r_shadow.c"
"D:\Xash3D\src_main\vid_gl\r_sky.c"
"D:\Xash3D\src_main\vid_gl\r_sprite.c"
"D:\Xash3D\src_main\vid_gl\r_studio.c"
"D:\Xash3D\src_main\vid_gl\r_surf.c"
]
Creating command line "cl.exe @"C:\DOCUME~1\ÌÈØÀ\LOCALS~1\Temp\RSP579.tmp""
Creating temporary file "C:\DOCUME~1\ÌÈØÀ\LOCALS~1\Temp\RSP57A.tmp" with contents
[
msvcrtd.lib user32.lib gdi32.lib /nologo /subsystem:windows /dll /incremental:yes /pdb:"..\temp\vid_gl\!debug/vid_gl.pdb" /debug /machine:I386 /nodefaultlib:"msvcrt.lib" /out:"..\temp\vid_gl\!debug/vid_gl.dll" /implib:"..\temp\vid_gl\!debug/vid_gl.lib" /pdbtype:sept
"\Xash3D\src_main\temp\vid_gl\!debug\r_backend.obj"
"\Xash3D\src_main\temp\vid_gl\!debug\r_bloom.obj"
"\Xash3D\src_main\temp\vid_gl\!debug\r_cin.obj"
"\Xash3D\src_main\temp\vid_gl\!debug\r_cull.obj"
"\Xash3D\src_main\temp\vid_gl\!debug\r_decals.obj"
"\Xash3D\src_main\temp\vid_gl\!debug\r_draw.obj"
"\Xash3D\src_main\temp\vid_gl\!debug\r_image.obj"
"\Xash3D\src_main\temp\vid_gl\!debug\r_light.obj"
"\Xash3D\src_main\temp\vid_gl\!debug\r_main.obj"
"\Xash3D\src_main\temp\vid_gl\!debug\r_math.obj"
"\Xash3D\src_main\temp\vid_gl\!debug\r_mesh.obj"
"\Xash3D\src_main\temp\vid_gl\!debug\r_model.obj"
"\Xash3D\src_main\temp\vid_gl\!debug\r_opengl.obj"
"\Xash3D\src_main\temp\vid_gl\!debug\r_poly.obj"
"\Xash3D\src_main\temp\vid_gl\!debug\r_program.obj"
"\Xash3D\src_main\temp\vid_gl\!debug\r_register.obj"
"\Xash3D\src_main\temp\vid_gl\!debug\r_shader.obj"
"\Xash3D\src_main\temp\vid_gl\!debug\r_shadow.obj"
"\Xash3D\src_main\temp\vid_gl\!debug\r_sky.obj"
"\Xash3D\src_main\temp\vid_gl\!debug\r_sprite.obj"
"\Xash3D\src_main\temp\vid_gl\!debug\r_studio.obj"
"\Xash3D\src_main\temp\vid_gl\!debug\r_surf.obj"
]
Creating command line "link.exe @"C:\DOCUME~1\ÌÈØÀ\LOCALS~1\Temp\RSP57A.tmp""
Creating temporary file "C:\DOCUME~1\ÌÈØÀ\LOCALS~1\Temp\RSP57C.bat" with contents
[
@echo off
copy \Xash3D\src_main\temp\vid_gl\!debug\vid_gl.dll "D:\Xash3D\bin\vid_gl.dll"
]
Creating command line ""C:\DOCUME~1\ÌÈØÀ\LOCALS~1\Temp\RSP57C.bat""
Compiling...
r_backend.c
r_bloom.c
r_cin.c
r_cull.c
r_decals.c
r_draw.c
r_image.c
r_light.c
r_main.c
r_math.c
r_mesh.c
r_model.c
r_opengl.c
r_poly.c
r_program.c
r_register.c
r_shader.c
r_shadow.c
r_sky.c
r_sprite.c
Generating Code...
Compiling...
r_studio.c
r_surf.c
Generating Code...
Linking...
Creating library ..\temp\vid_gl\!debug/vid_gl.lib and object ..\temp\vid_gl\!debug/vid_gl.exp
<h3>Output Window</h3>
Performing Custom Build Step on \Xash3D\src_main\temp\vid_gl\!debug\vid_gl.dll
‘ª®¯¨à®¢ ­® ä ©«®¢: 1.
<h3>Results</h3>
vid_gl.dll - 0 error(s), 0 warning(s)
</pre>
</body>
</html>

View File

@ -1,81 +0,0 @@
<html>
<body>
<pre>
<h1>Build Log</h1>
<h3>
--------------------Configuration: xtools - Win32 Debug--------------------
</h3>
<h3>Command Lines</h3>
Creating temporary file "C:\DOCUME~1\ÌÈØÀ\LOCALS~1\Temp\RSP588.tmp" with contents
[
/nologo /MDd /W3 /Gm /Gi /GX /ZI /Od /I "./" /I "../public" /I "bsplib" /I "ripper" /I "../common" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR"..\temp\xtools\!debug/" /Fo"..\temp\xtools\!debug/" /Fd"..\temp\xtools\!debug/" /FD /GZ /c
"D:\Xash3D\src_main\xtools\bsplib.c"
"D:\Xash3D\src_main\xtools\ripper\conv_bsplumps.c"
"D:\Xash3D\src_main\xtools\ripper\conv_doom.c"
"D:\Xash3D\src_main\xtools\ripper\conv_image.c"
"D:\Xash3D\src_main\xtools\ripper\conv_main.c"
"D:\Xash3D\src_main\xtools\ripper\conv_shader.c"
"D:\Xash3D\src_main\xtools\ripper\conv_sprite.c"
"D:\Xash3D\src_main\xtools\spritegen.c"
"D:\Xash3D\src_main\xtools\studio.c"
"D:\Xash3D\src_main\xtools\studio_utils.c"
"D:\Xash3D\src_main\xtools\utils.c"
"D:\Xash3D\src_main\xtools\wadlib.c"
"D:\Xash3D\src_main\xtools\ximage.c"
"D:\Xash3D\src_main\xtools\xtools.c"
]
Creating command line "cl.exe @"C:\DOCUME~1\ÌÈØÀ\LOCALS~1\Temp\RSP588.tmp""
Creating temporary file "C:\DOCUME~1\ÌÈØÀ\LOCALS~1\Temp\RSP589.tmp" with contents
[
msvcrtd.lib user32.lib /nologo /dll /incremental:yes /pdb:"..\temp\xtools\!debug/xtools.pdb" /debug /machine:I386 /nodefaultlib:"libc.lib" /out:"..\temp\xtools\!debug/xtools.dll" /implib:"..\temp\xtools\!debug/xtools.lib" /pdbtype:sept
"\Xash3D\src_main\temp\xtools\!debug\bsplib.obj"
"\Xash3D\src_main\temp\xtools\!debug\conv_bsplumps.obj"
"\Xash3D\src_main\temp\xtools\!debug\conv_doom.obj"
"\Xash3D\src_main\temp\xtools\!debug\conv_image.obj"
"\Xash3D\src_main\temp\xtools\!debug\conv_main.obj"
"\Xash3D\src_main\temp\xtools\!debug\conv_shader.obj"
"\Xash3D\src_main\temp\xtools\!debug\conv_sprite.obj"
"\Xash3D\src_main\temp\xtools\!debug\spritegen.obj"
"\Xash3D\src_main\temp\xtools\!debug\studio.obj"
"\Xash3D\src_main\temp\xtools\!debug\studio_utils.obj"
"\Xash3D\src_main\temp\xtools\!debug\utils.obj"
"\Xash3D\src_main\temp\xtools\!debug\wadlib.obj"
"\Xash3D\src_main\temp\xtools\!debug\ximage.obj"
"\Xash3D\src_main\temp\xtools\!debug\xtools.obj"
]
Creating command line "link.exe @"C:\DOCUME~1\ÌÈØÀ\LOCALS~1\Temp\RSP589.tmp""
Creating temporary file "C:\DOCUME~1\ÌÈØÀ\LOCALS~1\Temp\RSP58A.bat" with contents
[
@echo off
copy \Xash3D\src_main\temp\xtools\!debug\xtools.dll "D:\Xash3D\bin\xtools.dll"
]
Creating command line ""C:\DOCUME~1\ÌÈØÀ\LOCALS~1\Temp\RSP58A.bat""
Compiling...
bsplib.c
conv_bsplumps.c
conv_doom.c
conv_image.c
conv_main.c
conv_shader.c
conv_sprite.c
spritegen.c
studio.c
studio_utils.c
utils.c
wadlib.c
ximage.c
xtools.c
Generating Code...
Linking...
Creating library ..\temp\xtools\!debug/xtools.lib and object ..\temp\xtools\!debug/xtools.exp
<h3>Output Window</h3>
Performing Custom Build Step on \Xash3D\src_main\temp\xtools\!debug\xtools.dll
‘ª®¯¨à®¢ ­® ä ©«®¢: 1.
<h3>Results</h3>
xtools.dll - 0 error(s), 0 warning(s)
</pre>
</body>
</html>