Quake demos are just network packets stored in a binary file. The client reads it back into the network message buffers and then treats it as normal network messages coming from a server. There is no server running (and thus no QuakeC involved) during demo playback.toneddu2000 wrote:And how's possible that demos run quakec code (weapon,ai, gameplay, etc.) if VM is not initialized? Did I miss something?frag.machine wrote:IIRC the VM is not even initialized (let alone running) during demo playback...
Old school quake, well not quite but
-
- Posts: 2126
- Joined: Sat Nov 25, 2006 1:49 pm
Re: Old school quake, well not quite but
I know FrikaC made a cgi-bin version of the quakec interpreter once and wrote part of his website in QuakeC (LordHavoc)
Re: Old school quake, well not quite but
Heh didnt know that i guess thats why some mods who wanted something a bit more special like zerstoerer used cutscenes like demos.
Not that cutscenes are without problems either...
Btw fixing the broken lightpoint code had the curious side effect of turning off the somewhat colored appearance my engine has been (suffering ?) from,
it looks a bit bland now compared to before but i guess it just takes some getting used to after the massive overdose of colored lighting
Somehow i broke malice while hunting the before mentioned bugs sigh, now i get a heap collision error on the first map, and a bad lmp if i increase heap size
Not that cutscenes are without problems either...
Btw fixing the broken lightpoint code had the curious side effect of turning off the somewhat colored appearance my engine has been (suffering ?) from,
it looks a bit bland now compared to before but i guess it just takes some getting used to after the massive overdose of colored lighting
Somehow i broke malice while hunting the before mentioned bugs sigh, now i get a heap collision error on the first map, and a bad lmp if i increase heap size
Productivity is a state of mind.
Re: Old school quake, well not quite but
So i got hipnotic to run but
see the problem with this
broken rotation on doors it seems, funny thing is it only happens at certain angles but looks like crap when it happens.
see the problem with this
broken rotation on doors it seems, funny thing is it only happens at certain angles but looks like crap when it happens.
Productivity is a state of mind.
Re: Old school quake, well not quite but
Yeah, demo parsing is separate from vm. Good opportunity to code bug checks in demo parser
-
- Posts: 1395
- Joined: Tue Feb 24, 2009 4:39 pm
- Location: Italy
Re: Old school quake, well not quite but
ah ok, understood, now. Thanks for the clarification, frag.machine. But, when client reads demo binary file, it loads its quakec to understand what sound play or what weapon model show, right? Either way I couldn't understand how demo could playfrag.machine wrote:Quake demos are just network packets stored in a binary file. The client reads it back into the network message buffers and then treats it as normal network messages coming from a server. There is no server running (and thus no QuakeC involved) during demo playback.
Meadow Fun!! - my first commercial game, made with FTEQW game engine
Re: Old school quake, well not quite but
demos replace the server. there is no ssqc running at all when _playing_ demos, same as clients don't load any ssqc when connecting to remote servers.
Re: Old school quake, well not quite but
Yeah, if you're crashing inside the VM while playing a demo, then you're more likely to have a bad pointer transferring execution to random memory locations than you are to have anything wrong with the VM.
We had the power, we had the space, we had a sense of time and place
We knew the words, we knew the score, we knew what we were fighting for
We knew the words, we knew the score, we knew what we were fighting for
Re: Old school quake, well not quite but
Got that much i found atleast some of the problem and it seems related to avirox rotating bmodel code,
i might have broken something when i implemented it off the tutorial here,
but comparing the code brought me no answers so its probably something deeper in the code that messes up things.
I can run hipnotic with the bug check off now but it looks like shite with these doors messing up like that
Also found other bugs that i newer had suspected would cause so many problems, one was from when i took over this engine.
notice the check for turb models ? originally it was if(mod->name[0] != '*') continue; and the problem same in stainmaps.
This meant light started behaving rather strange at times (certainly made this engine extremely colorfull) but also caused weird behaviour with certain water surfs.
Not blaming anyone its an honest mistake that might have cropped up because of lack of sleep on the coders side, god knows i had many of those nights myself.
i might have broken something when i implemented it off the tutorial here,
but comparing the code brought me no answers so its probably something deeper in the code that messes up things.
I can run hipnotic with the bug check off now but it looks like shite with these doors messing up like that
Also found other bugs that i newer had suspected would cause so many problems, one was from when i took over this engine.
Code: Select all
/*
============
R_LightPoint
============
*/
void R_LightPoint(vec3_t p, vec3_t colour)
{
vec3_t start;
vec3_t end;
int lnum;
vec3_t dist;
float add;
int x;
model_t *mod;
model_t *shortest;
if(!cl.worldmodel->lightdata)
{
colour[0] = 255;
colour[1] = 255;
colour[2] = 255;
return;
}
// set up end point
// this must be done seperately for each model checked as it's passed as a pointer to
// RecursiveLightPoint, and therefore may have it's value changed
end[0] = p[0];
end[1] = p[1];
end[2] = p[2] - 2048;
// nothing hit yet
lightplane = NULL;
// do the world first
RecursiveLightPoint(cl.worldmodel->nodes, p, end);
// did we hit?
if(lightplane)
{
// copy out the data
cl.worldmodel->lightplane = lightplane;
cl.worldmodel->lightspot[0] = lightspot[0];
cl.worldmodel->lightspot[1] = lightspot[1];
cl.worldmodel->lightspot[2] = lightspot[2];
cl.worldmodel->pointcolour[0] = pointcolour[0];
cl.worldmodel->pointcolour[1] = pointcolour[1];
cl.worldmodel->pointcolour[2] = pointcolour[2];
}
else
{
// set to valid data for shortest path testing
cl.worldmodel->lightplane = NULL;
cl.worldmodel->lightspot[2] = -1000000;
cl.worldmodel->pointcolour[0] = 0;
cl.worldmodel->pointcolour[1] = 0;
cl.worldmodel->pointcolour[2] = 0;
}
// find the shortest path - this will be the model with the highest value in lightspot[2]
// init it to the worldmodel first
shortest = cl.worldmodel;
// now check the brush models
for(x = 0; x < cl_numvisedicts; x++)
{
mod = cl_visedicts[x]->model;
// no more models
if(!mod)
{
break;
}
// don;t do * models (their data comes from the world)
// the check here was wrong since it's inception, it was set to only allow '*' models and not the other way around Oo
if(ISTURBTEX(mod->name))
{
continue;
}
// make sure we only get brush models
if(mod->type != mod_brush)
{
continue;
}
// set up start point
// offset the start [0] and [1] points by entity origin to do func_train bmodels
// this is positioned above the model to account for moving bmodels (note the "-" in [2])
start[0] = p[0] + cl_visedicts[x]->origin[0];
start[1] = p[1] + cl_visedicts[x]->origin[1];
start[2] = p[2] - cl_visedicts[x]->origin[2];
// set up end point
// this must be done seperately for each model checked as it's passed as a pointer to
// RecursiveLightPoint, and therefore may have it's value changed
// offset the end [0] and [1] points by entity origin to do func_train bmodels
end[0] = p[0] + cl_visedicts[x]->origin[0];
end[1] = p[1] + cl_visedicts[x]->origin[1];
end[2] = p[2] - 2048 + cl_visedicts[x]->origin[2];
// NULL it again
lightplane = NULL;
// and do it
RecursiveLightPoint(mod->nodes + mod->hulls[0].firstclipnode, start, end);
// did we hit?
if(lightplane)
{
// copy out the data
mod->lightplane = lightplane;
mod->lightspot[0] = lightspot[0];
mod->lightspot[1] = lightspot[1];
// store the colour for this model. it hit but we don't know if it's the shortest
// yet, so each model must store it's own colour
mod->pointcolour[0] = pointcolour[0];
mod->pointcolour[1] = pointcolour[1];
mod->pointcolour[2] = pointcolour[2];
// add origin[2] cos the bmodel may move!!!
// it's official. i'm a stupid twit. i was using the origin of the *model* originally,
// not of the *entity*. this works just fine.
mod->lightspot[2] = lightspot[2] + cl_visedicts[x]->origin[2];
// check for shortest path
if(mod->lightspot[2] > shortest->lightspot[2])
{
shortest = mod;
}
}
else
{
mod->lightplane = NULL;
mod->pointcolour[0] = 0;
mod->pointcolour[1] = 0;
mod->pointcolour[2] = 0;
}
}
// copy the shortest out to the globals
lightplane = shortest->lightplane;
lightspot[0] = shortest->lightspot[0];
lightspot[1] = shortest->lightspot[1];
lightspot[2] = shortest->lightspot[2];
// store pointcolour back to colour
if(!lightplane)
{
// hit nothing
colour[0] = 0.0f;
colour[1] = 0.0f;
colour[2] = 0.0f;
}
else
{
// take the pointcolour from the shortest
// (previous Realms took the global pointcolour, which may or may not have been the shortest)
colour[0] = shortest->pointcolour[0];
colour[1] = shortest->pointcolour[1];
colour[2] = shortest->pointcolour[2];
}
// and add dynamic lights
for(lnum = 0; lnum < MAX_DLIGHTS; lnum++)
{
if(cl_dlights[lnum].die >= cl.time)
{
VectorSubtract(p, cl_dlights[lnum].origin, dist);
add = cl_dlights[lnum].radius - Length(dist);
if(add > 0.0f)
{
VectorMA(colour, add, cl_dlights[lnum].RGB, colour);
}
}
}
}
notice the check for turb models ? originally it was if(mod->name[0] != '*') continue; and the problem same in stainmaps.
This meant light started behaving rather strange at times (certainly made this engine extremely colorfull) but also caused weird behaviour with certain water surfs.
Not blaming anyone its an honest mistake that might have cropped up because of lack of sleep on the coders side, god knows i had many of those nights myself.
Productivity is a state of mind.
Re: Old school quake, well not quite but
Was indeed the rotating bmodel code that caused the bug,
i looked over the tutorial yesterday and noticed that there had been a few changes since i implemented it.
One of the functions im not 100% certain with still is this one
Where there any problems related to this function ? i could not quite grasp from one of the last comments if i had to revert everything to bakers version.
i looked over the tutorial yesterday and noticed that there had been a few changes since i implemented it.
One of the functions im not 100% certain with still is this one
Code: Select all
void SV_FindTouchedLeafs(edict_t *ent, mnode_t *node, byte *pvs)
{
mplane_t *splitplane;
int sides;
int leafnum;
loc0:
// ent already touches a leaf
if(ent->touchleaf)
{
return;
}
// hit solid
if(node->contents == CONTENTS_SOLID)
{
return;
}
// add an efrag if the node is a leaf
// this is used for sending ents to the client so it needs to stay
if(node->contents < 0)
{
loc1:
leafnum = ((mleaf_t *) node) - sv.worldmodel->leafs - 1;
if((pvs[leafnum >> 3] & (1 << (leafnum & 7))))
{
ent->touchleaf = true;
}
return;
}
// NODE_MIXED
splitplane = node->plane;
sides = BOX_ON_PLANE_SIDE(ent->v.absmin, ent->v.absmax, splitplane);
// recurse down the contacted sides, start dropping out if we hit anything
if((sides & 1) && !ent->touchleaf && node->children[0]->contents != CONTENTS_SOLID)
{
if(!(sides & 2) && node->children[0]->contents < 0)
{
node = node->children[0];
goto loc1;
}
else if(!(sides & 2))
{
node = node->children[0];
goto loc0;
}
else
{
SV_FindTouchedLeafs(ent, node->children[0], pvs);
}
}
if((sides & 2) && !ent->touchleaf && node->children[1]->contents != CONTENTS_SOLID)
{
// test for a leaf and drop out if so, otherwise it's a node so go round again
node = node->children[1];
if(node->contents < 0)
{
goto loc1;
}
else
{
goto loc0;
}
}
}
Productivity is a state of mind.
Re: Old school quake, well not quite but
Holy hellhole batman
profiled the code to see why its slower than even tenebrae, Notice the Calls to Host_Frame and a few others yikes.
Code: Select all
Flad profil:
Hver stikprøve regnes som 0.01 seconds.
% kumulativ selv selv totalt
tid seconds seconds kald s/kald s/kald navn
27.88 67.24 67.24 _mcount_private
23.06 122.85 55.61 3455449516 0.00 0.00 Sys_DoubleTime
8.82 144.13 21.28 1492 0.01 0.01 MakeSpec
6.52 159.85 15.72 756397056 0.00 0.00 BoxFilter
5.21 172.41 12.56 inflate
3.45 180.74 8.33 3455424386 0.00 0.00 Host_Frame
3.06 188.12 7.38 3455424386 0.00 0.00 _Host_Frame
2.96 195.25 7.13 3455424386 0.00 0.00 Host_FilterTime
2.62 201.58 6.33 1 6.33 113.43 WinMain@16
1.73 205.74 4.16 174098534 0.00 0.00 R_GetVertexLightValue
1.53 209.44 3.70 520397338 0.00 0.00 unzReadCurrentFile
1.16 212.24 2.80 fmod
1.12 214.94 2.70 520397327 0.00 0.00 COM_FRead
0.97 217.29 2.35 crc32
0.92 219.51 2.23 _fentry__
0.89 221.66 2.14 441 0.00 0.05 MakeDOT3
0.75 223.46 1.80 updatewindow
0.58 224.87 1.41 GL_ProcessTexturePass
0.57 226.24 1.37 2098 0.00 0.00 GL_LoadTGA
0.50 227.44 1.21 253591 0.00 0.00 GL_DrawAliasFrame
0.44 228.51 1.07 176 0.01 0.01 GL_ResampleTexture
0.40 229.47 0.96 _setjmp3
0.36 230.35 0.88 520396884 0.00 0.00 COM_FGetc
0.34 231.16 0.81 189099264 0.00 0.00 ReadPixel
0.23 231.73 0.56 520400025 0.00 0.00 COM_GetFileByHandle
0.22 232.26 0.53 1 0.53 0.62 Sys_Quit
0.20 232.74 0.48 23902 0.00 0.00 R_StencilHazeParticles
0.16 233.13 0.40 87049267 0.00 0.00 R_SetVertexLightValue
0.14 233.47 0.33 23999 0.00 0.00 R_RecursiveWorldNode
0.12 233.76 0.30 67072 0.00 0.00 R_MarkLights
0.12 234.06 0.30 60634 0.00 0.00 R_AddTransformedBSPBModelToList
0.12 234.36 0.29 23999 0.00 0.00 R_KillParticles
0.12 234.65 0.29 928929 0.00 0.00 RecursiveLightPoint
0.12 234.94 0.29 329886 0.00 0.00 R_AddDynamicLights
0.12 235.22 0.28 46091 0.00 0.00 R_DrawTorchSmokeEffect
0.11 235.49 0.27 23999 0.00 0.00 R_DrawSmokeParticles
0.11 235.75 0.26 1 0.26 0.26 Heap_PageIn
0.10 236.00 0.25 55439360 0.00 0.00 R_UpdateTorchSmokeParticle
0.10 236.25 0.25 25023 0.00 0.00 R_UpdateTorchSmokeParticles
0.10 236.50 0.25 23999 0.00 0.00 R_DrawSurfaceChain
0.10 236.73 0.23 179266 0.00 0.00 R_DrawAliasModelShadow
0.09 236.95 0.22 4420335 0.00 0.00 R_SetupSurfaceVArrayVerts
0.09 237.16 0.21 21302 0.00 0.00 R_UpdateParticles
0.08 237.36 0.20 29361062 0.00 0.00 BoxOnPlaneSide
0.08 237.55 0.19 36159 0.00 0.00 R_DrawParticleChain
0.06 237.70 0.15 23999 0.00 0.00 R_DrawWaterSurfaces
0.06 237.84 0.14 47274816 0.00 0.00 PackFloatInByte
0.06 237.98 0.14 unzlocal_getByte
0.05 238.10 0.12 memcpy
0.04 238.19 0.09 330814 0.00 0.00 R_BuildLightMap
0.04 238.28 0.09 330814 0.00 0.00 R_StoreLightmap
0.04 238.37 0.09 207731 0.00 0.00 R_LightPoint
0.04 238.46 0.09 207731 0.00 0.00 R_SetupAliasFrame
0.04 238.55 0.09 160778 0.00 0.00 Mod_PointInLeaf
0.04 238.64 0.09 1 0.09 0.09 COM_ShutdownFileSystem
0.03 238.72 0.08 24008 0.00 0.00 CL_RelinkEntities
0.03 238.79 0.07 23902 0.00 0.00 R_HeatHazePickup
0.03 238.87 0.07 61094991 0.00 0.00 fread_file_func
0.03 238.94 0.07 7968327 0.00 0.00 R_CullSphere
0.03 239.00 0.07 160 0.00 0.00 va
0.02 239.06 0.06 6164762 0.00 0.00 R_CullBox
0.02 239.12 0.06 4056531 0.00 0.00 R_AnimateSurfaceLight
0.02 239.18 0.06 229242 0.00 0.00 SND_PaintChannelFrom8
0.02 239.24 0.06 55602 0.00 0.00 StripLength
0.02 239.30 0.06 49995 0.00 0.00 R_DrawLavaStencilSmoke
0.02 239.36 0.06 MD5Transform
0.02 239.41 0.05 107927 0.00 0.00 R_StainSurf
0.02 239.46 0.05 26816 0.00 0.00 LMAllocBlock
0.02 239.51 0.05 13663 0.00 0.00 R_CausticPickup
0.02 239.55 0.04 40909800 0.00 0.00 Q_rand
0.02 239.59 0.04 207731 0.00 0.00 R_RotateForEntity
0.02 239.63 0.04 23999 0.00 0.00 R_AnimateLight
0.02 239.67 0.04 23999 0.00 0.00 R_InitTextureChains
0.02 239.71 0.04 23999 0.00 0.00 R_MarkLeaves
0.02 239.75 0.04 2 0.02 0.03 R_InitTorchSmokeParticles
0.01 239.78 0.03 4420335 0.00 0.00 R_TextureAnimation
0.01 239.81 0.03 655121 0.00 0.00 unzGoToNextFile
0.01 239.84 0.03 77604 0.00 0.00 R_StainNode
0.01 239.87 0.03 55602 0.00 0.00 FanLength
0.01 239.90 0.03 48106 0.00 0.00 S_PaintChannels
0.01 239.93 0.03 23999 0.00 0.00 R_AddBModelsToDrawList
0.01 239.96 0.03 23999 0.00 0.00 R_BloomBlend
0.01 239.99 0.03 23999 0.00 0.00 R_Bloom_GeneratexDiamonds
0.01 240.02 0.03 23902 0.00 0.00 R_DrawTurbFog
0.01 240.05 0.03 19236 0.00 0.00 R_LumaPickup
0.01 240.07 0.02 1518368 0.00 0.00 Normalize
0.01 240.09 0.02 1365489 0.00 0.00 SND_Spatialize
0.01 240.11 0.02 655901 0.00 0.00 unzGetCurrentFileInfo
0.01 240.13 0.02 653948 0.00 0.00 unzStringFileNameCompare
0.01 240.15 0.02 389825 0.00 0.00 R_TransformVArrayVerts
0.01 240.17 0.02 232747 0.00 0.00 S_LoadSound
0.01 240.19 0.02 214892 0.00 0.00 R_LeafForEntity
0.01 240.21 0.02 207731 0.00 0.00 R_DrawAliasModel
0.01 240.23 0.02 96236 0.00 0.00 R_TransformEntity
0.01 240.25 0.02 47998 0.00 0.00 R_SetupGL
0.01 240.27 0.02 47804 0.00 0.00 R_DrawSkyLists
0.01 240.29 0.02 24031 0.00 0.00 SCR_UpdateScreen
0.01 240.31 0.02 24008 0.00 0.00 S_Update
0.01 240.33 0.02 23999 0.00 0.00 R_Bloom_DownsampleView
0.01 240.35 0.02 23999 0.00 0.00 R_DrawAliasEntities
0.01 240.37 0.02 23999 0.00 0.00 R_DrawSkyPickup
0.01 240.39 0.02 23999 0.00 0.00 R_MarkPortals
0.01 240.41 0.02 22893 0.00 0.00 V_CalcRefdef
0.01 240.43 0.02 784 0.00 0.00 fopen_file_func
0.01 240.45 0.02 212 0.00 0.00 GL_QuantumLumaHackery
0.01 240.47 0.02 R_DepthSortAliasEntities
0.01 240.49 0.02 png_read_filter_row_paeth_multibyte_pixel
0.01 240.51 0.02 unzlocal_getLong
0.01 240.53 0.02 unzlocal_getShort
0.01 240.54 0.01 2186979 0.00 0.00 Draw_SingleScaledCharacter
0.01 240.56 0.01 15292 0.00 0.00 R_RocketTrail
0.01 240.57 0.01 1 0.01 0.01 R_InitVertexLights
0.00 240.59 0.01 811871 0.00 0.00 LongNoSwap
0.00 240.59 0.01 458117 0.00 0.00 Draw_Pic
0.00 240.60 0.01 376909 0.00 0.00 LerpAngles
0.00 240.62 0.01 210282 0.00 0.00 anglemod
0.00 240.62 0.01 179579 0.00 0.00 CL_ParseUpdate
0.00 240.63 0.01 120235 0.00 0.00 R_PushDlights
0.00 240.65 0.01 76332 0.00 0.00 HUD_DrawIndividualWeapon
0.00 240.66 0.01 68068 0.00 0.00 HUD_DrawNum
0.00 240.66 0.01 62873 0.00 0.00 R_TurbDepthOn
0.00 240.68 0.01 49554 0.00 0.00 R_ParticleSprite
0.00 240.69 0.01 47998 0.00 0.00 GL_SetPerspective
0.00 240.69 0.01 44675 0.00 0.00 R_StoreEfrags
0.00 240.71 0.01 28290 0.00 0.00 Snd_WriteLinearBlastStereo16
0.00 240.72 0.01 24125 0.00 0.00 GL_Set2D
0.00 240.72 0.01 24098 0.00 0.00 IN_Accumulate
0.00 240.74 0.01 24026 0.00 0.00 Con_CheckResize
0.00 240.75 0.01 24026 0.00 0.00 GL_EndRendering
0.00 240.75 0.01 24026 0.00 0.00 Sbar_Draw3DBrushes
0.00 240.76 0.01 24008 0.00 0.00 CL_UpdateTEnts
0.00 240.78 0.01 24008 0.00 0.00 S_UpdateAmbientSounds
0.00 240.78 0.01 24005 0.00 0.00 R_RenderView
0.00 240.79 0.01 24003 0.00 0.00 CL_SendMove
0.00 240.81 0.01 23999 0.00 0.00 R_Clear
0.00 240.81 0.01 23999 0.00 0.00 R_CullAliasEntities
0.00 240.82 0.01 23999 0.00 0.00 R_CullBrushEntities
0.00 240.84 0.01 23999 0.00 0.00 R_DrawSpriteEntities
0.00 240.84 0.01 23999 0.00 0.00 R_DrawViewModel
0.00 240.85 0.01 23999 0.00 0.00 R_InitRegularTMUs
0.00 240.87 0.01 23999 0.00 0.00 R_KillTMUs
0.00 240.88 0.01 23999 0.00 0.00 R_ShouldDrawViewModel
0.00 240.88 0.01 23999 0.00 0.00 R_TransSortBrushEntities
0.00 240.90 0.01 22893 0.00 0.00 Draw_XHair
0.00 240.91 0.01 22893 0.00 0.00 V_CalcFloats
0.00 240.91 0.01 22893 0.00 0.00 V_CalcGunAngle
0.00 240.93 0.01 22796 0.00 0.00 HUD_DrawAmmoCount
0.00 240.94 0.01 22796 0.00 0.00 HUD_DrawFaceBSP
0.00 240.94 0.01 22796 0.00 0.00 Sbar_DrawAmmo
0.00 240.96 0.01 11653 0.00 0.00 CL_ParseServerMessage
0.00 240.97 0.01 5368 0.00 0.00 MarkPVSForLeaf
0.00 240.97 0.01 2716 0.00 0.00 MSG_ReadString
0.00 240.99 0.01 780 0.00 0.00 unzLocateFile
0.00 241.00 0.01 231 0.00 0.00 Mod_CalcAliasBounds
0.00 241.00 0.01 215 0.00 0.00 MarkLeafsForSurf
0.00 241.01 0.01 206 0.00 0.00 SV_Physics_Client
0.00 241.03 0.01 99 0.00 0.00 Draw_TextBox
0.00 241.03 0.01 3 0.00 0.00 R_InitBLTable
0.00 241.04 0.01 R_DepthSortBrushEntities
0.00 241.06 0.01 __chkstk_ms
0.00 241.06 0.01 __sinl_internal
0.00 241.07 0.01 ceil
0.00 241.09 0.01 cos
0.00 241.09 0.01 floor
0.00 241.10 0.01 fread
0.00 241.12 0.01 inflate_table
0.00 241.12 0.01 45585 0.00 0.00 CharBlockEnd
0.00 241.12 0.01 23999 0.00 0.00 R_RenderDrawList
0.00 241.13 0.01 11221 0.00 0.00 CL_ParseClientdata
0.00 241.13 0.01 719 0.00 0.00 CL_ParseBaseline
0.00 241.14 0.01 54 0.00 0.00 M_Quit_Draw
0.00 241.15 0.01 1 0.01 0.63 M_Quit_Key
0.00 241.15 0.00 82748236 0.00 0.00 fill_fopen_filefunc
0.00 241.15 0.00 2186979 0.00 0.00 Draw_SingleCharacter
0.00 241.15 0.00 1334550 0.00 0.00 fseek_file_func
0.00 241.15 0.00 752211 0.00 0.00 ShortNoSwap
0.00 241.15 0.00 640690 0.00 0.00 MSG_ReadByte
0.00 241.15 0.00 377010 0.00 0.00 LerpVectors
0.00 241.15 0.00 333621 0.00 0.00 R_CullModelForEntity
0.00 241.15 0.00 309017 0.00 0.00 MSG_ReadShort
0.00 241.15 0.00 305729 0.00 0.00 Draw_TransPic
0.00 241.15 0.00 301630 0.00 0.00 R_BoxContainsPoint
0.00 241.15 0.00 269270 0.00 0.00 Draw_Character
0.00 241.15 0.00 268199 0.00 0.00 MSG_ReadCoord
0.00 241.15 0.00 260077 0.00 0.00 Heap_Init
0.00 241.15 0.00 243872 0.00 0.00 SZ_GetSpace
0.00 241.15 0.00 240030 0.00 0.00 CL_KeyState
0.00 241.15 0.00 215378 0.00 0.00 FloatNoSwap
0.00 241.15 0.00 204871 0.00 0.00 MSG_ReadChar
0.00 241.15 0.00 183626 0.00 0.00 GL_CheckError
0.00 241.15 0.00 180149 0.00 0.00 CL_EntityNum
0.00 241.15 0.00 171628 0.00 0.00 CRC_ProcessByte
0.00 241.15 0.00 171338 0.00 0.00 GL_MakeAliasModelDisplayLists
0.00 241.15 0.00 149735 0.00 0.00 HUD_DrawHUDModel
0.00 241.15 0.00 145448 0.00 0.00 Q_sqrt
0.00 241.15 0.00 145442 0.00 0.00 MSG_WriteByte
0.00 241.15 0.00 136776 0.00 0.00 HUD_SetHUDState
0.00 241.15 0.00 131428 0.00 0.00 Length
0.00 241.15 0.00 117845 0.00 0.00 MSG_ReadAngle
0.00 241.15 0.00 96236 0.00 0.00 R_AddTransformedBModelToList
0.00 241.15 0.00 96236 0.00 0.00 R_InverseTransform
0.00 241.15 0.00 95996 0.00 0.00 R_SignbitsForPlane
0.00 241.15 0.00 93466 0.00 0.00 NormalizeFast
0.00 241.15 0.00 85312 0.00 0.00 MD5_Compare
0.00 241.15 0.00 73658 0.00 0.00 Sbar_itoa
0.00 241.15 0.00 72618 0.00 0.00 MSG_WriteShort
0.00 241.15 0.00 72024 0.00 0.00 MSG_WriteAngle
0.00 241.15 0.00 71672 0.00 0.00 AngleVectors
0.00 241.15 0.00 52107 0.00 0.00 V_CalcPowerupCshift
0.00 241.15 0.00 50718 0.00 0.00 Heap_MemAlloc
0.00 241.15 0.00 50458 0.00 0.00 Heap_MemAllocFree
0.00 241.15 0.00 50289 0.00 0.00 R_TurbDepthOff
0.00 241.15 0.00 48106 0.00 0.00 GetSoundtime
0.00 241.15 0.00 48106 0.00 0.00 SNDDMA_GetDMAPos
0.00 241.15 0.00 48106 0.00 0.00 SNDDMA_Submit
0.00 241.15 0.00 48106 0.00 0.00 S_Update_
0.00 241.15 0.00 48052 0.00 0.00 V_DropCShift
0.00 241.15 0.00 47998 0.00 0.00 GL_SetViewPort
0.00 241.15 0.00 47368 0.00 0.00 MSG_ReadByteShort
0.00 241.15 0.00 46789 0.00 0.00 R_SetupAliasDraw
0.00 241.15 0.00 46789 0.00 0.00 R_ShutdownAliasDraw
0.00 241.15 0.00 46077 0.00 0.00 Cmd_Argc
0.00 241.15 0.00 45786 0.00 0.00 angledelta
0.00 241.15 0.00 45585 0.00 0.00 CharBlockBegin
0.00 241.15 0.00 36409 0.00 0.00 Cvar_WriteVariables
0.00 241.15 0.00 35661 0.00 0.00 CL_GetMessage
0.00 241.15 0.00 35578 0.00 0.00 PF_WriteEntity
0.00 241.15 0.00 35314 0.00 0.00 Heap_ZAlloc
0.00 241.15 0.00 34830 0.00 0.00 M_DrawCharacter
0.00 241.15 0.00 33615 0.00 0.00 R_UploadSingleLightmap
0.00 241.15 0.00 32703 0.00 0.00 va_vsnprintf
0.00 241.15 0.00 31518 0.00 0.00 va_snprintf
0.00 241.15 0.00 29119 0.00 0.00 R_InitTorchSmokeParticle
0.00 241.15 0.00 28081 0.00 0.00 V_CalcBlend
0.00 241.15 0.00 28080 0.00 0.00 Mod_CalcSurfaceExtents
0.00 241.15 0.00 28064 0.00 0.00 S_TransferPaintBuffer
0.00 241.15 0.00 28064 0.00 0.00 S_TransferStereo16
0.00 241.15 0.00 26846 0.00 0.00 GL_BuildPolygonFromSurface
0.00 241.15 0.00 26816 0.00 0.00 GL_CreateSurfaceLightmap
0.00 241.15 0.00 26670 0.00 0.00 SCR_CalcFov
0.00 241.15 0.00 25826 0.00 0.00 COM_ParseString
0.00 241.15 0.00 25607 0.00 0.00 SZ_Write
0.00 241.15 0.00 25422 0.00 0.00 Cvar_FindVar
0.00 241.15 0.00 25134 0.00 0.00 Cmd_Argv
0.00 241.15 0.00 25024 0.00 0.00 SetNetTime
0.00 241.15 0.00 24527 0.00 0.00 SZ_Clear
0.00 241.15 0.00 24522 0.00 0.00 Cvar_Set
0.00 241.15 0.00 24102 0.00 0.00 MSG_WriteFloat
0.00 241.15 0.00 24098 0.00 0.00 S_ExtraUpdate
0.00 241.15 0.00 24044 0.00 0.00 Cvar_SetValue
0.00 241.15 0.00 24026 0.00 0.00 GL_BeginRendering
0.00 241.15 0.00 24026 0.00 0.00 SCR_SetBrightness
0.00 241.15 0.00 24026 0.00 0.00 SCR_SetUpToDrawConsole
0.00 241.15 0.00 24026 0.00 0.00 V_RenderView
0.00 241.15 0.00 24026 0.00 0.00 V_UpdatePalette
0.00 241.15 0.00 24013 0.00 0.00 Sys_SendKeyEvents
0.00 241.15 0.00 24012 0.00 0.00 CL_ReadFromServer
0.00 241.15 0.00 24012 0.00 0.00 CL_SendCmd
0.00 241.15 0.00 24012 0.00 0.00 Cbuf_Execute
0.00 241.15 0.00 24012 0.00 0.00 Host_GetConsoleCommands
0.00 241.15 0.00 24012 0.00 0.00 NET_Poll
0.00 241.15 0.00 24012 0.00 0.00 Sys_ConsoleInput
0.00 241.15 0.00 24008 0.00 0.00 CL_LerpPoint
0.00 241.15 0.00 24005 0.00 0.00 CL_DecayLights
0.00 241.15 0.00 24005 0.00 0.00 V_AddIdle
0.00 241.15 0.00 24003 0.00 0.00 CL_AdjustAngles
0.00 241.15 0.00 24003 0.00 0.00 CL_BaseMove
0.00 241.15 0.00 24003 0.00 0.00 IN_MouseMove
0.00 241.15 0.00 24003 0.00 0.00 IN_Move
0.00 241.15 0.00 24003 0.00 0.00 V_StopPitchDrift
0.00 241.15 0.00 24002 0.00 0.00 IN_MouseEvent
0.00 241.15 0.00 23999 0.00 0.00 R_Bloom_DrawEffect
0.00 241.15 0.00 23999 0.00 0.00 R_DrawParticles
0.00 241.15 0.00 23999 0.00 0.00 R_DrawWorld
0.00 241.15 0.00 23999 0.00 0.00 R_ExtractFrustum
0.00 241.15 0.00 23999 0.00 0.00 R_InitDetailOnlyTMU
0.00 241.15 0.00 23999 0.00 0.00 R_InitSurfVArrays
0.00 241.15 0.00 23999 0.00 0.00 R_PolyBlend
0.00 241.15 0.00 23999 0.00 0.00 R_RenderScene
0.00 241.15 0.00 23999 0.00 0.00 R_SetupFrame
0.00 241.15 0.00 23999 0.00 0.00 R_TransSortAliasEntities
0.00 241.15 0.00 23999 0.00 0.00 V_SetContentsColor
0.00 241.15 0.00 23902 0.00 0.00 R_FragOff
0.00 241.15 0.00 23795 0.00 0.00 Cmd_TokenizeString
0.00 241.15 0.00 22991 0.00 0.00 V_CalcRoll
0.00 241.15 0.00 22908 0.00 0.00 M_Draw
0.00 241.15 0.00 22908 0.00 0.00 SCR_CheckDrawCenterString
0.00 241.15 0.00 22908 0.00 0.00 SCR_DrawConsole
0.00 241.15 0.00 22908 0.00 0.00 SCR_DrawNet
0.00 241.15 0.00 22908 0.00 0.00 SCR_DrawPause
0.00 241.15 0.00 22908 0.00 0.00 SCR_DrawRam
0.00 241.15 0.00 22908 0.00 0.00 SCR_DrawTurtle
0.00 241.15 0.00 22908 0.00 0.00 Sbar_Draw
0.00 241.15 0.00 22893 0.00 0.00 Draw_XHairWrapper
0.00 241.15 0.00 22893 0.00 0.00 V_BoundOffsets
0.00 241.15 0.00 22893 0.00 0.00 V_CalcBob
0.00 241.15 0.00 22893 0.00 0.00 V_CalcViewRoll
0.00 241.15 0.00 22893 0.00 0.00 V_DriftPitch
0.00 241.15 0.00 22796 0.00 0.00 HUD_DrawAmmo
0.00 241.15 0.00 22796 0.00 0.00 HUD_DrawArmour
0.00 241.15 0.00 22796 0.00 0.00 HUD_DrawBits
0.00 241.15 0.00 22796 0.00 0.00 HUD_DrawPowerups
0.00 241.15 0.00 22796 0.00 0.00 HUD_DrawWeapons
0.00 241.15 0.00 22796 0.00 0.00 Sbar_Draw3DModels
0.00 241.15 0.00 22796 0.00 0.00 Sbar_DrawArmor
0.00 241.15 0.00 22789 0.00 0.00 Con_DrawNotify
0.00 241.15 0.00 22643 0.00 0.00 R_SetupAliasShadowDraw
0.00 241.15 0.00 22643 0.00 0.00 R_ShutdownAliasShadowDraw
0.00 241.15 0.00 21623 0.00 0.00 Draw_CachePic
0.00 241.15 0.00 21302 0.00 0.00 R_ExecStateChangeForParticles
0.00 241.15 0.00 17374 0.00 0.00 R_FragOn
0.00 241.15 0.00 14112 0.00 0.00 R_RemoveEfrags
0.00 241.15 0.00 11751 0.00 0.00 MSG_BeginReading
0.00 241.15 0.00 11322 0.00 0.00 MSG_ReadFloat
0.00 241.15 0.00 11251 0.00 0.00 MSG_ReadLong
0.00 241.15 0.00 10740 0.00 0.00 R_DrawLavaSmokeEffect
0.00 241.15 0.00 10352 0.00 0.00 Mod_LeafPVS
0.00 241.15 0.00 10194 0.00 0.00 BoundPoly
0.00 241.15 0.00 8890 0.00 0.00 strlcpy
0.00 241.15 0.00 8311 0.00 0.00 R_AddStain
0.00 241.15 0.00 8288 0.00 0.00 R_DrawSpriteModel
0.00 241.15 0.00 7948 0.00 0.00 COM_FOpenFile
0.00 241.15 0.00 7948 0.00 0.00 COM_FOpenFileRead
0.00 241.15 0.00 7948 0.00 0.00 COM_HandleForFile
0.00 241.15 0.00 7874 0.00 0.00 HUD_DrawIndividualPowerup
0.00 241.15 0.00 7300 0.00 0.00 R_SetupVolumeEffect
0.00 241.15 0.00 7300 0.00 0.00 R_ShutDownVolumeEffect
0.00 241.15 0.00 6024 0.00 0.00 SNDGetLittleLong
0.00 241.15 0.00 5663 0.00 0.00 CL_AllocDlight
0.00 241.15 0.00 5590 0.00 0.00 Mod_DecompressVis
0.00 241.15 0.00 5590 0.00 0.00 Sbar_IntermissionNumber
0.00 241.15 0.00 5276 0.00 0.00 HUD_DrawIndividualBit
0.00 241.15 0.00 4952 0.00 0.00 pr_ChkEdict
0.00 241.15 0.00 4518 0.00 0.00 COM_FGetcLittleShort
0.00 241.15 0.00 4232 0.00 0.00 pr_ChkEField
0.00 241.15 0.00 3879 0.00 0.00 MD5Update
0.00 241.15 0.00 3857 0.00 0.00 SCR_DrawCenterString
0.00 241.15 0.00 3717 0.00 0.00 SND_PickChannel
0.00 241.15 0.00 3717 0.00 0.00 S_StartSound
0.00 241.15 0.00 3685 0.00 0.00 MSG_ReadByteShort2
0.00 241.15 0.00 3599 0.00 0.00 Mod_RadiusFromBounds
0.00 241.15 0.00 3431 0.00 0.00 CL_ParseStartSoundPacket
0.00 241.15 0.00 3242 0.00 0.00 SV_AddToFatPVS
0.00 241.15 0.00 3242 0.00 0.00 SV_FatPVS
0.00 241.15 0.00 3177 0.00 0.00 Mod_LoadAliasFrame
0.00 241.15 0.00 3148 0.00 0.00 R_SetupAliasUnderwaterDraw
0.00 241.15 0.00 3148 0.00 0.00 R_ShutdownAliasUnderwaterDraw
0.00 241.15 0.00 2890 0.00 0.00 GL_InitTextureSlot
0.00 241.15 0.00 2631 0.00 0.00 FindNextChunk
0.00 241.15 0.00 2572 0.00 0.00 FindChunk
0.00 241.15 0.00 2541 0.00 0.00 GL_LoadPNG
0.00 241.15 0.00 2210 0.00 0.00 Sys_Printf
0.00 241.15 0.00 1929 0.00 0.00 SNDGetLittleShort
0.00 241.15 0.00 1926 0.00 0.00 COM_Read
0.00 241.15 0.00 1838 0.00 0.00 pr_ChkGlobalsF
0.00 241.15 0.00 1811 0.00 0.00 CL_NewTempEntity
0.00 241.15 0.00 1734 0.00 0.00 COM_FCloseFile
0.00 241.15 0.00 1645 0.00 0.00 pr_ChkFunction
0.00 241.15 0.00 1564 0.00 0.00 unzGoToFirstFile
0.00 241.15 0.00 1427 0.00 0.01 GL_TryForExternalTexture
0.00 241.15 0.00 1345 0.00 0.00 GL_LoadBMP
0.00 241.15 0.00 1345 0.00 0.00 GL_LoadPCX
0.00 241.15 0.00 1293 0.00 0.00 MD5Final
0.00 241.15 0.00 1293 0.00 0.00 MD5Init
0.00 241.15 0.00 1293 0.00 0.00 MD5_Checksum
0.00 241.15 0.00 1291 0.00 0.00 R_ParseParticleEffect
0.00 241.15 0.00 1290 0.00 0.00 R_BloodParticleSplash
0.00 241.15 0.00 1273 0.00 0.00 GL_UploadTextureToOpenGL
0.00 241.15 0.00 1270 0.00 0.00 GL_MakeTextureObjects
0.00 241.15 0.00 1246 0.00 0.00 CL_KeepaliveMessage
0.00 241.15 0.00 1236 0.00 0.00 COM_FileBase
0.00 241.15 0.00 1118 0.00 0.00 Sbar_IntermissionOverlay
0.00 241.15 0.00 1112 0.00 0.00 V_CalcIntermissionRefdef
0.00 241.15 0.00 1071 0.00 0.00 R_SmokeEffect
0.00 241.15 0.00 1055 0.00 0.00 Mod_FindName
0.00 241.15 0.00 1042 0.00 0.00 PR_EnterFunction
0.00 241.15 0.00 1042 0.00 0.00 PR_LeaveFunction
0.00 241.15 0.00 970 0.00 0.00 GL_SubdivideSurface
0.00 241.15 0.00 970 0.00 0.00 SubdividePolygon
0.00 241.15 0.00 953 0.00 0.00 COM_LoadTempFile
0.00 241.15 0.00 949 0.00 0.00 CL_ParseTEnt
0.00 241.15 0.00 947 0.00 0.00 Heap_ScratchZAlloc
0.00 241.15 0.00 945 0.00 0.00 Con_DPrintf
0.00 241.15 0.00 902 0.00 0.00 Cmd_ExecuteString
0.00 241.15 0.00 856 0.00 0.00 strlcat
0.00 241.15 0.00 843 0.00 0.02 GL_LoadQuakeTexture
0.00 241.15 0.00 828 0.00 0.00 pr_GetString
0.00 241.15 0.00 784 0.00 0.00 unzOpen
0.00 241.15 0.00 784 0.00 0.00 unzOpen2
0.00 241.15 0.00 782 0.00 0.00 fclose_file_func
0.00 241.15 0.00 782 0.00 0.00 ftell_file_func
0.00 241.15 0.00 782 0.00 0.00 unzClose
0.00 241.15 0.00 780 0.00 0.00 unzCloseCurrentFile
0.00 241.15 0.00 780 0.00 0.00 unzOpenCurrentFile
0.00 241.15 0.00 780 0.00 0.00 unzOpenCurrentFile3
0.00 241.15 0.00 770 0.00 0.00 GL_GetTextureSlotInCache
0.00 241.15 0.00 709 0.00 0.00 pr_ChkGlobals
0.00 241.15 0.00 707 0.00 0.00 R_RunGunshotEffect
0.00 241.15 0.00 687 0.00 0.02 Mod_ForName
0.00 241.15 0.00 687 0.00 0.02 Mod_LoadModel
0.00 241.15 0.00 643 0.00 0.00 GetWavinfo
0.00 241.15 0.00 643 0.00 0.00 ResampleSfx
0.00 241.15 0.00 634 0.00 0.00 S_FindName
0.00 241.15 0.00 634 0.00 0.00 S_PrecacheSound
0.00 241.15 0.00 621 0.00 0.00 SV_RunThink
0.00 241.15 0.00 607 0.00 0.00 Cbuf_AddText
0.00 241.15 0.00 594 0.00 0.00 M_PrintWhite
0.00 241.15 0.00 571 0.00 0.00 Con_Linefeed
0.00 241.15 0.00 540 0.00 0.00 M_Print
0.00 241.15 0.00 521 0.00 0.00 Key_Event
0.00 241.15 0.00 514 0.00 0.00 MD5_Copy
0.00 241.15 0.00 499 0.00 0.00 Loop_GetMessage
0.00 241.15 0.00 499 0.00 0.00 NET_GetMessage
0.00 241.15 0.00 483 0.00 0.00 Cbuf_AddText2
0.00 241.15 0.00 472 0.00 0.00 Con_Printf
0.00 241.15 0.00 465 0.00 0.00 Con_Print
0.00 241.15 0.00 442 0.00 0.00 Con_SafePrintf
0.00 241.15 0.00 409 0.00 0.00 V_cshift_f
0.00 241.15 0.00 404 0.00 0.00 Cvar_VariableValue
0.00 241.15 0.00 404 0.00 0.00 PF_cvar
0.00 241.15 0.00 402 0.00 0.00 R_AddTexturesToListForModel
0.00 241.15 0.00 398 0.00 0.00 MSG_WriteString
0.00 241.15 0.00 352 0.00 0.00 MakeResamplePoint
0.00 241.15 0.00 335 0.00 0.00 PR_ExecuteProgram
0.00 241.15 0.00 318 0.00 0.00 GL_FlushTextureCache
0.00 241.15 0.00 303 0.00 0.00 MSG_WriteCoord
0.00 241.15 0.00 284 0.00 0.00 MarkSurfaceVolumesInLeaf
0.00 241.15 0.00 254 0.00 0.00 CL_ParseStaticSound
0.00 241.15 0.00 254 0.00 0.00 S_StaticSound
0.00 241.15 0.00 241 0.00 0.00 Mod_FloodFillSkin
0.00 241.15 0.00 231 0.00 0.00 BuildTris
0.00 241.15 0.00 231 0.00 0.02 Mod_LoadAliasModel
0.00 241.15 0.00 231 0.00 0.02 Mod_LoadAllSkins
0.00 241.15 0.00 208 0.00 0.00 PF_VarString
0.00 241.15 0.00 198 0.00 0.00 SV_ClipMoveToEntity
0.00 241.15 0.00 198 0.00 0.00 SV_ClipToLinks
0.00 241.15 0.00 198 0.00 0.00 SV_HullForEntity
0.00 241.15 0.00 198 0.00 0.00 SV_Move
0.00 241.15 0.00 198 0.00 0.00 SV_MoveBounds
0.00 241.15 0.00 194 0.00 0.00 Loop_SendUnreliableMessage
0.00 241.15 0.00 194 0.00 0.00 NET_SendUnreliableMessage
0.00 241.15 0.00 193 0.00 0.00 W_CleanupName
0.00 241.15 0.00 184 0.00 0.00 SwapPic
0.00 241.15 0.00 177 0.00 0.00 Cmd_Exists
0.00 241.15 0.00 177 0.00 0.00 Cvar_RegisterVariable
0.00 241.15 0.00 175 0.00 0.00 Cvar_Command
0.00 241.15 0.00 165 0.00 0.00 Key_SetBinding
0.00 241.15 0.00 149 0.00 0.00 CL_ParseStatic
0.00 241.15 0.00 149 0.00 0.00 R_AddEfrags
0.00 241.15 0.00 149 0.00 0.00 R_SplitEntityOnNode
0.00 241.15 0.00 146 0.00 0.00 Heap_Alloc
0.00 241.15 0.00 144 0.00 0.00 Cmd_AddCommand
0.00 241.15 0.00 144 0.00 0.00 Cvar_VariableString
0.00 241.15 0.00 137 0.00 0.00 MHGLGetProcAddress
0.00 241.15 0.00 137 0.00 0.00 R_ParticleExplosion
0.00 241.15 0.00 136 0.00 0.00 CL_AllocDlightForTEnt
0.00 241.15 0.00 136 0.00 0.00 R_SmokeSplash
0.00 241.15 0.00 135 0.00 0.00 M_DrawTransPic
0.00 241.15 0.00 134 0.00 0.00 SCR_CenterPrint
0.00 241.15 0.00 123 0.00 0.00 SV_LinkEdict
0.00 241.15 0.00 114 0.00 0.00 NUM_FOR_EDICT
0.00 241.15 0.00 114 0.00 0.00 PF_lightstyle
0.00 241.15 0.00 109 0.00 0.00 pr_GetEdict
0.00 241.15 0.00 108 0.00 0.00 PF_localcmd
0.00 241.15 0.00 107 0.00 0.00 InsertLinkBefore
0.00 241.15 0.00 107 0.00 0.00 PF_bprint
0.00 241.15 0.00 107 0.00 0.00 SV_BroadcastPrintf
0.00 241.15 0.00 107 0.00 0.00 SV_UnlinkEdict
0.00 241.15 0.00 107 0.00 0.00 pr_String
0.00 241.15 0.00 106 0.00 0.00 Loop_CanSendMessage
0.00 241.15 0.00 106 0.00 0.00 Loop_SendMessage
0.00 241.15 0.00 106 0.00 0.00 NET_CanSendMessage
0.00 241.15 0.00 106 0.00 0.00 NET_SendMessage
0.00 241.15 0.00 106 0.00 0.00 RemoveLink
0.00 241.15 0.00 104 0.00 0.00 Key_Bind_f
0.00 241.15 0.00 104 0.00 0.00 Key_StringToKeynum
0.00 241.15 0.00 104 0.00 0.00 MSG_WriteLong
0.00 241.15 0.00 103 0.00 0.00 SV_Physics
0.00 241.15 0.00 103 0.00 0.00 SV_Physics_Pusher
0.00 241.15 0.00 103 0.00 0.00 SV_TouchLinks
0.00 241.15 0.00 102 0.00 0.00 Loop_CheckNewConnections
0.00 241.15 0.00 102 0.00 0.00 MSG_WriteByteShort
0.00 241.15 0.00 102 0.00 0.00 NET_CheckNewConnections
0.00 241.15 0.00 102 0.00 0.00 SV_ModelIndex
0.00 241.15 0.00 101 0.00 0.00 Datagram_CheckNewConnections
0.00 241.15 0.00 101 0.00 0.00 Host_ServerFrame
0.00 241.15 0.00 101 0.00 0.00 MSG_WriteChar
0.00 241.15 0.00 101 0.00 0.00 PF_centerprint
0.00 241.15 0.00 101 0.00 0.00 SV_CheckForNewClients
0.00 241.15 0.00 101 0.00 0.00 SV_CheckVelocity
0.00 241.15 0.00 101 0.00 0.00 SV_CleanupEnts
0.00 241.15 0.00 101 0.00 0.00 SV_ClearDatagram
0.00 241.15 0.00 101 0.00 0.00 SV_ReadClientMessage
0.00 241.15 0.00 101 0.00 0.00 SV_RunClients
0.00 241.15 0.00 101 0.00 0.00 SV_SendClientMessages
0.00 241.15 0.00 101 0.00 0.00 SV_UpdateToReliableMessages
0.00 241.15 0.00 101 0.00 0.00 V_BonusFlash_f
0.00 241.15 0.00 101 0.00 0.00 WINS_CheckNewConnections
0.00 241.15 0.00 99 0.00 0.00 DrawMenuBackground
0.00 241.15 0.00 99 0.00 0.00 PF_makevectors
0.00 241.15 0.00 99 0.00 0.00 SV_AddGravity
0.00 241.15 0.00 99 0.00 0.00 SV_CheckStuck
0.00 241.15 0.00 99 0.00 0.00 SV_CheckWater
0.00 241.15 0.00 99 0.00 0.00 SV_FlyMove
0.00 241.15 0.00 99 0.00 0.00 SV_HullPointContents
0.00 241.15 0.00 99 0.00 0.00 SV_PointContents
0.00 241.15 0.00 99 0.00 0.00 SV_SetIdealPitch
0.00 241.15 0.00 99 0.00 0.00 SV_TestEntityPosition
0.00 241.15 0.00 99 0.00 0.00 SV_WalkMove
0.00 241.15 0.00 99 0.00 0.00 SV_WriteClientdataToMessage
0.00 241.15 0.00 98 0.00 0.00 SV_AirAccelerate
0.00 241.15 0.00 98 0.00 0.00 SV_AirMove
0.00 241.15 0.00 98 0.00 0.00 SV_ClientThink
0.00 241.15 0.00 98 0.00 0.00 SV_DropPunchAngle
0.00 241.15 0.00 98 0.00 0.00 SV_SendClientDatagram
0.00 241.15 0.00 98 0.00 0.00 SV_WriteEntitiesToClient
0.00 241.15 0.00 95 0.00 0.00 SV_ReadClientMove
0.00 241.15 0.00 92 0.00 0.00 PR_CheckEmptyString
0.00 241.15 0.00 88 0.00 0.00 MarkStragglePVSForLeaf
0.00 241.15 0.00 66 0.00 0.00 Draw_ConsoleBackground
0.00 241.15 0.00 66 0.00 0.00 PF_precache_sound
0.00 241.15 0.00 64 0.00 0.02 GL_AllocateLightmap
0.00 241.15 0.00 61 0.00 0.00 COM_CheckParm
0.00 241.15 0.00 50 0.00 0.00 V_ParseDamage
0.00 241.15 0.00 48 0.00 0.02 Mod_LoadSpriteFrame
0.00 241.15 0.00 46 0.00 0.00 Draw_FadeScreen
0.00 241.15 0.00 45 0.00 0.00 M_DrawPic
0.00 241.15 0.00 45 0.00 0.00 M_Main_Draw
0.00 241.15 0.00 40 0.00 0.00 R_RunParticleEffect
0.00 241.15 0.00 39 0.00 0.00 Mod_CheckWorldMap
0.00 241.15 0.00 39 0.00 0.00 Mod_LoadBSPLighting
0.00 241.15 0.00 39 0.00 0.20 Mod_LoadBrushModel
0.00 241.15 0.00 39 0.00 0.00 Mod_LoadClipnodes
0.00 241.15 0.00 39 0.00 0.00 Mod_LoadEdges
0.00 241.15 0.00 39 0.00 0.00 Mod_LoadEntities
0.00 241.15 0.00 39 0.00 0.00 Mod_LoadFaces
0.00 241.15 0.00 39 0.00 0.00 Mod_LoadLeafs
0.00 241.15 0.00 39 0.00 0.00 Mod_LoadLighting
0.00 241.15 0.00 39 0.00 0.00 Mod_LoadMarksurfaces
0.00 241.15 0.00 39 0.00 0.00 Mod_LoadNodes
0.00 241.15 0.00 39 0.00 0.00 Mod_LoadPlanes
0.00 241.15 0.00 39 0.00 0.00 Mod_LoadSubmodels
0.00 241.15 0.00 39 0.00 0.00 Mod_LoadSurfedges
0.00 241.15 0.00 39 0.00 0.00 Mod_LoadTexinfo
0.00 241.15 0.00 39 0.00 0.20 Mod_LoadTextures
0.00 241.15 0.00 39 0.00 0.00 Mod_LoadVertexes
0.00 241.15 0.00 39 0.00 0.00 Mod_MakeHull0
0.00 241.15 0.00 39 0.00 0.00 Mod_SetParent
0.00 241.15 0.00 35 0.00 0.02 Mod_Load3DSkinnedWidget
0.00 241.15 0.00 34 0.00 0.00 R_TeleportSplash
0.00 241.15 0.00 32 0.00 0.00 CL_ParseBeam
0.00 241.15 0.00 32 0.00 0.02 Mod_Load3DWidget
0.00 241.15 0.00 31 0.00 0.00 GL_MakeDisplayListObjects
0.00 241.15 0.00 30 0.00 0.00 W_GetLumpName
0.00 241.15 0.00 30 0.00 0.00 W_GetLumpinfo
0.00 241.15 0.00 29 0.00 0.02 Draw_PicFromWad
0.00 241.15 0.00 26 0.00 0.00 Key_KeynumToString
0.00 241.15 0.00 26 0.00 0.00 Mod_DrawWidgetFrame
0.00 241.15 0.00 26 0.00 0.02 PF_precache_model
0.00 241.15 0.00 25 0.00 0.00 CL_SignonReply
0.00 241.15 0.00 24 0.00 0.00 Mod_SetupWidgetFrame
0.00 241.15 0.00 24 0.00 0.01 R_TranslatePlayerSkin
0.00 241.15 0.00 23 0.00 0.00 COM_ParseToken
0.00 241.15 0.00 23 0.00 0.00 GL_SetLiquidColour
0.00 241.15 0.00 22 0.00 0.00 CDAudio_Stop
0.00 241.15 0.00 21 0.00 0.00 EDICT_NUM
0.00 241.15 0.00 21 0.00 0.00 S_ClearBuffer
0.00 241.15 0.00 21 0.00 0.00 S_StopAllSounds
0.00 241.15 0.00 20 0.00 0.00 Con_DrawConsole
0.00 241.15 0.00 20 0.00 0.00 Con_DrawInput
0.00 241.15 0.00 19 0.00 0.00 ED_FindField
0.00 241.15 0.00 15 0.00 0.00 Mod_LoadAliasGroup
0.00 241.15 0.00 14 0.00 0.00 pr_GetEString
0.00 241.15 0.00 13 0.00 0.01 CL_NewTranslation
0.00 241.15 0.00 13 0.00 0.00 Cbuf_InsertText
0.00 241.15 0.00 13 0.00 0.00 Cmd_Alias_f
0.00 241.15 0.00 13 0.00 0.00 Cmd_CopyString
0.00 241.15 0.00 12 0.00 0.00 CL_Disconnect
0.00 241.15 0.00 12 0.00 0.00 MIDAS_Stop
0.00 241.15 0.00 12 0.00 0.07 Mod_LoadSpriteModel
0.00 241.15 0.00 11 0.00 0.00 ED_FindFieldOffset
0.00 241.15 0.00 11 0.00 0.00 Heap_FreeToLowMark
0.00 241.15 0.00 9 0.00 0.00 CDAudio_Play
0.00 241.15 0.00 9 0.00 0.00 MapKey
0.00 241.15 0.00 8 0.00 0.00 Con_ClearNotify
0.00 241.15 0.00 8 0.00 0.00 ED_ChkEdict
0.00 241.15 0.00 8 0.00 0.00 ED_ParseEpair
0.00 241.15 0.00 7 0.00 0.00 ED_Alloc
0.00 241.15 0.00 7 0.00 0.00 ED_ClearEdict
0.00 241.15 0.00 7 0.00 0.00 Heap_LowMark
0.00 241.15 0.00 6 0.00 0.00 CL_ClearState
0.00 241.15 0.00 6 0.00 2.19 CL_ParseServerInfo
0.00 241.15 0.00 6 0.00 0.00 COM_LoadHunkFile
0.00 241.15 0.00 6 0.00 0.00 COM_LoadPackFile
0.00 241.15 0.00 6 0.00 0.00 Draw_AlphaPic
0.00 241.15 0.00 6 0.00 0.20 GL_BuildLightmaps
0.00 241.15 0.00 6 0.00 0.00 GL_TextureAging
0.00 241.15 0.00 6 0.00 0.00 Host_ClearMemory
0.00 241.15 0.00 6 0.00 0.00 Mod_ClearAll
0.00 241.15 0.00 6 0.00 0.00 R_BuildTextureList
0.00 241.15 0.00 6 0.00 0.00 R_ClearLightmaps
0.00 241.15 0.00 6 0.00 0.00 R_ClearParticles
0.00 241.15 0.00 6 0.00 0.00 R_FindWorldSpawnEntry
0.00 241.15 0.00 6 0.00 0.00 R_InitColourTexture
0.00 241.15 0.00 6 0.00 0.20 R_NewMap
0.00 241.15 0.00 6 0.00 0.00 SCR_EndLoadingPlaque
0.00 241.15 0.00 6 0.00 0.00 S_ClearAll
0.00 241.15 0.00 6 0.00 0.00 WorldVolumeCarve
0.00 241.15 0.00 5 0.00 0.00 CL_CloseDemoFile
0.00 241.15 0.00 5 0.00 0.00 CL_PlayDemo_f
0.00 241.15 0.00 5 0.00 0.00 CL_StopPlayback
0.00 241.15 0.00 5 0.00 0.00 COM_DefaultExtension
0.00 241.15 0.00 5 0.00 0.00 COM_FOpenDemoFile
0.00 241.15 0.00 5 0.00 0.01 GL_LoadBitmapResourceTexture
0.00 241.15 0.00 5 0.00 0.00 IN_ActivateMouse
0.00 241.15 0.00 5 0.00 0.00 Mod_DrawWidgetBrushModel
0.00 241.15 0.00 5 0.00 0.00 PF_Spawn
0.00 241.15 0.00 5 0.00 0.00 R_InitSky
0.00 241.15 0.00 4 0.00 0.00 COM_LoadPK3File
0.00 241.15 0.00 4 0.00 0.00 CRC_Block
0.00 241.15 0.00 4 0.00 0.00 Cmd_Exec_f
0.00 241.15 0.00 4 0.00 0.00 ED_NewString
0.00 241.15 0.00 4 0.00 0.00 GL_CheckExtension
0.00 241.15 0.00 4 0.00 0.00 Host_EndGame
0.00 241.15 0.00 4 0.00 0.00 Loop_Close
0.00 241.15 0.00 3 0.00 0.00 CL_FixIntermission
0.00 241.15 0.00 3 0.00 0.00 COM_LoadHeapFile
0.00 241.15 0.00 3 0.00 0.00 ED_FindFunction
0.00 241.15 0.00 3 0.00 0.00 ED_ParseEdict
0.00 241.15 0.00 3 0.00 0.00 Host_ShutdownServer
0.00 241.15 0.00 3 0.00 0.00 IN_DeactivateMouse
0.00 241.15 0.00 3 0.00 0.00 IN_HideMouse
0.00 241.15 0.00 3 0.00 0.00 IN_ShowMouse
0.00 241.15 0.00 3 0.00 0.00 IN_StartupMouse
0.00 241.15 0.00 3 0.00 0.21 M_Keydown
0.00 241.15 0.00 3 0.00 0.00 R_SetAnisotropicFilter
0.00 241.15 0.00 3 0.00 0.00 SZ_Alloc
0.00 241.15 0.00 3 0.00 0.00 S_LocalSound
0.00 241.15 0.00 3 0.00 0.00 SetMinMaxSize
0.00 241.15 0.00 3 0.00 0.00 VID_SetPalette
0.00 241.15 0.00 2 0.00 0.00 AppActivate
0.00 241.15 0.00 2 0.00 0.00 COM_AddGameDirectory
0.00 241.15 0.00 2 0.00 0.31 ClearAllStates
0.00 241.15 0.00 2 0.00 0.00 ClearLink
0.00 241.15 0.00 2 0.00 0.00 Cmd_Wait_f
0.00 241.15 0.00 2 0.00 0.00 ED_Free
0.00 241.15 0.00 2 0.00 0.00 GL_AlphaMaskTexture
0.00 241.15 0.00 2 0.00 0.00 GL_RemakeSurfaceLightmaps
0.00 241.15 0.00 2 0.00 0.00 IN_ClearStates
0.00 241.15 0.00 2 0.00 0.00 IN_Shutdown
0.00 241.15 0.00 2 0.00 0.00 IN_UpdateClipCursor
0.00 241.15 0.00 2 0.00 0.00 Key_ClearStates
0.00 241.15 0.00 2 0.00 0.00 Key_Unbindall_f
0.00 241.15 0.00 2 0.00 0.00 M_Main_Key
0.00 241.15 0.00 2 0.00 0.00 NET_Close
0.00 241.15 0.00 2 0.00 0.00 NET_FreeQSocket
0.00 241.15 0.00 2 0.00 0.00 NET_NewQSocket
0.00 241.15 0.00 2 0.00 0.00 PF_Find
0.00 241.15 0.00 2 0.00 0.00 PF_Remove
0.00 241.15 0.00 2 0.00 0.00 PF_setsize
0.00 241.15 0.00 2 0.00 0.00 R_Bloom_InitBackUpTexture
0.00 241.15 0.00 2 0.00 0.00 R_Bloom_InitEffectTexture
0.00 241.15 0.00 2 0.00 0.00 R_Bloom_InitTextures
0.00 241.15 0.00 2 0.00 0.04 R_InitParticles
0.00 241.15 0.00 2 0.00 0.00 SCR_BeginLoadingPlaque
0.00 241.15 0.00 2 0.00 0.00 SNDDMA_Shutdown
0.00 241.15 0.00 2 0.00 0.00 S_BlockSound
0.00 241.15 0.00 2 0.00 0.00 VID_EnumFullDIB
0.00 241.15 0.00 2 0.00 0.00 VID_UpdateWindowStatus
0.00 241.15 0.00 2 0.00 0.00 WINS_CloseSocket
0.00 241.15 0.00 2 0.00 0.00 WINS_Listen
0.00 241.15 0.00 2 0.00 0.00 WINS_OpenSocket
0.00 241.15 0.00 2 0.00 0.00 unzGetGlobalInfo
0.00 241.15 0.00 1 0.00 0.00 CDAudio_Init
0.00 241.15 0.00 1 0.00 0.00 CDAudio_Pause
0.00 241.15 0.00 1 0.00 0.00 CDAudio_Resume
0.00 241.15 0.00 1 0.00 0.00 CDAudio_Shutdown
0.00 241.15 0.00 1 0.00 0.00 CL_EstablishConnection
0.00 241.15 0.00 1 0.00 0.00 CL_Init
0.00 241.15 0.00 1 0.00 0.00 CL_InitInput
0.00 241.15 0.00 1 0.00 0.00 CL_InitTEnts
0.00 241.15 0.00 1 0.00 0.00 COM_CheckRegistered
0.00 241.15 0.00 1 0.00 0.00 COM_FileLength
0.00 241.15 0.00 1 0.00 0.00 COM_Init
0.00 241.15 0.00 1 0.00 0.00 COM_InitArgv
0.00 241.15 0.00 1 0.00 0.00 COM_InitFilesystem
0.00 241.15 0.00 1 0.00 0.00 CRC_Init
0.00 241.15 0.00 1 0.00 0.00 Cbuf_Init
0.00 241.15 0.00 1 0.00 0.00 Chase_Init
0.00 241.15 0.00 1 0.00 0.00 Cmd_Init
0.00 241.15 0.00 1 0.00 0.00 Cmd_StuffCmds_f
0.00 241.15 0.00 1 0.00 0.00 Con_Init
0.00 241.15 0.00 1 0.00 0.00 Cvar_SetDirect
0.00 241.15 0.00 1 0.00 0.00 Cvar_SetValueDirect
0.00 241.15 0.00 1 0.00 0.00 Datagram_Init
0.00 241.15 0.00 1 0.00 0.00 Datagram_Listen
0.00 241.15 0.00 1 0.00 0.00 Datagram_Shutdown
0.00 241.15 0.00 1 0.00 0.00 DeinitConProc
0.00 241.15 0.00 1 0.00 0.05 Draw_Init
0.00 241.15 0.00 1 0.00 0.00 ED_FindEdictFieldValues
0.00 241.15 0.00 1 0.00 0.00 ED_LoadFromFile
0.00 241.15 0.00 1 0.00 0.00 GL_DeleteAllTextures
0.00 241.15 0.00 1 0.00 0.00 GL_GetFunctionPointers
0.00 241.15 0.00 1 0.00 0.00 GL_Init
0.00 241.15 0.00 1 0.00 0.00 GL_InitRenderState
0.00 241.15 0.00 1 0.00 0.00 GL_InitShaders
0.00 241.15 0.00 1 0.00 0.00 GL_InitState
0.00 241.15 0.00 1 0.00 0.00 GL_InitTextureCache
0.00 241.15 0.00 1 0.00 0.00 GL_SetupState
0.00 241.15 0.00 1 0.00 0.00 Host_Begin_f
0.00 241.15 0.00 1 0.00 0.00 Host_Color_f
0.00 241.15 0.00 1 0.00 0.00 Host_Connect_f
0.00 241.15 0.00 1 0.00 0.00 Host_FindMaxClients
0.00 241.15 0.00 1 0.00 1.66 Host_Init
0.00 241.15 0.00 1 0.00 0.00 Host_InitCommands
0.00 241.15 0.00 1 0.00 0.00 Host_InitLocal
0.00 241.15 0.00 1 0.00 0.00 Host_InitVCR
0.00 241.15 0.00 1 0.00 0.03 Host_Map_f
0.00 241.15 0.00 1 0.00 0.00 Host_Name_f
0.00 241.15 0.00 1 0.00 0.00 Host_PreSpawn_f
0.00 241.15 0.00 1 0.00 0.62 Host_Quit_f
0.00 241.15 0.00 1 0.00 0.00 Host_Reconnect_f
0.00 241.15 0.00 1 0.00 0.09 Host_Shutdown
0.00 241.15 0.00 1 0.00 0.00 Host_Spawn_f
0.00 241.15 0.00 1 0.00 0.00 Host_WriteConfiguration
0.00 241.15 0.00 1 0.00 0.00 IN_Impulse
0.00 241.15 0.00 1 0.00 0.00 IN_Init
0.00 241.15 0.00 1 0.00 0.00 Key_Init
0.00 241.15 0.00 1 0.00 0.00 Key_WriteBindings
0.00 241.15 0.00 1 0.00 0.00 Loop_Connect
0.00 241.15 0.00 1 0.00 0.00 Loop_Init
0.00 241.15 0.00 1 0.00 0.00 Loop_Listen
0.00 241.15 0.00 1 0.00 0.00 Loop_Shutdown
0.00 241.15 0.00 1 0.00 0.00 MIDAS_Init
0.00 241.15 0.00 1 0.00 0.00 M_Init
0.00 241.15 0.00 1 0.00 0.00 M_Menu_Main_f
0.00 241.15 0.00 1 0.00 0.00 M_Menu_Quit_f
0.00 241.15 0.00 1 0.00 0.00 M_ToggleMenu_f
0.00 241.15 0.00 1 0.00 0.00 Mod_Init
0.00 241.15 0.00 1 0.00 0.00 NET_Connect
0.00 241.15 0.00 1 0.00 0.00 NET_Init
0.00 241.15 0.00 1 0.00 0.00 NET_SendToAll
0.00 241.15 0.00 1 0.00 0.00 NET_SendToAll2
0.00 241.15 0.00 1 0.00 0.00 NET_Shutdown
0.00 241.15 0.00 1 0.00 0.00 PF_ftos
0.00 241.15 0.00 1 0.00 0.00 PF_setmodel
0.00 241.15 0.00 1 0.00 0.00 PF_setorigin
0.00 241.15 0.00 1 0.00 0.00 PR_Init
0.00 241.15 0.00 1 0.00 0.00 PR_LoadProgs
0.00 241.15 0.00 1 0.00 0.00 PR_RunClear
0.00 241.15 0.00 1 0.00 0.00 Q_randinit
0.00 241.15 0.00 1 0.00 0.13 R_Init
0.00 241.15 0.00 1 0.00 0.00 R_InitBloomTextures
0.00 241.15 0.00 1 0.00 0.01 R_InitCausticTexture
0.00 241.15 0.00 1 0.00 0.00 R_InitDSTTex
0.00 241.15 0.00 1 0.00 0.00 R_InitDetailTexture
0.00 241.15 0.00 1 0.00 0.00 R_InitFractalNoise
0.00 241.15 0.00 1 0.00 0.06 R_InitHCTextures
0.00 241.15 0.00 1 0.00 0.00 R_InitNormCubeMap
0.00 241.15 0.00 1 0.00 0.01 R_InitParticleTexture
0.00 241.15 0.00 1 0.00 0.03 R_InitSkySphere
0.00 241.15 0.00 1 0.00 0.03 R_InitSurfStuff
0.00 241.15 0.00 1 0.00 0.00 R_InitTextures
0.00 241.15 0.00 1 0.00 0.01 R_InitXHairTexture
0.00 241.15 0.00 1 0.00 0.05 SCR_Init
0.00 241.15 0.00 1 0.00 0.00 SCR_SizeUp_f
0.00 241.15 0.00 1 0.00 0.00 SNDDMA_Init
0.00 241.15 0.00 1 0.00 0.00 SNDDMA_InitDirect
0.00 241.15 0.00 1 0.00 0.00 SND_InitScaletable
0.00 241.15 0.00 1 0.00 0.00 SV_ClearWorld
0.00 241.15 0.00 1 0.00 0.00 SV_ConnectClient
0.00 241.15 0.00 1 0.00 0.00 SV_CreateAreaNode
0.00 241.15 0.00 1 0.00 0.00 SV_CreateBaseline
0.00 241.15 0.00 1 0.00 0.00 SV_DropClient
0.00 241.15 0.00 1 0.00 0.00 SV_Init
0.00 241.15 0.00 1 0.00 0.00 SV_InitBoxHull
0.00 241.15 0.00 1 0.00 0.00 SV_SendServerinfo
0.00 241.15 0.00 1 0.00 0.03 SV_SpawnServer
0.00 241.15 0.00 1 0.00 0.00 S_FreeSound
0.00 241.15 0.00 1 0.00 0.00 S_Init
0.00 241.15 0.00 1 0.00 0.00 S_Shutdown
0.00 241.15 0.00 1 0.00 0.00 S_Startup
0.00 241.15 0.00 1 0.00 0.00 S_UnblockSound
0.00 241.15 0.00 1 0.00 1.11 Sbar_Init
0.00 241.15 0.00 1 0.00 0.00 Sys_Init
0.00 241.15 0.00 1 0.00 0.00 Sys_InitDoubleTime
0.00 241.15 0.00 1 0.00 0.31 VID_Init
0.00 241.15 0.00 1 0.00 0.00 VID_InitDIB
0.00 241.15 0.00 1 0.00 0.00 VID_InitFullDIB
0.00 241.15 0.00 1 0.00 0.00 VID_Menu_Init
0.00 241.15 0.00 1 0.00 0.00 VID_Restart
0.00 241.15 0.00 1 0.00 0.00 VID_SetFullDIBMode
0.00 241.15 0.00 1 0.00 0.31 VID_SetMode
0.00 241.15 0.00 1 0.00 0.00 VID_Shutdown
0.00 241.15 0.00 1 0.00 0.00 VID_SyncCvars
0.00 241.15 0.00 1 0.00 0.00 VID_Unlock
0.00 241.15 0.00 1 0.00 0.00 V_Init
0.00 241.15 0.00 1 0.00 0.00 WINS_GetLocalAddress
0.00 241.15 0.00 1 0.00 0.00 WINS_Init
0.00 241.15 0.00 1 0.00 0.00 WINS_Shutdown
0.00 241.15 0.00 1 0.00 0.00 WIPX_Init
0.00 241.15 0.00 1 0.00 0.00 WIPX_OpenSocket
0.00 241.15 0.00 1 0.00 0.00 W_FreeWadFile
0.00 241.15 0.00 1 0.00 0.00 W_LoadWadFile
0.00 241.15 0.00 1 0.00 0.00 bSetupPixelFormat
Productivity is a state of mind.
Re: Old school quake, well not quite but
Is this the one that does a glReadPixels every frame and then computes bloom on the CPU? That was another piece of crap that needs to be killed.
We had the power, we had the space, we had a sense of time and place
We knew the words, we knew the score, we knew what we were fighting for
We knew the words, we knew the score, we knew what we were fighting for
Re: Old school quake, well not quite but
Not to my knowledge ?, i adapted the bloom code from kmquake2 cant remember if i ever used a version that relied on glReadPixels but i cant rule it out.
Its been some years since i last had a look at this code. Early versions might have used the glare code from tenebrae so in that case yes but i since moved on cause it was to freaking slow. Atm the it seems to use a lot of time inside Sys_DoubleTime not sure why it calls this function like 1000 times a frame but even stranger that it causes the engine to stall as much as it does the first 50 or so frames. After that it settles and runs fine, but definatly something i need to to look after a fix for.
I also started cutting down some fat on checking for leafs since i noticed i had quite a few superflous checks in place where they where not needed, the original code allready did a better job at that so total timewaster on my side. Doing that helped a bit but it still stalls a little.
The bloom code uses matrix operations but could have been better written, it does the job ok though (maybe a bit over the top at times) as i have it in my demonquake engine as well and im not suffering any slowdowns with that one so i guess i can rule out bloom to be the culprit here.
Just in case here is the bloom code ->
Probably a better way to write this one (GLSL). Also its quite messy :/
Its been some years since i last had a look at this code. Early versions might have used the glare code from tenebrae so in that case yes but i since moved on cause it was to freaking slow. Atm the it seems to use a lot of time inside Sys_DoubleTime not sure why it calls this function like 1000 times a frame but even stranger that it causes the engine to stall as much as it does the first 50 or so frames. After that it settles and runs fine, but definatly something i need to to look after a fix for.
I also started cutting down some fat on checking for leafs since i noticed i had quite a few superflous checks in place where they where not needed, the original code allready did a better job at that so total timewaster on my side. Doing that helped a bit but it still stalls a little.
The bloom code uses matrix operations but could have been better written, it does the job ok though (maybe a bit over the top at times) as i have it in my demonquake engine as well and im not suffering any slowdowns with that one so i guess i can rule out bloom to be the culprit here.
Just in case here is the bloom code ->
Code: Select all
/*
Copyright (C) 1997-2001 Id Software, Inc.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
// r_bloom.c: 2D lighting post process effect
//http://www.quakesrc.org/forums/viewtopic.php?t=4340&start=0
#include "gl_state.h"
#include "glquake.h"
/*
==============================================================================
LIGHT BLOOMS
==============================================================================
*/
static float Diamond8x[8][8] =
{
{0.0f, 0.0f, 0.0f, 0.1f, 0.1f, 0.0f, 0.0f, 0.0f},
{0.0f, 0.0f, 0.2f, 0.3f, 0.3f, 0.2f, 0.0f, 0.0f},
{0.0f, 0.2f, 0.4f, 0.6f, 0.6f, 0.4f, 0.2f, 0.0f},
{0.1f, 0.3f, 0.6f, 0.9f, 0.9f, 0.6f, 0.3f, 0.1f},
{0.1f, 0.3f, 0.6f, 0.9f, 0.9f, 0.6f, 0.3f, 0.1f},
{0.0f, 0.2f, 0.4f, 0.6f, 0.6f, 0.4f, 0.2f, 0.0f},
{0.0f, 0.0f, 0.2f, 0.3f, 0.3f, 0.2f, 0.0f, 0.0f},
{0.0f, 0.0f, 0.0f, 0.1f, 0.1f, 0.0f, 0.0f, 0.0f}
};
static float Diamond6x[6][6] =
{
{0.0f, 0.0f, 0.1f, 0.1f, 0.0f, 0.0f},
{0.0f, 0.3f, 0.5f, 0.5f, 0.3f, 0.0f},
{0.1f, 0.5f, 0.9f, 0.9f, 0.5f, 0.1f},
{0.1f, 0.5f, 0.9f, 0.9f, 0.5f, 0.1f},
{0.0f, 0.3f, 0.5f, 0.5f, 0.3f, 0.0f},
{0.0f, 0.0f, 0.1f, 0.1f, 0.0f, 0.0f}
};
static float Diamond4x[4][4] =
{
{0.3f, 0.4f, 0.4f, 0.3f},
{0.4f, 0.9f, 0.9f, 0.4f},
{0.4f, 0.9f, 0.9f, 0.4f},
{0.3f, 0.4f, 0.4f, 0.3f}
};
static int BLOOM_SIZE;
cvar_t r_bloom = {"r_bloom", "1"};
cvar_t r_bloom_alpha = {"r_bloom_alpha", "0.2"};
cvar_t r_bloom_diamond_size = {"r_bloom_diamond_size", "8"};
cvar_t r_bloom_intensity = {"r_bloom_intensity", "2"};
cvar_t r_bloom_darken = {"r_bloom_darken", "4"};
cvar_t r_bloom_sample_size = {"r_bloom_sample_size", "32"};
cvar_t r_bloom_fast_sample = {"r_bloom_fast_sample", "0"};
static int r_bloomscreentexture;
static int r_bloomeffecttexture;
static int r_bloombackuptexture;
static int r_bloomdownsamplingtexture;
static int r_screendownsamplingtexture_size;
static int screen_texture_width, screen_texture_height;
static int r_screenbackuptexture_width, r_screenbackuptexture_height;
//current refdef size:
static int curView_x;
static int curView_y;
static int curView_width;
static int curView_height;
//texture coordinates of screen data inside screentexture
static float screenText_tcw;
static float screenText_tch;
static int sample_width;
static int sample_height;
//texture coordinates of adjusted textures
static float sampleText_tcw;
static float sampleText_tch;
//this macro is in sample size workspace coordinates
#define R_Bloom_SamplePass( xpos, ypos, r, g, b, a ) \
glColor4f( r, g, b, a ); \
glBegin(GL_QUADS); \
glTexCoord2f( 0, sampleText_tch); \
glVertex2f( xpos, ypos); \
glTexCoord2f( 0, 0); \
glVertex2f( xpos, ypos+sample_height); \
glTexCoord2f( sampleText_tcw, 0); \
glVertex2f( xpos+sample_width, ypos+sample_height); \
glTexCoord2f( sampleText_tcw, sampleText_tch); \
glVertex2f( xpos+sample_width, ypos); \
glEnd();
#define R_Bloom_Quad( x, y, width, height, textwidth, textheight, r, g, b, a ) \
glColor4f( r, g, b, a ); \
glBegin(GL_QUADS); \
glTexCoord2f( 0, textheight); \
glVertex2f( x, y); \
glTexCoord2f( 0, 0); \
glVertex2f( x, y+height); \
glTexCoord2f( textwidth, 0); \
glVertex2f( x+width, y+height); \
glTexCoord2f( textwidth, textheight); \
glVertex2f( x+width, y); \
glEnd();
/*
=================
R_Bloom_InitBackUpTexture
=================
*/
void R_Bloom_InitBackUpTexture(int width, int height)
{
byte *data;
data = malloc(width * height * 4);
memset(data, 0, width * height * 4);
r_screenbackuptexture_width = width;
r_screenbackuptexture_height = height;
r_bloombackuptexture = GL_UploadTextureToOpenGL(data, width, height, TEX_NOCOMPRESS);
free(data);
}
/*
=================
R_Bloom_InitEffectTexture
=================
*/
void R_Bloom_InitEffectTexture(void)
{
byte *data;
float bloomsizecheck;
if(r_bloom_sample_size.value < 32)
{
Cvar_SetValue("r_bloom_sample_size", 32);
}
//make sure bloom size is a power of 2
BLOOM_SIZE = (int)r_bloom_sample_size.value;
bloomsizecheck = (float)BLOOM_SIZE;
while(bloomsizecheck > 1.0f)
{
bloomsizecheck /= 2.0f;
}
if(bloomsizecheck != 1.0f)
{
BLOOM_SIZE = 32;
while(BLOOM_SIZE < r_bloom_sample_size.value)
{
BLOOM_SIZE *= 2;
}
}
//make sure bloom size doesn't have stupid values
if(BLOOM_SIZE > screen_texture_width || BLOOM_SIZE > screen_texture_height)
{
BLOOM_SIZE = min(screen_texture_width, screen_texture_height);
}
if(BLOOM_SIZE != r_bloom_sample_size.value)
{
Cvar_SetValue("r_bloom_sample_size", BLOOM_SIZE);
}
data = malloc(BLOOM_SIZE * BLOOM_SIZE * 4);
memset(data, 0, BLOOM_SIZE * BLOOM_SIZE * 4);
r_bloomeffecttexture = GL_UploadTextureToOpenGL(data, BLOOM_SIZE, BLOOM_SIZE, TEX_NOCOMPRESS);
free(data);
}
/*
=================
R_Bloom_InitTextures
=================
*/
void R_Bloom_InitTextures(void)
{
byte *data;
int size;
//find closer power of 2 to screen size
for(screen_texture_width = 1; screen_texture_width < glwidth; screen_texture_width *= 2);
for(screen_texture_height = 1; screen_texture_height < glheight; screen_texture_height *= 2);
//init the screen texture
size = screen_texture_width * screen_texture_height * 4;
data = malloc(size);
memset(data, 255, size);
r_bloomscreentexture = GL_UploadTextureToOpenGL(data, screen_texture_width, screen_texture_height, TEX_NOCOMPRESS);
free(data);
//validate bloom size and init the bloom effect texture
R_Bloom_InitEffectTexture();
//if screensize is more than 2x the bloom effect texture, set up for stepped downsampling
r_bloomdownsamplingtexture = 0;
r_screendownsamplingtexture_size = 0;
if(glwidth > (BLOOM_SIZE * 2) && !r_bloom_fast_sample.value)
{
r_screendownsamplingtexture_size = (int)(BLOOM_SIZE * 2);
data = malloc(r_screendownsamplingtexture_size * r_screendownsamplingtexture_size * 4);
memset(data, 0, r_screendownsamplingtexture_size * r_screendownsamplingtexture_size * 4);
r_bloomdownsamplingtexture = GL_UploadTextureToOpenGL(data, r_screendownsamplingtexture_size, r_screendownsamplingtexture_size, TEX_NOCOMPRESS);
free(data);
}
//Init the screen backup texture
if(r_screendownsamplingtexture_size)
{
R_Bloom_InitBackUpTexture(r_screendownsamplingtexture_size, r_screendownsamplingtexture_size);
}
else
{
R_Bloom_InitBackUpTexture(BLOOM_SIZE, BLOOM_SIZE);
}
}
/*
=================
R_InitBloomTextures
=================
*/
void R_InitBloomTextures(void)
{
Cvar_RegisterVariable(&r_bloom);
Cvar_RegisterVariable(&r_bloom_alpha);
Cvar_RegisterVariable(&r_bloom_diamond_size);
Cvar_RegisterVariable(&r_bloom_intensity);
Cvar_RegisterVariable(&r_bloom_darken);
Cvar_RegisterVariable(&r_bloom_sample_size);
Cvar_RegisterVariable(&r_bloom_fast_sample);
BLOOM_SIZE = 0;
if(r_bloom.value)
{
r_bloomscreentexture = 0; //this came from a vid_restart, where none of the textures are valid any more.
R_Bloom_InitTextures();
}
}
/*
=================
R_Bloom_DrawEffect
=================
*/
void R_Bloom_DrawEffect(void)
{
glBindTexture(GL_TEXTURE_2D, r_bloomeffecttexture);
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glColor4f(r_bloom_alpha.value, r_bloom_alpha.value, r_bloom_alpha.value, 1.0f);
glBegin(GL_QUADS);
glTexCoord2f(0, sampleText_tch);
glVertex2f(curView_x, curView_y);
glTexCoord2f(0, 0);
glVertex2f(curView_x, curView_y + curView_height);
glTexCoord2f(sampleText_tcw, 0);
glVertex2f(curView_x + curView_width, curView_y + curView_height);
glTexCoord2f(sampleText_tcw, sampleText_tch);
glVertex2f(curView_x + curView_width, curView_y);
glEnd();
glDisable(GL_BLEND);
}
/*
=================
R_Bloom_GeneratexDiamonds
=================
*/
void R_Bloom_GeneratexDiamonds(void)
{
int i, j;
static float intensity;
//set up sample size workspace
glViewport(0, 0, sample_width, sample_height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, sample_width, sample_height, 0, -10, 100);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
//copy small scene into r_bloomeffecttexture
glBindTexture(GL_TEXTURE_2D, r_bloomeffecttexture);
glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, sample_width, sample_height);
//start modifying the small scene corner
glEnable(GL_BLEND);
//darkening passes
if(r_bloom_darken.value)
{
glBlendFunc(GL_DST_COLOR, GL_ZERO);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
for(i = 0; i < r_bloom_darken.value ; i++)
{
R_Bloom_SamplePass(0, 0, 1.0f, 1.0f, 1.0f, 1.0f);
}
glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, sample_width, sample_height);
}
//bluring passes
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_COLOR);
if(r_bloom_diamond_size.value > 7 || r_bloom_diamond_size.value <= 3)
{
if(r_bloom_diamond_size.value != 8)
{
Cvar_SetValue("r_bloom_diamond_size", 8);
}
for(i = 0; i < r_bloom_diamond_size.value; i++)
{
for(j = 0; j < r_bloom_diamond_size.value; j++)
{
intensity = r_bloom_intensity.value * 0.3 * Diamond8x[i][j];
if(intensity < 0.01f)
{
continue;
}
R_Bloom_SamplePass(i - 4, j - 4, intensity, intensity, intensity, 1.0);
}
}
}
else if(r_bloom_diamond_size.value > 5)
{
if(r_bloom_diamond_size.value != 6)
{
Cvar_SetValue("r_bloom_diamond_size", 6);
}
for(i = 0; i < r_bloom_diamond_size.value; i++)
{
for(j = 0; j < r_bloom_diamond_size.value; j++)
{
intensity = r_bloom_intensity.value * 0.5 * Diamond6x[i][j];
if(intensity < 0.01f)
{
continue;
}
R_Bloom_SamplePass(i - 3, j - 3, intensity, intensity, intensity, 1.0);
}
}
}
else if(r_bloom_diamond_size.value > 3)
{
if(r_bloom_diamond_size.value != 4)
{
Cvar_SetValue("r_bloom_diamond_size", 4);
}
for(i = 0; i < r_bloom_diamond_size.value; i++)
{
for(j = 0; j < r_bloom_diamond_size.value; j++)
{
intensity = r_bloom_intensity.value * 0.8f * Diamond4x[i][j];
if(intensity < 0.01f)
{
continue;
}
R_Bloom_SamplePass(i - 2, j - 2, intensity, intensity, intensity, 1.0);
}
}
}
glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, sample_width, sample_height);
//restore full screen workspace
glViewport(0, 0, glwidth, glheight);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, glwidth, glheight, 0, -10, 100);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
/*
=================
R_Bloom_DownsampleView
=================
*/
void R_Bloom_DownsampleView(void)
{
glDisable(GL_BLEND);
//stepped downsample
if(r_screendownsamplingtexture_size)
{
int midsample_width = r_screendownsamplingtexture_size * sampleText_tcw;
int midsample_height = r_screendownsamplingtexture_size * sampleText_tch;
//copy the screen and draw resized
glBindTexture(GL_TEXTURE_2D, r_bloomscreentexture);
glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, curView_x, glheight - (curView_y + curView_height), curView_width, curView_height);
R_Bloom_Quad(0, glheight - midsample_height, midsample_width, midsample_height, screenText_tcw, screenText_tch, 1.0f, 1.0f, 1.0f, 1.0f);
//now copy into Downsampling (mid-sized) texture
glBindTexture(GL_TEXTURE_2D, r_bloomdownsamplingtexture);
glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, midsample_width, midsample_height);
//now draw again in bloom size
R_Bloom_Quad(0, glheight - sample_height, sample_width, sample_height, sampleText_tcw, sampleText_tch, 0.5f, 0.5f, 0.5f, 1.0f);
//now blend the big screen texture into the bloom generation space (hoping it adds some blur)
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE);
glBindTexture(GL_TEXTURE_2D, r_bloomscreentexture);
R_Bloom_Quad(0, glheight - sample_height, sample_width, sample_height, screenText_tcw, screenText_tch, 0.5f, 0.5f, 0.5f, 1.0f);
glDisable(GL_BLEND);
}
else
{
//downsample simple
glBindTexture(GL_TEXTURE_2D, r_bloomscreentexture);
glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, curView_x, glheight - (curView_y + curView_height), curView_width, curView_height);
R_Bloom_Quad(0, glheight - sample_height, sample_width, sample_height, screenText_tcw, screenText_tch, 1.0f, 1.0f, 1.0f, 1.0f);
}
}
/*
=================
R_BloomBlend
=================
*/
void R_BloomBlend(void)
{
// skip if no lightdata etc.
if(!r_bloom.value || !r_worldentity.model || !cl.worldmodel || !cl.worldmodel->lightdata)
{
return;
}
if(!BLOOM_SIZE || screen_texture_width < glwidth || screen_texture_height < glheight)
{
R_Bloom_InitTextures();
}
if(screen_texture_width < BLOOM_SIZE || screen_texture_height < BLOOM_SIZE)
{
return;
}
//set up full screen workspace
glViewport(0, 0, glwidth, glheight);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glDisable(GL_DEPTH_TEST);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, glwidth, glheight, 0, -10, 100);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glDisable(GL_CULL_FACE);
glDisable(GL_BLEND);
glActiveTexture(GL_TEXTURE0);
glEnable(GL_TEXTURE_2D);
//set up current sizes
curView_x = scr_vrect.x * ((float)glwidth / vid.width);
curView_y = scr_vrect.y * ((float)glheight / vid.height);
curView_width = scr_vrect.width * ((float)glwidth / vid.width);
curView_height = scr_vrect.height * ((float)glheight / vid.height);
screenText_tcw = ((float)curView_width / (float)screen_texture_width);
screenText_tch = ((float)curView_height / (float)screen_texture_height);
if(scr_vrect.height > scr_vrect.width)
{
sampleText_tcw = ((float)scr_vrect.width / (float)scr_vrect.height);
sampleText_tch = 1.0f;
}
else
{
sampleText_tcw = 1.0f;
sampleText_tch = ((float)scr_vrect.height / (float)scr_vrect.width);
}
sample_width = BLOOM_SIZE * sampleText_tcw;
sample_height = BLOOM_SIZE * sampleText_tch;
//copy the screen space we'll use to work into the backup texture
glBindTexture(GL_TEXTURE_2D, r_bloombackuptexture);
glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, r_screenbackuptexture_width, r_screenbackuptexture_height);
//create the bloom image
R_Bloom_DownsampleView();
R_Bloom_GeneratexDiamonds();
//restore the screen-backup to the screen
glDisable(GL_BLEND);
glBindTexture(GL_TEXTURE_2D, r_bloombackuptexture);
R_Bloom_Quad(0, glheight - r_screenbackuptexture_height, r_screenbackuptexture_width, r_screenbackuptexture_height, 1.0, 1.0, 1, 1, 1, 1);
R_Bloom_DrawEffect();
R_SetupGL();
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glActiveTexture(GL_TEXTURE0);
glEnable(GL_TEXTURE_2D);
}
Productivity is a state of mind.
Re: Old school quake, well not quite but
I'm use this code more time ago and it better then tenebrae bloom. But glsl bloom better.
Re: Old school quake, well not quite but
For what it does no its not that bad , shaders would be better ofc and i might do that sometime.
I might be on the track of what is causing these stalls, i noticed they happen every time realm printed something on the screen,
so im going to have a look at what is going on behind the scenes. Might be something as simple as a bad ptr somewhere in the console print code, well in that case dooh but atleast it would be fixed
I might be on the track of what is causing these stalls, i noticed they happen every time realm printed something on the screen,
so im going to have a look at what is going on behind the scenes. Might be something as simple as a bad ptr somewhere in the console print code, well in that case dooh but atleast it would be fixed
Productivity is a state of mind.
Re: Old school quake, well not quite but
in the vanilla source (including quakespasm etc), Con_Printf redraws the screen. This ensures that the prints become visible even if the code following that print crash or infinite loop or whatever. This is a significant extra issue if you have vsync enabled.revelator wrote:I might be on the track of what is causing these stalls, i noticed they happen every time realm printed something on the screen
Its trivial to just comment out the screen redraw, but do note that much of the networking code has stalls with those redraws being required to let the user know that it hasn't crashed, so a full fix isn't quite so trivial as it may first seem. Presumably you can just add in explicit redraws into the places that need them.