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

682 lines
20 KiB

  1. //========= Copyright � 1996-2005, Valve Corporation, All rights reserved. ============//
  2. //
  3. // Purpose:
  4. //
  5. // $NoKeywords: $
  6. //
  7. //=============================================================================//
  8. #if !defined( VBSP_H )
  9. #define VBSP_H
  10. #include "cmdlib.h"
  11. #include "mathlib/vector.h"
  12. #include "mathlib/vector4d.h"
  13. #include "scriplib.h"
  14. #include "polylib.h"
  15. #include "threads.h"
  16. #include "bsplib.h"
  17. #include "qfiles.h"
  18. #include "utilmatlib.h"
  19. #include "ChunkFile.h"
  20. #ifdef WIN32
  21. #pragma warning( disable: 4706 )
  22. #endif
  23. class CUtlBuffer;
  24. #define MAX_BRUSH_SIDES 128
  25. #define CLIP_EPSILON 0.1
  26. #define TEXINFO_NODE -1 // side is allready on a node
  27. // this will output glview files for the given brushmodel. Brushmodel 1 is the world, 2 is the first brush entity, etc.
  28. #define DEBUG_BRUSHMODEL 0
  29. struct portal_t;
  30. struct node_t;
  31. struct plane_t : public dplane_t
  32. {
  33. plane_t *hash_chain;
  34. plane_t() { normal.Init(); }
  35. };
  36. struct brush_texture_t
  37. {
  38. Vector UAxis;
  39. Vector VAxis;
  40. vec_t shift[2];
  41. vec_t rotate;
  42. vec_t textureWorldUnitsPerTexel[2];
  43. vec_t lightmapWorldUnitsPerLuxel;
  44. char name[TEXTURE_NAME_LENGTH];
  45. int flags;
  46. brush_texture_t() : UAxis(0,0,0), VAxis(0,0,0) {}
  47. };
  48. struct mapdispinfo_t;
  49. struct side_t
  50. {
  51. int planenum;
  52. int texinfo;
  53. mapdispinfo_t *pMapDisp;
  54. winding_t *winding;
  55. side_t *original; // bspbrush_t sides will reference the mapbrush_t sides
  56. int contents; // from miptex
  57. int surf; // from miptex
  58. bool visible; // choose visble planes first
  59. bool tested; // this plane allready checked as a split
  60. bool bevel; // don't ever use for bsp splitting
  61. bool thin; // surface is thin
  62. side_t *next;
  63. int origIndex;
  64. int id; // This is the unique id generated by worldcraft for this side.
  65. unsigned int smoothingGroups;
  66. CUtlVector<int> aOverlayIds; // List of overlays that reside on this side.
  67. CUtlVector<int> aWaterOverlayIds; // List of water overlays that reside on this side.
  68. bool m_bDynamicShadowsEnabled; // Goes into dface_t::SetDynamicShadowsEnabled().
  69. };
  70. struct mapbrush_t
  71. {
  72. int entitynum;
  73. int brushnum;
  74. int id; // The unique ID of this brush in the editor, used for reporting errors.
  75. int contents;
  76. Vector mins, maxs;
  77. int numsides;
  78. side_t *original_sides;
  79. };
  80. #define PLANENUM_LEAF -1
  81. #define MAXEDGES 32
  82. struct face_t
  83. {
  84. int id;
  85. face_t *next; // on node
  86. // the chain of faces off of a node can be merged or split,
  87. // but each face_t along the way will remain in the chain
  88. // until the entire tree is freed
  89. face_t *merged; // if set, this face isn't valid anymore
  90. face_t *split[2]; // if set, this face isn't valid anymore
  91. portal_t *portal;
  92. int texinfo;
  93. int dispinfo;
  94. // This is only for surfaces that are the boundaries of fog volumes
  95. // (ie. water surfaces)
  96. // All of the rest of the surfaces can look at their leaf to find out
  97. // what fog volume they are in.
  98. node_t *fogVolumeLeaf;
  99. int planenum;
  100. int contents; // faces in different contents can't merge
  101. int outputnumber;
  102. winding_t *w;
  103. int numpoints;
  104. qboolean badstartvert; // tjunctions cannot be fixed without a midpoint vertex
  105. int vertexnums[MAXEDGES];
  106. side_t *originalface; // save the "side" this face came from
  107. int firstPrimID;
  108. int numPrims;
  109. unsigned int smoothingGroups;
  110. CUtlVector<side_t *> *pMergedList; // FOR PORTAL2 paint face->brush map, keep track of a list of all sides that contributed faces to this face (via merges)
  111. };
  112. void EmitFace( face_t *f, qboolean onNode );
  113. struct mapdispinfo_t
  114. {
  115. face_t face;
  116. int entitynum;
  117. int power;
  118. int minTess;
  119. float smoothingAngle;
  120. Vector uAxis;
  121. Vector vAxis;
  122. Vector startPosition;
  123. float alphaValues[MAX_DISPVERTS];
  124. CDispMultiBlend m_vMultiBlends[MAX_DISPVERTS];
  125. float maxDispDist;
  126. float dispDists[MAX_DISPVERTS];
  127. Vector vectorDisps[MAX_DISPVERTS];
  128. Vector vectorOffsets[MAX_DISPVERTS];
  129. int contents;
  130. int brushSideID;
  131. unsigned short triTags[MAX_DISPTRIS];
  132. int flags;
  133. #ifdef VSVMFIO
  134. float m_elevation; // "elevation"
  135. Vector m_offsetNormals[ MAX_DISPTRIS ]; // "offset_normals"
  136. #endif // VSVMFIO
  137. };
  138. extern int nummapdispinfo;
  139. extern CUtlBlockVector<mapdispinfo_t> mapdispinfo;
  140. extern float g_defaultLuxelSize;
  141. extern float g_luxelScale;
  142. extern float g_minLuxelScale;
  143. extern float g_maxLuxelScale;
  144. extern bool g_BumpAll;
  145. int GetDispInfoEntityNum( mapdispinfo_t *pDisp );
  146. void ComputeBoundsNoSkybox( );
  147. struct bspbrush_t
  148. {
  149. int id;
  150. bspbrush_t *next;
  151. Vector mins, maxs;
  152. int side, testside; // side of node during construction
  153. mapbrush_t *original;
  154. int numsides;
  155. side_t sides[6]; // variably sized
  156. };
  157. #define MAX_NODE_BRUSHES 8
  158. struct leafface_t
  159. {
  160. face_t *pFace;
  161. leafface_t *pNext;
  162. };
  163. struct node_t
  164. {
  165. int id;
  166. // both leafs and nodes
  167. int planenum; // -1 = leaf node
  168. node_t *parent;
  169. Vector mins, maxs; // valid after portalization
  170. bspbrush_t *volume; // one for each leaf/node
  171. // nodes only
  172. side_t *side; // the side that created the node
  173. node_t *children[2];
  174. face_t *faces; // these are the cutup ones that live in the plane of "side".
  175. // leafs only
  176. bspbrush_t *brushlist; // fragments of all brushes in this leaf
  177. leafface_t *leaffacelist;
  178. int contents; // OR of all brush contents
  179. int occupied; // 1 or greater can reach entity
  180. entity_t *occupant; // for leak file testing
  181. int cluster; // for portalfile writing
  182. int area; // for areaportals
  183. portal_t *portals; // also on nodes during construction
  184. int diskId; // dnodes or dleafs index after this has been emitted
  185. };
  186. struct portal_t
  187. {
  188. int id;
  189. plane_t plane;
  190. node_t *onnode; // NULL = outside box
  191. node_t *nodes[2]; // [0] = front side of plane
  192. portal_t *next[2];
  193. winding_t *winding;
  194. qboolean sidefound; // false if ->side hasn't been checked
  195. side_t *side; // NULL = non-visible
  196. face_t *face[2]; // output face in bsp file
  197. };
  198. struct tree_t
  199. {
  200. node_t *headnode;
  201. node_t outside_node;
  202. Vector mins, maxs;
  203. bool leaked;
  204. };
  205. extern int entity_num;
  206. struct LoadSide_t;
  207. struct LoadEntity_t;
  208. class CManifest;
  209. class GameData;
  210. class CMapFile
  211. {
  212. public:
  213. CMapFile( void ) { Init(); }
  214. void Init( void );
  215. void AddPlaneToHash (plane_t *p);
  216. int CreateNewFloatPlane (Vector& normal, vec_t dist);
  217. int FindFloatPlane (Vector& normal, vec_t dist);
  218. int PlaneFromPoints(const Vector &p0, const Vector &p1, const Vector &p2);
  219. void AddBrushBevels (mapbrush_t *b);
  220. qboolean MakeBrushWindings (mapbrush_t *ob);
  221. void MoveBrushesToWorld( entity_t *mapent );
  222. void MoveBrushesToWorldGeneral( entity_t *mapent );
  223. void RemoveContentsDetailFromEntity( entity_t *mapent );
  224. int SideIDToIndex( int brushSideID );
  225. void AddLadderKeys( entity_t *mapent );
  226. ChunkFileResult_t LoadEntityCallback(CChunkFile *pFile, int nParam);
  227. void ForceFuncAreaPortalWindowContents();
  228. ChunkFileResult_t LoadSideCallback(CChunkFile *pFile, LoadSide_t *pSideInfo);
  229. ChunkFileResult_t LoadConnectionsKeyCallback(const char *szKey, const char *szValue, LoadEntity_t *pLoadEntity);
  230. ChunkFileResult_t LoadSolidCallback(CChunkFile *pFile, LoadEntity_t *pLoadEntity);
  231. void TestExpandBrushes(void);
  232. static char m_InstancePath[ MAX_PATH ];
  233. static void SetInstancePath( const char *pszInstancePath );
  234. static const char *GetInstancePath( void ) { return m_InstancePath; }
  235. void CheckForInstances( const char *pszFileName );
  236. void MergeInstance( entity_t *pInstanceEntity, CMapFile *Instance );
  237. void PreLoadInstances( GameData *pGD );
  238. void PostLoadInstances( );
  239. void MergePlanes( entity_t *pInstanceEntity, CMapFile *Instance, Vector &InstanceOrigin, QAngle &InstanceAngle, matrix3x4_t &InstanceMatrix );
  240. void MergeBrushes( entity_t *pInstanceEntity, CMapFile *Instance, Vector &InstanceOrigin, QAngle &InstanceAngle, matrix3x4_t &InstanceMatrix );
  241. void MergeBrushSides( entity_t *pInstanceEntity, CMapFile *Instance, Vector &InstanceOrigin, QAngle &InstanceAngle, matrix3x4_t &InstanceMatrix );
  242. void ReplaceInstancePair( epair_t *pPair, entity_t *pInstanceEntity, entity_t *pParmsEntity );
  243. void MergeEntities( entity_t *pInstanceEntity, CMapFile *Instance, Vector &InstanceOrigin, QAngle &InstanceAngle, matrix3x4_t &InstanceMatrix );
  244. void MergeOverlays( entity_t *pInstanceEntity, CMapFile *Instance, Vector &InstanceOrigin, QAngle &InstanceAngle, matrix3x4_t &InstanceMatrix );
  245. void MergeIOProxy( entity_t *pInstanceEntity, CMapFile *Instance, Vector &InstanceOrigin, QAngle &InstanceAngle, matrix3x4_t &InstanceMatrix );
  246. static int m_InstanceCount;
  247. static int c_areaportals;
  248. plane_t mapplanes[MAX_MAP_PLANES];
  249. int nummapplanes;
  250. #define PLANE_HASHES 1024
  251. plane_t *planehash[PLANE_HASHES];
  252. int nummapbrushes;
  253. mapbrush_t mapbrushes[MAX_MAP_BRUSHES];
  254. Vector map_mins, map_maxs;
  255. int nummapbrushsides;
  256. side_t brushsides[MAX_MAP_BRUSHSIDES];
  257. brush_texture_t side_brushtextures[MAX_MAP_BRUSHSIDES];
  258. int num_entities;
  259. entity_t entities[MAX_MAP_ENTITIES];
  260. int c_boxbevels;
  261. int c_edgebevels;
  262. int c_clipbrushes;
  263. int g_ClipTexinfo;
  264. class CConnectionPairs
  265. {
  266. public:
  267. CConnectionPairs( epair_t *pair, CConnectionPairs *next )
  268. {
  269. m_Pair = pair;
  270. m_Next = next;
  271. }
  272. epair_t *m_Pair;
  273. CConnectionPairs *m_Next;
  274. };
  275. CConnectionPairs *m_ConnectionPairs;
  276. int m_StartMapOverlays;
  277. int m_StartMapWaterOverlays;
  278. };
  279. extern CMapFile *g_MainMap;
  280. extern CMapFile *g_LoadingMap;
  281. extern CUtlVector< CMapFile * > g_Maps;
  282. extern int g_nMapFileVersion;
  283. extern qboolean noprune;
  284. extern qboolean nodetail;
  285. extern qboolean fulldetail;
  286. extern qboolean nomerge;
  287. extern qboolean nomergewater;
  288. extern qboolean nosubdiv;
  289. extern qboolean nowater;
  290. extern qboolean noweld;
  291. extern qboolean noshare;
  292. extern qboolean notjunc;
  293. extern qboolean nocsg;
  294. extern qboolean noopt;
  295. extern qboolean dumpcollide;
  296. extern qboolean nodetailcuts;
  297. extern qboolean g_DumpStaticProps;
  298. extern qboolean g_bSkyVis;
  299. extern qboolean staticpropcombine;
  300. extern qboolean staticpropcombine_delsources;
  301. extern qboolean staticpropcombine_doflagcompare_STATIC_PROP_IGNORE_NORMALS;
  302. extern qboolean staticpropcombine_doflagcompare_STATIC_PROP_NO_SHADOW;
  303. extern qboolean staticpropcombine_doflagcompare_STATIC_PROP_NO_FLASHLIGHT;
  304. extern qboolean staticpropcombine_doflagcompare_STATIC_PROP_MARKED_FOR_FAST_REFLECTION;
  305. extern qboolean staticpropcombine_doflagcompare_STATIC_PROP_NO_PER_VERTEX_LIGHTING;
  306. extern qboolean staticpropcombine_doflagcompare_STATIC_PROP_NO_SELF_SHADOWING;
  307. extern qboolean staticpropcombine_doflagcompare_STATIC_PROP_FLAGS_EX_DISABLE_SHADOW_DEPTH;
  308. extern qboolean staticpropcombine_considervis;
  309. extern qboolean staticpropcombine_autocombine;
  310. extern qboolean staticpropcombine_suggestcombinerules;
  311. extern int g_nAutoCombineMinInstances;
  312. extern vec_t microvolume;
  313. extern bool g_bConvertStructureToDetail;
  314. extern bool g_snapAxialPlanes;
  315. extern bool g_NodrawTriggers;
  316. extern bool g_DisableWaterLighting;
  317. extern bool g_bAllowDetailCracks;
  318. extern bool g_bNoVirtualMesh;
  319. extern char outbase[32];
  320. extern char source[1024];
  321. extern char mapbase[ 64 ];
  322. extern CUtlVector<int> g_SkyAreas;
  323. bool LoadMapFile( const char *pszFileName );
  324. int GetVertexnum( Vector& v );
  325. bool Is3DSkyboxArea( int area );
  326. //=============================================================================
  327. // textures.c
  328. struct textureref_t
  329. {
  330. char name[TEXTURE_NAME_LENGTH];
  331. int flags;
  332. float lightmapWorldUnitsPerLuxel;
  333. int contents;
  334. };
  335. extern textureref_t textureref[MAX_MAP_TEXTURES];
  336. int FindMiptex (const char *name);
  337. int TexinfoForBrushTexture (plane_t *plane, brush_texture_t *bt, const Vector& origin);
  338. int GetSurfaceProperties2( MaterialSystemMaterial_t matID, const char *pMatName, const char *pVarName );
  339. extern int g_SurfaceProperties[MAX_MAP_TEXDATA];
  340. void LoadSurfaceProperties( void );
  341. int PointLeafnum ( dmodel_t* pModel, const Vector& p );
  342. //=============================================================================
  343. void FindGCD (int *v);
  344. mapbrush_t *Brush_LoadEntity (entity_t *ent);
  345. int PlaneTypeForNormal (Vector& normal);
  346. qboolean MakeBrushPlanes (mapbrush_t *b);
  347. int FindIntPlane (int *inormal, int *iorigin);
  348. void CreateBrush (int brushnum);
  349. //=============================================================================
  350. // detail objects
  351. //=============================================================================
  352. void LoadEmitDetailObjectDictionary( char const* pGameDir );
  353. void EmitDetailObjects();
  354. //=============================================================================
  355. // static props
  356. //=============================================================================
  357. void EmitStaticProps();
  358. bool LoadStudioModel( char const* pFileName, char const* pEntityType, CUtlBuffer& buf );
  359. //=============================================================================
  360. //=============================================================================
  361. // procedurally created .vmt files
  362. //=============================================================================
  363. void EmitStaticProps();
  364. // draw.c
  365. extern Vector draw_mins, draw_maxs;
  366. extern bool g_bLightIfMissing;
  367. void Draw_ClearWindow (void);
  368. void DrawWinding (winding_t *w);
  369. void GLS_BeginScene (void);
  370. void GLS_Winding (winding_t *w, int code);
  371. void GLS_EndScene (void);
  372. //=============================================================================
  373. // csg
  374. enum detailscreen_e
  375. {
  376. FULL_DETAIL = 0,
  377. ONLY_DETAIL = 1,
  378. NO_DETAIL = 2,
  379. };
  380. #define TRANSPARENT_CONTENTS (CONTENTS_GRATE|CONTENTS_WINDOW)
  381. #include "csg.h"
  382. //=============================================================================
  383. // brushbsp
  384. void WriteBrushList (char *name, bspbrush_t *brush, qboolean onlyvis);
  385. bspbrush_t *CopyBrush (bspbrush_t *brush);
  386. void SplitBrush (bspbrush_t *brush, int planenum,
  387. bspbrush_t **front, bspbrush_t **back);
  388. tree_t *AllocTree (void);
  389. node_t *AllocNode (void);
  390. bspbrush_t *AllocBrush (int numsides);
  391. int CountBrushList (bspbrush_t *brushes);
  392. void FreeBrush (bspbrush_t *brushes);
  393. vec_t BrushVolume (bspbrush_t *brush);
  394. node_t *NodeForPoint (node_t *node, Vector& origin);
  395. void BoundBrush (bspbrush_t *brush);
  396. void FreeBrushList (bspbrush_t *brushes);
  397. node_t *PointInLeaf (node_t *node, Vector& point);
  398. tree_t *BrushBSP (bspbrush_t *brushlist, Vector& mins, Vector& maxs);
  399. #define PSIDE_FRONT 1
  400. #define PSIDE_BACK 2
  401. #define PSIDE_BOTH (PSIDE_FRONT|PSIDE_BACK)
  402. #define PSIDE_FACING 4
  403. int BrushBspBoxOnPlaneSide (const Vector& mins, const Vector& maxs, dplane_t *plane);
  404. extern qboolean WindingIsTiny (winding_t *w);
  405. //=============================================================================
  406. // portals.c
  407. int VisibleContents (int contents);
  408. void MakeHeadnodePortals (tree_t *tree);
  409. void MakeNodePortal (node_t *node);
  410. void SplitNodePortals (node_t *node);
  411. qboolean Portal_VisFlood (portal_t *p);
  412. qboolean FloodEntities (tree_t *tree);
  413. void FillOutside (node_t *headnode);
  414. void FloodAreas (tree_t *tree);
  415. void MarkVisibleSides (tree_t *tree, int start, int end, int detailScreen);
  416. void MarkVisibleSides (tree_t *tree, mapbrush_t **ppBrushes, int nCount );
  417. void FreePortal (portal_t *p);
  418. void EmitAreaPortals (node_t *headnode);
  419. void MakeTreePortals (tree_t *tree);
  420. //=============================================================================
  421. // glfile.c
  422. void OutputWinding (winding_t *w, FileHandle_t glview);
  423. void OutputWindingColor (winding_t *w, FileHandle_t glview, int r, int g, int b);
  424. void WriteGLView (tree_t *tree, char *source);
  425. void WriteGLViewFaces (tree_t *tree, const char *source);
  426. void WriteGLViewBrushList( bspbrush_t *pList, const char *pName );
  427. //=============================================================================
  428. // leakfile.c
  429. void LeakFile (tree_t *tree);
  430. void AreaportalLeakFile( tree_t *tree, portal_t *pStartPortal, portal_t *pEndPortal, node_t *pStart );
  431. //=============================================================================
  432. // prtfile.c
  433. void AddVisCluster( entity_t *pFuncVisCluster );
  434. void WritePortalFile (tree_t *tree);
  435. //=============================================================================
  436. // writebsp.c
  437. void SetModelNumbers (void);
  438. void SetLightStyles (void);
  439. void BeginBSPFile (void);
  440. void WriteBSP (node_t *headnode, face_t *pLeafFaceList);
  441. void EndBSPFile (void);
  442. void BeginModel (void);
  443. void EndModel (void);
  444. extern int firstmodeledge;
  445. extern int firstmodelface;
  446. //=============================================================================
  447. // faces.c
  448. void MakeFaces (node_t *headnode);
  449. void MakeDetailFaces (node_t *headnode);
  450. face_t *FixTjuncs( node_t *headnode, face_t *pLeafFaceList );
  451. face_t *AllocFace (void);
  452. void FreeFace (face_t *f);
  453. void FreeFaceList( face_t *pFaces );
  454. void MergeFaceList(face_t **pFaceList);
  455. void SubdivideFaceList(face_t **pFaceList);
  456. extern face_t *edgefaces[MAX_MAP_EDGES][2];
  457. //=============================================================================
  458. // tree.c
  459. void FreeTree (tree_t *tree);
  460. void FreeTree_r (node_t *node);
  461. void PrintTree_r (node_t *node, int depth);
  462. void FreeTreePortals_r (node_t *node);
  463. void PruneNodes_r (node_t *node);
  464. void PruneNodes (node_t *node);
  465. // Returns true if the entity is a func_occluder
  466. bool IsFuncOccluder( int entity_num );
  467. //=============================================================================
  468. // ivp.cpp
  469. class CPhysCollide;
  470. void EmitPhysCollision();
  471. void DumpCollideToGlView( CPhysCollide *pCollide, const char *pFilename );
  472. void EmitWaterVolumesForBSP( dmodel_t *pModel, node_t *headnode );
  473. //=============================================================================
  474. // find + find or create the texdata
  475. int FindTexData( const char *pName );
  476. int FindOrCreateTexData( const char *pName );
  477. // Add a clone of an existing texdata with a new name
  478. int AddCloneTexData( dtexdata_t *pExistingTexData, char const *cloneTexDataName );
  479. int FindOrCreateTexInfo( const texinfo_t &searchTexInfo );
  480. int FindAliasedTexData( const char *pName, dtexdata_t *sourceTexture );
  481. int FindTexInfo( const texinfo_t &searchTexInfo );
  482. //=============================================================================
  483. // normals.c
  484. void SaveVertexNormals( void );
  485. //=============================================================================
  486. // cubemap.cpp
  487. void Cubemap_InsertSample( const Vector& origin, int size );
  488. void Cubemap_CreateDefaultCubemaps( void );
  489. void Cubemap_SaveBrushSides( const char *pSideListStr );
  490. void Cubemap_FixupBrushSidesMaterials( void );
  491. void Cubemap_AttachDefaultCubemapToSpecularSides( void );
  492. // Add skipped cubemaps that are referenced by the engine
  493. void Cubemap_AddUnreferencedCubemaps( void );
  494. //=============================================================================
  495. // overlay.cpp
  496. #define OVERLAY_MAP_STRLEN 256
  497. struct mapoverlay_t
  498. {
  499. int nId;
  500. unsigned short m_nRenderOrder;
  501. char szMaterialName[OVERLAY_MAP_STRLEN];
  502. float flU[2];
  503. float flV[2];
  504. float flFadeDistMinSq;
  505. float flFadeDistMaxSq;
  506. unsigned char nMinCPULevel;
  507. unsigned char nMaxCPULevel;
  508. unsigned char nMinGPULevel;
  509. unsigned char nMaxGPULevel;
  510. Vector vecUVPoints[4];
  511. Vector vecOrigin;
  512. Vector vecBasis[3];
  513. CUtlVector<int> aSideList;
  514. CUtlVector<int> aFaceList;
  515. };
  516. extern CUtlVector<mapoverlay_t> g_aMapOverlays;
  517. extern CUtlVector<mapoverlay_t> g_aMapWaterOverlays;
  518. int Overlay_GetFromEntity( entity_t *pMapEnt );
  519. void Overlay_UpdateSideLists( int StartIndex );
  520. void Overlay_AddFaceToLists( int iFace, side_t *pSide );
  521. void Overlay_EmitOverlayFaces( void );
  522. void OverlayTransition_UpdateSideLists( int StartIndex );
  523. void OverlayTransition_AddFaceToLists( int iFace, side_t *pSide );
  524. void OverlayTransition_EmitOverlayFaces( void );
  525. void Overlay_Translate( mapoverlay_t *pOverlay, Vector &OriginOffset, QAngle &AngleOffset, matrix3x4_t &Matrix );
  526. //=============================================================================
  527. void RemoveAreaPortalBrushes_R( node_t *node );
  528. dtexdata_t *GetTexData( int index );
  529. #endif