From b0788b922e072b4eb6e5454009212de8233018b2 Mon Sep 17 00:00:00 2001 From: Justin Marshall Date: Fri, 22 May 2026 21:59:30 -0700 Subject: [PATCH] Added recast navmesh. --- base/maps/game/enpro.aas48.navmesh | Bin 0 -> 104412 bytes base/maps/game/enpro.aas96.navmesh | Bin 0 -> 77800 bytes base/maps/game/enpro.aas_cyberdemon.navmesh | Bin 0 -> 31120 bytes base/maps/game/enpro.aas_guardian.navmesh | Bin 0 -> 14024 bytes base/maps/game/enpro.aas_mancubus.navmesh | Bin 0 -> 59196 bytes base/maps/game/enpro.aas_sabaoth.navmesh | Bin 0 -> 26244 bytes neo/doom3/game.vcxproj | 4 +- neo/doom3/game.vcxproj.filters | 8 +- neo/doom3/game/Game.h | 5 +- neo/doom3/game/Game_local.cpp | 3 + neo/doom3/game/ai/AAS.cpp | 58 +- neo/doom3/game/ai/AAS_debug.cpp | 31 + neo/doom3/game/ai/AAS_local.h | 2 + neo/doom3/game/ai/AAS_pathing.cpp | 16 + neo/doom3/game/ai/AAS_routing.cpp | 29 + neo/doom3/game/gamesys/GameTypeInfo.h | 35 +- neo/doom3/game/gamesys/SysCmds.cpp | 47 + neo/doom3/game/gamesys/SysCvar.cpp | 1 + neo/doom3/game/gamesys/SysCvar.h | 1 + neo/engine/_DoomDLL.props | 2 +- neo/engine/_Game.props | 2 +- neo/engine/doomdll.vcxproj | 74 + neo/engine/doomdll.vcxproj.filters | 92 +- neo/engine/doomdll.vcxproj.user | 4 +- neo/engine/framework/Common.cpp | 1 + neo/engine/idlib/precompiled.h | 1 + neo/engine/opengl/gl_d3d12raylight.cpp | 2 +- neo/engine/opengl/gl_d3d12shim.cpp | 2 +- .../compilers/recast/RecastNavigation.cpp | 1331 +++ .../tools/compilers/recast/RecastNavigation.h | 66 + rage/materials/generated_lit_materials.mtr | 9444 +++++++++++++++++ 31 files changed, 11241 insertions(+), 20 deletions(-) create mode 100644 base/maps/game/enpro.aas48.navmesh create mode 100644 base/maps/game/enpro.aas96.navmesh create mode 100644 base/maps/game/enpro.aas_cyberdemon.navmesh create mode 100644 base/maps/game/enpro.aas_guardian.navmesh create mode 100644 base/maps/game/enpro.aas_mancubus.navmesh create mode 100644 base/maps/game/enpro.aas_sabaoth.navmesh create mode 100644 neo/engine/tools/compilers/recast/RecastNavigation.cpp create mode 100644 neo/engine/tools/compilers/recast/RecastNavigation.h create mode 100644 rage/materials/generated_lit_materials.mtr diff --git a/base/maps/game/enpro.aas48.navmesh b/base/maps/game/enpro.aas48.navmesh new file mode 100644 index 0000000000000000000000000000000000000000..c8cce68c0e4567d66df051594e09e1c8dd1ae1c5 GIT binary patch literal 104412 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 literal 0 HcmV?d00001 diff --git a/base/maps/game/enpro.aas96.navmesh b/base/maps/game/enpro.aas96.navmesh new file mode 100644 index 0000000000000000000000000000000000000000..07f8898a006d5545209b99f212565a87c8bde815 GIT binary patch literal 77800 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 literal 0 HcmV?d00001 diff --git a/base/maps/game/enpro.aas_mancubus.navmesh b/base/maps/game/enpro.aas_mancubus.navmesh new file mode 100644 index 0000000000000000000000000000000000000000..82b20d939212771c9644a498a4bfcb7dec86a812 GIT binary patch literal 59196 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

Zbp!-x=i-Z+h(9p6*Qx}+?v4)5RR#9yDR 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 J&tvz`{{v@aEI9xG literal 0 HcmV?d00001 diff --git a/neo/doom3/game.vcxproj b/neo/doom3/game.vcxproj index 9cd44b21..9ece0abc 100644 --- a/neo/doom3/game.vcxproj +++ b/neo/doom3/game.vcxproj @@ -346,6 +346,7 @@ typeinfo.exe + @@ -461,6 +462,7 @@ typeinfo.exe + @@ -559,4 +561,4 @@ typeinfo.exe - \ No newline at end of file + diff --git a/neo/doom3/game.vcxproj.filters b/neo/doom3/game.vcxproj.filters index 0e91f307..f68d96e7 100644 --- a/neo/doom3/game.vcxproj.filters +++ b/neo/doom3/game.vcxproj.filters @@ -36,6 +36,9 @@ AI + + AI + AI @@ -287,6 +290,9 @@ AI + + AI + AI @@ -492,4 +498,4 @@ - \ No newline at end of file + diff --git a/neo/doom3/game/Game.h b/neo/doom3/game/Game.h index 80b32523..20da562c 100644 --- a/neo/doom3/game/Game.h +++ b/neo/doom3/game/Game.h @@ -320,7 +320,9 @@ extern idGameEdit * gameEdit; =============================================================================== */ -const int GAME_API_VERSION = 8; +class idRecastNavigationManager; + +const int GAME_API_VERSION = 9; typedef struct { @@ -337,6 +339,7 @@ typedef struct { idUserInterfaceManager * uiManager; // user interface manager idDeclManager * declManager; // declaration manager idAASFileManager * AASFileManager; // AAS file manager + idRecastNavigationManager * RecastNavigationManager; // Recast/Detour navigation manager idCollisionModelManager * collisionModelManager; // collision model manager } gameImport_t; diff --git a/neo/doom3/game/Game_local.cpp b/neo/doom3/game/Game_local.cpp index 1a75e1fa..42dc97e2 100644 --- a/neo/doom3/game/Game_local.cpp +++ b/neo/doom3/game/Game_local.cpp @@ -45,6 +45,7 @@ idRenderModelManager * renderModelManager = NULL; idUserInterfaceManager * uiManager = NULL; idDeclManager * declManager = NULL; idAASFileManager * AASFileManager = NULL; +idRecastNavigationManager * RecastNavigationManager = NULL; idCollisionModelManager * collisionModelManager = NULL; idCVar * idCVar::staticVars = NULL; @@ -100,6 +101,7 @@ extern "C" gameExport_t *GetGameAPI( gameImport_t *import ) { uiManager = import->uiManager; declManager = import->declManager; AASFileManager = import->AASFileManager; + RecastNavigationManager = import->RecastNavigationManager; collisionModelManager = import->collisionModelManager; } @@ -141,6 +143,7 @@ void TestGameAPI( void ) { testImport.uiManager = ::uiManager; testImport.declManager = ::declManager; testImport.AASFileManager = ::AASFileManager; + testImport.RecastNavigationManager = ::RecastNavigationManager; testImport.collisionModelManager = ::collisionModelManager; testExport = *GetGameAPI( &testImport ); diff --git a/neo/doom3/game/ai/AAS.cpp b/neo/doom3/game/ai/AAS.cpp index 579cc8f5..088a97e8 100644 --- a/neo/doom3/game/ai/AAS.cpp +++ b/neo/doom3/game/ai/AAS.cpp @@ -29,6 +29,7 @@ If you have questions concerning this license or the applicable additional terms #include "precompiled.h" #pragma hdrstop +#include "../Game_local.h" #include "AAS_local.h" /* @@ -72,6 +73,28 @@ idAASLocal::Init ============ */ bool idAASLocal::Init( const idStr &mapName, unsigned int mapFileCRC ) { + const idStr navName = idRecastNavMesh::NavFileNameForAASName( mapName ); + if ( recastNavMesh.IsLoaded() && mapName.Icmp( name ) == 0 ) { + common->Printf( "Keeping %s\n", navName.c_str() ); + recastNavMesh.RemoveAllObstacles(); + return true; + } + + if ( recastNavMesh.Load( mapName, navName, mapFileCRC ) ) { + if ( file ) { + for ( int i = 0; i < obstacleList.Num(); i++ ) { + delete obstacleList[i]; + } + obstacleList.Clear(); + ShutdownRouting(); + AASFileManager->FreeAAS( file ); + file = NULL; + } + name = mapName; + common->Printf( "Loaded Recast navmesh: %s\n", navName.c_str() ); + return true; + } + if ( file && mapName.Icmp( file->GetName() ) == 0 && mapFileCRC == file->GetCRC() ) { common->Printf( "Keeping %s\n", file->GetName() ); RemoveAllObstacles(); @@ -95,6 +118,7 @@ idAASLocal::Shutdown ============ */ void idAASLocal::Shutdown( void ) { + recastNavMesh.Shutdown(); if ( file ) { ShutdownRouting(); RemoveAllObstacles(); @@ -109,6 +133,10 @@ idAASLocal::Stats ============ */ void idAASLocal::Stats( void ) const { + if ( recastNavMesh.IsLoaded() ) { + recastNavMesh.Stats(); + return; + } if ( !file ) { return; } @@ -123,6 +151,9 @@ idAASLocal::GetSettings ============ */ const idAASSettings *idAASLocal::GetSettings( void ) const { + if ( recastNavMesh.IsLoaded() ) { + return recastNavMesh.GetSettings(); + } if ( !file ) { return NULL; } @@ -135,6 +166,9 @@ idAASLocal::PointAreaNum ============ */ int idAASLocal::PointAreaNum( const idVec3 &origin ) const { + if ( recastNavMesh.IsLoaded() ) { + return recastNavMesh.PointAreaNum( origin ); + } if ( !file ) { return 0; } @@ -147,6 +181,9 @@ idAASLocal::PointReachableAreaNum ============ */ int idAASLocal::PointReachableAreaNum( const idVec3 &origin, const idBounds &searchBounds, const int areaFlags ) const { + if ( recastNavMesh.IsLoaded() ) { + return recastNavMesh.PointReachableAreaNum( origin, searchBounds, areaFlags ); + } if ( !file ) { return 0; } @@ -160,6 +197,9 @@ idAASLocal::BoundsReachableAreaNum ============ */ int idAASLocal::BoundsReachableAreaNum( const idBounds &bounds, const int areaFlags ) const { + if ( recastNavMesh.IsLoaded() ) { + return recastNavMesh.BoundsReachableAreaNum( bounds, areaFlags ); + } if ( !file ) { return 0; } @@ -173,6 +213,10 @@ idAASLocal::PushPointIntoAreaNum ============ */ void idAASLocal::PushPointIntoAreaNum( int areaNum, idVec3 &origin ) const { + if ( recastNavMesh.IsLoaded() ) { + recastNavMesh.PushPointIntoAreaNum( areaNum, origin ); + return; + } if ( !file ) { return; } @@ -185,6 +229,9 @@ idAASLocal::AreaCenter ============ */ idVec3 idAASLocal::AreaCenter( int areaNum ) const { + if ( recastNavMesh.IsLoaded() ) { + return recastNavMesh.AreaCenter( areaNum ); + } if ( !file ) { return vec3_origin; } @@ -197,6 +244,9 @@ idAASLocal::AreaFlags ============ */ int idAASLocal::AreaFlags( int areaNum ) const { + if ( recastNavMesh.IsLoaded() ) { + return recastNavMesh.AreaFlags( areaNum ); + } if ( !file ) { return 0; } @@ -209,6 +259,9 @@ idAASLocal::AreaTravelFlags ============ */ int idAASLocal::AreaTravelFlags( int areaNum ) const { + if ( recastNavMesh.IsLoaded() ) { + return recastNavMesh.AreaTravelFlags( areaNum ); + } if ( !file ) { return 0; } @@ -221,6 +274,9 @@ idAASLocal::Trace ============ */ bool idAASLocal::Trace( aasTrace_t &trace, const idVec3 &start, const idVec3 &end ) const { + if ( recastNavMesh.IsLoaded() ) { + return recastNavMesh.Trace( trace, start, end ); + } if ( !file ) { trace.fraction = 0.0f; trace.lastAreaNum = 0; @@ -285,4 +341,4 @@ int idAASLocal::AdjustPositionAndGetArea(idVec3& origin) int area = PointReachableAreaNum(origin, DefaultSearchBounds(), AREA_REACHABLE_WALK); PushPointIntoAreaNum(area, origin); return area; -} \ No newline at end of file +} diff --git a/neo/doom3/game/ai/AAS_debug.cpp b/neo/doom3/game/ai/AAS_debug.cpp index ecc3362f..5a4c8b2b 100644 --- a/neo/doom3/game/ai/AAS_debug.cpp +++ b/neo/doom3/game/ai/AAS_debug.cpp @@ -175,6 +175,9 @@ idAASLocal::DefaultSearchBounds ============ */ const idBounds &idAASLocal::DefaultSearchBounds( void ) const { + if ( recastNavMesh.IsLoaded() ) { + return recastNavMesh.GetSettings()->boundingBoxes[0]; + } return file->GetSettings().boundingBoxes[0]; } @@ -184,6 +187,10 @@ idAASLocal::ShowArea ============ */ void idAASLocal::ShowArea( const idVec3 &origin ) const { + if ( recastNavMesh.IsLoaded() ) { + recastNavMesh.ShowArea( origin ); + return; + } static int lastAreaNum; int areaNum; const aasArea_t *area; @@ -242,6 +249,10 @@ idAASLocal::ShowWalkPath ============ */ void idAASLocal::ShowWalkPath( const idVec3 &origin, int goalAreaNum, const idVec3 &goalOrigin ) const { + if ( recastNavMesh.IsLoaded() ) { + recastNavMesh.ShowPath( origin, goalAreaNum, goalOrigin ); + return; + } int i, areaNum, curAreaNum, travelTime; idReachability *reach; idVec3 org, areaCenter; @@ -288,6 +299,10 @@ idAASLocal::ShowFlyPath ============ */ void idAASLocal::ShowFlyPath( const idVec3 &origin, int goalAreaNum, const idVec3 &goalOrigin ) const { + if ( recastNavMesh.IsLoaded() ) { + recastNavMesh.ShowPath( origin, goalAreaNum, goalOrigin ); + return; + } int i, areaNum, curAreaNum, travelTime; idReachability *reach; idVec3 org, areaCenter; @@ -476,6 +491,22 @@ idAASLocal::Test */ void idAASLocal::Test( const idVec3 &origin ) { + if ( recastNavMesh.IsLoaded() ) { + if ( aas_showRecastNavMesh.GetInteger() > 0 ) { + recastNavMesh.DebugDraw( aas_showRecastNavMesh.GetInteger() ); + } + if ( aas_showAreas.GetBool() ) { + ShowArea( origin ); + } + if ( aas_showPath.GetInteger() > 0 ) { + ShowWalkPath( origin, aas_showPath.GetInteger(), AreaCenter( aas_showPath.GetInteger() ) ); + } + if ( aas_showFlyPath.GetInteger() > 0 ) { + ShowFlyPath( origin, aas_showFlyPath.GetInteger(), AreaCenter( aas_showFlyPath.GetInteger() ) ); + } + return; + } + if ( !file ) { return; } diff --git a/neo/doom3/game/ai/AAS_local.h b/neo/doom3/game/ai/AAS_local.h index 66c4187f..f58d138c 100644 --- a/neo/doom3/game/ai/AAS_local.h +++ b/neo/doom3/game/ai/AAS_local.h @@ -31,6 +31,7 @@ If you have questions concerning this license or the applicable additional terms #include "AAS.h" #include "../Pvs.h" +#include "RecastNavMesh.h" class idRoutingCache { @@ -125,6 +126,7 @@ public: private: idAASFile * file; idStr name; + idRecastNavMesh recastNavMesh; private: // routing data idRoutingCache *** areaCacheIndex; // for each area in each cluster the travel times to all other areas in the cluster diff --git a/neo/doom3/game/ai/AAS_pathing.cpp b/neo/doom3/game/ai/AAS_pathing.cpp index d236c38b..096c08c5 100644 --- a/neo/doom3/game/ai/AAS_pathing.cpp +++ b/neo/doom3/game/ai/AAS_pathing.cpp @@ -143,6 +143,10 @@ bool idAASLocal::WalkPathValid( int areaNum, const idVec3 &origin, int goalAreaN const aasArea_t *area; idVec3 p, dir; + if ( recastNavMesh.IsLoaded() ) { + return recastNavMesh.PathValid( areaNum, origin, goalAreaNum, goalOrigin, travelFlags, endPos, endAreaNum ); + } + if ( file == NULL ) { endPos = goalOrigin; endAreaNum = 0; @@ -283,6 +287,10 @@ bool idAASLocal::WalkPathToGoal( aasPath_t &path, int areaNum, const idVec3 &ori idReachability *reach; idVec3 endPos; + if ( recastNavMesh.IsLoaded() ) { + return recastNavMesh.PathToGoal( path, areaNum, origin, goalAreaNum, goalOrigin, travelFlags ); + } + path.type = PATHTYPE_WALK; path.moveGoal = origin; path.moveAreaNum = areaNum; @@ -402,6 +410,10 @@ idAASLocal::FlyPathValid bool idAASLocal::FlyPathValid( int areaNum, const idVec3 &origin, int goalAreaNum, const idVec3 &goalOrigin, int travelFlags, idVec3 &endPos, int &endAreaNum ) const { aasTrace_t trace; + if ( recastNavMesh.IsLoaded() ) { + return recastNavMesh.PathValid( areaNum, origin, goalAreaNum, goalOrigin, travelFlags, endPos, endAreaNum ); + } + if ( file == NULL ) { endPos = goalOrigin; endAreaNum = 0; @@ -459,6 +471,10 @@ bool idAASLocal::FlyPathToGoal( aasPath_t &path, int areaNum, const idVec3 &orig idReachability *reach; idVec3 endPos; + if ( recastNavMesh.IsLoaded() ) { + return recastNavMesh.PathToGoal( path, areaNum, origin, goalAreaNum, goalOrigin, travelFlags ); + } + path.type = PATHTYPE_WALK; path.moveGoal = origin; path.moveAreaNum = areaNum; diff --git a/neo/doom3/game/ai/AAS_routing.cpp b/neo/doom3/game/ai/AAS_routing.cpp index 48183738..21dd0d3d 100644 --- a/neo/doom3/game/ai/AAS_routing.cpp +++ b/neo/doom3/game/ai/AAS_routing.cpp @@ -435,6 +435,10 @@ idAASLocal::SetAreaState bool idAASLocal::SetAreaState( const idBounds &bounds, const int areaContents, bool disabled ) { idBounds expBounds; + if ( recastNavMesh.IsLoaded() ) { + return recastNavMesh.SetAreaState( bounds, areaContents, disabled ); + } + if ( !file ) { return false; } @@ -537,6 +541,10 @@ idAASLocal::AddObstacle aasHandle_t idAASLocal::AddObstacle( const idBounds &bounds ) { idRoutingObstacle *obstacle; + if ( recastNavMesh.IsLoaded() ) { + return recastNavMesh.AddObstacle( bounds ); + } + if ( !file ) { return -1; } @@ -557,6 +565,10 @@ idAASLocal::RemoveObstacle ============ */ void idAASLocal::RemoveObstacle( const aasHandle_t handle ) { + if ( recastNavMesh.IsLoaded() ) { + recastNavMesh.RemoveObstacle( handle ); + return; + } if ( !file ) { return; } @@ -576,6 +588,11 @@ idAASLocal::RemoveAllObstacles void idAASLocal::RemoveAllObstacles( void ) { int i; + if ( recastNavMesh.IsLoaded() ) { + recastNavMesh.RemoveAllObstacles(); + return; + } + if ( !file ) { return; } @@ -1002,6 +1019,10 @@ bool idAASLocal::RouteToGoalArea( int areaNum, const idVec3 origin, int goalArea travelTime = 0; *reach = NULL; + if ( recastNavMesh.IsLoaded() ) { + return recastNavMesh.RouteToGoalArea( areaNum, origin, goalAreaNum, travelFlags, travelTime, reach ); + } + if ( !file ) { return false; } @@ -1151,6 +1172,10 @@ int idAASLocal::TravelTimeToGoalArea( int areaNum, const idVec3 &origin, int goa int travelTime; idReachability *reach; + if ( recastNavMesh.IsLoaded() ) { + return recastNavMesh.TravelTimeToGoalArea( areaNum, origin, goalAreaNum, travelFlags ); + } + if ( !file ) { return 0; } @@ -1175,6 +1200,10 @@ bool idAASLocal::FindNearestGoal( aasGoal_t &goal, int areaNum, const idVec3 ori idVec3 v1, v2, p; float targetDist, dist; + if ( recastNavMesh.IsLoaded() ) { + return recastNavMesh.FindNearestGoal( this, goal, areaNum, origin, target, travelFlags, obstacles, numObstacles, callback ); + } + if ( file == NULL || areaNum <= 0 ) { goal.areaNum = areaNum; goal.origin = origin; diff --git a/neo/doom3/game/gamesys/GameTypeInfo.h b/neo/doom3/game/gamesys/GameTypeInfo.h index 8791ee5f..717ebd3c 100644 --- a/neo/doom3/game/gamesys/GameTypeInfo.h +++ b/neo/doom3/game/gamesys/GameTypeInfo.h @@ -7,9 +7,9 @@ This file has been generated with the Type Info Generator v1.1 (c) 2004 id Software - 1186 constants + 1188 constants 133 enums - 581 classes/structs/unions + 583 classes/structs/unions 38 templates 7 max inheritance level for 'idAI_Vagary' @@ -643,6 +643,8 @@ static constantInfo_t constantInfo[] = { { "int", "CONTACT_EDGE", "1" }, { "int", "CONTACT_MODELVERTEX", "2" }, { "int", "CONTACT_TRMVERTEX", "3" }, + { "static const recastNavHandle_t", "RECAST_NAV_HANDLE_INVALID", "-1" }, + { "static const int", "MAX_RECAST_PATH_AREAS", "256" }, { "int", "ALLOW_YES", "0" }, { "int", "ALLOW_BADPASS", "1" }, { "int", "ALLOW_NOTYET", "2" }, @@ -655,7 +657,7 @@ static constantInfo_t constantInfo[] = { { "int", "TEST_PARTICLE_MUZZLE", "2" }, { "int", "TEST_PARTICLE_FLIGHT", "3" }, { "int", "TEST_PARTICLE_SELECTED", "4" }, - { "const int", "GAME_API_VERSION", "8" }, + { "const int", "GAME_API_VERSION", "9" }, { "static const int", "MAX_LOGGED_STATS", "60*120" }, { "int", "MSG_OK", "0" }, { "int", "MSG_ABORT", "1" }, @@ -4870,6 +4872,18 @@ static classVariableInfo_t idAASFileManager_typeInfo[] = { { NULL, 0 } }; +static classVariableInfo_t recastPath_t_typeInfo[] = { + { "idVec3", "moveGoal", (intptr_t)(&((recastPath_t *)0)->moveGoal), sizeof( ((recastPath_t *)0)->moveGoal ) }, + { "idVec3", "secondaryGoal", (intptr_t)(&((recastPath_t *)0)->secondaryGoal), sizeof( ((recastPath_t *)0)->secondaryGoal ) }, + { "int", "moveAreaNum", (intptr_t)(&((recastPath_t *)0)->moveAreaNum), sizeof( ((recastPath_t *)0)->moveAreaNum ) }, + { "int", "travelTime", (intptr_t)(&((recastPath_t *)0)->travelTime), sizeof( ((recastPath_t *)0)->travelTime ) }, + { NULL, 0 } +}; + +static classVariableInfo_t idRecastNavigationManager_typeInfo[] = { + { NULL, 0 } +}; + static classVariableInfo_t gameReturn_t_typeInfo[] = { { "char[1024]", "sessionCommand", (intptr_t)(&((gameReturn_t *)0)->sessionCommand), sizeof( ((gameReturn_t *)0)->sessionCommand ) }, { "int", "consistencyHash", (intptr_t)(&((gameReturn_t *)0)->consistencyHash), sizeof( ((gameReturn_t *)0)->consistencyHash ) }, @@ -4914,6 +4928,7 @@ static classVariableInfo_t gameImport_t_typeInfo[] = { { "idUserInterfaceManager *", "uiManager", (intptr_t)(&((gameImport_t *)0)->uiManager), sizeof( ((gameImport_t *)0)->uiManager ) }, { "idDeclManager *", "declManager", (intptr_t)(&((gameImport_t *)0)->declManager), sizeof( ((gameImport_t *)0)->declManager ) }, { "idAASFileManager *", "AASFileManager", (intptr_t)(&((gameImport_t *)0)->AASFileManager), sizeof( ((gameImport_t *)0)->AASFileManager ) }, + { "idRecastNavigationManager *", "RecastNavigationManager", (intptr_t)(&((gameImport_t *)0)->RecastNavigationManager), sizeof( ((gameImport_t *)0)->RecastNavigationManager ) }, { "idCollisionModelManager *", "collisionModelManager", (intptr_t)(&((gameImport_t *)0)->collisionModelManager), sizeof( ((gameImport_t *)0)->collisionModelManager ) }, { NULL, 0 } }; @@ -5201,11 +5216,11 @@ static classVariableInfo_t frameLookup_t_typeInfo[] = { { NULL, 0 } }; -static classVariableInfo_t class_285_class_285_typeInfo[] = { -// { "const idSoundShader *", "soundShader", (intptr_t)(&((class_285::class_285 *)0)->soundShader), sizeof( ((class_285::class_285 *)0)->soundShader ) }, -// { "const function_t *", "function", (intptr_t)(&((class_285::class_285 *)0)->function), sizeof( ((class_285::class_285 *)0)->function ) }, -// { "const idDeclSkin *", "skin", (intptr_t)(&((class_285::class_285 *)0)->skin), sizeof( ((class_285::class_285 *)0)->skin ) }, -// { "int", "index", (intptr_t)(&((class_285::class_285 *)0)->index), sizeof( ((class_285::class_285 *)0)->index ) }, +static classVariableInfo_t class_287_class_287_typeInfo[] = { +// { "const idSoundShader *", "soundShader", (intptr_t)(&((class_287::class_287 *)0)->soundShader), sizeof( ((class_287::class_287 *)0)->soundShader ) }, +// { "const function_t *", "function", (intptr_t)(&((class_287::class_287 *)0)->function), sizeof( ((class_287::class_287 *)0)->function ) }, +// { "const idDeclSkin *", "skin", (intptr_t)(&((class_287::class_287 *)0)->skin), sizeof( ((class_287::class_287 *)0)->skin ) }, +// { "int", "index", (intptr_t)(&((class_287::class_287 *)0)->index), sizeof( ((class_287::class_287 *)0)->index ) }, { NULL, 0 } }; @@ -8815,6 +8830,8 @@ static classTypeInfo_t classTypeInfo[] = { { "idAASSettings", "", sizeof(idAASSettings), idAASSettings_typeInfo }, { "idAASFile", "", sizeof(idAASFile), idAASFile_typeInfo }, { "idAASFileManager", "", sizeof(idAASFileManager), idAASFileManager_typeInfo }, + { "recastPath_t", "", sizeof(recastPath_t), recastPath_t_typeInfo }, + { "idRecastNavigationManager", "", sizeof(idRecastNavigationManager), idRecastNavigationManager_typeInfo }, { "gameReturn_t", "", sizeof(gameReturn_t), gameReturn_t_typeInfo }, { "idGame", "", sizeof(idGame), idGame_typeInfo }, { "refSound_t", "", sizeof(refSound_t), refSound_t_typeInfo }, @@ -8851,7 +8868,7 @@ static classTypeInfo_t classTypeInfo[] = { { "jointAnimInfo_t", "", sizeof(jointAnimInfo_t), jointAnimInfo_t_typeInfo }, { "jointMod_t", "", sizeof(jointMod_t), jointMod_t_typeInfo }, { "frameLookup_t", "", sizeof(frameLookup_t), frameLookup_t_typeInfo }, -// { "class_285::class_285", "", sizeof(class_285::class_285), class_285_class_285_typeInfo }, +// { "class_287::class_287", "", sizeof(class_287::class_287), class_287_class_287_typeInfo }, { "frameCommand_t", "", sizeof(frameCommand_t), frameCommand_t_typeInfo }, { "animFlags_t", "", sizeof(animFlags_t), animFlags_t_typeInfo }, { "idModelExport", "", sizeof(idModelExport), idModelExport_typeInfo }, diff --git a/neo/doom3/game/gamesys/SysCmds.cpp b/neo/doom3/game/gamesys/SysCmds.cpp index 1bcf001a..a2a6a215 100644 --- a/neo/doom3/game/gamesys/SysCmds.cpp +++ b/neo/doom3/game/gamesys/SysCmds.cpp @@ -30,6 +30,7 @@ If you have questions concerning this license or the applicable additional terms #pragma hdrstop #include "../Game_local.h" +#include "../ai/RecastNavMesh.h" #include "TypeInfo.h" @@ -1476,6 +1477,51 @@ static void Cmd_AASStats_f( const idCmdArgs &args ) { } } +/* +================== +Cmd_RecastNavBuild_f +================== +*/ +static void Cmd_RecastNavBuild_f( const idCmdArgs &args ) { + if ( !gameLocal.CheatsOk( false ) ) { + return; + } + + if ( args.Argc() < 2 || args.Argc() > 3 ) { + gameLocal.Printf( "usage: recastNavBuild [aasType|all]\n" ); + return; + } + + const idStr mapName = args.Argv( 1 ); + const idStr requestedType = args.Argc() > 2 ? args.Argv( 2 ) : "all"; + bool builtAny = false; + + if ( requestedType.Icmp( "all" ) != 0 ) { + common->SetRefreshOnPrint(true); + builtAny = idRecastNavMesh::BuildMapFile( mapName, requestedType ); + common->SetRefreshOnPrint(false); + } else { + const idDict *dict = gameLocal.FindEntityDefDict( "aas_types", false ); + if ( !dict ) { + gameLocal.Warning( "Unable to find entityDef for 'aas_types'" ); + return; + } + common->SetRefreshOnPrint(true); + for ( const idKeyValue *kv = dict->MatchPrefix( "type" ); kv != NULL; kv = dict->MatchPrefix( "type", kv ) ) { + if ( idRecastNavMesh::BuildMapFile( mapName, kv->GetValue() ) ) { + builtAny = true; + } + } + common->SetRefreshOnPrint(false); + } + + if ( builtAny ) { + gameLocal.Printf( "Recast navmesh build complete for %s\n", mapName.c_str() ); + } else { + gameLocal.Warning( "Recast navmesh build failed for %s", mapName.c_str() ); + } +} + /* ================== Cmd_TestDamage_f @@ -2366,6 +2412,7 @@ void idGameLocal::InitConsoleCommands( void ) { cmdSystem->AddCommand( "reloadanims", Cmd_ReloadAnims_f, CMD_FL_GAME|CMD_FL_CHEAT, "reloads animations" ); cmdSystem->AddCommand( "listAnims", Cmd_ListAnims_f, CMD_FL_GAME, "lists all animations" ); cmdSystem->AddCommand( "aasStats", Cmd_AASStats_f, CMD_FL_GAME, "shows AAS stats" ); + cmdSystem->AddCommand( "recastNavBuild", Cmd_RecastNavBuild_f, CMD_FL_GAME|CMD_FL_CHEAT, "builds Recast navmesh data for a map" ); cmdSystem->AddCommand( "testDamage", Cmd_TestDamage_f, CMD_FL_GAME|CMD_FL_CHEAT, "tests a damage def", idCmdSystem::ArgCompletion_Decl ); cmdSystem->AddCommand( "weaponSplat", Cmd_WeaponSplat_f, CMD_FL_GAME|CMD_FL_CHEAT, "projects a blood splat on the player weapon" ); cmdSystem->AddCommand( "saveSelected", Cmd_SaveSelected_f, CMD_FL_GAME|CMD_FL_CHEAT, "saves the selected entity to the .map file" ); diff --git a/neo/doom3/game/gamesys/SysCvar.cpp b/neo/doom3/game/gamesys/SysCvar.cpp index fac727e7..9d596e1a 100644 --- a/neo/doom3/game/gamesys/SysCvar.cpp +++ b/neo/doom3/game/gamesys/SysCvar.cpp @@ -296,6 +296,7 @@ idCVar g_flushSave( "g_flushSave", "0", CVAR_GAME | CVAR_BOOL, "1 = don idCVar aas_test( "aas_test", "0", CVAR_GAME | CVAR_INTEGER, "" ); idCVar aas_showAreas( "aas_showAreas", "0", CVAR_GAME | CVAR_BOOL, "" ); +idCVar aas_showRecastNavMesh( "aas_showRecastNavMesh", "0", CVAR_GAME | CVAR_INTEGER, "0 = off, 1 = draw Recast navmesh, 2 = also draw dynamic blockers" ); idCVar aas_showPath( "aas_showPath", "0", CVAR_GAME | CVAR_INTEGER, "" ); idCVar aas_showFlyPath( "aas_showFlyPath", "0", CVAR_GAME | CVAR_INTEGER, "" ); idCVar aas_showWallEdges( "aas_showWallEdges", "0", CVAR_GAME | CVAR_BOOL, "" ); diff --git a/neo/doom3/game/gamesys/SysCvar.h b/neo/doom3/game/gamesys/SysCvar.h index cc699ca2..6d53805f 100644 --- a/neo/doom3/game/gamesys/SysCvar.h +++ b/neo/doom3/game/gamesys/SysCvar.h @@ -224,6 +224,7 @@ extern idCVar g_flushSave; extern idCVar aas_test; extern idCVar aas_showAreas; +extern idCVar aas_showRecastNavMesh; extern idCVar aas_showPath; extern idCVar aas_showFlyPath; extern idCVar aas_showWallEdges; diff --git a/neo/engine/_DoomDLL.props b/neo/engine/_DoomDLL.props index ea341c24..6c7516c1 100644 --- a/neo/engine/_DoomDLL.props +++ b/neo/engine/_DoomDLL.props @@ -6,7 +6,7 @@ - sound/vorbis/include;%(AdditionalIncludeDirectories) + sound/vorbis/include;..\external\recastnavigation\Recast\Include;..\external\recastnavigation\Detour\Include;..\external\recastnavigation\DetourCrowd\Include;..\external\recastnavigation\DetourTileCache\Include;%(AdditionalIncludeDirectories) __DOOM__;__DOOM_DLL__;%(PreprocessorDefinitions) diff --git a/neo/engine/_Game.props b/neo/engine/_Game.props index c8a04027..19f56f77 100644 --- a/neo/engine/_Game.props +++ b/neo/engine/_Game.props @@ -19,4 +19,4 @@ ..\build\Win32\"$(Configuration)"\TypeInfo.exe - \ No newline at end of file + diff --git a/neo/engine/doomdll.vcxproj b/neo/engine/doomdll.vcxproj index 84ca1818..99526bde 100644 --- a/neo/engine/doomdll.vcxproj +++ b/neo/engine/doomdll.vcxproj @@ -711,6 +711,7 @@ + @@ -2144,6 +2145,79 @@ + + + NotUsing + + + NotUsing + + + NotUsing + + + NotUsing + + + NotUsing + + + NotUsing + + + NotUsing + + + NotUsing + + + NotUsing + + + NotUsing + + + NotUsing + + + NotUsing + + + NotUsing + + + NotUsing + + + NotUsing + + + NotUsing + + + NotUsing + + + NotUsing + + + NotUsing + + + NotUsing + + + NotUsing + + + NotUsing + + + NotUsing + + + NotUsing + diff --git a/neo/engine/doomdll.vcxproj.filters b/neo/engine/doomdll.vcxproj.filters index 1f227651..45cb73fb 100644 --- a/neo/engine/doomdll.vcxproj.filters +++ b/neo/engine/doomdll.vcxproj.filters @@ -67,6 +67,9 @@ {07d88fa0-f779-44b7-87b1-2c0d8214aa3f} + + {f756f167-a1f5-4057-a88b-acaa61d7d746} + {6984ce76-c3bf-4003-97cf-64b50f951fe8} @@ -118,6 +121,15 @@ {17e28816-27c1-473b-b124-b9c1bc9427aa} + + {c9064943-6813-48eb-b813-009fd9e43815} + + + {14f2f6c0-6253-4149-909f-107b4e69f1aa} + + + {bc492f36-f168-4265-8299-e710f177d9fe} + @@ -471,6 +483,9 @@ Tools\Compilers\AAS + + Tools\Compilers\Recast + Tools\Compilers\AAS @@ -1115,6 +1130,9 @@ Tools\Compilers\AAS + + Tools\Compilers\Recast + Tools\Compilers\AAS @@ -1718,6 +1736,78 @@ Tools\Radiant + + External\Recast + + + External\Recast + + + External\Recast + + + External\Recast + + + External\Recast + + + External\Recast + + + External\Recast + + + External\Recast + + + External\Recast + + + External\Recast + + + External\Recast + + + External\Detour + + + External\Detour + + + External\Detour + + + External\Detour + + + External\Detour + + + External\Detour + + + External\Detour + + + External\Detour + + + External\Detour + + + External\Detour + + + External\Detour + + + External\Detour + + + External\Detour + @@ -2441,4 +2531,4 @@ Sys\RC\res - + \ No newline at end of file diff --git a/neo/engine/doomdll.vcxproj.user b/neo/engine/doomdll.vcxproj.user index d353b370..895f131b 100644 --- a/neo/engine/doomdll.vcxproj.user +++ b/neo/engine/doomdll.vcxproj.user @@ -15,9 +15,9 @@ D:\projects\Doom3\Doom3.exe WindowsLocalDebugger - +set r_fullscreen 0 +set r_mode 9 +set sv_pure 0 + +set r_fullscreen 0 +set r_mode 9 +set sv_pure 0 D:\projects\Doom3 - +set r_fullscreen 0 +set r_mode 9 +set sv_pure 0 +set fs_game e3|+set r_fullscreen 0 +set r_mode 11 +set sv_pure 0 +set fs_game e3|+set r_fullscreen 0 +set r_mode 11 +set sv_pure 0 +set fs_game e3|+set r_fullscreen 0 +set r_mode 11 +set sv_pure 0 |+set r_fullscreen 0 +set r_mode 9 +set sv_pure 0 | + +set r_fullscreen 0 +set r_mode 11 +set sv_pure 0 +set fs_game e3|+set r_fullscreen 0 +set r_mode 11 +set sv_pure 0 |+set r_fullscreen 0 +set r_mode 9 +set sv_pure 0 |+set r_fullscreen 0 +set r_mode 9 +set sv_pure 0 +set fs_game rage|+set r_fullscreen 0 +set r_mode 9 +set sv_pure 0| D:\projects\Doom3\Quake4.exe diff --git a/neo/engine/framework/Common.cpp b/neo/engine/framework/Common.cpp index 04705d67..c15ca2d2 100644 --- a/neo/engine/framework/Common.cpp +++ b/neo/engine/framework/Common.cpp @@ -3566,6 +3566,7 @@ void idCommonLocal::LoadGameDLL( void ) { gameImport.uiManager = ::uiManager; gameImport.declManager = ::declManager; gameImport.AASFileManager = ::AASFileManager; + gameImport.RecastNavigationManager = ::RecastNavigationManager; gameImport.collisionModelManager = ::collisionModelManager; #ifdef QUAKE4 gameImport.session = ::session; diff --git a/neo/engine/idlib/precompiled.h b/neo/engine/idlib/precompiled.h index dd66ba79..4e738e72 100644 --- a/neo/engine/idlib/precompiled.h +++ b/neo/engine/idlib/precompiled.h @@ -197,6 +197,7 @@ const int MAX_EXPRESSION_REGISTERS = 4096; // AAS files and manager #include "../tools/compilers/aas/AASFile.h" #include "../tools/compilers/aas/AASFileManager.h" +#include "../tools/compilers/recast/RecastNavigation.h" #if defined(QUAKE4) #include "../../quake4/bse/BSEInterface.h" diff --git a/neo/engine/opengl/gl_d3d12raylight.cpp b/neo/engine/opengl/gl_d3d12raylight.cpp index 650f580a..4de3b730 100644 --- a/neo/engine/opengl/gl_d3d12raylight.cpp +++ b/neo/engine/opengl/gl_d3d12raylight.cpp @@ -5355,7 +5355,7 @@ void RayGen() } float outputAo = isSkeletal ? lerp(ao, 1.0, 0.55) : ao; - finalColor *= clamp(outputAo + 0.6, 0.0, 1.0); + finalColor *= clamp(outputAo + 0.3, 0.0, 1.0); // Volumetric light scattering is radiance in the camera ray, not surface // reflectance, so add it after surface albedo/specular composition. Because diff --git a/neo/engine/opengl/gl_d3d12shim.cpp b/neo/engine/opengl/gl_d3d12shim.cpp index ec8e761c..7f364650 100644 --- a/neo/engine/opengl/gl_d3d12shim.cpp +++ b/neo/engine/opengl/gl_d3d12shim.cpp @@ -1507,7 +1507,7 @@ struct GLState uint32_t frameGenerationMultiplier = 0; uint32_t pathTracingSamplesPerPixel = 1; uint32_t pathTracingFallbackSamplesPerPixel = 2; - uint32_t pathTracingMaxBounces = 2; + uint32_t pathTracingMaxBounces = 3; glScreenSpaceDecal_t screenSpaceDecals[QD3D12_MaxScreenSpaceDecals] = {}; uint32_t screenSpaceDecalCount = 0; ComPtr screenSpaceDecalBuffer; diff --git a/neo/engine/tools/compilers/recast/RecastNavigation.cpp b/neo/engine/tools/compilers/recast/RecastNavigation.cpp new file mode 100644 index 00000000..fac8bfb2 --- /dev/null +++ b/neo/engine/tools/compilers/recast/RecastNavigation.cpp @@ -0,0 +1,1331 @@ +/* +=========================================================================== + +IceTech GPL Source Code +Copyright (C) 2026 Justin Marshall + +=========================================================================== +*/ + +#include "precompiled.h" +#pragma hdrstop + +#include "RecastNavigation.h" + +#include "Recast.h" +#include "DetourAlloc.h" +#include "DetourCommon.h" +#include "DetourNavMesh.h" +#include "DetourNavMeshBuilder.h" +#include "DetourNavMeshQuery.h" +#include "DetourCrowd.h" + +static const int RECAST_NAVMESH_VERSION = 1; +static const int RECAST_NAVMESH_MAGIC = ( 'R' << 24 ) | ( 'N' << 16 ) | ( 'A' << 8 ) | 'V'; +static const unsigned short RECAST_POLYFLAGS_WALK = 0x01; +static const int MAX_RECAST_PATH_POLYS = 256; +static const float RECAST_AREA_BLOCKER_MATCH_EXPAND = 128.0f; +static const float RECAST_BUILD_CELL_SIZE = 4.0f; +static const float RECAST_BUILD_CELL_HEIGHT = 2.0f; + +struct recastBoundsBlocker_t { + idBounds bounds; + int areaContents; + bool active; +}; + +class idRecastNavMeshLocal { +public: + idRecastNavMeshLocal( void ); + ~idRecastNavMeshLocal( void ); + + void Shutdown( void ); + bool InitForAAS( const idStr &aasName, const idAASSettings &settings, unsigned int mapFileCRC ); + bool Load( const idStr &fileName, unsigned int mapFileCRC ); + bool BuildAndSave( const idMapFile *mapFile, const idStr &fileName, unsigned int mapFileCRC, const idAASSettings &settings ); + void DebugDraw( idRenderWorld *renderWorld, int drawMode, int lifetime ) const; + + bool IsLoaded( void ) const { return navMesh != NULL && navQuery != NULL; } + const idStr & GetName( void ) const { return name; } + int NumPolys( void ) const { return polyRefs.Num(); } + const idAASSettings * GetSettings( void ) const { return IsLoaded() ? &settings : NULL; } + void Stats( void ) const; + + int PointAreaNum( const idVec3 &origin ) const; + int PointReachableAreaNum( const idVec3 &origin, const idBounds &searchBounds, const int areaFlags ) const; + int BoundsReachableAreaNum( const idBounds &bounds, const int areaFlags ) const; + void PushPointIntoAreaNum( int areaNum, idVec3 &origin ) const; + idVec3 AreaCenter( int areaNum ) const; + int AreaFlags( int areaNum ) const; + int AreaTravelFlags( int areaNum ) const; + bool Trace( aasTrace_t &trace, const idVec3 &start, const idVec3 &end ) const; + + bool SetAreaState( const idBounds &bounds, const int areaContents, bool disabled ); + recastObstacleHandle_t AddObstacle( const idBounds &bounds ); + void RemoveObstacle( const recastObstacleHandle_t handle ); + void RemoveAllObstacles( void ); + + int TravelTimeToGoalArea( int areaNum, const idVec3 &origin, int goalAreaNum, int travelFlags ) const; + bool RouteToGoalArea( int areaNum, const idVec3 origin, int goalAreaNum, int travelFlags, recastPath_t &route ) const; + bool PathToGoal( recastPath_t &path, int areaNum, const idVec3 &origin, int goalAreaNum, const idVec3 &goalOrigin, int travelFlags ) const; + bool PathValid( int areaNum, const idVec3 &origin, int goalAreaNum, const idVec3 &goalOrigin, int travelFlags, idVec3 &endPos, int &endAreaNum ) const; + bool PathAreaList( int areaNum, const idVec3 &origin, int goalAreaNum, const idVec3 &goalOrigin, int travelFlags, int *areas, int &numAreas, int maxAreas ) const; + + static bool BuildMapFile( const idStr &mapName, const idStr &aasType ); + static idStr NavFileNameForAASName( const idStr &aasName ); + +private: + static void ToDetour( const idVec3 &in, float out[3] ); + static idVec3 FromDetour( const float in[3] ); + bool FindNearestPoly( const idVec3 &origin, const idBounds &searchBounds, dtPolyRef &ref, idVec3 *nearest ) const; + int AreaForRef( dtPolyRef ref ) const; + dtPolyRef RefForArea( int areaNum ) const; + bool FindPathRefs( int areaNum, const idVec3 &origin, int goalAreaNum, const idVec3 &goalOrigin, int travelFlags, dtPolyRef *pathRefs, int &numPathRefs, const int maxPathRefs ) const; + bool LineHitsBlocker( const idVec3 &start, const idVec3 &end ) const; + bool PointInsideBlocker( const idVec3 &origin ) const; + +private: + idStr name; + unsigned int crc; + idAASSettings settings; + dtNavMesh * navMesh; + dtNavMeshQuery * navQuery; + dtCrowd * crowd; + mutable idList polyRefs; + idList obstacles; + idList areaBlockers; +}; + +class idDoomRecastContext : public rcContext { +public: + idDoomRecastContext( void ) : rcContext( true ) {} + +protected: + virtual void doLog( const rcLogCategory category, const char *msg, const int len ) { + idStr text( msg ); + if ( len >= 0 && len < text.Length() ) { + text.CapLength( len ); + } + if ( category == RC_LOG_ERROR ) { + common->Warning( "Recast: %s", text.c_str() ); + } else if ( category == RC_LOG_WARNING ) { + common->DWarning( "Recast: %s", text.c_str() ); + } else { + common->Printf( "Recast: %s\n", text.c_str() ); + } + } +}; + +struct recastBuildGeometry_t { + idList verts; + idList tris; + idBounds bounds; + + void Clear( void ) { + verts.Clear(); + tris.Clear(); + bounds.Clear(); + } +}; + +static bool RecastMaterialIsSolid( const char *materialName ) { + const idMaterial *mat = declManager->FindMaterial( materialName ); + if ( !mat ) { + return false; + } + const int contents = mat->GetContentFlags(); + return ( contents & ( CONTENTS_SOLID | CONTENTS_AAS_SOLID | CONTENTS_MONSTERCLIP ) ) != 0; +} + +static bool RecastEntityIsBakeGeometry( const idMapEntity *mapEnt, int entityNum ) { + const char *classname = mapEnt->epairs.GetString( "classname" ); + + if ( entityNum == 0 ) { + return true; + } + + if ( idStr::Icmp( classname, "func_static" ) == 0 || + idStr::Icmp( classname, "func_clipmodel" ) == 0 ) { + return true; + } + + return false; +} + +static void RecastAppendVertex( recastBuildGeometry_t &geom, const idVec3 &v ) { + geom.verts.Append( v.x ); + geom.verts.Append( v.z ); + geom.verts.Append( v.y ); + geom.bounds.AddPoint( v ); +} + +static void RecastAppendTriangle( recastBuildGeometry_t &geom, const idVec3 &a, const idVec3 &b, const idVec3 &c ) { + if ( idWinding::TriangleArea( a, b, c ) < 0.1f ) { + return; + } + const int base = geom.verts.Num() / 3; + RecastAppendVertex( geom, a ); + RecastAppendVertex( geom, b ); + RecastAppendVertex( geom, c ); + geom.tris.Append( base + 0 ); + geom.tris.Append( base + 1 ); + geom.tris.Append( base + 2 ); +} + +static void RecastAddWinding( recastBuildGeometry_t &geom, const idWinding &winding, const idVec3 &origin, const idMat3 &axis ) { + const int numPoints = winding.GetNumPoints(); + if ( numPoints < 3 ) { + return; + } + + const idVec3 v0 = winding[0].ToVec3() * axis + origin; + for ( int i = 1; i < numPoints - 1; i++ ) { + const idVec3 v1 = winding[i].ToVec3() * axis + origin; + const idVec3 v2 = winding[i + 1].ToVec3() * axis + origin; + RecastAppendTriangle( geom, v0, v1, v2 ); + } +} + +static void RecastAddBrushGeometry( recastBuildGeometry_t &geom, const idMapBrush *brush, const idVec3 &origin, const idMat3 &axis ) { + for ( int i = 0; i < brush->GetNumSides(); i++ ) { + const idMapBrushSide *side = brush->GetSide( i ); + if ( !RecastMaterialIsSolid( side->GetMaterial() ) ) { + continue; + } + + idFixedWinding winding( side->GetPlane() ); + bool clipped = true; + for ( int j = 0; j < brush->GetNumSides(); j++ ) { + if ( j == i ) { + continue; + } + if ( !winding.ClipInPlace( -brush->GetSide( j )->GetPlane(), ON_EPSILON, true ) ) { + clipped = false; + break; + } + } + if ( clipped && !winding.IsTiny() && !winding.IsHuge() ) { + RecastAddWinding( geom, winding, origin, axis ); + } + } +} + +static void RecastAddPatchGeometry( recastBuildGeometry_t &geom, const idMapPatch *patch, const idVec3 &origin, const idMat3 &axis, const idAASSettings &settings ) { + if ( !settings.usePatches || !RecastMaterialIsSolid( patch->GetMaterial() ) ) { + return; + } + + idSurface_Patch mesh( *patch ); + if ( patch->GetExplicitlySubdivided() ) { + mesh.SubdivideExplicit( patch->GetHorzSubdivisions(), patch->GetVertSubdivisions(), false, true ); + } else { + mesh.Subdivide( DEFAULT_CURVE_MAX_ERROR_CD, DEFAULT_CURVE_MAX_ERROR_CD, DEFAULT_CURVE_MAX_LENGTH_CD, false ); + } + + const idDrawVert *verts = mesh.GetVertices(); + const int *indexes = mesh.GetIndexes(); + for ( int i = 0; i + 2 < mesh.GetNumIndexes(); i += 3 ) { + RecastAppendTriangle( geom, + verts[indexes[i + 0]].xyz * axis + origin, + verts[indexes[i + 1]].xyz * axis + origin, + verts[indexes[i + 2]].xyz * axis + origin ); + } +} + +static void RecastAddMapEntityGeometry( recastBuildGeometry_t &geom, const idMapEntity *mapEnt, const idAASSettings &settings ) { + idVec3 origin; + idMat3 axis; + + mapEnt->epairs.GetVector( "origin", "0 0 0", origin ); + if ( !mapEnt->epairs.GetMatrix( "rotation", "1 0 0 0 1 0 0 0 1", axis ) ) { + const float angle = mapEnt->epairs.GetFloat( "angle" ); + if ( angle != 0.0f ) { + axis = idAngles( 0.0f, angle, 0.0f ).ToMat3(); + } else { + axis.Identity(); + } + } + + for ( int i = 0; i < mapEnt->GetNumPrimitives(); i++ ) { + idMapPrimitive *prim = mapEnt->GetPrimitive( i ); + if ( prim->GetType() == idMapPrimitive::TYPE_BRUSH ) { + RecastAddBrushGeometry( geom, static_cast( prim ), origin, axis ); + } else if ( prim->GetType() == idMapPrimitive::TYPE_PATCH ) { + RecastAddPatchGeometry( geom, static_cast( prim ), origin, axis, settings ); + } + } +} + +static bool RecastCollectMapGeometry( recastBuildGeometry_t &geom, const idMapFile *mapFile, const idAASSettings &settings ) { + geom.Clear(); + + int acceptedEntities = 0; + int skippedEntities = 0; + int skippedDynamicEntities = 0; + int brushPrimitives = 0; + int patchPrimitives = 0; + + common->Printf( "Recast: scanning %d map entities for build geometry\n", mapFile->GetNumEntities() ); + + for ( int i = 0; i < mapFile->GetNumEntities(); i++ ) { + const idMapEntity *mapEnt = mapFile->GetEntity( i ); + + if ( !RecastEntityIsBakeGeometry( mapEnt, i ) ) { + const char *classname = mapEnt->epairs.GetString( "classname" ); + if ( idStr::Icmp( classname, "func_aas_obstacle" ) == 0 || + idStr::Icmp( classname, "func_aas_portal" ) == 0 || + idStr::Icmp( classname, "func_door" ) == 0 || + idStr::Icmp( classname, "func_mover" ) == 0 ) { + skippedDynamicEntities++; + } + skippedEntities++; + continue; + } + + acceptedEntities++; + for ( int j = 0; j < mapEnt->GetNumPrimitives(); j++ ) { + idMapPrimitive *prim = mapEnt->GetPrimitive( j ); + if ( prim->GetType() == idMapPrimitive::TYPE_BRUSH ) { + brushPrimitives++; + } else if ( prim->GetType() == idMapPrimitive::TYPE_PATCH ) { + patchPrimitives++; + } + } + RecastAddMapEntityGeometry( geom, mapEnt, settings ); + } + + common->Printf( "Recast: accepted %d static entities, skipped %d entities (%d dynamic AAS/door/mover), saw %d brushes and %d patches\n", + acceptedEntities, skippedEntities, skippedDynamicEntities, brushPrimitives, patchPrimitives ); + common->Printf( "Recast: collected %d verts and %d tris, bounds mins (%g %g %g), maxs (%g %g %g)\n", + geom.verts.Num() / 3, geom.tris.Num() / 3, + geom.bounds[0].x, geom.bounds[0].y, geom.bounds[0].z, + geom.bounds[1].x, geom.bounds[1].y, geom.bounds[1].z ); + + return geom.verts.Num() >= 9 && geom.tris.Num() >= 3; +} + +idRecastNavMeshLocal::idRecastNavMeshLocal( void ) { + crc = 0; + navMesh = NULL; + navQuery = NULL; + crowd = NULL; +} + +idRecastNavMeshLocal::~idRecastNavMeshLocal( void ) { + Shutdown(); +} + +void idRecastNavMeshLocal::Shutdown( void ) { + if ( crowd ) { + dtFreeCrowd( crowd ); + crowd = NULL; + } + if ( navQuery ) { + dtFreeNavMeshQuery( navQuery ); + navQuery = NULL; + } + if ( navMesh ) { + dtFreeNavMesh( navMesh ); + navMesh = NULL; + } + name.Clear(); + crc = 0; + polyRefs.Clear(); + obstacles.Clear(); + areaBlockers.Clear(); +} + +bool idRecastNavMeshLocal::InitForAAS( const idStr &aasName, const idAASSettings &aasSettings, unsigned int mapFileCRC ) { + settings = aasSettings; + crc = mapFileCRC; + name = aasName; + return true; +} + +idStr idRecastNavMeshLocal::NavFileNameForAASName( const idStr &aasName ) { + idStr navName = aasName; + navName += ".navmesh"; + return navName; +} + +void idRecastNavMeshLocal::DebugDraw( idRenderWorld *renderWorld, int drawMode, int lifetime ) const { + if ( !renderWorld || !navMesh || drawMode <= 0 ) { + return; + } + + const idVec3 lift( 0.0f, 0.0f, 2.0f ); + + for ( int tileNum = 0; tileNum < navMesh->getMaxTiles(); tileNum++ ) { + const dtMeshTile *tile = navMesh->getTile( tileNum ); + if ( !tile || !tile->header ) { + continue; + } + + for ( int polyNum = 0; polyNum < tile->header->polyCount; polyNum++ ) { + const dtPoly *poly = &tile->polys[polyNum]; + if ( poly->getType() != DT_POLYTYPE_GROUND || poly->vertCount < 3 ) { + continue; + } + + for ( int edgeNum = 0; edgeNum < poly->vertCount; edgeNum++ ) { + const float *start = &tile->verts[poly->verts[edgeNum] * 3]; + const float *end = &tile->verts[poly->verts[( edgeNum + 1 ) % poly->vertCount] * 3]; + renderWorld->DebugLine( colorCyan, FromDetour( start ) + lift, FromDetour( end ) + lift, lifetime, false ); + } + } + } + + if ( drawMode < 2 ) { + return; + } + + for ( int i = 0; i < obstacles.Num(); i++ ) { + if ( obstacles[i].active ) { + renderWorld->DebugBounds( colorOrange, obstacles[i].bounds, vec3_origin, lifetime ); + } + } + for ( int i = 0; i < areaBlockers.Num(); i++ ) { + if ( areaBlockers[i].active ) { + renderWorld->DebugBounds( colorRed, areaBlockers[i].bounds, vec3_origin, lifetime ); + } + } +} + +bool idRecastNavMeshLocal::Load( const idStr &fileName, unsigned int mapFileCRC ) { + Shutdown(); + + idFile *file = fileSystem->OpenFileRead( fileName ); + if ( !file ) { + return false; + } + + int magic, version, dataSize; + unsigned int fileCRC; + file->ReadInt( magic ); + file->ReadInt( version ); + file->ReadUnsignedInt( fileCRC ); + file->ReadInt( dataSize ); + + if ( magic != RECAST_NAVMESH_MAGIC || version != RECAST_NAVMESH_VERSION || fileCRC != mapFileCRC || dataSize <= 0 ) { + fileSystem->CloseFile( file ); + return false; + } + + unsigned char *navData = (unsigned char *)dtAlloc( dataSize, DT_ALLOC_PERM ); + if ( !navData ) { + fileSystem->CloseFile( file ); + return false; + } + if ( file->Read( navData, dataSize ) != dataSize ) { + dtFree( navData ); + fileSystem->CloseFile( file ); + return false; + } + fileSystem->CloseFile( file ); + + navMesh = dtAllocNavMesh(); + if ( !navMesh ) { + dtFree( navData ); + return false; + } + if ( dtStatusFailed( navMesh->init( navData, dataSize, DT_TILE_FREE_DATA ) ) ) { + dtFree( navData ); + Shutdown(); + return false; + } + + navQuery = dtAllocNavMeshQuery(); + if ( !navQuery || dtStatusFailed( navQuery->init( navMesh, 4096 ) ) ) { + Shutdown(); + return false; + } + + crowd = dtAllocCrowd(); + if ( crowd ) { + const idBounds &bounds = settings.boundingBoxes[0]; + const float radius = max( idMath::Fabs( bounds[0].x ), idMath::Fabs( bounds[1].x ) ); + crowd->init( 128, radius, navMesh ); + } + + name = fileName; + crc = mapFileCRC; + return true; +} + +bool idRecastNavMeshLocal::BuildAndSave( const idMapFile *mapFile, const idStr &fileName, unsigned int mapFileCRC, const idAASSettings &aasSettings ) { + common->Printf( "Recast: building navmesh for %s -> %s\n", mapFile->GetName(), fileName.c_str() ); + common->Printf( "Recast: map geometry CRC %u\n", mapFileCRC ); + + recastBuildGeometry_t geom; + if ( !RecastCollectMapGeometry( geom, mapFile, aasSettings ) ) { + common->Warning( "Recast: no solid map geometry found for %s", mapFile->GetName() ); + return false; + } + + idDoomRecastContext ctx; + rcConfig cfg; + memset( &cfg, 0, sizeof( cfg ) ); + + const idBounds &agentBounds = aasSettings.boundingBoxes[0]; + const float agentRadius = max( idMath::Fabs( agentBounds[0].x ), idMath::Fabs( agentBounds[1].x ) ); + const float agentHeight = agentBounds[1].z - agentBounds[0].z; + + common->Printf( "Recast: agent bbox mins (%g %g %g), maxs (%g %g %g)\n", + agentBounds[0].x, agentBounds[0].y, agentBounds[0].z, + agentBounds[1].x, agentBounds[1].y, agentBounds[1].z ); + common->Printf( "Recast: agent radius %g, height %g, max step %g, min floor cos %g\n", + agentRadius, agentHeight, aasSettings.maxStepHeight, aasSettings.minFloorCos ); + + cfg.cs = RECAST_BUILD_CELL_SIZE; + cfg.ch = RECAST_BUILD_CELL_HEIGHT; + cfg.walkableSlopeAngle = RAD2DEG( idMath::ACos( aasSettings.minFloorCos ) ); + cfg.walkableHeight = (int)ceilf( agentHeight / cfg.ch ); + cfg.walkableClimb = Max( 1, (int)ceilf( aasSettings.maxStepHeight / cfg.ch ) ); + cfg.walkableRadius = (int)ceilf( agentRadius / cfg.cs ); + cfg.maxEdgeLen = (int)( 12.0f * 64.0f / cfg.cs ); + cfg.maxSimplificationError = 1.3f; + cfg.minRegionArea = rcSqr( 4 ); + cfg.mergeRegionArea = rcSqr( 12 ); + cfg.maxVertsPerPoly = 6; + cfg.detailSampleDist = cfg.cs * 6.0f; + cfg.detailSampleMaxError = cfg.ch; + + cfg.bmin[0] = geom.bounds[0].x; + cfg.bmin[1] = geom.bounds[0].z; + cfg.bmin[2] = geom.bounds[0].y; + cfg.bmax[0] = geom.bounds[1].x; + cfg.bmax[1] = geom.bounds[1].z; + cfg.bmax[2] = geom.bounds[1].y; + rcCalcGridSize( cfg.bmin, cfg.bmax, cfg.cs, &cfg.width, &cfg.height ); + + common->Printf( "Recast: config cellSize %g, cellHeight %g, grid %d x %d\n", cfg.cs, cfg.ch, cfg.width, cfg.height ); + common->Printf( "Recast: walkable height %d, climb %d, radius %d, slope %g degrees\n", + cfg.walkableHeight, cfg.walkableClimb, cfg.walkableRadius, cfg.walkableSlopeAngle ); + common->Printf( "Recast: region min %d, merge %d, max edge len %d, max verts/poly %d\n", + cfg.minRegionArea, cfg.mergeRegionArea, cfg.maxEdgeLen, cfg.maxVertsPerPoly ); + + rcHeightfield *heightfield = rcAllocHeightfield(); + rcCompactHeightfield *compactHeightfield = NULL; + rcContourSet *contourSet = NULL; + rcPolyMesh *polyMesh = NULL; + rcPolyMeshDetail *detailMesh = NULL; + unsigned char *triAreas = NULL; + unsigned char *navData = NULL; + int navDataSize = 0; + bool ok = false; + + const float *verts = geom.verts.Ptr(); + const int numVerts = geom.verts.Num() / 3; + const int *tris = geom.tris.Ptr(); + const int numTris = geom.tris.Num() / 3; + + common->Printf( "Recast: allocating heightfield\n" ); + if ( heightfield && + rcCreateHeightfield( &ctx, *heightfield, cfg.width, cfg.height, cfg.bmin, cfg.bmax, cfg.cs, cfg.ch ) ) { + common->Printf( "Recast: heightfield created\n" ); + triAreas = new unsigned char[numTris]; + memset( triAreas, 0, numTris * sizeof( unsigned char ) ); + common->Printf( "Recast: marking walkable triangles\n" ); + rcMarkWalkableTriangles( &ctx, cfg.walkableSlopeAngle, verts, numVerts, tris, numTris, triAreas ); + common->Printf( "Recast: rasterizing %d triangles\n", numTris ); + if ( rcRasterizeTriangles( &ctx, verts, numVerts, tris, triAreas, numTris, *heightfield, cfg.walkableClimb ) ) { + common->Printf( "Recast: filtering low-hanging obstacles, ledges, and low spans\n" ); + rcFilterLowHangingWalkableObstacles( &ctx, cfg.walkableClimb, *heightfield ); + rcFilterLedgeSpans( &ctx, cfg.walkableHeight, cfg.walkableClimb, *heightfield ); + rcFilterWalkableLowHeightSpans( &ctx, cfg.walkableHeight, *heightfield ); + + common->Printf( "Recast: building compact heightfield\n" ); + compactHeightfield = rcAllocCompactHeightfield(); + if ( compactHeightfield && + rcBuildCompactHeightfield( &ctx, cfg.walkableHeight, cfg.walkableClimb, *heightfield, *compactHeightfield ) && + rcErodeWalkableArea( &ctx, cfg.walkableRadius, *compactHeightfield ) && + rcBuildDistanceField( &ctx, *compactHeightfield ) && + rcBuildRegions( &ctx, *compactHeightfield, 0, cfg.minRegionArea, cfg.mergeRegionArea ) ) { + common->Printf( "Recast: compact heightfield built, walkable spans %d\n", compactHeightfield->spanCount ); + common->Printf( "Recast: building contours and poly mesh\n" ); + contourSet = rcAllocContourSet(); + polyMesh = rcAllocPolyMesh(); + detailMesh = rcAllocPolyMeshDetail(); + if ( contourSet && polyMesh && detailMesh && + rcBuildContours( &ctx, *compactHeightfield, cfg.maxSimplificationError, cfg.maxEdgeLen, *contourSet ) && + rcBuildPolyMesh( &ctx, *contourSet, cfg.maxVertsPerPoly, *polyMesh ) && + rcBuildPolyMeshDetail( &ctx, *polyMesh, *compactHeightfield, cfg.detailSampleDist, cfg.detailSampleMaxError, *detailMesh ) ) { + common->Printf( "Recast: contours %d, poly mesh %d verts / %d polys, detail %d verts / %d tris\n", + contourSet->nconts, polyMesh->nverts, polyMesh->npolys, detailMesh->nverts, detailMesh->ntris ); + for ( int i = 0; i < polyMesh->npolys; i++ ) { + if ( polyMesh->areas[i] == RC_WALKABLE_AREA ) { + polyMesh->areas[i] = 0; + } + polyMesh->flags[i] = RECAST_POLYFLAGS_WALK; + } + + dtNavMeshCreateParams params; + memset( ¶ms, 0, sizeof( params ) ); + params.verts = polyMesh->verts; + params.vertCount = polyMesh->nverts; + params.polys = polyMesh->polys; + params.polyAreas = polyMesh->areas; + params.polyFlags = polyMesh->flags; + params.polyCount = polyMesh->npolys; + params.nvp = polyMesh->nvp; + params.detailMeshes = detailMesh->meshes; + params.detailVerts = detailMesh->verts; + params.detailVertsCount = detailMesh->nverts; + params.detailTris = detailMesh->tris; + params.detailTriCount = detailMesh->ntris; + params.walkableHeight = agentHeight; + params.walkableRadius = agentRadius; + params.walkableClimb = aasSettings.maxStepHeight; + rcVcopy( params.bmin, polyMesh->bmin ); + rcVcopy( params.bmax, polyMesh->bmax ); + params.cs = cfg.cs; + params.ch = cfg.ch; + params.buildBvTree = true; + + common->Printf( "Recast: creating Detour navmesh data\n" ); + ok = dtCreateNavMeshData( ¶ms, &navData, &navDataSize ); + if ( ok ) { + common->Printf( "Recast: Detour navmesh data created, %d bytes\n", navDataSize ); + } else { + common->Warning( "Recast: dtCreateNavMeshData failed for %s", fileName.c_str() ); + } + } else { + common->Warning( "Recast: failed to build contours/poly mesh/detail mesh for %s", fileName.c_str() ); + } + } else { + common->Warning( "Recast: failed to build compact heightfield/regions for %s", fileName.c_str() ); + } + } else { + common->Warning( "Recast: failed to rasterize triangles for %s", fileName.c_str() ); + } + } else { + common->Warning( "Recast: failed to allocate/create heightfield for %s", fileName.c_str() ); + } + + if ( ok && navData && navDataSize > 0 ) { + common->Printf( "Recast: writing navmesh file %s\n", fileName.c_str() ); + idFile *out = fileSystem->OpenFileWrite( fileName, "fs_devpath" ); + if ( out ) { + out->WriteInt( RECAST_NAVMESH_MAGIC ); + out->WriteInt( RECAST_NAVMESH_VERSION ); + out->WriteUnsignedInt( mapFileCRC ); + out->WriteInt( navDataSize ); + out->Write( navData, navDataSize ); + fileSystem->CloseFile( out ); + common->Printf( "Wrote Recast navmesh %s (%d bytes, %d polys)\n", fileName.c_str(), navDataSize, polyMesh ? polyMesh->npolys : 0 ); + } else { + common->Warning( "Recast: could not open %s for writing", fileName.c_str() ); + ok = false; + } + } + + if ( navData ) { + dtFree( navData ); + } + delete[] triAreas; + if ( detailMesh ) { + rcFreePolyMeshDetail( detailMesh ); + } + if ( polyMesh ) { + rcFreePolyMesh( polyMesh ); + } + if ( contourSet ) { + rcFreeContourSet( contourSet ); + } + if ( compactHeightfield ) { + rcFreeCompactHeightfield( compactHeightfield ); + } + if ( heightfield ) { + rcFreeHeightField( heightfield ); + } + + return ok; +} + +bool idRecastNavMeshLocal::BuildMapFile( const idStr &mapName, const idStr &aasType ) { + common->Printf( "Recast: requested build map '%s' type '%s'\n", mapName.c_str(), aasType.c_str() ); + + idStr normalizedMapName = mapName; + normalizedMapName.BackSlashesToSlashes(); + if ( normalizedMapName.Icmpn( "maps/", 5 ) != 0 ) { + normalizedMapName = "maps/" + normalizedMapName; + } + normalizedMapName.SetFileExtension( ".map" ); + + common->Printf( "Recast: normalized map path %s\n", normalizedMapName.c_str() ); + common->Printf( "Recast: parsing map file\n" ); + + idMapFile mapFile; + if ( !mapFile.Parse( normalizedMapName ) ) { + common->Warning( "Recast: could not parse %s", normalizedMapName.c_str() ); + return false; + } + + common->Printf( "Recast: parsed %s with %d entities, geometry CRC %u\n", + mapFile.GetName(), mapFile.GetNumEntities(), mapFile.GetGeometryCRC() ); + + common->Printf( "Recast: loading AAS settings entityDef '%s'\n", aasType.c_str() ); + const idDeclEntityDef *settingsDecl = static_cast( declManager->FindType( DECL_ENTITYDEF, aasType, false ) ); + const idDict *settingsDict = settingsDecl ? &settingsDecl->dict : NULL; + if ( !settingsDict ) { + common->Warning( "Recast: unknown AAS/nav type '%s'", aasType.c_str() ); + return false; + } + + idAASSettings settings; + settings.FromDict( aasType, settingsDict ); + common->Printf( "Recast: settings loaded: extension %s, %d bbox(es), usePatches %s\n", + settings.fileExtension.c_str(), settings.numBoundingBoxes, settings.usePatches ? "true" : "false" ); + + idStr output = mapFile.GetName(); + output.SetFileExtension( aasType ); + output = NavFileNameForAASName( output ); + common->Printf( "Recast: output navmesh path %s\n", output.c_str() ); + + idRecastNavMeshLocal builder; + return builder.BuildAndSave( &mapFile, output, mapFile.GetGeometryCRC(), settings ); +} + +void idRecastNavMeshLocal::ToDetour( const idVec3 &in, float out[3] ) { + out[0] = in.x; + out[1] = in.z; + out[2] = in.y; +} + +idVec3 idRecastNavMeshLocal::FromDetour( const float in[3] ) { + return idVec3( in[0], in[2], in[1] ); +} + +bool idRecastNavMeshLocal::FindNearestPoly( const idVec3 &origin, const idBounds &searchBounds, dtPolyRef &ref, idVec3 *nearest ) const { + if ( !IsLoaded() || PointInsideBlocker( origin ) ) { + ref = 0; + return false; + } + + float center[3], extents[3], nearestPoint[3]; + ToDetour( origin, center ); + extents[0] = max( idMath::Fabs( searchBounds[0].x ), idMath::Fabs( searchBounds[1].x ) ); + extents[1] = max( idMath::Fabs( searchBounds[0].z ), idMath::Fabs( searchBounds[1].z ) ); + extents[2] = max( idMath::Fabs( searchBounds[0].y ), idMath::Fabs( searchBounds[1].y ) ); + if ( extents[0] <= 0.0f ) { + extents[0] = 64.0f; + } + if ( extents[1] <= 0.0f ) { + extents[1] = 96.0f; + } + if ( extents[2] <= 0.0f ) { + extents[2] = 64.0f; + } + + dtQueryFilter filter; + filter.setIncludeFlags( RECAST_POLYFLAGS_WALK ); + filter.setExcludeFlags( 0 ); + + if ( dtStatusFailed( navQuery->findNearestPoly( center, extents, &filter, &ref, nearestPoint ) ) || ref == 0 ) { + return false; + } + + if ( nearest ) { + *nearest = FromDetour( nearestPoint ); + } + return true; +} + +int idRecastNavMeshLocal::AreaForRef( dtPolyRef ref ) const { + if ( ref == 0 ) { + return 0; + } + for ( int i = 0; i < polyRefs.Num(); i++ ) { + if ( polyRefs[i] == ref ) { + return i + 1; + } + } + return polyRefs.Append( ref ) + 1; +} + +dtPolyRef idRecastNavMeshLocal::RefForArea( int areaNum ) const { + if ( areaNum <= 0 || areaNum > polyRefs.Num() ) { + return 0; + } + return polyRefs[areaNum - 1]; +} + +int idRecastNavMeshLocal::PointAreaNum( const idVec3 &origin ) const { + dtPolyRef ref; + if ( !FindNearestPoly( origin, settings.boundingBoxes[0], ref, NULL ) ) { + return 0; + } + return AreaForRef( ref ); +} + +int idRecastNavMeshLocal::PointReachableAreaNum( const idVec3 &origin, const idBounds &searchBounds, const int areaFlags ) const { + dtPolyRef ref; + if ( !FindNearestPoly( origin, searchBounds, ref, NULL ) ) { + return 0; + } + return AreaForRef( ref ); +} + +int idRecastNavMeshLocal::BoundsReachableAreaNum( const idBounds &bounds, const int areaFlags ) const { + const idVec3 center = bounds.GetCenter(); + idBounds searchBounds; + searchBounds[0] = bounds[0] - center; + searchBounds[1] = bounds[1] - center; + return PointReachableAreaNum( center, searchBounds, areaFlags ); +} + +void idRecastNavMeshLocal::PushPointIntoAreaNum( int areaNum, idVec3 &origin ) const { + const dtPolyRef ref = RefForArea( areaNum ); + if ( ref == 0 || !IsLoaded() ) { + return; + } + float pos[3], nearestPoint[3]; + ToDetour( origin, pos ); + if ( dtStatusSucceed( navQuery->closestPointOnPoly( ref, pos, nearestPoint, NULL ) ) ) { + origin = FromDetour( nearestPoint ); + } +} + +idVec3 idRecastNavMeshLocal::AreaCenter( int areaNum ) const { + const dtPolyRef ref = RefForArea( areaNum ); + if ( ref == 0 || !navMesh ) { + return vec3_origin; + } + + const dtMeshTile *tile = NULL; + const dtPoly *poly = NULL; + if ( dtStatusFailed( navMesh->getTileAndPolyByRef( ref, &tile, &poly ) ) || !tile || !poly ) { + return vec3_origin; + } + + float center[3] = { 0.0f, 0.0f, 0.0f }; + for ( int i = 0; i < poly->vertCount; i++ ) { + const float *v = &tile->verts[poly->verts[i] * 3]; + center[0] += v[0]; + center[1] += v[1]; + center[2] += v[2]; + } + const float inv = 1.0f / poly->vertCount; + center[0] *= inv; + center[1] *= inv; + center[2] *= inv; + return FromDetour( center ); +} + +int idRecastNavMeshLocal::AreaFlags( int areaNum ) const { + return AREA_REACHABLE_WALK; +} + +int idRecastNavMeshLocal::AreaTravelFlags( int areaNum ) const { + return TFL_WALK; +} + +bool idRecastNavMeshLocal::Trace( aasTrace_t &trace, const idVec3 &start, const idVec3 &end ) const { + idVec3 endPos; + int endAreaNum; + const int startArea = PointAreaNum( start ); + const bool valid = PathValid( startArea, start, 0, end, TFL_WALK, endPos, endAreaNum ); + trace.fraction = valid ? 1.0f : 0.0f; + trace.endpos = endPos; + trace.lastAreaNum = endAreaNum; + trace.numAreas = endAreaNum > 0 ? 1 : 0; + if ( trace.numAreas > 0 && trace.areas && trace.points && trace.maxAreas > 0 ) { + trace.areas[0] = endAreaNum; + trace.points[0] = endPos; + } + return !valid; +} + +bool idRecastNavMeshLocal::SetAreaState( const idBounds &bounds, const int areaContents, bool disabled ) { + if ( disabled ) { + for ( int i = 0; i < areaBlockers.Num(); i++ ) { + if ( areaBlockers[i].active && + ( areaBlockers[i].areaContents & areaContents ) != 0 && + areaBlockers[i].bounds.Expand( RECAST_AREA_BLOCKER_MATCH_EXPAND ).IntersectsBounds( bounds ) ) { + areaBlockers[i].bounds = bounds; + areaBlockers[i].areaContents = areaContents; + return true; + } + } + + recastBoundsBlocker_t blocker; + blocker.bounds = bounds; + blocker.areaContents = areaContents; + blocker.active = true; + for ( int i = 0; i < areaBlockers.Num(); i++ ) { + if ( !areaBlockers[i].active ) { + areaBlockers[i] = blocker; + return true; + } + } + areaBlockers.Append( blocker ); + } else { + for ( int i = 0; i < areaBlockers.Num(); i++ ) { + if ( areaBlockers[i].active && + ( areaBlockers[i].areaContents & areaContents ) != 0 && + areaBlockers[i].bounds.Expand( RECAST_AREA_BLOCKER_MATCH_EXPAND ).IntersectsBounds( bounds ) ) { + areaBlockers[i].active = false; + } + } + } + return true; +} + +recastObstacleHandle_t idRecastNavMeshLocal::AddObstacle( const idBounds &bounds ) { + recastBoundsBlocker_t blocker; + blocker.bounds = bounds; + blocker.areaContents = AREACONTENTS_OBSTACLE; + blocker.active = true; + + for ( int i = 0; i < obstacles.Num(); i++ ) { + if ( !obstacles[i].active ) { + obstacles[i] = blocker; + return i; + } + } + return obstacles.Append( blocker ); +} + +void idRecastNavMeshLocal::RemoveObstacle( const recastObstacleHandle_t handle ) { + if ( handle >= 0 && handle < obstacles.Num() ) { + obstacles[handle].active = false; + } +} + +void idRecastNavMeshLocal::RemoveAllObstacles( void ) { + obstacles.Clear(); + areaBlockers.Clear(); +} + +bool idRecastNavMeshLocal::LineHitsBlocker( const idVec3 &start, const idVec3 &end ) const { + for ( int i = 0; i < obstacles.Num(); i++ ) { + if ( obstacles[i].active && obstacles[i].bounds.LineIntersection( start, end ) ) { + return true; + } + } + for ( int i = 0; i < areaBlockers.Num(); i++ ) { + if ( areaBlockers[i].active && areaBlockers[i].bounds.LineIntersection( start, end ) ) { + return true; + } + } + return false; +} + +bool idRecastNavMeshLocal::PointInsideBlocker( const idVec3 &origin ) const { + for ( int i = 0; i < obstacles.Num(); i++ ) { + if ( obstacles[i].active && obstacles[i].bounds.ContainsPoint( origin ) ) { + return true; + } + } + for ( int i = 0; i < areaBlockers.Num(); i++ ) { + if ( areaBlockers[i].active && areaBlockers[i].bounds.ContainsPoint( origin ) ) { + return true; + } + } + return false; +} + +bool idRecastNavMeshLocal::FindPathRefs( int areaNum, const idVec3 &origin, int goalAreaNum, const idVec3 &goalOrigin, int travelFlags, dtPolyRef *pathRefs, int &numPathRefs, const int maxPathRefs ) const { + numPathRefs = 0; + if ( !IsLoaded() || PointInsideBlocker( origin ) || PointInsideBlocker( goalOrigin ) ) { + return false; + } + + dtPolyRef startRef = RefForArea( areaNum ); + dtPolyRef endRef = RefForArea( goalAreaNum ); + idVec3 nearest; + if ( startRef == 0 ) { + FindNearestPoly( origin, settings.boundingBoxes[0], startRef, &nearest ); + } + if ( endRef == 0 ) { + FindNearestPoly( goalOrigin, settings.boundingBoxes[0], endRef, &nearest ); + } + if ( startRef == 0 || endRef == 0 ) { + return false; + } + + float start[3], end[3]; + ToDetour( origin, start ); + ToDetour( goalOrigin, end ); + + dtQueryFilter filter; + filter.setIncludeFlags( RECAST_POLYFLAGS_WALK ); + filter.setExcludeFlags( 0 ); + return dtStatusSucceed( navQuery->findPath( startRef, endRef, start, end, &filter, pathRefs, &numPathRefs, maxPathRefs ) ) && numPathRefs > 0; +} + +int idRecastNavMeshLocal::TravelTimeToGoalArea( int areaNum, const idVec3 &origin, int goalAreaNum, int travelFlags ) const { + dtPolyRef pathRefs[MAX_RECAST_PATH_POLYS]; + int numPathRefs; + const idVec3 goalOrigin = AreaCenter( goalAreaNum ); + if ( !FindPathRefs( areaNum, origin, goalAreaNum, goalOrigin, travelFlags, pathRefs, numPathRefs, MAX_RECAST_PATH_POLYS ) ) { + return 0; + } + const float dist = ( goalOrigin - origin ).Length(); + return idMath::Ftoi( dist * 100.0f / 300.0f ); +} + +bool idRecastNavMeshLocal::RouteToGoalArea( int areaNum, const idVec3 origin, int goalAreaNum, int travelFlags, recastPath_t &route ) const { + recastPath_t path; + const idVec3 goalOrigin = AreaCenter( goalAreaNum ); + if ( !PathToGoal( path, areaNum, origin, goalAreaNum, goalOrigin, travelFlags ) ) { + route.travelTime = 0; + route.moveAreaNum = 0; + route.moveGoal = origin; + route.secondaryGoal = origin; + return false; + } + route = path; + route.travelTime = idMath::Ftoi( ( path.moveGoal - origin ).Length() * 100.0f / 300.0f ); + return true; +} + +bool idRecastNavMeshLocal::PathToGoal( recastPath_t &path, int areaNum, const idVec3 &origin, int goalAreaNum, const idVec3 &goalOrigin, int travelFlags ) const { + path.moveGoal = origin; + path.moveAreaNum = areaNum; + path.secondaryGoal = origin; + path.travelTime = 0; + + dtPolyRef pathRefs[MAX_RECAST_PATH_POLYS]; + int numPathRefs; + if ( !FindPathRefs( areaNum, origin, goalAreaNum, goalOrigin, travelFlags, pathRefs, numPathRefs, MAX_RECAST_PATH_POLYS ) ) { + return false; + } + + float start[3], end[3], straightPath[MAX_RECAST_PATH_POLYS * 3]; + unsigned char straightFlags[MAX_RECAST_PATH_POLYS]; + dtPolyRef straightRefs[MAX_RECAST_PATH_POLYS]; + int numStraight = 0; + ToDetour( origin, start ); + ToDetour( goalOrigin, end ); + + dtQueryFilter filter; + filter.setIncludeFlags( RECAST_POLYFLAGS_WALK ); + filter.setExcludeFlags( 0 ); + + if ( dtStatusFailed( navQuery->findStraightPath( start, end, pathRefs, numPathRefs, straightPath, straightFlags, straightRefs, &numStraight, MAX_RECAST_PATH_POLYS ) ) || numStraight <= 0 ) { + return false; + } + + const int steerIndex = numStraight > 1 ? 1 : 0; + path.moveGoal = FromDetour( &straightPath[steerIndex * 3] ); + path.moveAreaNum = AreaForRef( straightRefs[steerIndex] ? straightRefs[steerIndex] : pathRefs[numPathRefs - 1] ); + path.secondaryGoal = goalOrigin; + path.travelTime = idMath::Ftoi( ( path.moveGoal - origin ).Length() * 100.0f / 300.0f ); + if ( LineHitsBlocker( origin, path.moveGoal ) ) { + return false; + } + return true; +} + +bool idRecastNavMeshLocal::PathValid( int areaNum, const idVec3 &origin, int goalAreaNum, const idVec3 &goalOrigin, int travelFlags, idVec3 &endPos, int &endAreaNum ) const { + if ( LineHitsBlocker( origin, goalOrigin ) ) { + endPos = origin; + endAreaNum = areaNum; + return false; + } + + dtPolyRef startRef = RefForArea( areaNum ); + idVec3 nearest; + if ( startRef == 0 && !FindNearestPoly( origin, settings.boundingBoxes[0], startRef, &nearest ) ) { + endPos = origin; + endAreaNum = 0; + return false; + } + + float start[3], end[3], hitNormal[3]; + float t = 0.0f; + ToDetour( origin, start ); + ToDetour( goalOrigin, end ); + + dtQueryFilter filter; + filter.setIncludeFlags( RECAST_POLYFLAGS_WALK ); + filter.setExcludeFlags( 0 ); + + dtPolyRef visited[MAX_RECAST_PATH_POLYS]; + int numVisited = 0; + if ( dtStatusFailed( navQuery->raycast( startRef, start, end, &filter, &t, hitNormal, visited, &numVisited, MAX_RECAST_PATH_POLYS ) ) ) { + endPos = origin; + endAreaNum = areaNum; + return false; + } + + if ( t > 1.0f ) { + t = 1.0f; + } + endPos = origin + ( goalOrigin - origin ) * t; + endAreaNum = numVisited > 0 ? AreaForRef( visited[numVisited - 1] ) : areaNum; + return t >= 1.0f; +} + +bool idRecastNavMeshLocal::PathAreaList( int areaNum, const idVec3 &origin, int goalAreaNum, const idVec3 &goalOrigin, int travelFlags, int *areas, int &numAreas, int maxAreas ) const { + numAreas = 0; + dtPolyRef pathRefs[MAX_RECAST_PATH_POLYS]; + int numPathRefs; + if ( maxAreas <= 0 || !areas || !FindPathRefs( areaNum, origin, goalAreaNum, goalOrigin, travelFlags, pathRefs, numPathRefs, MAX_RECAST_PATH_POLYS ) ) { + return false; + } + + for ( int i = 0; i < numPathRefs && numAreas < maxAreas; i++ ) { + areas[numAreas++] = AreaForRef( pathRefs[i] ); + } + return numAreas > 0; +} + +void idRecastNavMeshLocal::Stats( void ) const { + int activeObstacles = 0; + int activeBlockers = 0; + + for ( int i = 0; i < obstacles.Num(); i++ ) { + if ( obstacles[i].active ) { + activeObstacles++; + } + } + for ( int i = 0; i < areaBlockers.Num(); i++ ) { + if ( areaBlockers[i].active ) { + activeBlockers++; + } + } + + common->Printf( "[%s]\n", name.c_str() ); + common->Printf( "Recast/Detour navmesh loaded: %d cached poly refs, %d active obstacles, %d active blockers\n", polyRefs.Num(), activeObstacles, activeBlockers ); + common->Printf( "DetourCrowd avoidance: %s\n", crowd ? "initialized" : "not available" ); +} + +class idRecastNavigationManagerLocal : public idRecastNavigationManager { +public: + virtual ~idRecastNavigationManagerLocal( void ); + + virtual recastNavHandle_t Alloc( void ); + virtual void Free( recastNavHandle_t handle ); + + virtual bool Load( recastNavHandle_t handle, const char *aasName, const char *fileName, unsigned int mapFileCRC ); + virtual bool BuildMapFile( const char *mapName, const char *aasType ); + virtual void Stats( recastNavHandle_t handle ) const; + virtual void DebugDraw( recastNavHandle_t handle, idRenderWorld *renderWorld, int drawMode, int lifetime ) const; + + virtual bool IsLoaded( recastNavHandle_t handle ) const; + virtual const char * GetName( recastNavHandle_t handle ) const; + virtual int NumPolys( recastNavHandle_t handle ) const; + virtual const idAASSettings *GetSettings( recastNavHandle_t handle ) const; + + virtual int PointAreaNum( recastNavHandle_t handle, const idVec3 &origin ) const; + virtual int PointReachableAreaNum( recastNavHandle_t handle, const idVec3 &origin, const idBounds &searchBounds, const int areaFlags ) const; + virtual int BoundsReachableAreaNum( recastNavHandle_t handle, const idBounds &bounds, const int areaFlags ) const; + virtual void PushPointIntoAreaNum( recastNavHandle_t handle, int areaNum, idVec3 &origin ) const; + virtual idVec3 AreaCenter( recastNavHandle_t handle, int areaNum ) const; + virtual int AreaFlags( recastNavHandle_t handle, int areaNum ) const; + virtual int AreaTravelFlags( recastNavHandle_t handle, int areaNum ) const; + virtual bool Trace( recastNavHandle_t handle, aasTrace_t &trace, const idVec3 &start, const idVec3 &end ) const; + + virtual bool SetAreaState( recastNavHandle_t handle, const idBounds &bounds, const int areaContents, bool disabled ); + virtual recastObstacleHandle_t AddObstacle( recastNavHandle_t handle, const idBounds &bounds ); + virtual void RemoveObstacle( recastNavHandle_t handle, const recastObstacleHandle_t obstacleHandle ); + virtual void RemoveAllObstacles( recastNavHandle_t handle ); + + virtual int TravelTimeToGoalArea( recastNavHandle_t handle, int areaNum, const idVec3 &origin, int goalAreaNum, int travelFlags ) const; + virtual bool RouteToGoalArea( recastNavHandle_t handle, int areaNum, const idVec3 origin, int goalAreaNum, int travelFlags, recastPath_t &route ) const; + virtual bool PathToGoal( recastNavHandle_t handle, recastPath_t &path, int areaNum, const idVec3 &origin, int goalAreaNum, const idVec3 &goalOrigin, int travelFlags ) const; + virtual bool PathValid( recastNavHandle_t handle, int areaNum, const idVec3 &origin, int goalAreaNum, const idVec3 &goalOrigin, int travelFlags, idVec3 &endPos, int &endAreaNum ) const; + virtual bool PathAreaList( recastNavHandle_t handle, int areaNum, const idVec3 &origin, int goalAreaNum, const idVec3 &goalOrigin, int travelFlags, int *areas, int &numAreas, int maxAreas ) const; + +private: + idRecastNavMeshLocal * Nav( recastNavHandle_t handle ) const; + + idList navMeshes; +}; + +idRecastNavigationManagerLocal RecastNavigationManagerLocal; +idRecastNavigationManager *RecastNavigationManager = &RecastNavigationManagerLocal; + +idRecastNavigationManagerLocal::~idRecastNavigationManagerLocal( void ) { + for ( int i = 0; i < navMeshes.Num(); i++ ) { + delete navMeshes[i]; + } + navMeshes.Clear(); +} + +idRecastNavMeshLocal *idRecastNavigationManagerLocal::Nav( recastNavHandle_t handle ) const { + if ( handle < 0 || handle >= navMeshes.Num() ) { + return NULL; + } + return navMeshes[handle]; +} + +recastNavHandle_t idRecastNavigationManagerLocal::Alloc( void ) { + for ( int i = 0; i < navMeshes.Num(); i++ ) { + if ( navMeshes[i] == NULL ) { + navMeshes[i] = new idRecastNavMeshLocal; + return i; + } + } + return navMeshes.Append( new idRecastNavMeshLocal ); +} + +void idRecastNavigationManagerLocal::Free( recastNavHandle_t handle ) { + idRecastNavMeshLocal *nav = Nav( handle ); + if ( !nav ) { + return; + } + delete nav; + navMeshes[handle] = NULL; +} + +bool idRecastNavigationManagerLocal::Load( recastNavHandle_t handle, const char *aasName, const char *fileName, unsigned int mapFileCRC ) { + idRecastNavMeshLocal *nav = Nav( handle ); + if ( !nav ) { + return false; + } + + idStr aasType; + idStr aasNameStr = aasName; + aasNameStr.ExtractFileExtension( aasType ); + if ( aasType.IsEmpty() ) { + return false; + } + + const idDeclEntityDef *settingsDecl = static_cast( declManager->FindType( DECL_ENTITYDEF, aasType, false ) ); + const idDict *settingsDict = settingsDecl ? &settingsDecl->dict : NULL; + if ( !settingsDict ) { + common->Warning( "Recast: unknown AAS/nav type '%s'", aasType.c_str() ); + return false; + } + + idAASSettings settings; + settings.FromDict( aasType, settingsDict ); + nav->InitForAAS( aasNameStr, settings, mapFileCRC ); + if ( !nav->Load( fileName, mapFileCRC ) ) { + nav->Shutdown(); + return false; + } + return true; +} + +bool idRecastNavigationManagerLocal::BuildMapFile( const char *mapName, const char *aasType ) { + return idRecastNavMeshLocal::BuildMapFile( mapName, aasType ); +} + +void idRecastNavigationManagerLocal::Stats( recastNavHandle_t handle ) const { + const idRecastNavMeshLocal *nav = Nav( handle ); + if ( nav ) { + nav->Stats(); + } +} + +void idRecastNavigationManagerLocal::DebugDraw( recastNavHandle_t handle, idRenderWorld *renderWorld, int drawMode, int lifetime ) const { + const idRecastNavMeshLocal *nav = Nav( handle ); + if ( nav ) { + nav->DebugDraw( renderWorld, drawMode, lifetime ); + } +} + +bool idRecastNavigationManagerLocal::IsLoaded( recastNavHandle_t handle ) const { + const idRecastNavMeshLocal *nav = Nav( handle ); + return nav && nav->IsLoaded(); +} + +const char *idRecastNavigationManagerLocal::GetName( recastNavHandle_t handle ) const { + const idRecastNavMeshLocal *nav = Nav( handle ); + return nav ? nav->GetName().c_str() : ""; +} + +int idRecastNavigationManagerLocal::NumPolys( recastNavHandle_t handle ) const { + const idRecastNavMeshLocal *nav = Nav( handle ); + return nav ? nav->NumPolys() : 0; +} + +const idAASSettings *idRecastNavigationManagerLocal::GetSettings( recastNavHandle_t handle ) const { + const idRecastNavMeshLocal *nav = Nav( handle ); + return nav ? nav->GetSettings() : NULL; +} + +int idRecastNavigationManagerLocal::PointAreaNum( recastNavHandle_t handle, const idVec3 &origin ) const { + const idRecastNavMeshLocal *nav = Nav( handle ); + return nav ? nav->PointAreaNum( origin ) : 0; +} + +int idRecastNavigationManagerLocal::PointReachableAreaNum( recastNavHandle_t handle, const idVec3 &origin, const idBounds &searchBounds, const int areaFlags ) const { + const idRecastNavMeshLocal *nav = Nav( handle ); + return nav ? nav->PointReachableAreaNum( origin, searchBounds, areaFlags ) : 0; +} + +int idRecastNavigationManagerLocal::BoundsReachableAreaNum( recastNavHandle_t handle, const idBounds &bounds, const int areaFlags ) const { + const idRecastNavMeshLocal *nav = Nav( handle ); + return nav ? nav->BoundsReachableAreaNum( bounds, areaFlags ) : 0; +} + +void idRecastNavigationManagerLocal::PushPointIntoAreaNum( recastNavHandle_t handle, int areaNum, idVec3 &origin ) const { + const idRecastNavMeshLocal *nav = Nav( handle ); + if ( nav ) { + nav->PushPointIntoAreaNum( areaNum, origin ); + } +} + +idVec3 idRecastNavigationManagerLocal::AreaCenter( recastNavHandle_t handle, int areaNum ) const { + const idRecastNavMeshLocal *nav = Nav( handle ); + return nav ? nav->AreaCenter( areaNum ) : vec3_origin; +} + +int idRecastNavigationManagerLocal::AreaFlags( recastNavHandle_t handle, int areaNum ) const { + const idRecastNavMeshLocal *nav = Nav( handle ); + return nav ? nav->AreaFlags( areaNum ) : 0; +} + +int idRecastNavigationManagerLocal::AreaTravelFlags( recastNavHandle_t handle, int areaNum ) const { + const idRecastNavMeshLocal *nav = Nav( handle ); + return nav ? nav->AreaTravelFlags( areaNum ) : TFL_INVALID; +} + +bool idRecastNavigationManagerLocal::Trace( recastNavHandle_t handle, aasTrace_t &trace, const idVec3 &start, const idVec3 &end ) const { + const idRecastNavMeshLocal *nav = Nav( handle ); + return nav ? nav->Trace( trace, start, end ) : false; +} + +bool idRecastNavigationManagerLocal::SetAreaState( recastNavHandle_t handle, const idBounds &bounds, const int areaContents, bool disabled ) { + idRecastNavMeshLocal *nav = Nav( handle ); + return nav ? nav->SetAreaState( bounds, areaContents, disabled ) : false; +} + +recastObstacleHandle_t idRecastNavigationManagerLocal::AddObstacle( recastNavHandle_t handle, const idBounds &bounds ) { + idRecastNavMeshLocal *nav = Nav( handle ); + return nav ? nav->AddObstacle( bounds ) : -1; +} + +void idRecastNavigationManagerLocal::RemoveObstacle( recastNavHandle_t handle, const recastObstacleHandle_t obstacleHandle ) { + idRecastNavMeshLocal *nav = Nav( handle ); + if ( nav ) { + nav->RemoveObstacle( obstacleHandle ); + } +} + +void idRecastNavigationManagerLocal::RemoveAllObstacles( recastNavHandle_t handle ) { + idRecastNavMeshLocal *nav = Nav( handle ); + if ( nav ) { + nav->RemoveAllObstacles(); + } +} + +int idRecastNavigationManagerLocal::TravelTimeToGoalArea( recastNavHandle_t handle, int areaNum, const idVec3 &origin, int goalAreaNum, int travelFlags ) const { + const idRecastNavMeshLocal *nav = Nav( handle ); + return nav ? nav->TravelTimeToGoalArea( areaNum, origin, goalAreaNum, travelFlags ) : 0; +} + +bool idRecastNavigationManagerLocal::RouteToGoalArea( recastNavHandle_t handle, int areaNum, const idVec3 origin, int goalAreaNum, int travelFlags, recastPath_t &route ) const { + const idRecastNavMeshLocal *nav = Nav( handle ); + return nav ? nav->RouteToGoalArea( areaNum, origin, goalAreaNum, travelFlags, route ) : false; +} + +bool idRecastNavigationManagerLocal::PathToGoal( recastNavHandle_t handle, recastPath_t &path, int areaNum, const idVec3 &origin, int goalAreaNum, const idVec3 &goalOrigin, int travelFlags ) const { + const idRecastNavMeshLocal *nav = Nav( handle ); + return nav ? nav->PathToGoal( path, areaNum, origin, goalAreaNum, goalOrigin, travelFlags ) : false; +} + +bool idRecastNavigationManagerLocal::PathValid( recastNavHandle_t handle, int areaNum, const idVec3 &origin, int goalAreaNum, const idVec3 &goalOrigin, int travelFlags, idVec3 &endPos, int &endAreaNum ) const { + const idRecastNavMeshLocal *nav = Nav( handle ); + return nav ? nav->PathValid( areaNum, origin, goalAreaNum, goalOrigin, travelFlags, endPos, endAreaNum ) : false; +} + +bool idRecastNavigationManagerLocal::PathAreaList( recastNavHandle_t handle, int areaNum, const idVec3 &origin, int goalAreaNum, const idVec3 &goalOrigin, int travelFlags, int *areas, int &numAreas, int maxAreas ) const { + const idRecastNavMeshLocal *nav = Nav( handle ); + return nav ? nav->PathAreaList( areaNum, origin, goalAreaNum, goalOrigin, travelFlags, areas, numAreas, maxAreas ) : false; +} diff --git a/neo/engine/tools/compilers/recast/RecastNavigation.h b/neo/engine/tools/compilers/recast/RecastNavigation.h new file mode 100644 index 00000000..221f0c6e --- /dev/null +++ b/neo/engine/tools/compilers/recast/RecastNavigation.h @@ -0,0 +1,66 @@ +/* +=========================================================================== + +IceTech GPL Source Code +Copyright (C) 2026 Justin Marshall + +=========================================================================== +*/ + +#ifndef __RECAST_NAVIGATION_H__ +#define __RECAST_NAVIGATION_H__ + +typedef int recastNavHandle_t; +typedef int recastObstacleHandle_t; + +static const recastNavHandle_t RECAST_NAV_HANDLE_INVALID = -1; +static const int MAX_RECAST_PATH_AREAS = 256; + +typedef struct recastPath_s { + idVec3 moveGoal; + idVec3 secondaryGoal; + int moveAreaNum; + int travelTime; +} recastPath_t; + +class idRecastNavigationManager { +public: + virtual ~idRecastNavigationManager( void ) {} + + virtual recastNavHandle_t Alloc( void ) = 0; + virtual void Free( recastNavHandle_t handle ) = 0; + + virtual bool Load( recastNavHandle_t handle, const char *aasName, const char *fileName, unsigned int mapFileCRC ) = 0; + virtual bool BuildMapFile( const char *mapName, const char *aasType ) = 0; + virtual void Stats( recastNavHandle_t handle ) const = 0; + virtual void DebugDraw( recastNavHandle_t handle, idRenderWorld *renderWorld, int drawMode, int lifetime ) const = 0; + + virtual bool IsLoaded( recastNavHandle_t handle ) const = 0; + virtual const char * GetName( recastNavHandle_t handle ) const = 0; + virtual int NumPolys( recastNavHandle_t handle ) const = 0; + virtual const idAASSettings *GetSettings( recastNavHandle_t handle ) const = 0; + + virtual int PointAreaNum( recastNavHandle_t handle, const idVec3 &origin ) const = 0; + virtual int PointReachableAreaNum( recastNavHandle_t handle, const idVec3 &origin, const idBounds &searchBounds, const int areaFlags ) const = 0; + virtual int BoundsReachableAreaNum( recastNavHandle_t handle, const idBounds &bounds, const int areaFlags ) const = 0; + virtual void PushPointIntoAreaNum( recastNavHandle_t handle, int areaNum, idVec3 &origin ) const = 0; + virtual idVec3 AreaCenter( recastNavHandle_t handle, int areaNum ) const = 0; + virtual int AreaFlags( recastNavHandle_t handle, int areaNum ) const = 0; + virtual int AreaTravelFlags( recastNavHandle_t handle, int areaNum ) const = 0; + virtual bool Trace( recastNavHandle_t handle, aasTrace_t &trace, const idVec3 &start, const idVec3 &end ) const = 0; + + virtual bool SetAreaState( recastNavHandle_t handle, const idBounds &bounds, const int areaContents, bool disabled ) = 0; + virtual recastObstacleHandle_t AddObstacle( recastNavHandle_t handle, const idBounds &bounds ) = 0; + virtual void RemoveObstacle( recastNavHandle_t handle, const recastObstacleHandle_t obstacleHandle ) = 0; + virtual void RemoveAllObstacles( recastNavHandle_t handle ) = 0; + + virtual int TravelTimeToGoalArea( recastNavHandle_t handle, int areaNum, const idVec3 &origin, int goalAreaNum, int travelFlags ) const = 0; + virtual bool RouteToGoalArea( recastNavHandle_t handle, int areaNum, const idVec3 origin, int goalAreaNum, int travelFlags, recastPath_t &route ) const = 0; + virtual bool PathToGoal( recastNavHandle_t handle, recastPath_t &path, int areaNum, const idVec3 &origin, int goalAreaNum, const idVec3 &goalOrigin, int travelFlags ) const = 0; + virtual bool PathValid( recastNavHandle_t handle, int areaNum, const idVec3 &origin, int goalAreaNum, const idVec3 &goalOrigin, int travelFlags, idVec3 &endPos, int &endAreaNum ) const = 0; + virtual bool PathAreaList( recastNavHandle_t handle, int areaNum, const idVec3 &origin, int goalAreaNum, const idVec3 &goalOrigin, int travelFlags, int *areas, int &numAreas, int maxAreas ) const = 0; +}; + +extern idRecastNavigationManager *RecastNavigationManager; + +#endif /* !__RECAST_NAVIGATION_H__ */ diff --git a/rage/materials/generated_lit_materials.mtr b/rage/materials/generated_lit_materials.mtr new file mode 100644 index 00000000..ef0f22f9 --- /dev/null +++ b/rage/materials/generated_lit_materials.mtr @@ -0,0 +1,9444 @@ +// Auto-generated Doom 3 lit material definitions +// Generated from models/ and textures/ + +textures/bank/tiles_ceramic1c +{ + qer_editorimage textures/bank/tiles_ceramic1c + + diffusemap textures/bank/tiles_ceramic1c +} +textures/bank/tiles_metal1a_long +{ + qer_editorimage textures/bank/tiles_metal1a_long + + diffusemap textures/bank/tiles_metal1a_long + specularmap textures/bank/tiles_metal1a_long_s +} +textures/bank/tiles_metal1a_longest +{ + qer_editorimage textures/bank/tiles_metal1a_longest + + diffusemap textures/bank/tiles_metal1a_longest + specularmap textures/bank/tiles_metal1a_longest_s +} +textures/banners/polebanner +{ + qer_editorimage textures/banners/polebanner + + diffusemap textures/banners/polebanner + bumpmap textures/banners/polebanner_local + specularmap textures/banners/polebanner_s +} +textures/banners/polebanner2 +{ + qer_editorimage textures/banners/polebanner2 + + diffusemap textures/banners/polebanner2 +} +textures/banners/polebanner_xl +{ + qer_editorimage textures/banners/polebanner_xl + + diffusemap textures/banners/polebanner_xl + bumpmap textures/banners/polebanner_xl_local + specularmap textures/banners/polebanner_xl_s +} +textures/banners/vehiclevendor +{ + qer_editorimage textures/banners/vehiclevendor + + diffusemap textures/banners/vehiclevendor +} +textures/bunker/blade2 +{ + qer_editorimage textures/bunker/blade2 + + diffusemap textures/bunker/blade2 + bumpmap textures/bunker/blade2_local + specularmap textures/bunker/blade2_s +} +textures/bunker/bolts +{ + qer_editorimage textures/bunker/bolts + + diffusemap textures/bunker/bolts + bumpmap textures/bunker/bolts_local + specularmap textures/bunker/bolts_s +} +textures/bunker/bricks1_bmp +{ + qer_editorimage textures/bunker/bricks1_bmp + + diffusemap textures/bunker/bricks1_bmp +} +textures/bunker/bricks1c +{ + qer_editorimage textures/bunker/bricks1c + + diffusemap textures/bunker/bricks1c +} +textures/bunker/bricks4 +{ + qer_editorimage textures/bunker/bricks4 + + diffusemap textures/bunker/bricks4 + bumpmap textures/bunker/bricks4_local +} +textures/bunker/btrim1 +{ + qer_editorimage textures/bunker/btrim1 + + diffusemap textures/bunker/btrim1 + bumpmap textures/bunker/btrim1_local + specularmap textures/bunker/btrim1_s +} +textures/bunker/bunker_gratewall2 +{ + qer_editorimage textures/bunker/bunker_gratewall2 + + diffusemap textures/bunker/bunker_gratewall2 + bumpmap textures/bunker/bunker_gratewall2_local + specularmap textures/bunker/bunker_gratewall2_s +} +textures/bunker/bunkerlight1 +{ + qer_editorimage textures/bunker/bunkerlight1 + + diffusemap textures/bunker/bunkerlight1 + bumpmap textures/bunker/bunkerlight1_local +} +textures/bunker/bunkerlight1_add +{ + qer_editorimage textures/bunker/bunkerlight1_add + + diffusemap textures/bunker/bunkerlight1_add +} +textures/bunker/bwallsupport +{ + qer_editorimage textures/bunker/bwallsupport + + diffusemap textures/bunker/bwallsupport + bumpmap textures/bunker/bwallsupport_local + specularmap textures/bunker/bwallsupport_s +} +textures/bunker/bwallsupport2 +{ + qer_editorimage textures/bunker/bwallsupport2 + + diffusemap textures/bunker/bwallsupport2 +} +textures/bunker/bwallsupport3 +{ + qer_editorimage textures/bunker/bwallsupport3 + + diffusemap textures/bunker/bwallsupport3 +} +textures/bunker/bwallsupport4 +{ + qer_editorimage textures/bunker/bwallsupport4 + + diffusemap textures/bunker/bwallsupport4 + specularmap textures/bunker/bwallsupport4_s +} +textures/bunker/cabinet +{ + qer_editorimage textures/bunker/cabinet + + diffusemap textures/bunker/cabinet + bumpmap textures/bunker/cabinet_local + specularmap textures/bunker/cabinet_s +} +textures/bunker/cabinet2_drawers +{ + qer_editorimage textures/bunker/cabinet2_drawers + + diffusemap textures/bunker/cabinet2_drawers + bumpmap textures/bunker/cabinet2_drawers_local + specularmap textures/bunker/cabinet2_drawers_s +} +textures/bunker/cabinet2_front +{ + qer_editorimage textures/bunker/cabinet2_front + + diffusemap textures/bunker/cabinet2_front + bumpmap textures/bunker/cabinet2_front_local + specularmap textures/bunker/cabinet2_front_s +} +textures/bunker/cabinet_back +{ + qer_editorimage textures/bunker/cabinet_back + + diffusemap textures/bunker/cabinet_back + bumpmap textures/bunker/cabinet_back_local + specularmap textures/bunker/cabinet_back_s +} +textures/bunker/cabinet_backside +{ + qer_editorimage textures/bunker/cabinet_backside + + diffusemap textures/bunker/cabinet_backside + bumpmap textures/bunker/cabinet_backside_local + specularmap textures/bunker/cabinet_backside_s +} +textures/bunker/cabinet_side +{ + qer_editorimage textures/bunker/cabinet_side + + diffusemap textures/bunker/cabinet_side + bumpmap textures/bunker/cabinet_side_local + specularmap textures/bunker/cabinet_side_s +} +textures/bunker/chainrope2 +{ + qer_editorimage textures/bunker/chainrope2 + + diffusemap textures/bunker/chainrope2 + bumpmap textures/bunker/chainrope2_local + specularmap textures/bunker/chainrope2_s +} +textures/bunker/cloth2 +{ + qer_editorimage textures/bunker/cloth2 + + diffusemap textures/bunker/cloth2 + bumpmap textures/bunker/cloth2_local +} +textures/bunker/cloth2a +{ + qer_editorimage textures/bunker/cloth2a + + diffusemap textures/bunker/cloth2a +} +textures/bunker/cloth2b +{ + qer_editorimage textures/bunker/cloth2b + + diffusemap textures/bunker/cloth2b +} +textures/bunker/cloth_red1 +{ + qer_editorimage textures/bunker/cloth_red1 + + diffusemap textures/bunker/cloth_red1 +} +textures/bunker/cloth_red1_small +{ + qer_editorimage textures/bunker/cloth_red1_small + + diffusemap textures/bunker/cloth_red1_small +} +textures/bunker/cloth_red1a +{ + qer_editorimage textures/bunker/cloth_red1a + + diffusemap textures/bunker/cloth_red1a +} +textures/bunker/cloth_red1a2 +{ + qer_editorimage textures/bunker/cloth_red1a2 + + diffusemap textures/bunker/cloth_red1a2 +} +textures/bunker/cloth_red1a2_small +{ + qer_editorimage textures/bunker/cloth_red1a2_small + + diffusemap textures/bunker/cloth_red1a2_small +} +textures/bunker/cloth_red1a_small +{ + qer_editorimage textures/bunker/cloth_red1a_small + + diffusemap textures/bunker/cloth_red1a_small +} +textures/bunker/cloth_red1b +{ + qer_editorimage textures/bunker/cloth_red1b + + diffusemap textures/bunker/cloth_red1b +} +textures/bunker/cloth_red1b_small +{ + qer_editorimage textures/bunker/cloth_red1b_small + + diffusemap textures/bunker/cloth_red1b_small +} +textures/bunker/cloth_red1c +{ + qer_editorimage textures/bunker/cloth_red1c + + diffusemap textures/bunker/cloth_red1c +} +textures/bunker/cloth_red1c_small +{ + qer_editorimage textures/bunker/cloth_red1c_small + + diffusemap textures/bunker/cloth_red1c_small +} +textures/bunker/cloth_red1d +{ + qer_editorimage textures/bunker/cloth_red1d + + diffusemap textures/bunker/cloth_red1d +} +textures/bunker/cloth_red1d_small +{ + qer_editorimage textures/bunker/cloth_red1d_small + + diffusemap textures/bunker/cloth_red1d_small +} +textures/bunker/cloth_red1e +{ + qer_editorimage textures/bunker/cloth_red1e + + diffusemap textures/bunker/cloth_red1e +} +textures/bunker/cloth_red1e_small +{ + qer_editorimage textures/bunker/cloth_red1e_small + + diffusemap textures/bunker/cloth_red1e_small +} +textures/bunker/concrete1 +{ + qer_editorimage textures/bunker/concrete1 + + diffusemap textures/bunker/concrete1 + bumpmap textures/bunker/concrete1_local +} +textures/bunker/concrete1a +{ + qer_editorimage textures/bunker/concrete1a + + diffusemap textures/bunker/concrete1a +} +textures/bunker/concrete2 +{ + qer_editorimage textures/bunker/concrete2 + + diffusemap textures/bunker/concrete2 + bumpmap textures/bunker/concrete2_local +} +textures/bunker/concrete3 +{ + qer_editorimage textures/bunker/concrete3 + + diffusemap textures/bunker/concrete3 + bumpmap textures/bunker/concrete3_local +} +textures/bunker/concrete_ceiling1a +{ + qer_editorimage textures/bunker/concrete_ceiling1a + + diffusemap textures/bunker/concrete_ceiling1a +} +textures/bunker/concrete_shatter3a +{ + qer_editorimage textures/bunker/concrete_shatter3a + + diffusemap textures/bunker/concrete_shatter3a +} +textures/bunker/concretef1a +{ + qer_editorimage textures/bunker/concretef1a + + diffusemap textures/bunker/concretef1a +} +textures/bunker/concretef1b +{ + qer_editorimage textures/bunker/concretef1b + + diffusemap textures/bunker/concretef1b +} +textures/bunker/control1 +{ + qer_editorimage textures/bunker/control1 + + diffusemap textures/bunker/control1 + bumpmap textures/bunker/control1_local + specularmap textures/bunker/control1_s +} +textures/bunker/control1_back +{ + qer_editorimage textures/bunker/control1_back + + diffusemap textures/bunker/control1_back + bumpmap textures/bunker/control1_back_local + specularmap textures/bunker/control1_back_s +} +textures/bunker/control1_side +{ + qer_editorimage textures/bunker/control1_side + + diffusemap textures/bunker/control1_side + bumpmap textures/bunker/control1_side_local + specularmap textures/bunker/control1_side_s +} +textures/bunker/countertop1b_side +{ + qer_editorimage textures/bunker/countertop1b_side + + diffusemap textures/bunker/countertop1b_side +} +textures/bunker/countertop2 +{ + qer_editorimage textures/bunker/countertop2 + + diffusemap textures/bunker/countertop2 + bumpmap textures/bunker/countertop2_local + specularmap textures/bunker/countertop2_s +} +textures/bunker/countertop2_side +{ + qer_editorimage textures/bunker/countertop2_side + + diffusemap textures/bunker/countertop2_side + bumpmap textures/bunker/countertop2_side_local +} +textures/bunker/fence1 +{ + qer_editorimage textures/bunker/fence1 + + diffusemap textures/bunker/fence1 + bumpmap textures/bunker/fence1_local +} +textures/bunker/grate_ac +{ + qer_editorimage textures/bunker/grate_ac + + diffusemap textures/bunker/grate_ac + bumpmap textures/bunker/grate_ac_local + specularmap textures/bunker/grate_ac_s +} +textures/bunker/hazard +{ + qer_editorimage textures/bunker/hazard + + diffusemap textures/bunker/hazard + bumpmap textures/bunker/hazard_local + specularmap textures/bunker/hazard_s +} +textures/bunker/light_neon1 +{ + qer_editorimage textures/bunker/light_neon1 + + diffusemap textures/bunker/light_neon1 + bumpmap textures/bunker/light_neon1_local + specularmap textures/bunker/light_neon1_s +} +textures/bunker/light_neon1_add +{ + qer_editorimage textures/bunker/light_neon1_add + + diffusemap textures/bunker/light_neon1_add +} +textures/bunker/metal_ceiling1 +{ + qer_editorimage textures/bunker/metal_ceiling1 + + diffusemap textures/bunker/metal_ceiling1 + bumpmap textures/bunker/metal_ceiling1_local +} +textures/bunker/metal_ceiling1_bmp +{ + qer_editorimage textures/bunker/metal_ceiling1_bmp + + diffusemap textures/bunker/metal_ceiling1_bmp +} +textures/bunker/metal_column1 +{ + qer_editorimage textures/bunker/metal_column1 + + diffusemap textures/bunker/metal_column1 + bumpmap textures/bunker/metal_column1_local + specularmap textures/bunker/metal_column1_s +} +textures/bunker/metal_column1_side +{ + qer_editorimage textures/bunker/metal_column1_side + + diffusemap textures/bunker/metal_column1_side + bumpmap textures/bunker/metal_column1_side_local +} +textures/bunker/metal_column1a +{ + qer_editorimage textures/bunker/metal_column1a + + diffusemap textures/bunker/metal_column1a +} +textures/bunker/metal_column1b +{ + qer_editorimage textures/bunker/metal_column1b + + diffusemap textures/bunker/metal_column1b +} +textures/bunker/metal_column1b_side +{ + qer_editorimage textures/bunker/metal_column1b_side + + diffusemap textures/bunker/metal_column1b_side +} +textures/bunker/metal_column2 +{ + qer_editorimage textures/bunker/metal_column2 + + diffusemap textures/bunker/metal_column2 + bumpmap textures/bunker/metal_column2_local + specularmap textures/bunker/metal_column2_s +} +textures/bunker/metal_column2_thin +{ + qer_editorimage textures/bunker/metal_column2_thin + + diffusemap textures/bunker/metal_column2_thin + bumpmap textures/bunker/metal_column2_thin_local + specularmap textures/bunker/metal_column2_thin_s +} +textures/bunker/metal_column2_thin_tile +{ + qer_editorimage textures/bunker/metal_column2_thin_tile + + diffusemap textures/bunker/metal_column2_thin_tile + bumpmap textures/bunker/metal_column2_thin_tile_local + specularmap textures/bunker/metal_column2_thin_tile_s +} +textures/bunker/metal_column2a +{ + qer_editorimage textures/bunker/metal_column2a + + diffusemap textures/bunker/metal_column2a +} +textures/bunker/metal_grate1 +{ + qer_editorimage textures/bunker/metal_grate1 + + diffusemap textures/bunker/metal_grate1 + bumpmap textures/bunker/metal_grate1_local + specularmap textures/bunker/metal_grate1_s +} +textures/bunker/metal_panel1_bottom +{ + qer_editorimage textures/bunker/metal_panel1_bottom + + diffusemap textures/bunker/metal_panel1_bottom + bumpmap textures/bunker/metal_panel1_bottom_local + specularmap textures/bunker/metal_panel1_bottom_s +} +textures/bunker/metal_panel1_side +{ + qer_editorimage textures/bunker/metal_panel1_side + + diffusemap textures/bunker/metal_panel1_side + bumpmap textures/bunker/metal_panel1_side_local + specularmap textures/bunker/metal_panel1_side_s +} +textures/bunker/metal_panel1_top +{ + qer_editorimage textures/bunker/metal_panel1_top + + diffusemap textures/bunker/metal_panel1_top + bumpmap textures/bunker/metal_panel1_top_local + specularmap textures/bunker/metal_panel1_top_s +} +textures/bunker/metal_panel2 +{ + qer_editorimage textures/bunker/metal_panel2 + + diffusemap textures/bunker/metal_panel2 + bumpmap textures/bunker/metal_panel2_local + specularmap textures/bunker/metal_panel2_s +} +textures/bunker/metal_panel2a +{ + qer_editorimage textures/bunker/metal_panel2a + + diffusemap textures/bunker/metal_panel2a +} +textures/bunker/metal_panel4 +{ + qer_editorimage textures/bunker/metal_panel4 + + diffusemap textures/bunker/metal_panel4 + bumpmap textures/bunker/metal_panel4_local + specularmap textures/bunker/metal_panel4_s +} +textures/bunker/metal_panel5 +{ + qer_editorimage textures/bunker/metal_panel5 + + diffusemap textures/bunker/metal_panel5 + bumpmap textures/bunker/metal_panel5_local + specularmap textures/bunker/metal_panel5_s +} +textures/bunker/metal_panel5_floor +{ + qer_editorimage textures/bunker/metal_panel5_floor + + diffusemap textures/bunker/metal_panel5_floor + bumpmap textures/bunker/metal_panel5_floor_local + specularmap textures/bunker/metal_panel5_floor_s +} +textures/bunker/metal_panel6_a +{ + qer_editorimage textures/bunker/metal_panel6_a + + diffusemap textures/bunker/metal_panel6_a +} +textures/bunker/metal_panel6a +{ + qer_editorimage textures/bunker/metal_panel6a + + diffusemap textures/bunker/metal_panel6a + bumpmap textures/bunker/metal_panel6a_local + specularmap textures/bunker/metal_panel6a_s +} +textures/bunker/metal_panel6a_a +{ + qer_editorimage textures/bunker/metal_panel6a_a + + diffusemap textures/bunker/metal_panel6a_a +} +textures/bunker/metal_panel7 +{ + qer_editorimage textures/bunker/metal_panel7 + + diffusemap textures/bunker/metal_panel7 + bumpmap textures/bunker/metal_panel7_local + specularmap textures/bunker/metal_panel7_s +} +textures/bunker/metal_pole1 +{ + qer_editorimage textures/bunker/metal_pole1_d + + diffusemap textures/bunker/metal_pole1_d + bumpmap textures/bunker/metal_pole1_local +} +textures/bunker/metal_pole3_tile +{ + qer_editorimage textures/bunker/metal_pole3_tile_d + + diffusemap textures/bunker/metal_pole3_tile_d + bumpmap textures/bunker/metal_pole3_tile_local +} +textures/bunker/metal_pole5_tile +{ + qer_editorimage textures/bunker/metal_pole5_tile_d + + diffusemap textures/bunker/metal_pole5_tile_d + specularmap textures/bunker/metal_pole5_tile_s +} +textures/bunker/metal_redwall2 +{ + qer_editorimage textures/bunker/metal_redwall2 + + diffusemap textures/bunker/metal_redwall2 + bumpmap textures/bunker/metal_redwall2_local +} +textures/bunker/metal_redwall2a +{ + qer_editorimage textures/bunker/metal_redwall2a + + diffusemap textures/bunker/metal_redwall2a +} +textures/bunker/metal_redwall2b +{ + qer_editorimage textures/bunker/metal_redwall2b + + diffusemap textures/bunker/metal_redwall2b +} +textures/bunker/metal_redwall2c +{ + qer_editorimage textures/bunker/metal_redwall2c + + diffusemap textures/bunker/metal_redwall2c +} +textures/bunker/metal_redwall2d +{ + qer_editorimage textures/bunker/metal_redwall2d + + diffusemap textures/bunker/metal_redwall2d +} +textures/bunker/metal_roof1b +{ + qer_editorimage textures/bunker/metal_roof1b + + diffusemap textures/bunker/metal_roof1b +} +textures/bunker/metal_strip1a_side +{ + qer_editorimage textures/bunker/metal_strip1a_side + + diffusemap textures/bunker/metal_strip1a_side +} +textures/bunker/metal_strip1b +{ + qer_editorimage textures/bunker/metal_strip1b + + diffusemap textures/bunker/metal_strip1b +} +textures/bunker/metal_strip1b_side +{ + qer_editorimage textures/bunker/metal_strip1b_side + + diffusemap textures/bunker/metal_strip1b_side +} +textures/bunker/metal_strip2 +{ + qer_editorimage textures/bunker/metal_strip2 + + diffusemap textures/bunker/metal_strip2 + bumpmap textures/bunker/metal_strip2_local + specularmap textures/bunker/metal_strip2_s +} +textures/bunker/metal_strip2a +{ + qer_editorimage textures/bunker/metal_strip2a + + diffusemap textures/bunker/metal_strip2a +} +textures/bunker/metal_strip2b +{ + qer_editorimage textures/bunker/metal_strip2b + + diffusemap textures/bunker/metal_strip2b +} +textures/bunker/metal_strip2c +{ + qer_editorimage textures/bunker/metal_strip2c + + diffusemap textures/bunker/metal_strip2c +} +textures/bunker/metal_strip2d +{ + qer_editorimage textures/bunker/metal_strip2d + + diffusemap textures/bunker/metal_strip2d +} +textures/bunker/metal_strip4 +{ + qer_editorimage textures/bunker/metal_strip4 + + diffusemap textures/bunker/metal_strip4 + bumpmap textures/bunker/metal_strip4_local + specularmap textures/bunker/metal_strip4_s +} +textures/bunker/metal_strip_side2b +{ + qer_editorimage textures/bunker/metal_strip_side2b + + diffusemap textures/bunker/metal_strip_side2b +} +textures/bunker/metal_tall1 +{ + qer_editorimage textures/bunker/metal_tall1 + + diffusemap textures/bunker/metal_tall1 + bumpmap textures/bunker/metal_tall1_local + specularmap textures/bunker/metal_tall1_s +} +textures/bunker/metal_tank1 +{ + qer_editorimage textures/bunker/metal_tank1 + + diffusemap textures/bunker/metal_tank1 + bumpmap textures/bunker/metal_tank1_local + specularmap textures/bunker/metal_tank1_s +} +textures/bunker/metal_trim1 +{ + qer_editorimage textures/bunker/metal_trim1 + + diffusemap textures/bunker/metal_trim1 + bumpmap textures/bunker/metal_trim1_local +} +textures/bunker/metal_trim1_bmp +{ + qer_editorimage textures/bunker/metal_trim1_bmp + + diffusemap textures/bunker/metal_trim1_bmp +} +textures/bunker/metal_trim1a2 +{ + qer_editorimage textures/bunker/metal_trim1a2 + + diffusemap textures/bunker/metal_trim1a2 +} +textures/bunker/metal_trim2a +{ + qer_editorimage textures/bunker/metal_trim2a + + diffusemap textures/bunker/metal_trim2a +} +textures/bunker/metal_trim2a_long +{ + qer_editorimage textures/bunker/metal_trim2a_long + + diffusemap textures/bunker/metal_trim2a_long +} +textures/bunker/metal_trim2a_long_side +{ + qer_editorimage textures/bunker/metal_trim2a_long_side + + diffusemap textures/bunker/metal_trim2a_long_side +} +textures/bunker/metal_trim2a_side +{ + qer_editorimage textures/bunker/metal_trim2a_side + + diffusemap textures/bunker/metal_trim2a_side +} +textures/bunker/metal_trim3 +{ + qer_editorimage textures/bunker/metal_trim3 + + diffusemap textures/bunker/metal_trim3 + bumpmap textures/bunker/metal_trim3_local + specularmap textures/bunker/metal_trim3_s +} +textures/bunker/metal_trim4 +{ + qer_editorimage textures/bunker/metal_trim4 + + diffusemap textures/bunker/metal_trim4 + bumpmap textures/bunker/metal_trim4_local + specularmap textures/bunker/metal_trim4_s +} +textures/bunker/metal_trim5 +{ + qer_editorimage textures/bunker/metal_trim5 + + diffusemap textures/bunker/metal_trim5 + bumpmap textures/bunker/metal_trim5_local + specularmap textures/bunker/metal_trim5_s +} +textures/bunker/metal_trim5b +{ + qer_editorimage textures/bunker/metal_trim5b + + diffusemap textures/bunker/metal_trim5b +} +textures/bunker/metal_wall10 +{ + qer_editorimage textures/bunker/metal_wall10 + + diffusemap textures/bunker/metal_wall10 + bumpmap textures/bunker/metal_wall10_local + specularmap textures/bunker/metal_wall10_s +} +textures/bunker/metal_wall10a +{ + qer_editorimage textures/bunker/metal_wall10a + + diffusemap textures/bunker/metal_wall10a + bumpmap textures/bunker/metal_wall10a_local +} +textures/bunker/metal_wall11 +{ + qer_editorimage textures/bunker/metal_wall11 + + diffusemap textures/bunker/metal_wall11 + bumpmap textures/bunker/metal_wall11_local +} +textures/bunker/metal_wall12 +{ + qer_editorimage textures/bunker/metal_wall12 + + diffusemap textures/bunker/metal_wall12 + bumpmap textures/bunker/metal_wall12_local + specularmap textures/bunker/metal_wall12_s +} +textures/bunker/metal_wall13 +{ + qer_editorimage textures/bunker/metal_wall13 + + diffusemap textures/bunker/metal_wall13 + bumpmap textures/bunker/metal_wall13_local + specularmap textures/bunker/metal_wall13_s +} +textures/bunker/metal_wall13a +{ + qer_editorimage textures/bunker/metal_wall13a + + diffusemap textures/bunker/metal_wall13a +} +textures/bunker/metal_wall13b +{ + qer_editorimage textures/bunker/metal_wall13b + + diffusemap textures/bunker/metal_wall13b +} +textures/bunker/metal_wall1a +{ + qer_editorimage textures/bunker/metal_wall1a + + diffusemap textures/bunker/metal_wall1a +} +textures/bunker/metal_wall1c +{ + qer_editorimage textures/bunker/metal_wall1c + + diffusemap textures/bunker/metal_wall1c +} +textures/bunker/metal_wall1d +{ + qer_editorimage textures/bunker/metal_wall1d + + diffusemap textures/bunker/metal_wall1d +} +textures/bunker/metal_wall3 +{ + qer_editorimage textures/bunker/metal_wall3 + + diffusemap textures/bunker/metal_wall3 + bumpmap textures/bunker/metal_wall3_local +} +textures/bunker/metal_wall4c +{ + qer_editorimage textures/bunker/metal_wall4c + + diffusemap textures/bunker/metal_wall4c +} +textures/bunker/metal_wall5 +{ + qer_editorimage textures/bunker/metal_wall5 + + diffusemap textures/bunker/metal_wall5 + bumpmap textures/bunker/metal_wall5_local +} +textures/bunker/metal_wall7 +{ + qer_editorimage textures/bunker/metal_wall7 + + diffusemap textures/bunker/metal_wall7 + bumpmap textures/bunker/metal_wall7_local + specularmap textures/bunker/metal_wall7_s +} +textures/bunker/metal_wall9a +{ + qer_editorimage textures/bunker/metal_wall9a + + diffusemap textures/bunker/metal_wall9a +} +textures/bunker/pipe1 +{ + qer_editorimage textures/bunker/pipe1 + + diffusemap textures/bunker/pipe1 + bumpmap textures/bunker/pipe1_local + specularmap textures/bunker/pipe1_s +} +textures/bunker/pipe1_bmp +{ + qer_editorimage textures/bunker/pipe1_bmp + + diffusemap textures/bunker/pipe1_bmp +} +textures/bunker/pipe1_dark +{ + qer_editorimage textures/bunker/pipe1_dark + + diffusemap textures/bunker/pipe1_dark + bumpmap textures/bunker/pipe1_dark_local + specularmap textures/bunker/pipe1_dark_s +} +textures/bunker/pipe1_dark_long +{ + qer_editorimage textures/bunker/pipe1_dark_long + + diffusemap textures/bunker/pipe1_dark_long + bumpmap textures/bunker/pipe1_dark_long_local + specularmap textures/bunker/pipe1_dark_long_s +} +textures/bunker/pipe1a +{ + qer_editorimage textures/bunker/pipe1a + + diffusemap textures/bunker/pipe1a + specularmap textures/bunker/pipe1a_s +} +textures/bunker/pipe1a_bmp +{ + qer_editorimage textures/bunker/pipe1a_bmp + + diffusemap textures/bunker/pipe1a_bmp +} +textures/bunker/pipe1b +{ + qer_editorimage textures/bunker/pipe1b + + diffusemap textures/bunker/pipe1b + specularmap textures/bunker/pipe1b_s +} +textures/bunker/pipe1b_bmp +{ + qer_editorimage textures/bunker/pipe1b_bmp + + diffusemap textures/bunker/pipe1b_bmp +} +textures/bunker/pipe1c +{ + qer_editorimage textures/bunker/pipe1c + + diffusemap textures/bunker/pipe1c +} +textures/bunker/pipe1c2 +{ + qer_editorimage textures/bunker/pipe1c2 + + diffusemap textures/bunker/pipe1c2 +} +textures/bunker/pipe1d +{ + qer_editorimage textures/bunker/pipe1d + + diffusemap textures/bunker/pipe1d + bumpmap textures/bunker/pipe1d_local + specularmap textures/bunker/pipe1d_s +} +textures/bunker/pipe2 +{ + qer_editorimage textures/bunker/pipe2 + + diffusemap textures/bunker/pipe2 + bumpmap textures/bunker/pipe2_local + specularmap textures/bunker/pipe2_s +} +textures/bunker/pipe2_bmp +{ + qer_editorimage textures/bunker/pipe2_bmp + + diffusemap textures/bunker/pipe2_bmp +} +textures/bunker/pipe3a +{ + qer_editorimage textures/bunker/pipe3a + + diffusemap textures/bunker/pipe3a + bumpmap textures/bunker/pipe3a_local + specularmap textures/bunker/pipe3a_s +} +textures/bunker/pipe3a_stamp1 +{ + qer_editorimage textures/bunker/pipe3a_stamp1 + + diffusemap textures/bunker/pipe3a_stamp1 + bumpmap textures/bunker/pipe3a_stamp1_local + specularmap textures/bunker/pipe3a_stamp1_s +} +textures/bunker/pipe3a_stamp2 +{ + qer_editorimage textures/bunker/pipe3a_stamp2 + + diffusemap textures/bunker/pipe3a_stamp2 + bumpmap textures/bunker/pipe3a_stamp2_local + specularmap textures/bunker/pipe3a_stamp2_s +} +textures/bunker/pipe4 +{ + qer_editorimage textures/bunker/pipe4 + + diffusemap textures/bunker/pipe4 + bumpmap textures/bunker/pipe4_local + specularmap textures/bunker/pipe4_s +} +textures/bunker/pipe5 +{ + qer_editorimage textures/bunker/pipe5 + + diffusemap textures/bunker/pipe5 + bumpmap textures/bunker/pipe5_local + specularmap textures/bunker/pipe5_s +} +textures/bunker/pipe5e +{ + qer_editorimage textures/bunker/pipe5e + + diffusemap textures/bunker/pipe5e +} +textures/bunker/pipe5f +{ + qer_editorimage textures/bunker/pipe5f + + diffusemap textures/bunker/pipe5f + bumpmap textures/bunker/pipe5f_local + specularmap textures/bunker/pipe5f_s +} +textures/bunker/pipe_end +{ + qer_editorimage textures/bunker/pipe_end + + diffusemap textures/bunker/pipe_end + bumpmap textures/bunker/pipe_end_local + specularmap textures/bunker/pipe_end_s +} +textures/bunker/pipecap1a +{ + qer_editorimage textures/bunker/pipecap1a + + diffusemap textures/bunker/pipecap1a +} +textures/bunker/pipecap2 +{ + qer_editorimage textures/bunker/pipecap2 + + diffusemap textures/bunker/pipecap2 + bumpmap textures/bunker/pipecap2_local + specularmap textures/bunker/pipecap2_s +} +textures/bunker/pipecap2a +{ + qer_editorimage textures/bunker/pipecap2a + + diffusemap textures/bunker/pipecap2a + specularmap textures/bunker/pipecap2a_s +} +textures/bunker/pipecap3 +{ + qer_editorimage textures/bunker/pipecap3 + + diffusemap textures/bunker/pipecap3 + bumpmap textures/bunker/pipecap3_local + specularmap textures/bunker/pipecap3_s +} +textures/bunker/pipecap3a +{ + qer_editorimage textures/bunker/pipecap3a + + diffusemap textures/bunker/pipecap3a +} +textures/bunker/pipecap4a +{ + qer_editorimage textures/bunker/pipecap4a + + diffusemap textures/bunker/pipecap4a +} +textures/bunker/pipecap5 +{ + qer_editorimage textures/bunker/pipecap5 + + diffusemap textures/bunker/pipecap5 + bumpmap textures/bunker/pipecap5_local + specularmap textures/bunker/pipecap5_s +} +textures/bunker/pipecap5a +{ + qer_editorimage textures/bunker/pipecap5a + + diffusemap textures/bunker/pipecap5a +} +textures/bunker/rail +{ + qer_editorimage textures/bunker/rail + + diffusemap textures/bunker/rail + bumpmap textures/bunker/rail_local + specularmap textures/bunker/rail_s +} +textures/bunker/ribwall1 +{ + qer_editorimage textures/bunker/ribwall1 + + diffusemap textures/bunker/ribwall1 + bumpmap textures/bunker/ribwall1_local + specularmap textures/bunker/ribwall1_s +} +textures/bunker/ribwall3 +{ + qer_editorimage textures/bunker/ribwall3 + + diffusemap textures/bunker/ribwall3 + bumpmap textures/bunker/ribwall3_local + specularmap textures/bunker/ribwall3_s +} +textures/bunker/ribwall3a +{ + qer_editorimage textures/bunker/ribwall3a + + diffusemap textures/bunker/ribwall3a + bumpmap textures/bunker/ribwall3a_local + specularmap textures/bunker/ribwall3a_s +} +textures/bunker/roof1 +{ + qer_editorimage textures/bunker/roof1 + + diffusemap textures/bunker/roof1 + bumpmap textures/bunker/roof1_local +} +textures/bunker/shoptsui +{ + qer_editorimage textures/bunker/shoptsui + + diffusemap textures/bunker/shoptsui + bumpmap textures/bunker/shoptsui_local + specularmap textures/bunker/shoptsui_s +} +textures/bunker/squarecap2 +{ + qer_editorimage textures/bunker/squarecap2 + + diffusemap textures/bunker/squarecap2 + bumpmap textures/bunker/squarecap2_local + specularmap textures/bunker/squarecap2_s +} +textures/bunker/stairs +{ + qer_editorimage textures/bunker/stairs + + diffusemap textures/bunker/stairs + bumpmap textures/bunker/stairs_local + specularmap textures/bunker/stairs_s +} +textures/bunker/tubing1 +{ + qer_editorimage textures/bunker/tubing1 + + diffusemap textures/bunker/tubing1 + bumpmap textures/bunker/tubing1_local +} +textures/bunker/tubing1a +{ + qer_editorimage textures/bunker/tubing1a + + diffusemap textures/bunker/tubing1a +} +textures/bunker/tubing1b +{ + qer_editorimage textures/bunker/tubing1b + + diffusemap textures/bunker/tubing1b +} +textures/bunker/tubing1c +{ + qer_editorimage textures/bunker/tubing1c + + diffusemap textures/bunker/tubing1c +} +textures/bunker/tubing1d +{ + qer_editorimage textures/bunker/tubing1d + + diffusemap textures/bunker/tubing1d +} +textures/bunker/wireholder +{ + qer_editorimage textures/bunker/wireholder + + diffusemap textures/bunker/wireholder + bumpmap textures/bunker/wireholder_local + specularmap textures/bunker/wireholder_s +} +textures/bunker/wires1 +{ + qer_editorimage textures/bunker/wires1 + + diffusemap textures/bunker/wires1 + bumpmap textures/bunker/wires1_local +} +textures/bunker/wires1a +{ + qer_editorimage textures/bunker/wires1a + + diffusemap textures/bunker/wires1a + bumpmap textures/bunker/wires1a_local +} +textures/common/1024 +{ + qer_editorimage textures/common/1024 + + diffusemap textures/common/1024 + bumpmap textures/common/1024_local +} +textures/common/128 +{ + qer_editorimage textures/common/128 + + diffusemap textures/common/128 + bumpmap textures/common/128_local +} +textures/common/128x512 +{ + qer_editorimage textures/common/128x512 + + diffusemap textures/common/128x512 +} +textures/common/256 +{ + qer_editorimage textures/common/256 + + diffusemap textures/common/256 + bumpmap textures/common/256_local +} +textures/common/256_grey +{ + qer_editorimage textures/common/256_grey + + diffusemap textures/common/256_grey +} +textures/common/256x512 +{ + qer_editorimage textures/common/256x512 + + diffusemap textures/common/256x512 + bumpmap textures/common/256x512_local +} +textures/common/512 +{ + qer_editorimage textures/common/512 + + diffusemap textures/common/512 + bumpmap textures/common/512_local +} +textures/common/512x1024 +{ + qer_editorimage textures/common/512x1024 + + diffusemap textures/common/512x1024 + bumpmap textures/common/512x1024_local +} +textures/common/aasobstacle +{ + qer_editorimage textures/common/aasobstacle + + diffusemap textures/common/aasobstacle +} +textures/common/aasportal +{ + qer_editorimage textures/common/aasportal + + diffusemap textures/common/aasportal +} +textures/common/aassolid +{ + qer_editorimage textures/common/aassolid + + diffusemap textures/common/aassolid +} +textures/common/banding +{ + qer_editorimage textures/common/banding + + diffusemap textures/common/banding +} +textures/common/black +{ + qer_editorimage textures/common/black + + diffusemap textures/common/black +} +textures/common/black4x4 +{ + qer_editorimage textures/common/black4x4 + + diffusemap textures/common/black4x4 +} +textures/common/black_twoSided +{ + qer_editorimage textures/common/black_twoSided + + diffusemap textures/common/black_twoSided +} +textures/common/caulk +{ + qer_editorimage textures/common/caulk + + diffusemap textures/common/caulk +} +textures/common/checker +{ + qer_editorimage textures/common/checker + + diffusemap textures/common/checker +} +textures/common/clip +{ + qer_editorimage textures/common/clip + + diffusemap textures/common/clip +} +textures/common/clip_and_vehicle +{ + qer_editorimage textures/common/clip_and_vehicle + + diffusemap textures/common/clip_and_vehicle +} +textures/common/clip_noareas +{ + qer_editorimage textures/common/clip_noareas + + diffusemap textures/common/clip_noareas +} +textures/common/clipplus +{ + qer_editorimage textures/common/clipplus + + diffusemap textures/common/clipplus +} +textures/common/collision +{ + qer_editorimage textures/common/collision + + diffusemap textures/common/collision +} +textures/common/collision1 +{ + qer_editorimage textures/common/collision1 + + diffusemap textures/common/collision1 +} +textures/common/collision2 +{ + qer_editorimage textures/common/collision2 + + diffusemap textures/common/collision2 +} +textures/common/collision3 +{ + qer_editorimage textures/common/collision3 + + diffusemap textures/common/collision3 +} +textures/common/collision4 +{ + qer_editorimage textures/common/collision4 + + diffusemap textures/common/collision4 +} +textures/common/collision5 +{ + qer_editorimage textures/common/collision5 + + diffusemap textures/common/collision5 +} +textures/common/colorrange +{ + qer_editorimage textures/common/colorrange + + diffusemap textures/common/colorrange +} +textures/common/cover_clip +{ + qer_editorimage textures/common/cover_clip + + diffusemap textures/common/cover_clip +} +textures/common/cushion +{ + qer_editorimage textures/common/cushion + + diffusemap textures/common/cushion +} +textures/common/darkgrey +{ + qer_editorimage textures/common/darkgrey + + diffusemap textures/common/darkgrey +} +textures/common/entitygui +{ + qer_editorimage textures/common/entitygui + + diffusemap textures/common/entitygui +} +textures/common/export_clip +{ + qer_editorimage textures/common/export_clip + + diffusemap textures/common/export_clip +} +textures/common/full_clip +{ + qer_editorimage textures/common/full_clip + + diffusemap textures/common/full_clip +} +textures/common/full_sans_player_clip +{ + qer_editorimage textures/common/full_sans_player_clip + + diffusemap textures/common/full_sans_player_clip +} +textures/common/glow1 +{ + qer_editorimage textures/common/glow1 + + diffusemap textures/common/glow1 +} +textures/common/glow1_soft +{ + qer_editorimage textures/common/glow1_soft + + diffusemap textures/common/glow1_soft +} +textures/common/glow1blend +{ + qer_editorimage textures/common/glow1blend + + diffusemap textures/common/glow1blend +} +textures/common/glow2 +{ + qer_editorimage textures/common/glow2 + + diffusemap textures/common/glow2 +} +textures/common/glow3_autoRotate +{ + qer_editorimage textures/common/glow3_autoRotate + + diffusemap textures/common/glow3_autoRotate +} +textures/common/glow5 +{ + qer_editorimage textures/common/glow5 + + diffusemap textures/common/glow5 +} +textures/common/glow5_autorotate +{ + qer_editorimage textures/common/glow5_autorotate + + diffusemap textures/common/glow5_autorotate +} +textures/common/glow6_autorotate +{ + qer_editorimage textures/common/glow6_autorotate + + diffusemap textures/common/glow6_autorotate +} +textures/common/green +{ + qer_editorimage textures/common/green + + diffusemap textures/common/green +} +textures/common/gui +{ + qer_editorimage textures/common/gui + + diffusemap textures/common/gui +} +textures/common/ikclip +{ + qer_editorimage textures/common/ikclip + + diffusemap textures/common/ikclip +} +textures/common/ikshotclip +{ + qer_editorimage textures/common/ikshotclip + + diffusemap textures/common/ikshotclip +} +textures/common/ikshotclip_armor +{ + qer_editorimage textures/common/ikshotclip_armor + + diffusemap textures/common/ikshotclip_armor +} +textures/common/ikshotclip_asphalt +{ + qer_editorimage textures/common/ikshotclip_asphalt + + diffusemap textures/common/ikshotclip_asphalt +} +textures/common/ikshotclip_cardboard +{ + qer_editorimage textures/common/ikshotclip_cardboard + + diffusemap textures/common/ikshotclip_cardboard +} +textures/common/ikshotclip_concrete +{ + qer_editorimage textures/common/ikshotclip_concrete + + diffusemap textures/common/ikshotclip_concrete +} +textures/common/ikshotclip_dirt +{ + qer_editorimage textures/common/ikshotclip_dirt + + diffusemap textures/common/ikshotclip_dirt +} +textures/common/ikshotclip_dirt_opaque +{ + qer_editorimage textures/common/ikshotclip_dirt_opaque + + diffusemap textures/common/ikshotclip_dirt_opaque +} +textures/common/ikshotclip_fabric +{ + qer_editorimage textures/common/ikshotclip_fabric + + diffusemap textures/common/ikshotclip_fabric +} +textures/common/ikshotclip_flesh +{ + qer_editorimage textures/common/ikshotclip_flesh + + diffusemap textures/common/ikshotclip_flesh +} +textures/common/ikshotclip_foliage +{ + qer_editorimage textures/common/ikshotclip_foliage + + diffusemap textures/common/ikshotclip_foliage +} +textures/common/ikshotclip_glass +{ + qer_editorimage textures/common/ikshotclip_glass + + diffusemap textures/common/ikshotclip_glass +} +textures/common/ikshotclip_linoleum +{ + qer_editorimage textures/common/ikshotclip_linoleum + + diffusemap textures/common/ikshotclip_linoleum +} +textures/common/ikshotclip_liquid +{ + qer_editorimage textures/common/ikshotclip_liquid + + diffusemap textures/common/ikshotclip_liquid +} +textures/common/ikshotclip_metal +{ + qer_editorimage textures/common/ikshotclip_metal + + diffusemap textures/common/ikshotclip_metal +} +textures/common/ikshotclip_metal_opaque +{ + qer_editorimage textures/common/ikshotclip_metal_opaque + + diffusemap textures/common/ikshotclip_metal_opaque +} +textures/common/ikshotclip_plastic +{ + qer_editorimage textures/common/ikshotclip_plastic + + diffusemap textures/common/ikshotclip_plastic +} +textures/common/ikshotclip_rock +{ + qer_editorimage textures/common/ikshotclip_rock + + diffusemap textures/common/ikshotclip_rock +} +textures/common/ikshotclip_rock_opaque +{ + qer_editorimage textures/common/ikshotclip_rock_opaque + + diffusemap textures/common/ikshotclip_rock_opaque +} +textures/common/ikshotclip_rubber +{ + qer_editorimage textures/common/ikshotclip_rubber + + diffusemap textures/common/ikshotclip_rubber +} +textures/common/ikshotclip_sludge +{ + qer_editorimage textures/common/ikshotclip_sludge + + diffusemap textures/common/ikshotclip_sludge +} +textures/common/ikshotclip_steampipe +{ + qer_editorimage textures/common/ikshotclip_steampipe + + diffusemap textures/common/ikshotclip_steampipe +} +textures/common/ikshotclip_stone +{ + qer_editorimage textures/common/ikshotclip_stone + + diffusemap textures/common/ikshotclip_stone +} +textures/common/ikshotclip_waterpipe +{ + qer_editorimage textures/common/ikshotclip_waterpipe + + diffusemap textures/common/ikshotclip_waterpipe +} +textures/common/ikshotclip_wood +{ + qer_editorimage textures/common/ikshotclip_wood + + diffusemap textures/common/ikshotclip_wood +} +textures/common/ikshotclip_wood_opaque +{ + qer_editorimage textures/common/ikshotclip_wood_opaque + + diffusemap textures/common/ikshotclip_wood_opaque +} +textures/common/ikshotvehicleclip_concrete +{ + qer_editorimage textures/common/ikshotvehicleclip_concrete + + diffusemap textures/common/ikshotvehicleclip_concrete +} +textures/common/ikshotvehicleclip_dirt +{ + qer_editorimage textures/common/ikshotvehicleclip_dirt + + diffusemap textures/common/ikshotvehicleclip_dirt +} +textures/common/ikshotvehicleclip_wood +{ + qer_editorimage textures/common/ikshotvehicleclip_wood + + diffusemap textures/common/ikshotvehicleclip_wood +} +textures/common/ladder +{ + qer_editorimage textures/common/ladder + + diffusemap textures/common/ladder +} +textures/common/lightbg +{ + qer_editorimage textures/common/lightbg + + diffusemap textures/common/lightbg +} +textures/common/manifold_hint +{ + qer_editorimage textures/common/manifold_hint + + diffusemap textures/common/manifold_hint +} +textures/common/monster_clip +{ + qer_editorimage textures/common/monster_clip + + diffusemap textures/common/monster_clip +} +textures/common/monster_clip_noareas +{ + qer_editorimage textures/common/monster_clip_noareas + + diffusemap textures/common/monster_clip_noareas +} +textures/common/monster_cover_clip +{ + qer_editorimage textures/common/monster_cover_clip + + diffusemap textures/common/monster_cover_clip +} +textures/common/moveable_clip +{ + qer_editorimage textures/common/moveable_clip + + diffusemap textures/common/moveable_clip +} +textures/common/mp_trigger +{ + qer_editorimage textures/common/mp_trigger + + diffusemap textures/common/mp_trigger +} +textures/common/nocover +{ + qer_editorimage textures/common/nocover + + diffusemap textures/common/nocover +} +textures/common/nodamage +{ + qer_editorimage textures/common/nodamage + + diffusemap textures/common/nodamage +} +textures/common/nodraw +{ + qer_editorimage textures/common/nodraw + + diffusemap textures/common/nodraw +} +textures/common/nodrawsolid +{ + qer_editorimage textures/common/nodrawsolid + + diffusemap textures/common/nodrawsolid +} +textures/common/online_vehicle_clip +{ + qer_editorimage textures/common/online_vehicle_clip + + diffusemap textures/common/online_vehicle_clip +} +textures/common/online_vehicle_clip_no_friction +{ + qer_editorimage textures/common/online_vehicle_clip_no_friction + + diffusemap textures/common/online_vehicle_clip_no_friction +} +textures/common/opaque_clip +{ + qer_editorimage textures/common/opaque_clip + + diffusemap textures/common/opaque_clip +} +textures/common/opaque_clip_noareas +{ + qer_editorimage textures/common/opaque_clip_noareas + + diffusemap textures/common/opaque_clip_noareas +} +textures/common/orient +{ + qer_editorimage textures/common/orient + + diffusemap textures/common/orient +} +textures/common/orientation +{ + qer_editorimage textures/common/orientation + + diffusemap textures/common/orientation + bumpmap textures/common/orientation_local +} +textures/common/pink +{ + qer_editorimage textures/common/pink + + diffusemap textures/common/pink +} +textures/common/player_clip +{ + qer_editorimage textures/common/player_clip + + diffusemap textures/common/player_clip +} +textures/common/player_cover_clip +{ + qer_editorimage textures/common/player_cover_clip + + diffusemap textures/common/player_cover_clip +} +textures/common/player_focus +{ + qer_editorimage textures/common/player_focus + + diffusemap textures/common/player_focus +} +textures/common/pvs_clip +{ + qer_editorimage textures/common/pvs_clip + + diffusemap textures/common/pvs_clip +} +textures/common/radiosity_shadowhull +{ + qer_editorimage textures/common/radiosity_shadowhull + + diffusemap textures/common/radiosity_shadowhull +} +textures/common/region +{ + qer_editorimage textures/common/region + + diffusemap textures/common/region +} +textures/common/roundMask +{ + qer_editorimage textures/common/roundMask + + diffusemap textures/common/roundMask +} +textures/common/shadow +{ + qer_editorimage textures/common/shadow + + diffusemap textures/common/shadow +} +textures/common/shadow_caster +{ + qer_editorimage textures/common/shadow_caster + + diffusemap textures/common/shadow_caster + bumpmap textures/common/shadow_caster_local +} +textures/common/shotclip_concrete +{ + qer_editorimage textures/common/shotclip_concrete + + diffusemap textures/common/shotclip_concrete +} +textures/common/sky +{ + qer_editorimage textures/common/sky + + diffusemap textures/common/sky +} +textures/common/sound_clip +{ + qer_editorimage textures/common/sound_clip + + diffusemap textures/common/sound_clip +} +textures/common/sound_clip_trans +{ + qer_editorimage textures/common/sound_clip_trans + + diffusemap textures/common/sound_clip_trans +} +textures/common/sound_clip_trans_pvs +{ + qer_editorimage textures/common/sound_clip_trans_pvs + + diffusemap textures/common/sound_clip_trans_pvs +} +textures/common/sound_door +{ + qer_editorimage textures/common/sound_door + + diffusemap textures/common/sound_door +} +textures/common/sound_portal +{ + qer_editorimage textures/common/sound_portal + + diffusemap textures/common/sound_portal +} +textures/common/sound_trigger +{ + qer_editorimage textures/common/sound_trigger + + diffusemap textures/common/sound_trigger +} +textures/common/surf_asphalt +{ + qer_editorimage textures/common/surf_asphalt + + diffusemap textures/common/surf_asphalt +} +textures/common/surf_cardboard +{ + qer_editorimage textures/common/surf_cardboard + + diffusemap textures/common/surf_cardboard +} +textures/common/surf_concrete +{ + qer_editorimage textures/common/surf_concrete + + diffusemap textures/common/surf_concrete +} +textures/common/surf_dirt +{ + qer_editorimage textures/common/surf_dirt + + diffusemap textures/common/surf_dirt +} +textures/common/surf_fabric +{ + qer_editorimage textures/common/surf_fabric + + diffusemap textures/common/surf_fabric +} +textures/common/surf_flesh +{ + qer_editorimage textures/common/surf_flesh + + diffusemap textures/common/surf_flesh +} +textures/common/surf_foliage +{ + qer_editorimage textures/common/surf_foliage + + diffusemap textures/common/surf_foliage +} +textures/common/surf_glass +{ + qer_editorimage textures/common/surf_glass + + diffusemap textures/common/surf_glass +} +textures/common/surf_linoleum +{ + qer_editorimage textures/common/surf_linoleum + + diffusemap textures/common/surf_linoleum +} +textures/common/surf_liquid +{ + qer_editorimage textures/common/surf_liquid + + diffusemap textures/common/surf_liquid +} +textures/common/surf_metal +{ + qer_editorimage textures/common/surf_metal + + diffusemap textures/common/surf_metal +} +textures/common/surf_plastic +{ + qer_editorimage textures/common/surf_plastic + + diffusemap textures/common/surf_plastic +} +textures/common/surf_rock +{ + qer_editorimage textures/common/surf_rock + + diffusemap textures/common/surf_rock +} +textures/common/surf_rubber +{ + qer_editorimage textures/common/surf_rubber + + diffusemap textures/common/surf_rubber +} +textures/common/surf_sludge +{ + qer_editorimage textures/common/surf_sludge + + diffusemap textures/common/surf_sludge +} +textures/common/surf_steampipe +{ + qer_editorimage textures/common/surf_steampipe + + diffusemap textures/common/surf_steampipe +} +textures/common/surf_stone +{ + qer_editorimage textures/common/surf_stone + + diffusemap textures/common/surf_stone +} +textures/common/surf_waterpipe +{ + qer_editorimage textures/common/surf_waterpipe + + diffusemap textures/common/surf_waterpipe +} +textures/common/surf_wood +{ + qer_editorimage textures/common/surf_wood + + diffusemap textures/common/surf_wood +} +textures/common/trigger +{ + qer_editorimage textures/common/trigger + + diffusemap textures/common/trigger +} +textures/common/trigger_shoot +{ + qer_editorimage textures/common/trigger_shoot + + diffusemap textures/common/trigger_shoot +} +textures/common/vehicle_clip +{ + qer_editorimage textures/common/vehicle_clip + + diffusemap textures/common/vehicle_clip +} +textures/common/video1 +{ + qer_editorimage textures/common/video1 + + diffusemap textures/common/video1 +} +textures/common/video2 +{ + qer_editorimage textures/common/video2 + + diffusemap textures/common/video2 +} +textures/common/video3 +{ + qer_editorimage textures/common/video3 + + diffusemap textures/common/video3 +} +textures/common/video4 +{ + qer_editorimage textures/common/video4 + + diffusemap textures/common/video4 +} +textures/common/video_gui +{ + qer_editorimage textures/common/video_gui + + diffusemap textures/common/video_gui +} +textures/common/video_weapon +{ + qer_editorimage textures/common/video_weapon + + diffusemap textures/common/video_weapon +} +textures/common/vision_clip +{ + qer_editorimage textures/common/vision_clip + + diffusemap textures/common/vision_clip +} +textures/common/visportal +{ + qer_editorimage textures/common/visportal + + diffusemap textures/common/visportal +} +textures/common/vol_player_view_fx +{ + qer_editorimage textures/common/vol_player_view_fx + + diffusemap textures/common/vol_player_view_fx +} +textures/common/vol_screenPRT +{ + qer_editorimage textures/common/vol_screenPRT + + diffusemap textures/common/vol_screenPRT +} +textures/common/volume +{ + qer_editorimage textures/common/volume + + diffusemap textures/common/volume +} +textures/common/water +{ + qer_editorimage textures/common/water + + diffusemap textures/common/water +} +textures/common/weapon_clip +{ + qer_editorimage textures/common/weapon_clip + + diffusemap textures/common/weapon_clip +} +textures/common/white +{ + qer_editorimage textures/common/white + + diffusemap textures/common/white +} +textures/d_industrialcity/brickfloor1b +{ + qer_editorimage textures/d_industrialcity/brickfloor1b + + diffusemap textures/d_industrialcity/brickfloor1b +} +textures/d_industrialcity/bricks1d +{ + qer_editorimage textures/d_industrialcity/bricks1d + + diffusemap textures/d_industrialcity/bricks1d +} +textures/d_industrialcity/bricks1e +{ + qer_editorimage textures/d_industrialcity/bricks1e + + diffusemap textures/d_industrialcity/bricks1e +} +textures/d_industrialcity/brokenconcrete1_wet +{ + qer_editorimage textures/d_industrialcity/brokenconcrete1_wet + + diffusemap textures/d_industrialcity/brokenconcrete1_wet + bumpmap textures/d_industrialcity/brokenconcrete1_wet_local + specularmap textures/d_industrialcity/brokenconcrete1_wet_s +} +textures/d_industrialcity/brokenconcrete1c_wet +{ + qer_editorimage textures/d_industrialcity/brokenconcrete1c_wet + + diffusemap textures/d_industrialcity/brokenconcrete1c_wet +} +textures/d_industrialcity/brokenconcrete1d2 +{ + qer_editorimage textures/d_industrialcity/brokenconcrete1d2 + + diffusemap textures/d_industrialcity/brokenconcrete1d2 + specularmap textures/d_industrialcity/brokenconcrete1d2_s +} +textures/d_industrialcity/bustedconcrete1b_modularpieces +{ + qer_editorimage textures/d_industrialcity/bustedconcrete1b_modularpieces + + diffusemap textures/d_industrialcity/bustedconcrete1b_modularpieces +} +textures/d_industrialcity/bustedconcrete1c_modularpieces +{ + qer_editorimage textures/d_industrialcity/bustedconcrete1c_modularpieces + + diffusemap textures/d_industrialcity/bustedconcrete1c_modularpieces +} +textures/d_industrialcity/ceiling1b_wet +{ + qer_editorimage textures/d_industrialcity/ceiling1b_wet + + diffusemap textures/d_industrialcity/ceiling1b_wet + specularmap textures/d_industrialcity/ceiling1b_wet_s +} +textures/d_industrialcity/concrete3 +{ + qer_editorimage textures/d_industrialcity/concrete3 + + diffusemap textures/d_industrialcity/concrete3 + bumpmap textures/d_industrialcity/concrete3_local + specularmap textures/d_industrialcity/concrete3_s +} +textures/d_industrialcity/concrete3c +{ + qer_editorimage textures/d_industrialcity/concrete3c + + diffusemap textures/d_industrialcity/concrete3c +} +textures/d_industrialcity/concrete3f +{ + qer_editorimage textures/d_industrialcity/concrete3f + + diffusemap textures/d_industrialcity/concrete3f + bumpmap textures/d_industrialcity/concrete3f_local + specularmap textures/d_industrialcity/concrete3f_s +} +textures/d_industrialcity/concrete3h2 +{ + qer_editorimage textures/d_industrialcity/concrete3h2 + + diffusemap textures/d_industrialcity/concrete3h2 +} +textures/d_industrialcity/concrete3h_locall +{ + qer_editorimage textures/d_industrialcity/concrete3h_locall + + diffusemap textures/d_industrialcity/concrete3h_locall +} +textures/d_industrialcity/concrete6c_modularpieces2 +{ + qer_editorimage textures/d_industrialcity/concrete6c_modularpieces2 + + diffusemap textures/d_industrialcity/concrete6c_modularpieces2 + bumpmap textures/d_industrialcity/concrete6c_modularpieces2_local +} +textures/d_industrialcity/concrete_dam_dc +{ + qer_editorimage textures/d_industrialcity/concrete_dam_dc + + diffusemap textures/d_industrialcity/concrete_dam_dc + bumpmap textures/d_industrialcity/concrete_dam_dc_local +} +textures/d_industrialcity/concrete_floors1_wet +{ + qer_editorimage textures/d_industrialcity/concrete_floors1_wet + + diffusemap textures/d_industrialcity/concrete_floors1_wet + bumpmap textures/d_industrialcity/concrete_floors1_wet_local + specularmap textures/d_industrialcity/concrete_floors1_wet_s +} +textures/d_industrialcity/concrete_lowwalls1 +{ + qer_editorimage textures/d_industrialcity/concrete_lowwalls1_d + + diffusemap textures/d_industrialcity/concrete_lowwalls1_d +} +textures/d_industrialcity/concrete_lowwalls16_wet +{ + qer_editorimage textures/d_industrialcity/concrete_lowwalls16_wet + + diffusemap textures/d_industrialcity/concrete_lowwalls16_wet +} +textures/d_industrialcity/concrete_lowwalls16_wet_ends +{ + qer_editorimage textures/d_industrialcity/concrete_lowwalls16_wet_ends + + diffusemap textures/d_industrialcity/concrete_lowwalls16_wet_ends +} +textures/d_industrialcity/concrete_lowwalls17_wet +{ + qer_editorimage textures/d_industrialcity/concrete_lowwalls17_wet + + diffusemap textures/d_industrialcity/concrete_lowwalls17_wet +} +textures/d_industrialcity/concrete_lowwalls17_wet_ends +{ + qer_editorimage textures/d_industrialcity/concrete_lowwalls17_wet_ends + + diffusemap textures/d_industrialcity/concrete_lowwalls17_wet_ends +} +textures/d_industrialcity/concrete_lowwalls1_ends +{ + qer_editorimage textures/d_industrialcity/concrete_lowwalls1_ends + + diffusemap textures/d_industrialcity/concrete_lowwalls1_ends + bumpmap textures/d_industrialcity/concrete_lowwalls1_ends_local +} +textures/d_industrialcity/concrete_lowwalls1_trims +{ + qer_editorimage textures/d_industrialcity/concrete_lowwalls1_trims + + diffusemap textures/d_industrialcity/concrete_lowwalls1_trims + bumpmap textures/d_industrialcity/concrete_lowwalls1_trims_local +} +textures/d_industrialcity/concrete_lowwalls1_trimsends +{ + qer_editorimage textures/d_industrialcity/concrete_lowwalls1_trimsends + + diffusemap textures/d_industrialcity/concrete_lowwalls1_trimsends + bumpmap textures/d_industrialcity/concrete_lowwalls1_trimsends_local +} +textures/d_industrialcity/concrete_lowwalls4_trims +{ + qer_editorimage textures/d_industrialcity/concrete_lowwalls4_trims + + diffusemap textures/d_industrialcity/concrete_lowwalls4_trims + bumpmap textures/d_industrialcity/concrete_lowwalls4_trims_local +} +textures/d_industrialcity/concrete_lowwalls4_trimsends +{ + qer_editorimage textures/d_industrialcity/concrete_lowwalls4_trimsends + + diffusemap textures/d_industrialcity/concrete_lowwalls4_trimsends + bumpmap textures/d_industrialcity/concrete_lowwalls4_trimsends_local +} +textures/d_industrialcity/concrete_pillar1b +{ + qer_editorimage textures/d_industrialcity/concrete_pillar1b + + diffusemap textures/d_industrialcity/concrete_pillar1b +} +textures/d_industrialcity/concrete_pillar1c +{ + qer_editorimage textures/d_industrialcity/concrete_pillar1c + + diffusemap textures/d_industrialcity/concrete_pillar1c + bumpmap textures/d_industrialcity/concrete_pillar1c_local +} +textures/d_industrialcity/concretetiles1_dusty_bordersv +{ + qer_editorimage textures/d_industrialcity/concretetiles1_dusty_bordersv + + diffusemap textures/d_industrialcity/concretetiles1_dusty_bordersv + bumpmap textures/d_industrialcity/concretetiles1_dusty_bordersv_local +} +textures/d_industrialcity/concretetiles1d2 +{ + qer_editorimage textures/d_industrialcity/concretetiles1d2 + + diffusemap textures/d_industrialcity/concretetiles1d2 +} +textures/d_industrialcity/concretetileslarge1c3a +{ + qer_editorimage textures/d_industrialcity/concretetileslarge1c3a + + diffusemap textures/d_industrialcity/concretetileslarge1c3a +} +textures/d_industrialcity/concretetunnel1 +{ + qer_editorimage textures/d_industrialcity/concretetunnel1 + + diffusemap textures/d_industrialcity/concretetunnel1 + bumpmap textures/d_industrialcity/concretetunnel1_local + specularmap textures/d_industrialcity/concretetunnel1_s +} +textures/d_industrialcity/concretetunnel1d +{ + qer_editorimage textures/d_industrialcity/concretetunnel1d + + diffusemap textures/d_industrialcity/concretetunnel1d +} +textures/d_industrialcity/concretetunnel1f +{ + qer_editorimage textures/d_industrialcity/concretetunnel1f + + diffusemap textures/d_industrialcity/concretetunnel1f +} +textures/d_industrialcity/debris_mold3 +{ + qer_editorimage textures/d_industrialcity/debris_mold3 + + diffusemap textures/d_industrialcity/debris_mold3 + bumpmap textures/d_industrialcity/debris_mold3_local + specularmap textures/d_industrialcity/debris_mold3_s +} +textures/d_industrialcity/debris_wet +{ + qer_editorimage textures/d_industrialcity/debris_wet + + diffusemap textures/d_industrialcity/debris_wet + bumpmap textures/d_industrialcity/debris_wet_local + specularmap textures/d_industrialcity/debris_wet_s +} +textures/d_industrialcity/floors/brokenconcrete1d +{ + qer_editorimage textures/d_industrialcity/floors/brokenconcrete1d + + diffusemap textures/d_industrialcity/floors/brokenconcrete1d + bumpmap textures/d_industrialcity/floors/brokenconcrete1d_local +} +textures/d_industrialcity/gratefloor1 +{ + qer_editorimage textures/d_industrialcity/gratefloor1 + + diffusemap textures/d_industrialcity/gratefloor1 + bumpmap textures/d_industrialcity/gratefloor1_local +} +textures/d_industrialcity/gratefloor2 +{ + qer_editorimage textures/d_industrialcity/gratefloor2 + + diffusemap textures/d_industrialcity/gratefloor2 + bumpmap textures/d_industrialcity/gratefloor2_local +} +textures/d_industrialcity/interiordoor1 +{ + qer_editorimage textures/d_industrialcity/interiordoor1 + + diffusemap textures/d_industrialcity/interiordoor1 + bumpmap textures/d_industrialcity/interiordoor1_local +} +textures/d_industrialcity/interiorwall2 +{ + qer_editorimage textures/d_industrialcity/interiorwall2 + + diffusemap textures/d_industrialcity/interiorwall2 + bumpmap textures/d_industrialcity/interiorwall2_local +} +textures/d_industrialcity/interiorwall2c_corners +{ + qer_editorimage textures/d_industrialcity/interiorwall2c_corners + + diffusemap textures/d_industrialcity/interiorwall2c_corners + bumpmap textures/d_industrialcity/interiorwall2c_corners_local +} +textures/d_industrialcity/interiorwall_composite1 +{ + qer_editorimage textures/d_industrialcity/interiorwall_composite1 + + diffusemap textures/d_industrialcity/interiorwall_composite1 + bumpmap textures/d_industrialcity/interiorwall_composite1_local +} +textures/d_industrialcity/metal_2_dark +{ + qer_editorimage textures/d_industrialcity/metal_2_dark + + diffusemap textures/d_industrialcity/metal_2_dark +} +textures/d_industrialcity/metal_7b3_panels2c +{ + qer_editorimage textures/d_industrialcity/metal_7b3_panels2c + + diffusemap textures/d_industrialcity/metal_7b3_panels2c +} +textures/d_industrialcity/metal_dam1 +{ + qer_editorimage textures/d_industrialcity/metal_dam1 + + diffusemap textures/d_industrialcity/metal_dam1 + bumpmap textures/d_industrialcity/metal_dam1_local + specularmap textures/d_industrialcity/metal_dam1_s +} +textures/d_industrialcity/metal_floor1b +{ + qer_editorimage textures/d_industrialcity/metal_floor1b + + diffusemap textures/d_industrialcity/metal_floor1b +} +textures/d_industrialcity/metal_floor1c +{ + qer_editorimage textures/d_industrialcity/metal_floor1c + + diffusemap textures/d_industrialcity/metal_floor1c +} +textures/d_industrialcity/metal_floor1e +{ + qer_editorimage textures/d_industrialcity/metal_floor1e + + diffusemap textures/d_industrialcity/metal_floor1e +} +textures/d_industrialcity/metal_panels1f +{ + qer_editorimage textures/d_industrialcity/metal_panels1f + + diffusemap textures/d_industrialcity/metal_panels1f +} +textures/d_industrialcity/metal_panels2d +{ + qer_editorimage textures/d_industrialcity/metal_panels2d + + diffusemap textures/d_industrialcity/metal_panels2d +} +textures/d_industrialcity/metal_panels2f +{ + qer_editorimage textures/d_industrialcity/metal_panels2f + + diffusemap textures/d_industrialcity/metal_panels2f +} +textures/d_industrialcity/metal_panels2h +{ + qer_editorimage textures/d_industrialcity/metal_panels2h + + diffusemap textures/d_industrialcity/metal_panels2h +} +textures/d_industrialcity/metal_panels3 +{ + qer_editorimage textures/d_industrialcity/metal_panels3 + + diffusemap textures/d_industrialcity/metal_panels3 + bumpmap textures/d_industrialcity/metal_panels3_local +} +textures/d_industrialcity/metal_panels3g_brighter +{ + qer_editorimage textures/d_industrialcity/metal_panels3g_brighter + + diffusemap textures/d_industrialcity/metal_panels3g_brighter +} +textures/d_industrialcity/metal_panels4 +{ + qer_editorimage textures/d_industrialcity/metal_panels4 + + diffusemap textures/d_industrialcity/metal_panels4 + bumpmap textures/d_industrialcity/metal_panels4_local + specularmap textures/d_industrialcity/metal_panels4_s +} +textures/d_industrialcity/metal_pp +{ + qer_editorimage textures/d_industrialcity/metal_pp + + diffusemap textures/d_industrialcity/metal_pp + bumpmap textures/d_industrialcity/metal_pp_local + specularmap textures/d_industrialcity/metal_pp_s +} +textures/d_industrialcity/metal_pp_gv +{ + qer_editorimage textures/d_industrialcity/metal_pp_gv + + diffusemap textures/d_industrialcity/metal_pp_gv +} +textures/d_industrialcity/metal_sign +{ + qer_editorimage textures/d_industrialcity/metal_sign + + diffusemap textures/d_industrialcity/metal_sign + specularmap textures/d_industrialcity/metal_sign_s +} +textures/d_industrialcity/metal_tile1a +{ + qer_editorimage textures/d_industrialcity/metal_tile1a + + diffusemap textures/d_industrialcity/metal_tile1a + specularmap textures/d_industrialcity/metal_tile1a_s +} +textures/d_industrialcity/metal_tile1b2 +{ + qer_editorimage textures/d_industrialcity/metal_tile1b2 + + diffusemap textures/d_industrialcity/metal_tile1b2 +} +textures/d_industrialcity/metal_tile1c +{ + qer_editorimage textures/d_industrialcity/metal_tile1c + + diffusemap textures/d_industrialcity/metal_tile1c +} +textures/d_industrialcity/metal_tile1h +{ + qer_editorimage textures/d_industrialcity/metal_tile1h + + diffusemap textures/d_industrialcity/metal_tile1h +} +textures/d_industrialcity/metalbeams3 +{ + qer_editorimage textures/d_industrialcity/metalbeams3 + + diffusemap textures/d_industrialcity/metalbeams3 + bumpmap textures/d_industrialcity/metalbeams3_local +} +textures/d_industrialcity/metalbeams3b +{ + qer_editorimage textures/d_industrialcity/metalbeams3b + + diffusemap textures/d_industrialcity/metalbeams3b +} +textures/d_industrialcity/pipes1b +{ + qer_editorimage textures/d_industrialcity/pipes1b + + diffusemap textures/d_industrialcity/pipes1b + bumpmap textures/d_industrialcity/pipes1b_local +} +textures/d_industrialcity/pipes_2d +{ + qer_editorimage textures/d_industrialcity/pipes_2d_d + + diffusemap textures/d_industrialcity/pipes_2d_d +} +textures/d_industrialcity/pipes_2e +{ + qer_editorimage textures/d_industrialcity/pipes_2e_d + + diffusemap textures/d_industrialcity/pipes_2e_d +} +textures/d_industrialcity/plaster1c2 +{ + qer_editorimage textures/d_industrialcity/plaster1c2 + + diffusemap textures/d_industrialcity/plaster1c2 +} +textures/d_industrialcity/tunnelmud1 +{ + qer_editorimage textures/d_industrialcity/tunnelmud1 + + diffusemap textures/d_industrialcity/tunnelmud1 + bumpmap textures/d_industrialcity/tunnelmud1_local + specularmap textures/d_industrialcity/tunnelmud1_s +} +textures/deadcity/dc_hospital_wall_corners_w +{ + qer_editorimage textures/deadcity/dc_hospital_wall_corners_w + + diffusemap textures/deadcity/dc_hospital_wall_corners_w +} +textures/decals/arrows1 +{ + qer_editorimage textures/decals/arrows1 + + diffusemap textures/decals/arrows1 +} +textures/decals/image +{ + qer_editorimage textures/decals/image + + diffusemap textures/decals/image +} +textures/decals/image_map +{ + qer_editorimage textures/decals/image_map + + diffusemap textures/decals/image_map +} +textures/decals/map +{ + qer_editorimage textures/decals/map + + diffusemap textures/decals/map + bumpmap textures/decals/map_local +} +textures/decals/noteboard +{ + qer_editorimage textures/decals/noteboard + + diffusemap textures/decals/noteboard + bumpmap textures/decals/noteboard_local +} +textures/decals/noteboard_black +{ + qer_editorimage textures/decals/noteboard_black + + diffusemap textures/decals/noteboard_black +} +textures/decals/papers1 +{ + qer_editorimage textures/decals/papers1 + + diffusemap textures/decals/papers1 + bumpmap textures/decals/papers1_local +} +textures/decals/sheriff +{ + qer_editorimage textures/decals/sheriff + + diffusemap textures/decals/sheriff + specularmap textures/decals/sheriff_s +} +textures/decals/stickynotes +{ + qer_editorimage textures/decals/stickynotes + + diffusemap textures/decals/stickynotes + bumpmap textures/decals/stickynotes_local +} +textures/decals/tips +{ + qer_editorimage textures/decals/tips + + diffusemap textures/decals/tips +} +textures/editor/info_ambient +{ + qer_editorimage textures/editor/info_ambient + + diffusemap textures/editor/info_ambient +} +textures/editor/info_null +{ + qer_editorimage textures/editor/info_null + + diffusemap textures/editor/info_null +} +textures/editor/node_base/bottom_center +{ + qer_editorimage textures/editor/node_base/bottom_center + + diffusemap textures/editor/node_base/bottom_center +} +textures/editor/node_base/bottom_center_highlight +{ + qer_editorimage textures/editor/node_base/bottom_center_highlight + + diffusemap textures/editor/node_base/bottom_center_highlight +} +textures/editor/node_base/bottom_center_hover +{ + qer_editorimage textures/editor/node_base/bottom_center_hover + + diffusemap textures/editor/node_base/bottom_center_hover +} +textures/editor/node_base/bottom_center_selected +{ + qer_editorimage textures/editor/node_base/bottom_center_selected + + diffusemap textures/editor/node_base/bottom_center_selected +} +textures/editor/node_base/bottom_left +{ + qer_editorimage textures/editor/node_base/bottom_left + + diffusemap textures/editor/node_base/bottom_left +} +textures/editor/node_base/bottom_left_highlight +{ + qer_editorimage textures/editor/node_base/bottom_left_highlight + + diffusemap textures/editor/node_base/bottom_left_highlight +} +textures/editor/node_base/bottom_left_hover +{ + qer_editorimage textures/editor/node_base/bottom_left_hover + + diffusemap textures/editor/node_base/bottom_left_hover +} +textures/editor/node_base/bottom_left_selected +{ + qer_editorimage textures/editor/node_base/bottom_left_selected + + diffusemap textures/editor/node_base/bottom_left_selected +} +textures/editor/node_base/bottom_right +{ + qer_editorimage textures/editor/node_base/bottom_right + + diffusemap textures/editor/node_base/bottom_right +} +textures/editor/node_base/bottom_right_highlight +{ + qer_editorimage textures/editor/node_base/bottom_right_highlight + + diffusemap textures/editor/node_base/bottom_right_highlight +} +textures/editor/node_base/bottom_right_hover +{ + qer_editorimage textures/editor/node_base/bottom_right_hover + + diffusemap textures/editor/node_base/bottom_right_hover +} +textures/editor/node_base/bottom_right_selected +{ + qer_editorimage textures/editor/node_base/bottom_right_selected + + diffusemap textures/editor/node_base/bottom_right_selected +} +textures/editor/node_base/eyeball_hidden +{ + qer_editorimage textures/editor/node_base/eyeball_hidden + + diffusemap textures/editor/node_base/eyeball_hidden +} +textures/editor/node_base/eyeball_visible +{ + qer_editorimage textures/editor/node_base/eyeball_visible + + diffusemap textures/editor/node_base/eyeball_visible +} +textures/editor/node_base/middle_center +{ + qer_editorimage textures/editor/node_base/middle_center + + diffusemap textures/editor/node_base/middle_center +} +textures/editor/node_base/middle_center_highlight +{ + qer_editorimage textures/editor/node_base/middle_center_highlight + + diffusemap textures/editor/node_base/middle_center_highlight +} +textures/editor/node_base/middle_center_hover +{ + qer_editorimage textures/editor/node_base/middle_center_hover + + diffusemap textures/editor/node_base/middle_center_hover +} +textures/editor/node_base/middle_center_selected +{ + qer_editorimage textures/editor/node_base/middle_center_selected + + diffusemap textures/editor/node_base/middle_center_selected +} +textures/editor/node_base/middle_left +{ + qer_editorimage textures/editor/node_base/middle_left + + diffusemap textures/editor/node_base/middle_left +} +textures/editor/node_base/middle_left_highlight +{ + qer_editorimage textures/editor/node_base/middle_left_highlight + + diffusemap textures/editor/node_base/middle_left_highlight +} +textures/editor/node_base/middle_left_hover +{ + qer_editorimage textures/editor/node_base/middle_left_hover + + diffusemap textures/editor/node_base/middle_left_hover +} +textures/editor/node_base/middle_left_selected +{ + qer_editorimage textures/editor/node_base/middle_left_selected + + diffusemap textures/editor/node_base/middle_left_selected +} +textures/editor/node_base/middle_right +{ + qer_editorimage textures/editor/node_base/middle_right + + diffusemap textures/editor/node_base/middle_right +} +textures/editor/node_base/middle_right_highlight +{ + qer_editorimage textures/editor/node_base/middle_right_highlight + + diffusemap textures/editor/node_base/middle_right_highlight +} +textures/editor/node_base/middle_right_hover +{ + qer_editorimage textures/editor/node_base/middle_right_hover + + diffusemap textures/editor/node_base/middle_right_hover +} +textures/editor/node_base/middle_right_selected +{ + qer_editorimage textures/editor/node_base/middle_right_selected + + diffusemap textures/editor/node_base/middle_right_selected +} +textures/editor/node_base/top_center +{ + qer_editorimage textures/editor/node_base/top_center + + diffusemap textures/editor/node_base/top_center +} +textures/editor/node_base/top_center_highlight +{ + qer_editorimage textures/editor/node_base/top_center_highlight + + diffusemap textures/editor/node_base/top_center_highlight +} +textures/editor/node_base/top_center_hover +{ + qer_editorimage textures/editor/node_base/top_center_hover + + diffusemap textures/editor/node_base/top_center_hover +} +textures/editor/node_base/top_center_selected +{ + qer_editorimage textures/editor/node_base/top_center_selected + + diffusemap textures/editor/node_base/top_center_selected +} +textures/editor/node_base/top_left +{ + qer_editorimage textures/editor/node_base/top_left + + diffusemap textures/editor/node_base/top_left +} +textures/editor/node_base/top_left_highlight +{ + qer_editorimage textures/editor/node_base/top_left_highlight + + diffusemap textures/editor/node_base/top_left_highlight +} +textures/editor/node_base/top_left_hover +{ + qer_editorimage textures/editor/node_base/top_left_hover + + diffusemap textures/editor/node_base/top_left_hover +} +textures/editor/node_base/top_left_selected +{ + qer_editorimage textures/editor/node_base/top_left_selected + + diffusemap textures/editor/node_base/top_left_selected +} +textures/editor/node_base/top_right +{ + qer_editorimage textures/editor/node_base/top_right + + diffusemap textures/editor/node_base/top_right +} +textures/editor/node_base/top_right_highlight +{ + qer_editorimage textures/editor/node_base/top_right_highlight + + diffusemap textures/editor/node_base/top_right_highlight +} +textures/editor/node_base/top_right_hover +{ + qer_editorimage textures/editor/node_base/top_right_hover + + diffusemap textures/editor/node_base/top_right_hover +} +textures/editor/node_base/top_right_selected +{ + qer_editorimage textures/editor/node_base/top_right_selected + + diffusemap textures/editor/node_base/top_right_selected +} +textures/editor/particle/properties/acceleration +{ + qer_editorimage textures/editor/particle/properties/acceleration + + diffusemap textures/editor/particle/properties/acceleration +} +textures/editor/particle/properties/animation +{ + qer_editorimage textures/editor/particle/properties/animation + + diffusemap textures/editor/particle/properties/animation +} +textures/editor/particle/properties/aspect +{ + qer_editorimage textures/editor/particle/properties/aspect + + diffusemap textures/editor/particle/properties/aspect +} +textures/editor/particle/properties/blank +{ + qer_editorimage textures/editor/particle/properties/blank + + diffusemap textures/editor/particle/properties/blank +} +textures/editor/particle/properties/colorattributes +{ + qer_editorimage textures/editor/particle/properties/colorattributes + + diffusemap textures/editor/particle/properties/colorattributes +} +textures/editor/particle/properties/custompath +{ + qer_editorimage textures/editor/particle/properties/custompath + + diffusemap textures/editor/particle/properties/custompath +} +textures/editor/particle/properties/direction +{ + qer_editorimage textures/editor/particle/properties/direction + + diffusemap textures/editor/particle/properties/direction +} +textures/editor/particle/properties/distribution +{ + qer_editorimage textures/editor/particle/properties/distribution + + diffusemap textures/editor/particle/properties/distribution +} +textures/editor/particle/properties/genericparm +{ + qer_editorimage textures/editor/particle/properties/genericparm + + diffusemap textures/editor/particle/properties/genericparm +} +textures/editor/particle/properties/gravity +{ + qer_editorimage textures/editor/particle/properties/gravity + + diffusemap textures/editor/particle/properties/gravity +} +textures/editor/particle/properties/initialRotation +{ + qer_editorimage textures/editor/particle/properties/initialRotation + + diffusemap textures/editor/particle/properties/initialRotation +} +textures/editor/particle/properties/orientation +{ + qer_editorimage textures/editor/particle/properties/orientation + + diffusemap textures/editor/particle/properties/orientation +} +textures/editor/particle/properties/pivot +{ + qer_editorimage textures/editor/particle/properties/pivot + + diffusemap textures/editor/particle/properties/pivot +} +textures/editor/particle/properties/rotation +{ + qer_editorimage textures/editor/particle/properties/rotation + + diffusemap textures/editor/particle/properties/rotation +} +textures/editor/particle/properties/size +{ + qer_editorimage textures/editor/particle/properties/size + + diffusemap textures/editor/particle/properties/size +} +textures/editor/particle/properties/spawnlocation +{ + qer_editorimage textures/editor/particle/properties/spawnlocation + + diffusemap textures/editor/particle/properties/spawnlocation +} +textures/editor/particle/properties/speed +{ + qer_editorimage textures/editor/particle/properties/speed + + diffusemap textures/editor/particle/properties/speed +} +textures/editor/particle/properties/systemproperties +{ + qer_editorimage textures/editor/particle/properties/systemproperties + + diffusemap textures/editor/particle/properties/systemproperties +} +textures/editor/particle/properties/texAnimation +{ + qer_editorimage textures/editor/particle/properties/texAnimation + + diffusemap textures/editor/particle/properties/texAnimation +} +textures/editor/speaker +{ + qer_editorimage textures/editor/speaker + + diffusemap textures/editor/speaker +} +textures/facility/beam1 +{ + qer_editorimage textures/facility/beam1_d + + diffusemap textures/facility/beam1_d + bumpmap textures/facility/beam1_local + specularmap textures/facility/beam1_s +} +textures/facility/beam_metal1 +{ + qer_editorimage textures/facility/beam_metal1 + + diffusemap textures/facility/beam_metal1 + bumpmap textures/facility/beam_metal1_local +} +textures/facility/bridgeTex5 +{ + qer_editorimage textures/facility/bridgeTex5 + + diffusemap textures/facility/bridgeTex5 + bumpmap textures/facility/bridgeTex5_h + specularmap textures/facility/bridgeTex5_s +} +textures/facility/bridgetex5 +{ + qer_editorimage textures/facility/bridgetex5 + + diffusemap textures/facility/bridgetex5 + bumpmap textures/facility/bridgetex5_local + specularmap textures/facility/bridgetex5_s +} +textures/facility/coal_pile1_add +{ + qer_editorimage textures/facility/coal_pile1_add + + diffusemap textures/facility/coal_pile1_add +} +textures/facility/coal_pile1_tile +{ + qer_editorimage textures/facility/coal_pile1_tile + + diffusemap textures/facility/coal_pile1_tile + bumpmap textures/facility/coal_pile1_tile_local + specularmap textures/facility/coal_pile1_tile_s +} +textures/facility/floor1 +{ + qer_editorimage textures/facility/floor1 + + diffusemap textures/facility/floor1 + bumpmap textures/facility/floor1_local +} +textures/facility/floor_concrete2 +{ + qer_editorimage textures/facility/floor_concrete2 + + diffusemap textures/facility/floor_concrete2 + bumpmap textures/facility/floor_concrete2_h + specularmap textures/facility/floor_concrete2_s +} +textures/facility/floor_metal1 +{ + qer_editorimage textures/facility/floor_metal1 + + diffusemap textures/facility/floor_metal1 + specularmap textures/facility/floor_metal1_s +} +textures/facility/floor_metal2 +{ + qer_editorimage textures/facility/floor_metal2 + + diffusemap textures/facility/floor_metal2 + bumpmap textures/facility/floor_metal2_h +} +textures/facility/floor_metal2a +{ + qer_editorimage textures/facility/floor_metal2a + + diffusemap textures/facility/floor_metal2a +} +textures/facility/floor_metal2b +{ + qer_editorimage textures/facility/floor_metal2b + + diffusemap textures/facility/floor_metal2b +} +textures/facility/floor_metal3 +{ + qer_editorimage textures/facility/floor_metal3 + + diffusemap textures/facility/floor_metal3 + bumpmap textures/facility/floor_metal3_local +} +textures/facility/glass1 +{ + qer_editorimage textures/facility/glass1 + + diffusemap textures/facility/glass1 + bumpmap textures/facility/glass1_local + specularmap textures/facility/glass1_s +} +textures/facility/glass1_add +{ + qer_editorimage textures/facility/glass1_add + + diffusemap textures/facility/glass1_add +} +textures/facility/glass1a +{ + qer_editorimage textures/facility/glass1a + + diffusemap textures/facility/glass1a +} +textures/facility/metal2a +{ + qer_editorimage textures/facility/metal2a + + diffusemap textures/facility/metal2a +} +textures/facility/metal2c +{ + qer_editorimage textures/facility/metal2c + + diffusemap textures/facility/metal2c +} +textures/facility/metal3a +{ + qer_editorimage textures/facility/metal3a + + diffusemap textures/facility/metal3a +} +textures/facility/pole1a +{ + qer_editorimage textures/facility/pole1a_d + + diffusemap textures/facility/pole1a_d +} +textures/facility/pole1b +{ + qer_editorimage textures/facility/pole1b_d + + diffusemap textures/facility/pole1b_d +} +textures/facility/pole1za +{ + qer_editorimage textures/facility/pole1za_d + + diffusemap textures/facility/pole1za_d +} +textures/facility/pole1ze +{ + qer_editorimage textures/facility/pole1ze_d + + diffusemap textures/facility/pole1ze_d +} +textures/foliage/agave128 +{ + qer_editorimage textures/foliage/agave128 + + diffusemap textures/foliage/agave128 +} +textures/foliage/bush1128 +{ + qer_editorimage textures/foliage/bush1128 + + diffusemap textures/foliage/bush1128 +} +textures/foliage/bush1256 +{ + qer_editorimage textures/foliage/bush1256 + + diffusemap textures/foliage/bush1256 +} +textures/foliage/bush2c256 +{ + qer_editorimage textures/foliage/bush2c256 + + diffusemap textures/foliage/bush2c256 +} +textures/foliage/cactus1256 +{ + qer_editorimage textures/foliage/cactus1256 + + diffusemap textures/foliage/cactus1256 +} +textures/foliage/grass1 +{ + qer_editorimage textures/foliage/grass1 + + diffusemap textures/foliage/grass1 +} +textures/foliage/grass2256 +{ + qer_editorimage textures/foliage/grass2256 + + diffusemap textures/foliage/grass2256 +} +textures/foliage/gv_bush_01 +{ + qer_editorimage textures/foliage/gv_bush_01 + + diffusemap textures/foliage/gv_bush_01 +} +textures/foliage/gv_long_grass_01 +{ + qer_editorimage textures/foliage/gv_long_grass_01 + + diffusemap textures/foliage/gv_long_grass_01 +} +textures/foliage/gv_plant_02 +{ + qer_editorimage textures/foliage/gv_plant_02 + + diffusemap textures/foliage/gv_plant_02 +} +textures/foliage/plant1b256 +{ + qer_editorimage textures/foliage/plant1b256 + + diffusemap textures/foliage/plant1b256 +} +textures/foliage/plant2256 +{ + qer_editorimage textures/foliage/plant2256 + + diffusemap textures/foliage/plant2256 +} +textures/foliage/plant4256 +{ + qer_editorimage textures/foliage/plant4256 + + diffusemap textures/foliage/plant4256 +} +textures/foliage/plant4b256 +{ + qer_editorimage textures/foliage/plant4b256 + + diffusemap textures/foliage/plant4b256 +} +textures/foliage/plant5128 +{ + qer_editorimage textures/foliage/plant5128 + + diffusemap textures/foliage/plant5128 +} +textures/foliage/plant6256 +{ + qer_editorimage textures/foliage/plant6256 + + diffusemap textures/foliage/plant6256 +} +textures/foliage/plant7b256 +{ + qer_editorimage textures/foliage/plant7b256 + + diffusemap textures/foliage/plant7b256 +} +textures/foliage/tree1 +{ + qer_editorimage textures/foliage/tree1 + + diffusemap textures/foliage/tree1 +} +textures/foliage/tree2 +{ + qer_editorimage textures/foliage/tree2 + + diffusemap textures/foliage/tree2 +} +textures/foliage/tree3 +{ + qer_editorimage textures/foliage/tree3 + + diffusemap textures/foliage/tree3 +} +textures/foliage/weed_single1 +{ + qer_editorimage textures/foliage/weed_single1 + + diffusemap textures/foliage/weed_single1 +} +textures/gasstation/ramp +{ + qer_editorimage textures/gasstation/ramp + + diffusemap textures/gasstation/ramp + bumpmap textures/gasstation/ramp_local + specularmap textures/gasstation/ramp_s +} +textures/generic/alumsiding3 +{ + qer_editorimage textures/generic/alumsiding3 + + diffusemap textures/generic/alumsiding3 + bumpmap textures/generic/alumsiding3_local + specularmap textures/generic/alumsiding3_s +} +textures/generic/alumsiding5 +{ + qer_editorimage textures/generic/alumsiding5 + + diffusemap textures/generic/alumsiding5 + bumpmap textures/generic/alumsiding5_local + specularmap textures/generic/alumsiding5_s +} +textures/generic/alumsiding6 +{ + qer_editorimage textures/generic/alumsiding6 + + diffusemap textures/generic/alumsiding6 + bumpmap textures/generic/alumsiding6_local + specularmap textures/generic/alumsiding6_s +} +textures/generic/barbedwire1 +{ + qer_editorimage textures/generic/barbedwire1_d + + diffusemap textures/generic/barbedwire1_d + bumpmap textures/generic/barbedwire1_local + specularmap textures/generic/barbedwire1_s +} +textures/generic/braidedhose1 +{ + qer_editorimage textures/generic/braidedhose1 + + diffusemap textures/generic/braidedhose1 + bumpmap textures/generic/braidedhose1_local + specularmap textures/generic/braidedhose1_s +} +textures/generic/diamondplate +{ + qer_editorimage textures/generic/diamondplate + + diffusemap textures/generic/diamondplate + bumpmap textures/generic/diamondplate_local + specularmap textures/generic/diamondplate_s +} +textures/generic/metalswatch2 +{ + qer_editorimage textures/generic/metalswatch2 + + diffusemap textures/generic/metalswatch2 + bumpmap textures/generic/metalswatch2_h + specularmap textures/generic/metalswatch2_s +} +textures/generic/weatherwood2 +{ + qer_editorimage textures/generic/weatherwood2 + + diffusemap textures/generic/weatherwood2 + bumpmap textures/generic/weatherwood2_h + specularmap textures/generic/weatherwood2_s +} +textures/guis/action/action_game +{ + qer_editorimage textures/guis/action/action_game + + diffusemap textures/guis/action/action_game +} +textures/guis/action/action_loot +{ + qer_editorimage textures/guis/action/action_loot + + diffusemap textures/guis/action/action_loot +} +textures/guis/action/action_pickup +{ + qer_editorimage textures/guis/action/action_pickup + + diffusemap textures/guis/action/action_pickup +} +textures/guis/cards/authority_00 +{ + qer_editorimage textures/guis/cards/authority_00 + + diffusemap textures/guis/cards/authority_00 +} +textures/guis/cards/authority_01 +{ + qer_editorimage textures/guis/cards/authority_01 + + diffusemap textures/guis/cards/authority_01 +} +textures/guis/cards/authority_02 +{ + qer_editorimage textures/guis/cards/authority_02 + + diffusemap textures/guis/cards/authority_02 +} +textures/guis/cards/authority_03 +{ + qer_editorimage textures/guis/cards/authority_03 + + diffusemap textures/guis/cards/authority_03 +} +textures/guis/cards/bandit_gearhead_00 +{ + qer_editorimage textures/guis/cards/bandit_gearhead_00 + + diffusemap textures/guis/cards/bandit_gearhead_00 +} +textures/guis/cards/bandit_gearhead_01 +{ + qer_editorimage textures/guis/cards/bandit_gearhead_01 + + diffusemap textures/guis/cards/bandit_gearhead_01 +} +textures/guis/cards/bandit_gearhead_02 +{ + qer_editorimage textures/guis/cards/bandit_gearhead_02 + + diffusemap textures/guis/cards/bandit_gearhead_02 +} +textures/guis/cards/bandit_ghost_00 +{ + qer_editorimage textures/guis/cards/bandit_ghost_00 + + diffusemap textures/guis/cards/bandit_ghost_00 +} +textures/guis/cards/bandit_ghost_01 +{ + qer_editorimage textures/guis/cards/bandit_ghost_01 + + diffusemap textures/guis/cards/bandit_ghost_01 +} +textures/guis/cards/bandit_ghost_02 +{ + qer_editorimage textures/guis/cards/bandit_ghost_02 + + diffusemap textures/guis/cards/bandit_ghost_02 +} +textures/guis/cards/bandit_jackal_03 +{ + qer_editorimage textures/guis/cards/bandit_jackal_03 + + diffusemap textures/guis/cards/bandit_jackal_03 +} +textures/guis/cards/bandit_jackal_04 +{ + qer_editorimage textures/guis/cards/bandit_jackal_04 + + diffusemap textures/guis/cards/bandit_jackal_04 +} +textures/guis/cards/bandit_shrouded_01 +{ + qer_editorimage textures/guis/cards/bandit_shrouded_01 + + diffusemap textures/guis/cards/bandit_shrouded_01 +} +textures/guis/cards/bandit_shrouded_02 +{ + qer_editorimage textures/guis/cards/bandit_shrouded_02 + + diffusemap textures/guis/cards/bandit_shrouded_02 +} +textures/guis/cards/bandit_shrouded_03 +{ + qer_editorimage textures/guis/cards/bandit_shrouded_03 + + diffusemap textures/guis/cards/bandit_shrouded_03 +} +textures/guis/cards/bandit_wasted_01 +{ + qer_editorimage textures/guis/cards/bandit_wasted_01 + + diffusemap textures/guis/cards/bandit_wasted_01 +} +textures/guis/cards/bandit_wasted_02 +{ + qer_editorimage textures/guis/cards/bandit_wasted_02 + + diffusemap textures/guis/cards/bandit_wasted_02 +} +textures/guis/cards/bandit_wasted_03 +{ + qer_editorimage textures/guis/cards/bandit_wasted_03 + + diffusemap textures/guis/cards/bandit_wasted_03 +} +textures/guis/cards/item_00 +{ + qer_editorimage textures/guis/cards/item_00 + + diffusemap textures/guis/cards/item_00 +} +textures/guis/cards/item_01 +{ + qer_editorimage textures/guis/cards/item_01 + + diffusemap textures/guis/cards/item_01 +} +textures/guis/cards/item_02 +{ + qer_editorimage textures/guis/cards/item_02 + + diffusemap textures/guis/cards/item_02 +} +textures/guis/cards/item_03 +{ + qer_editorimage textures/guis/cards/item_03 + + diffusemap textures/guis/cards/item_03 +} +textures/guis/cards/item_05 +{ + qer_editorimage textures/guis/cards/item_05 + + diffusemap textures/guis/cards/item_05 +} +textures/guis/cards/item_06 +{ + qer_editorimage textures/guis/cards/item_06 + + diffusemap textures/guis/cards/item_06 +} +textures/guis/cards/item_07 +{ + qer_editorimage textures/guis/cards/item_07 + + diffusemap textures/guis/cards/item_07 +} +textures/guis/cards/item_08 +{ + qer_editorimage textures/guis/cards/item_08 + + diffusemap textures/guis/cards/item_08 +} +textures/guis/cards/item_09 +{ + qer_editorimage textures/guis/cards/item_09 + + diffusemap textures/guis/cards/item_09 +} +textures/guis/cards/mut_club +{ + qer_editorimage textures/guis/cards/mut_club + + diffusemap textures/guis/cards/mut_club +} +textures/guis/cards/mut_dagger_thrower +{ + qer_editorimage textures/guis/cards/mut_dagger_thrower + + diffusemap textures/guis/cards/mut_dagger_thrower +} +textures/guis/cards/mut_dyno +{ + qer_editorimage textures/guis/cards/mut_dyno + + diffusemap textures/guis/cards/mut_dyno +} +textures/guis/cards/mut_giant +{ + qer_editorimage textures/guis/cards/mut_giant + + diffusemap textures/guis/cards/mut_giant +} +textures/guis/cards/mut_large +{ + qer_editorimage textures/guis/cards/mut_large + + diffusemap textures/guis/cards/mut_large +} +textures/guis/cards/mut_slime +{ + qer_editorimage textures/guis/cards/mut_slime + + diffusemap textures/guis/cards/mut_slime +} +textures/guis/cards/mut_tentacle +{ + qer_editorimage textures/guis/cards/mut_tentacle + + diffusemap textures/guis/cards/mut_tentacle +} +textures/guis/cards/mut_thrower +{ + qer_editorimage textures/guis/cards/mut_thrower + + diffusemap textures/guis/cards/mut_thrower +} +textures/guis/cards/settler_00 +{ + qer_editorimage textures/guis/cards/settler_00 + + diffusemap textures/guis/cards/settler_00 +} +textures/guis/cards/settler_01 +{ + qer_editorimage textures/guis/cards/settler_01 + + diffusemap textures/guis/cards/settler_01 +} +textures/guis/cards/settler_02 +{ + qer_editorimage textures/guis/cards/settler_02 + + diffusemap textures/guis/cards/settler_02 +} +textures/guis/cards/settler_03 +{ + qer_editorimage textures/guis/cards/settler_03 + + diffusemap textures/guis/cards/settler_03 +} +textures/guis/cards/settler_04 +{ + qer_editorimage textures/guis/cards/settler_04 + + diffusemap textures/guis/cards/settler_04 +} +textures/guis/cards/settler_05 +{ + qer_editorimage textures/guis/cards/settler_05 + + diffusemap textures/guis/cards/settler_05 +} +textures/guis/cards/settler_06 +{ + qer_editorimage textures/guis/cards/settler_06 + + diffusemap textures/guis/cards/settler_06 +} +textures/guis/cards/settler_07 +{ + qer_editorimage textures/guis/cards/settler_07 + + diffusemap textures/guis/cards/settler_07 +} +textures/guis/cards/settler_08 +{ + qer_editorimage textures/guis/cards/settler_08 + + diffusemap textures/guis/cards/settler_08 +} +textures/guis/cards/settler_09 +{ + qer_editorimage textures/guis/cards/settler_09 + + diffusemap textures/guis/cards/settler_09 +} +textures/guis/cards/settler_10 +{ + qer_editorimage textures/guis/cards/settler_10 + + diffusemap textures/guis/cards/settler_10 +} +textures/guis/cards/settler_11 +{ + qer_editorimage textures/guis/cards/settler_11 + + diffusemap textures/guis/cards/settler_11 +} +textures/guis/cards/settler_12 +{ + qer_editorimage textures/guis/cards/settler_12 + + diffusemap textures/guis/cards/settler_12 +} +textures/guis/cards/settler_13 +{ + qer_editorimage textures/guis/cards/settler_13 + + diffusemap textures/guis/cards/settler_13 +} +textures/guis/cards/vehicle_00 +{ + qer_editorimage textures/guis/cards/vehicle_00 + + diffusemap textures/guis/cards/vehicle_00 +} +textures/guis/cards/vehicle_01 +{ + qer_editorimage textures/guis/cards/vehicle_01 + + diffusemap textures/guis/cards/vehicle_01 +} +textures/guis/cards/vehicle_02 +{ + qer_editorimage textures/guis/cards/vehicle_02 + + diffusemap textures/guis/cards/vehicle_02 +} +textures/guis/cards/vehicle_03 +{ + qer_editorimage textures/guis/cards/vehicle_03 + + diffusemap textures/guis/cards/vehicle_03 +} +textures/guis/cards/vehicle_04 +{ + qer_editorimage textures/guis/cards/vehicle_04 + + diffusemap textures/guis/cards/vehicle_04 +} +textures/guis/cert_black_icon +{ + qer_editorimage textures/guis/cert_black_icon + + diffusemap textures/guis/cert_black_icon +} +textures/guis/cert_icon +{ + qer_editorimage textures/guis/cert_icon + + diffusemap textures/guis/cert_icon +} +textures/guis/clothing/arksuit_1 +{ + qer_editorimage textures/guis/clothing/arksuit_1 + + diffusemap textures/guis/clothing/arksuit_1 +} +textures/guis/clothing/arksuit_2 +{ + qer_editorimage textures/guis/clothing/arksuit_2 + + diffusemap textures/guis/clothing/arksuit_2 +} +textures/guis/clothing/crimson_1 +{ + qer_editorimage textures/guis/clothing/crimson_1 + + diffusemap textures/guis/clothing/crimson_1 +} +textures/guis/clothing/crimson_2 +{ + qer_editorimage textures/guis/clothing/crimson_2 + + diffusemap textures/guis/clothing/crimson_2 +} +textures/guis/clothing/crimson_3 +{ + qer_editorimage textures/guis/clothing/crimson_3 + + diffusemap textures/guis/clothing/crimson_3 +} +textures/guis/clothing/crimson_4 +{ + qer_editorimage textures/guis/clothing/crimson_4 + + diffusemap textures/guis/clothing/crimson_4 +} +textures/guis/clothing/fab_1 +{ + qer_editorimage textures/guis/clothing/fab_1 + + diffusemap textures/guis/clothing/fab_1 +} +textures/guis/clothing/fab_2 +{ + qer_editorimage textures/guis/clothing/fab_2 + + diffusemap textures/guis/clothing/fab_2 +} +textures/guis/clothing/fab_3 +{ + qer_editorimage textures/guis/clothing/fab_3 + + diffusemap textures/guis/clothing/fab_3 +} +textures/guis/clothing/fab_4 +{ + qer_editorimage textures/guis/clothing/fab_4 + + diffusemap textures/guis/clothing/fab_4 +} +textures/guis/clothing/rough_1 +{ + qer_editorimage textures/guis/clothing/rough_1 + + diffusemap textures/guis/clothing/rough_1 +} +textures/guis/clothing/rough_2 +{ + qer_editorimage textures/guis/clothing/rough_2 + + diffusemap textures/guis/clothing/rough_2 +} +textures/guis/clothing/rough_3 +{ + qer_editorimage textures/guis/clothing/rough_3 + + diffusemap textures/guis/clothing/rough_3 +} +textures/guis/clothing/rough_4 +{ + qer_editorimage textures/guis/clothing/rough_4 + + diffusemap textures/guis/clothing/rough_4 +} +textures/guis/clothing/waste_1 +{ + qer_editorimage textures/guis/clothing/waste_1 + + diffusemap textures/guis/clothing/waste_1 +} +textures/guis/clothing/waste_2 +{ + qer_editorimage textures/guis/clothing/waste_2 + + diffusemap textures/guis/clothing/waste_2 +} +textures/guis/clothing/waste_3 +{ + qer_editorimage textures/guis/clothing/waste_3 + + diffusemap textures/guis/clothing/waste_3 +} +textures/guis/clothing/waste_4 +{ + qer_editorimage textures/guis/clothing/waste_4 + + diffusemap textures/guis/clothing/waste_4 +} +textures/guis/controller/ps3/nanotrite_ps3_LS +{ + qer_editorimage textures/guis/controller/ps3/nanotrite_ps3_LS + + diffusemap textures/guis/controller/ps3/nanotrite_ps3_LS +} +textures/guis/controller/ps3/nanotrite_ps3_RS +{ + qer_editorimage textures/guis/controller/ps3/nanotrite_ps3_RS + + diffusemap textures/guis/controller/ps3/nanotrite_ps3_RS +} +textures/guis/controller/ps3/nanotrite_ps3_l3 +{ + qer_editorimage textures/guis/controller/ps3/nanotrite_ps3_l3 + + diffusemap textures/guis/controller/ps3/nanotrite_ps3_l3 +} +textures/guis/controller/ps3/nanotrite_ps3_r3 +{ + qer_editorimage textures/guis/controller/ps3/nanotrite_ps3_r3 + + diffusemap textures/guis/controller/ps3/nanotrite_ps3_r3 +} +textures/guis/controller/ps3/ps3_circle +{ + qer_editorimage textures/guis/controller/ps3/ps3_circle + + diffusemap textures/guis/controller/ps3/ps3_circle +} +textures/guis/controller/ps3/ps3_dpad +{ + qer_editorimage textures/guis/controller/ps3/ps3_dpad + + diffusemap textures/guis/controller/ps3/ps3_dpad +} +textures/guis/controller/ps3/ps3_dpad_down +{ + qer_editorimage textures/guis/controller/ps3/ps3_dpad_down + + diffusemap textures/guis/controller/ps3/ps3_dpad_down +} +textures/guis/controller/ps3/ps3_dpad_left +{ + qer_editorimage textures/guis/controller/ps3/ps3_dpad_left + + diffusemap textures/guis/controller/ps3/ps3_dpad_left +} +textures/guis/controller/ps3/ps3_dpad_right +{ + qer_editorimage textures/guis/controller/ps3/ps3_dpad_right + + diffusemap textures/guis/controller/ps3/ps3_dpad_right +} +textures/guis/controller/ps3/ps3_dpad_up +{ + qer_editorimage textures/guis/controller/ps3/ps3_dpad_up + + diffusemap textures/guis/controller/ps3/ps3_dpad_up +} +textures/guis/controller/ps3/ps3_l1 +{ + qer_editorimage textures/guis/controller/ps3/ps3_l1 + + diffusemap textures/guis/controller/ps3/ps3_l1 +} +textures/guis/controller/ps3/ps3_l2 +{ + qer_editorimage textures/guis/controller/ps3/ps3_l2 + + diffusemap textures/guis/controller/ps3/ps3_l2 +} +textures/guis/controller/ps3/ps3_ls +{ + qer_editorimage textures/guis/controller/ps3/ps3_ls + + diffusemap textures/guis/controller/ps3/ps3_ls +} +textures/guis/controller/ps3/ps3_r1 +{ + qer_editorimage textures/guis/controller/ps3/ps3_r1 + + diffusemap textures/guis/controller/ps3/ps3_r1 +} +textures/guis/controller/ps3/ps3_r2 +{ + qer_editorimage textures/guis/controller/ps3/ps3_r2 + + diffusemap textures/guis/controller/ps3/ps3_r2 +} +textures/guis/controller/ps3/ps3_rs +{ + qer_editorimage textures/guis/controller/ps3/ps3_rs + + diffusemap textures/guis/controller/ps3/ps3_rs +} +textures/guis/controller/ps3/ps3_select +{ + qer_editorimage textures/guis/controller/ps3/ps3_select + + diffusemap textures/guis/controller/ps3/ps3_select +} +textures/guis/controller/ps3/ps3_square +{ + qer_editorimage textures/guis/controller/ps3/ps3_square + + diffusemap textures/guis/controller/ps3/ps3_square +} +textures/guis/controller/ps3/ps3_start +{ + qer_editorimage textures/guis/controller/ps3/ps3_start + + diffusemap textures/guis/controller/ps3/ps3_start +} +textures/guis/controller/ps3/ps3_triangle +{ + qer_editorimage textures/guis/controller/ps3/ps3_triangle + + diffusemap textures/guis/controller/ps3/ps3_triangle +} +textures/guis/controller/ps3/ps3_x +{ + qer_editorimage textures/guis/controller/ps3/ps3_x + + diffusemap textures/guis/controller/ps3/ps3_x +} +textures/guis/controller/ps3/ps3_x_alt +{ + qer_editorimage textures/guis/controller/ps3/ps3_x_alt + + diffusemap textures/guis/controller/ps3/ps3_x_alt +} +textures/guis/controller/xb360/360_a +{ + qer_editorimage textures/guis/controller/xb360/360_a + + diffusemap textures/guis/controller/xb360/360_a +} +textures/guis/controller/xb360/360_a_alt +{ + qer_editorimage textures/guis/controller/xb360/360_a_alt + + diffusemap textures/guis/controller/xb360/360_a_alt +} +textures/guis/controller/xb360/360_b +{ + qer_editorimage textures/guis/controller/xb360/360_b + + diffusemap textures/guis/controller/xb360/360_b +} +textures/guis/controller/xb360/360_b_alt +{ + qer_editorimage textures/guis/controller/xb360/360_b_alt + + diffusemap textures/guis/controller/xb360/360_b_alt +} +textures/guis/controller/xb360/360_back +{ + qer_editorimage textures/guis/controller/xb360/360_back + + diffusemap textures/guis/controller/xb360/360_back +} +textures/guis/controller/xb360/360_dpad +{ + qer_editorimage textures/guis/controller/xb360/360_dpad + + diffusemap textures/guis/controller/xb360/360_dpad +} +textures/guis/controller/xb360/360_dpad_down +{ + qer_editorimage textures/guis/controller/xb360/360_dpad_down + + diffusemap textures/guis/controller/xb360/360_dpad_down +} +textures/guis/controller/xb360/360_dpad_left +{ + qer_editorimage textures/guis/controller/xb360/360_dpad_left + + diffusemap textures/guis/controller/xb360/360_dpad_left +} +textures/guis/controller/xb360/360_dpad_right +{ + qer_editorimage textures/guis/controller/xb360/360_dpad_right + + diffusemap textures/guis/controller/xb360/360_dpad_right +} +textures/guis/controller/xb360/360_dpad_up +{ + qer_editorimage textures/guis/controller/xb360/360_dpad_up + + diffusemap textures/guis/controller/xb360/360_dpad_up +} +textures/guis/controller/xb360/360_lb +{ + qer_editorimage textures/guis/controller/xb360/360_lb + + diffusemap textures/guis/controller/xb360/360_lb +} +textures/guis/controller/xb360/360_ls +{ + qer_editorimage textures/guis/controller/xb360/360_ls + + diffusemap textures/guis/controller/xb360/360_ls +} +textures/guis/controller/xb360/360_lt +{ + qer_editorimage textures/guis/controller/xb360/360_lt + + diffusemap textures/guis/controller/xb360/360_lt +} +textures/guis/controller/xb360/360_rb +{ + qer_editorimage textures/guis/controller/xb360/360_rb + + diffusemap textures/guis/controller/xb360/360_rb +} +textures/guis/controller/xb360/360_rs +{ + qer_editorimage textures/guis/controller/xb360/360_rs + + diffusemap textures/guis/controller/xb360/360_rs +} +textures/guis/controller/xb360/360_rt +{ + qer_editorimage textures/guis/controller/xb360/360_rt + + diffusemap textures/guis/controller/xb360/360_rt +} +textures/guis/controller/xb360/360_start +{ + qer_editorimage textures/guis/controller/xb360/360_start + + diffusemap textures/guis/controller/xb360/360_start +} +textures/guis/controller/xb360/360_x +{ + qer_editorimage textures/guis/controller/xb360/360_x + + diffusemap textures/guis/controller/xb360/360_x +} +textures/guis/controller/xb360/360_x_alt +{ + qer_editorimage textures/guis/controller/xb360/360_x_alt + + diffusemap textures/guis/controller/xb360/360_x_alt +} +textures/guis/controller/xb360/360_y +{ + qer_editorimage textures/guis/controller/xb360/360_y + + diffusemap textures/guis/controller/xb360/360_y +} +textures/guis/controller/xb360/360_y_alt +{ + qer_editorimage textures/guis/controller/xb360/360_y_alt + + diffusemap textures/guis/controller/xb360/360_y_alt +} +textures/guis/controller/xb360/nanotrite_xbox_l3 +{ + qer_editorimage textures/guis/controller/xb360/nanotrite_xbox_l3 + + diffusemap textures/guis/controller/xb360/nanotrite_xbox_l3 +} +textures/guis/controller/xb360/nanotrite_xbox_rs +{ + qer_editorimage textures/guis/controller/xb360/nanotrite_xbox_rs + + diffusemap textures/guis/controller/xb360/nanotrite_xbox_rs +} +textures/guis/controller/xb360/tutorial_bomb_car +{ + qer_editorimage textures/guis/controller/xb360/tutorial_bomb_car + + diffusemap textures/guis/controller/xb360/tutorial_bomb_car +} +textures/guis/damage_feedback/border_overlay_quarter +{ + qer_editorimage textures/guis/damage_feedback/border_overlay_quarter + + diffusemap textures/guis/damage_feedback/border_overlay_quarter +} +textures/guis/damage_feedback/ring_ramp +{ + qer_editorimage textures/guis/damage_feedback/ring_ramp + + diffusemap textures/guis/damage_feedback/ring_ramp +} +textures/guis/damage_feedback/ring_tech +{ + qer_editorimage textures/guis/damage_feedback/ring_tech + + diffusemap textures/guis/damage_feedback/ring_tech +} +textures/guis/default/guicursor_arrow +{ + qer_editorimage textures/guis/default/guicursor_arrow + + diffusemap textures/guis/default/guicursor_arrow +} +textures/guis/default/guicursor_hand +{ + qer_editorimage textures/guis/default/guicursor_hand + + diffusemap textures/guis/default/guicursor_hand +} +textures/guis/hud/damage_icons/damage_meteor +{ + qer_editorimage textures/guis/hud/damage_icons/damage_meteor + + diffusemap textures/guis/hud/damage_icons/damage_meteor +} +textures/guis/hud/damage_icons/damage_vehicle +{ + qer_editorimage textures/guis/hud/damage_icons/damage_vehicle + + diffusemap textures/guis/hud/damage_icons/damage_vehicle +} +textures/guis/hud/damage_icons/damage_world +{ + qer_editorimage textures/guis/hud/damage_icons/damage_world + + diffusemap textures/guis/hud/damage_icons/damage_world +} +textures/guis/hud/emblem_icons/a_true_legend +{ + qer_editorimage textures/guis/hud/emblem_icons/a_true_legend + + diffusemap textures/guis/hud/emblem_icons/a_true_legend +} +textures/guis/hud/emblem_icons/afterlife_kill +{ + qer_editorimage textures/guis/hud/emblem_icons/afterlife_kill + + diffusemap textures/guis/hud/emblem_icons/afterlife_kill +} +textures/guis/hud/emblem_icons/air_mail_kill +{ + qer_editorimage textures/guis/hud/emblem_icons/air_mail_kill + + diffusemap textures/guis/hud/emblem_icons/air_mail_kill +} +textures/guis/hud/emblem_icons/anthology +{ + qer_editorimage textures/guis/hud/emblem_icons/anthology + + diffusemap textures/guis/hud/emblem_icons/anthology +} +textures/guis/hud/emblem_icons/chain_breakers_10 +{ + qer_editorimage textures/guis/hud/emblem_icons/chain_breakers_10 + + diffusemap textures/guis/hud/emblem_icons/chain_breakers_10 +} +textures/guis/hud/emblem_icons/chain_breakers_100 +{ + qer_editorimage textures/guis/hud/emblem_icons/chain_breakers_100 + + diffusemap textures/guis/hud/emblem_icons/chain_breakers_100 +} +textures/guis/hud/emblem_icons/chain_breakers_25 +{ + qer_editorimage textures/guis/hud/emblem_icons/chain_breakers_25 + + diffusemap textures/guis/hud/emblem_icons/chain_breakers_25 +} +textures/guis/hud/emblem_icons/chain_breakers_50 +{ + qer_editorimage textures/guis/hud/emblem_icons/chain_breakers_50 + + diffusemap textures/guis/hud/emblem_icons/chain_breakers_50 +} +textures/guis/hud/emblem_icons/clan_gearhead +{ + qer_editorimage textures/guis/hud/emblem_icons/clan_gearhead + + diffusemap textures/guis/hud/emblem_icons/clan_gearhead +} +textures/guis/hud/emblem_icons/collect_100_meteors +{ + qer_editorimage textures/guis/hud/emblem_icons/collect_100_meteors + + diffusemap textures/guis/hud/emblem_icons/collect_100_meteors +} +textures/guis/hud/emblem_icons/collect_10_meteors +{ + qer_editorimage textures/guis/hud/emblem_icons/collect_10_meteors + + diffusemap textures/guis/hud/emblem_icons/collect_10_meteors +} +textures/guis/hud/emblem_icons/collect_25_meteors +{ + qer_editorimage textures/guis/hud/emblem_icons/collect_25_meteors + + diffusemap textures/guis/hud/emblem_icons/collect_25_meteors +} +textures/guis/hud/emblem_icons/collect_50_meteors +{ + qer_editorimage textures/guis/hud/emblem_icons/collect_50_meteors + + diffusemap textures/guis/hud/emblem_icons/collect_50_meteors +} +textures/guis/hud/emblem_icons/fewest_deaths +{ + qer_editorimage textures/guis/hud/emblem_icons/fewest_deaths + + diffusemap textures/guis/hud/emblem_icons/fewest_deaths +} +textures/guis/hud/emblem_icons/fresh_meat +{ + qer_editorimage textures/guis/hud/emblem_icons/fresh_meat + + diffusemap textures/guis/hud/emblem_icons/fresh_meat +} +textures/guis/hud/emblem_icons/headshots_10 +{ + qer_editorimage textures/guis/hud/emblem_icons/headshots_10 + + diffusemap textures/guis/hud/emblem_icons/headshots_10 +} +textures/guis/hud/emblem_icons/headshots_100 +{ + qer_editorimage textures/guis/hud/emblem_icons/headshots_100 + + diffusemap textures/guis/hud/emblem_icons/headshots_100 +} +textures/guis/hud/emblem_icons/headshots_25 +{ + qer_editorimage textures/guis/hud/emblem_icons/headshots_25 + + diffusemap textures/guis/hud/emblem_icons/headshots_25 +} +textures/guis/hud/emblem_icons/headshots_50 +{ + qer_editorimage textures/guis/hud/emblem_icons/headshots_50 + + diffusemap textures/guis/hud/emblem_icons/headshots_50 +} +textures/guis/hud/emblem_icons/kills_100_roadrage +{ + qer_editorimage textures/guis/hud/emblem_icons/kills_100_roadrage + + diffusemap textures/guis/hud/emblem_icons/kills_100_roadrage +} +textures/guis/hud/emblem_icons/kills_10_roadrage +{ + qer_editorimage textures/guis/hud/emblem_icons/kills_10_roadrage + + diffusemap textures/guis/hud/emblem_icons/kills_10_roadrage +} +textures/guis/hud/emblem_icons/kills_25_roadrage +{ + qer_editorimage textures/guis/hud/emblem_icons/kills_25_roadrage + + diffusemap textures/guis/hud/emblem_icons/kills_25_roadrage +} +textures/guis/hud/emblem_icons/kills_50_roadrage +{ + qer_editorimage textures/guis/hud/emblem_icons/kills_50_roadrage + + diffusemap textures/guis/hud/emblem_icons/kills_50_roadrage +} +textures/guis/hud/emblem_icons/legend_10_combo +{ + qer_editorimage textures/guis/hud/emblem_icons/legend_10_combo + + diffusemap textures/guis/hud/emblem_icons/legend_10_combo +} +textures/guis/hud/emblem_icons/legend_10_defend +{ + qer_editorimage textures/guis/hud/emblem_icons/legend_10_defend + + diffusemap textures/guis/hud/emblem_icons/legend_10_defend +} +textures/guis/hud/emblem_icons/legend_10_revenge +{ + qer_editorimage textures/guis/hud/emblem_icons/legend_10_revenge + + diffusemap textures/guis/hud/emblem_icons/legend_10_revenge +} +textures/guis/hud/emblem_icons/legend_15_covert +{ + qer_editorimage textures/guis/hud/emblem_icons/legend_15_covert + + diffusemap textures/guis/hud/emblem_icons/legend_15_covert +} +textures/guis/hud/emblem_icons/legend_20_assists +{ + qer_editorimage textures/guis/hud/emblem_icons/legend_20_assists + + diffusemap textures/guis/hud/emblem_icons/legend_20_assists +} +textures/guis/hud/emblem_icons/legend_3_enemies_1_rc_car +{ + qer_editorimage textures/guis/hud/emblem_icons/legend_3_enemies_1_rc_car + + diffusemap textures/guis/hud/emblem_icons/legend_3_enemies_1_rc_car +} +textures/guis/hud/emblem_icons/legend_complete_a_new_toy +{ + qer_editorimage textures/guis/hud/emblem_icons/legend_complete_a_new_toy + + diffusemap textures/guis/hud/emblem_icons/legend_complete_a_new_toy +} +textures/guis/hud/emblem_icons/legend_complete_a_new_toy_nightmare +{ + qer_editorimage textures/guis/hud/emblem_icons/legend_complete_a_new_toy_nightmare + + diffusemap textures/guis/hud/emblem_icons/legend_complete_a_new_toy_nightmare +} +textures/guis/hud/emblem_icons/legend_complete_extermination +{ + qer_editorimage textures/guis/hud/emblem_icons/legend_complete_extermination + + diffusemap textures/guis/hud/emblem_icons/legend_complete_extermination +} +textures/guis/hud/emblem_icons/legend_complete_extermination_nightmare +{ + qer_editorimage textures/guis/hud/emblem_icons/legend_complete_extermination_nightmare + + diffusemap textures/guis/hud/emblem_icons/legend_complete_extermination_nightmare +} +textures/guis/hud/emblem_icons/legend_complete_grab_and_go +{ + qer_editorimage textures/guis/hud/emblem_icons/legend_complete_grab_and_go + + diffusemap textures/guis/hud/emblem_icons/legend_complete_grab_and_go +} +textures/guis/hud/emblem_icons/legend_complete_grab_and_go_nightmare +{ + qer_editorimage textures/guis/hud/emblem_icons/legend_complete_grab_and_go_nightmare + + diffusemap textures/guis/hud/emblem_icons/legend_complete_grab_and_go_nightmare +} +textures/guis/hud/emblem_icons/legend_complete_life_in_prison +{ + qer_editorimage textures/guis/hud/emblem_icons/legend_complete_life_in_prison + + diffusemap textures/guis/hud/emblem_icons/legend_complete_life_in_prison +} +textures/guis/hud/emblem_icons/legend_complete_life_in_prison_nightmare +{ + qer_editorimage textures/guis/hud/emblem_icons/legend_complete_life_in_prison_nightmare + + diffusemap textures/guis/hud/emblem_icons/legend_complete_life_in_prison_nightmare +} +textures/guis/hud/emblem_icons/legend_complete_no_defib +{ + qer_editorimage textures/guis/hud/emblem_icons/legend_complete_no_defib + + diffusemap textures/guis/hud/emblem_icons/legend_complete_no_defib +} +textures/guis/hud/emblem_icons/legend_complete_no_defib_nightmare +{ + qer_editorimage textures/guis/hud/emblem_icons/legend_complete_no_defib_nightmare + + diffusemap textures/guis/hud/emblem_icons/legend_complete_no_defib_nightmare +} +textures/guis/hud/emblem_icons/legend_complete_rustys_resupply +{ + qer_editorimage textures/guis/hud/emblem_icons/legend_complete_rustys_resupply + + diffusemap textures/guis/hud/emblem_icons/legend_complete_rustys_resupply +} +textures/guis/hud/emblem_icons/legend_complete_rustys_resupply_nightmare +{ + qer_editorimage textures/guis/hud/emblem_icons/legend_complete_rustys_resupply_nightmare + + diffusemap textures/guis/hud/emblem_icons/legend_complete_rustys_resupply_nightmare +} +textures/guis/hud/emblem_icons/legend_complete_season_1 +{ + qer_editorimage textures/guis/hud/emblem_icons/legend_complete_season_1 + + diffusemap textures/guis/hud/emblem_icons/legend_complete_season_1 +} +textures/guis/hud/emblem_icons/legend_complete_season_1_nightmare +{ + qer_editorimage textures/guis/hud/emblem_icons/legend_complete_season_1_nightmare + + diffusemap textures/guis/hud/emblem_icons/legend_complete_season_1_nightmare +} +textures/guis/hud/emblem_icons/legend_complete_trophy_hunting +{ + qer_editorimage textures/guis/hud/emblem_icons/legend_complete_trophy_hunting + + diffusemap textures/guis/hud/emblem_icons/legend_complete_trophy_hunting +} +textures/guis/hud/emblem_icons/legend_complete_trophy_hunting_nightmare +{ + qer_editorimage textures/guis/hud/emblem_icons/legend_complete_trophy_hunting_nightmare + + diffusemap textures/guis/hud/emblem_icons/legend_complete_trophy_hunting_nightmare +} +textures/guis/hud/emblem_icons/legend_complete_unwanted_guests +{ + qer_editorimage textures/guis/hud/emblem_icons/legend_complete_unwanted_guests + + diffusemap textures/guis/hud/emblem_icons/legend_complete_unwanted_guests +} +textures/guis/hud/emblem_icons/legend_complete_unwanted_guests_nightmare +{ + qer_editorimage textures/guis/hud/emblem_icons/legend_complete_unwanted_guests_nightmare + + diffusemap textures/guis/hud/emblem_icons/legend_complete_unwanted_guests_nightmare +} +textures/guis/hud/emblem_icons/legend_complete_water_service +{ + qer_editorimage textures/guis/hud/emblem_icons/legend_complete_water_service + + diffusemap textures/guis/hud/emblem_icons/legend_complete_water_service +} +textures/guis/hud/emblem_icons/legend_complete_water_service_nightmare +{ + qer_editorimage textures/guis/hud/emblem_icons/legend_complete_water_service_nightmare + + diffusemap textures/guis/hud/emblem_icons/legend_complete_water_service_nightmare +} +textures/guis/hud/emblem_icons/legend_find_all_collectibles +{ + qer_editorimage textures/guis/hud/emblem_icons/legend_find_all_collectibles + + diffusemap textures/guis/hud/emblem_icons/legend_find_all_collectibles +} +textures/guis/hud/emblem_icons/legend_highest_rating +{ + qer_editorimage textures/guis/hud/emblem_icons/legend_highest_rating + + diffusemap textures/guis/hud/emblem_icons/legend_highest_rating +} +textures/guis/hud/emblem_icons/legend_highest_rating_nightmare +{ + qer_editorimage textures/guis/hud/emblem_icons/legend_highest_rating_nightmare + + diffusemap textures/guis/hud/emblem_icons/legend_highest_rating_nightmare +} +textures/guis/hud/emblem_icons/level_10 +{ + qer_editorimage textures/guis/hud/emblem_icons/level_10 + + diffusemap textures/guis/hud/emblem_icons/level_10 +} +textures/guis/hud/emblem_icons/level_11 +{ + qer_editorimage textures/guis/hud/emblem_icons/level_11 + + diffusemap textures/guis/hud/emblem_icons/level_11 +} +textures/guis/hud/emblem_icons/level_12 +{ + qer_editorimage textures/guis/hud/emblem_icons/level_12 + + diffusemap textures/guis/hud/emblem_icons/level_12 +} +textures/guis/hud/emblem_icons/level_13 +{ + qer_editorimage textures/guis/hud/emblem_icons/level_13 + + diffusemap textures/guis/hud/emblem_icons/level_13 +} +textures/guis/hud/emblem_icons/level_14 +{ + qer_editorimage textures/guis/hud/emblem_icons/level_14 + + diffusemap textures/guis/hud/emblem_icons/level_14 +} +textures/guis/hud/emblem_icons/level_15 +{ + qer_editorimage textures/guis/hud/emblem_icons/level_15 + + diffusemap textures/guis/hud/emblem_icons/level_15 +} +textures/guis/hud/emblem_icons/level_16 +{ + qer_editorimage textures/guis/hud/emblem_icons/level_16 + + diffusemap textures/guis/hud/emblem_icons/level_16 +} +textures/guis/hud/emblem_icons/level_17 +{ + qer_editorimage textures/guis/hud/emblem_icons/level_17 + + diffusemap textures/guis/hud/emblem_icons/level_17 +} +textures/guis/hud/emblem_icons/level_18 +{ + qer_editorimage textures/guis/hud/emblem_icons/level_18 + + diffusemap textures/guis/hud/emblem_icons/level_18 +} +textures/guis/hud/emblem_icons/level_19 +{ + qer_editorimage textures/guis/hud/emblem_icons/level_19 + + diffusemap textures/guis/hud/emblem_icons/level_19 +} +textures/guis/hud/emblem_icons/level_2 +{ + qer_editorimage textures/guis/hud/emblem_icons/level_2 + + diffusemap textures/guis/hud/emblem_icons/level_2 +} +textures/guis/hud/emblem_icons/level_20 +{ + qer_editorimage textures/guis/hud/emblem_icons/level_20 + + diffusemap textures/guis/hud/emblem_icons/level_20 +} +textures/guis/hud/emblem_icons/level_3 +{ + qer_editorimage textures/guis/hud/emblem_icons/level_3 + + diffusemap textures/guis/hud/emblem_icons/level_3 +} +textures/guis/hud/emblem_icons/level_4 +{ + qer_editorimage textures/guis/hud/emblem_icons/level_4 + + diffusemap textures/guis/hud/emblem_icons/level_4 +} +textures/guis/hud/emblem_icons/level_5 +{ + qer_editorimage textures/guis/hud/emblem_icons/level_5 + + diffusemap textures/guis/hud/emblem_icons/level_5 +} +textures/guis/hud/emblem_icons/level_6 +{ + qer_editorimage textures/guis/hud/emblem_icons/level_6 + + diffusemap textures/guis/hud/emblem_icons/level_6 +} +textures/guis/hud/emblem_icons/level_7 +{ + qer_editorimage textures/guis/hud/emblem_icons/level_7 + + diffusemap textures/guis/hud/emblem_icons/level_7 +} +textures/guis/hud/emblem_icons/level_8 +{ + qer_editorimage textures/guis/hud/emblem_icons/level_8 + + diffusemap textures/guis/hud/emblem_icons/level_8 +} +textures/guis/hud/emblem_icons/level_9 +{ + qer_editorimage textures/guis/hud/emblem_icons/level_9 + + diffusemap textures/guis/hud/emblem_icons/level_9 +} +textures/guis/hud/emblem_icons/longest_chain +{ + qer_editorimage textures/guis/hud/emblem_icons/longest_chain + + diffusemap textures/guis/hud/emblem_icons/longest_chain +} +textures/guis/hud/emblem_icons/longest_killstreak +{ + qer_editorimage textures/guis/hud/emblem_icons/longest_killstreak + + diffusemap textures/guis/hud/emblem_icons/longest_killstreak +} +textures/guis/hud/emblem_icons/longest_life +{ + qer_editorimage textures/guis/hud/emblem_icons/longest_life + + diffusemap textures/guis/hud/emblem_icons/longest_life +} +textures/guis/hud/emblem_icons/max_chain_10 +{ + qer_editorimage textures/guis/hud/emblem_icons/max_chain_10 + + diffusemap textures/guis/hud/emblem_icons/max_chain_10 +} +textures/guis/hud/emblem_icons/max_chain_100 +{ + qer_editorimage textures/guis/hud/emblem_icons/max_chain_100 + + diffusemap textures/guis/hud/emblem_icons/max_chain_100 +} +textures/guis/hud/emblem_icons/max_chain_25 +{ + qer_editorimage textures/guis/hud/emblem_icons/max_chain_25 + + diffusemap textures/guis/hud/emblem_icons/max_chain_25 +} +textures/guis/hud/emblem_icons/max_chain_50 +{ + qer_editorimage textures/guis/hud/emblem_icons/max_chain_50 + + diffusemap textures/guis/hud/emblem_icons/max_chain_50 +} +textures/guis/hud/emblem_icons/most_chain_breakers +{ + qer_editorimage textures/guis/hud/emblem_icons/most_chain_breakers + + diffusemap textures/guis/hud/emblem_icons/most_chain_breakers +} +textures/guis/hud/emblem_icons/most_incomplete_triads +{ + qer_editorimage textures/guis/hud/emblem_icons/most_incomplete_triads + + diffusemap textures/guis/hud/emblem_icons/most_incomplete_triads +} +textures/guis/hud/emblem_icons/most_kills +{ + qer_editorimage textures/guis/hud/emblem_icons/most_kills + + diffusemap textures/guis/hud/emblem_icons/most_kills +} +textures/guis/hud/emblem_icons/most_meteors_captured +{ + qer_editorimage textures/guis/hud/emblem_icons/most_meteors_captured + + diffusemap textures/guis/hud/emblem_icons/most_meteors_captured +} +textures/guis/hud/emblem_icons/most_meteors_dropped +{ + qer_editorimage textures/guis/hud/emblem_icons/most_meteors_dropped + + diffusemap textures/guis/hud/emblem_icons/most_meteors_dropped +} +textures/guis/hud/emblem_icons/most_miles_driven +{ + qer_editorimage textures/guis/hud/emblem_icons/most_miles_driven + + diffusemap textures/guis/hud/emblem_icons/most_miles_driven +} +textures/guis/hud/emblem_icons/most_rally_captures +{ + qer_editorimage textures/guis/hud/emblem_icons/most_rally_captures + + diffusemap textures/guis/hud/emblem_icons/most_rally_captures +} +textures/guis/hud/emblem_icons/most_restore_items +{ + qer_editorimage textures/guis/hud/emblem_icons/most_restore_items + + diffusemap textures/guis/hud/emblem_icons/most_restore_items +} +textures/guis/hud/emblem_icons/most_special_kills +{ + qer_editorimage textures/guis/hud/emblem_icons/most_special_kills + + diffusemap textures/guis/hud/emblem_icons/most_special_kills +} +textures/guis/hud/emblem_icons/most_triad_breakers +{ + qer_editorimage textures/guis/hud/emblem_icons/most_triad_breakers + + diffusemap textures/guis/hud/emblem_icons/most_triad_breakers +} +textures/guis/hud/emblem_icons/mvp +{ + qer_editorimage textures/guis/hud/emblem_icons/mvp + + diffusemap textures/guis/hud/emblem_icons/mvp +} +textures/guis/hud/emblem_icons/no_room_for_sidekicks +{ + qer_editorimage textures/guis/hud/emblem_icons/no_room_for_sidekicks + + diffusemap textures/guis/hud/emblem_icons/no_room_for_sidekicks +} +textures/guis/hud/emblem_icons/pull_kill +{ + qer_editorimage textures/guis/hud/emblem_icons/pull_kill + + diffusemap textures/guis/hud/emblem_icons/pull_kill +} +textures/guis/hud/emblem_icons/rage_a +{ + qer_editorimage textures/guis/hud/emblem_icons/rage_a + + diffusemap textures/guis/hud/emblem_icons/rage_a +} +textures/guis/hud/emblem_icons/revenge_kills_10_rr +{ + qer_editorimage textures/guis/hud/emblem_icons/revenge_kills_10_rr + + diffusemap textures/guis/hud/emblem_icons/revenge_kills_10_rr +} +textures/guis/hud/emblem_icons/the_legend_begins +{ + qer_editorimage textures/guis/hud/emblem_icons/the_legend_begins + + diffusemap textures/guis/hud/emblem_icons/the_legend_begins +} +textures/guis/hud/emblem_icons/triad_breakers_10 +{ + qer_editorimage textures/guis/hud/emblem_icons/triad_breakers_10 + + diffusemap textures/guis/hud/emblem_icons/triad_breakers_10 +} +textures/guis/hud/emblem_icons/triad_breakers_100 +{ + qer_editorimage textures/guis/hud/emblem_icons/triad_breakers_100 + + diffusemap textures/guis/hud/emblem_icons/triad_breakers_100 +} +textures/guis/hud/emblem_icons/triad_breakers_25 +{ + qer_editorimage textures/guis/hud/emblem_icons/triad_breakers_25 + + diffusemap textures/guis/hud/emblem_icons/triad_breakers_25 +} +textures/guis/hud/emblem_icons/triad_breakers_50 +{ + qer_editorimage textures/guis/hud/emblem_icons/triad_breakers_50 + + diffusemap textures/guis/hud/emblem_icons/triad_breakers_50 +} +textures/guis/hud/emblem_icons/triads_10 +{ + qer_editorimage textures/guis/hud/emblem_icons/triads_10 + + diffusemap textures/guis/hud/emblem_icons/triads_10 +} +textures/guis/hud/emblem_icons/triads_100 +{ + qer_editorimage textures/guis/hud/emblem_icons/triads_100 + + diffusemap textures/guis/hud/emblem_icons/triads_100 +} +textures/guis/hud/emblem_icons/triads_25 +{ + qer_editorimage textures/guis/hud/emblem_icons/triads_25 + + diffusemap textures/guis/hud/emblem_icons/triads_25 +} +textures/guis/hud/emblem_icons/triads_50 +{ + qer_editorimage textures/guis/hud/emblem_icons/triads_50 + + diffusemap textures/guis/hud/emblem_icons/triads_50 +} +textures/guis/hud/fpshud/crosshair_dot_big +{ + qer_editorimage textures/guis/hud/fpshud/crosshair_dot_big + + diffusemap textures/guis/hud/fpshud/crosshair_dot_big +} +textures/guis/hud/fpshud/loot_pickup +{ + qer_editorimage textures/guis/hud/fpshud/loot_pickup + + diffusemap textures/guis/hud/fpshud/loot_pickup +} +textures/guis/hud/fpshud/manipulate +{ + qer_editorimage textures/guis/hud/fpshud/manipulate + + diffusemap textures/guis/hud/fpshud/manipulate +} +textures/guis/hud/fpshud/speech +{ + qer_editorimage textures/guis/hud/fpshud/speech + + diffusemap textures/guis/hud/fpshud/speech +} +textures/guis/hud/fpshud_holo/select_box +{ + qer_editorimage textures/guis/hud/fpshud_holo/select_box + + diffusemap textures/guis/hud/fpshud_holo/select_box +} +textures/guis/hud/garage_exits/wellspring_exit +{ + qer_editorimage textures/guis/hud/garage_exits/wellspring_exit + + diffusemap textures/guis/hud/garage_exits/wellspring_exit +} +textures/guis/hud/garage_icons/cuprino +{ + qer_editorimage textures/guis/hud/garage_icons/cuprino + + diffusemap textures/guis/hud/garage_icons/cuprino +} +textures/guis/hud/garage_icons/dune_buster +{ + qer_editorimage textures/guis/hud/garage_icons/dune_buster + + diffusemap textures/guis/hud/garage_icons/dune_buster +} +textures/guis/hud/garage_icons/icon_exhaust_upgrade +{ + qer_editorimage textures/guis/hud/garage_icons/icon_exhaust_upgrade + + diffusemap textures/guis/hud/garage_icons/icon_exhaust_upgrade +} +textures/guis/hud/garage_icons/jetter +{ + qer_editorimage textures/guis/hud/garage_icons/jetter + + diffusemap textures/guis/hud/garage_icons/jetter +} +textures/guis/hud/garage_icons/monarch +{ + qer_editorimage textures/guis/hud/garage_icons/monarch + + diffusemap textures/guis/hud/garage_icons/monarch +} +textures/guis/hud/interior_damage/d_grenade +{ + qer_editorimage textures/guis/hud/interior_damage/d_grenade + + diffusemap textures/guis/hud/interior_damage/d_grenade +} +textures/guis/hud/interior_damage/d_rcbombcar +{ + qer_editorimage textures/guis/hud/interior_damage/d_rcbombcar + + diffusemap textures/guis/hud/interior_damage/d_rcbombcar +} +textures/guis/hud/inventory_cars/temp_inv_car +{ + qer_editorimage textures/guis/hud/inventory_cars/temp_inv_car + + diffusemap textures/guis/hud/inventory_cars/temp_inv_car +} +textures/guis/hud/inventory_icons/buggy_keys +{ + qer_editorimage textures/guis/hud/inventory_icons/buggy_keys + + diffusemap textures/guis/hud/inventory_icons/buggy_keys +} +textures/guis/hud/inventory_icons/clothes_rogue +{ + qer_editorimage textures/guis/hud/inventory_icons/clothes_rogue + + diffusemap textures/guis/hud/inventory_icons/clothes_rogue +} +textures/guis/hud/inventory_icons/clothes_roughneck +{ + qer_editorimage textures/guis/hud/inventory_icons/clothes_roughneck + + diffusemap textures/guis/hud/inventory_icons/clothes_roughneck +} +textures/guis/hud/inventory_icons/clothes_wasteland +{ + qer_editorimage textures/guis/hud/inventory_icons/clothes_wasteland + + diffusemap textures/guis/hud/inventory_icons/clothes_wasteland +} +textures/guis/hud/inventory_icons/cluster +{ + qer_editorimage textures/guis/hud/inventory_icons/cluster + + diffusemap textures/guis/hud/inventory_icons/cluster +} +textures/guis/hud/inventory_icons/deployable_turret_2 +{ + qer_editorimage textures/guis/hud/inventory_icons/deployable_turret_2 + + diffusemap textures/guis/hud/inventory_icons/deployable_turret_2 +} +textures/guis/hud/inventory_icons/mya_package +{ + qer_editorimage textures/guis/hud/inventory_icons/mya_package + + diffusemap textures/guis/hud/inventory_icons/mya_package +} +textures/guis/hud/inventory_icons/rcbomb +{ + qer_editorimage textures/guis/hud/inventory_icons/rcbomb + + diffusemap textures/guis/hud/inventory_icons/rcbomb +} +textures/guis/hud/inventory_icons/settler_clothes +{ + qer_editorimage textures/guis/hud/inventory_icons/settler_clothes + + diffusemap textures/guis/hud/inventory_icons/settler_clothes +} +textures/guis/hud/inventory_icons/small_battery_pack +{ + qer_editorimage textures/guis/hud/inventory_icons/small_battery_pack + + diffusemap textures/guis/hud/inventory_icons/small_battery_pack +} +textures/guis/hud/inventory_icons/small_gears +{ + qer_editorimage textures/guis/hud/inventory_icons/small_gears + + diffusemap textures/guis/hud/inventory_icons/small_gears +} +textures/guis/hud/inventory_icons/upgrade_rof_authority_mgun +{ + qer_editorimage textures/guis/hud/inventory_icons/upgrade_rof_authority_mgun + + diffusemap textures/guis/hud/inventory_icons/upgrade_rof_authority_mgun +} +textures/guis/hud/inventory_icons/upgrade_scope_rifle +{ + qer_editorimage textures/guis/hud/inventory_icons/upgrade_scope_rifle + + diffusemap textures/guis/hud/inventory_icons/upgrade_scope_rifle +} +textures/guis/hud/inventory_icons/vehicle_emp +{ + qer_editorimage textures/guis/hud/inventory_icons/vehicle_emp + + diffusemap textures/guis/hud/inventory_icons/vehicle_emp +} +textures/guis/hud/inventory_icons/vehicle_jump +{ + qer_editorimage textures/guis/hud/inventory_icons/vehicle_jump + + diffusemap textures/guis/hud/inventory_icons/vehicle_jump +} +textures/guis/hud/inventory_icons/wellspring_keys +{ + qer_editorimage textures/guis/hud/inventory_icons/wellspring_keys + + diffusemap textures/guis/hud/inventory_icons/wellspring_keys +} +textures/guis/hud/loadout_icons/quickuse/quickuse_boostextender +{ + qer_editorimage textures/guis/hud/loadout_icons/quickuse/quickuse_boostextender + + diffusemap textures/guis/hud/loadout_icons/quickuse/quickuse_boostextender +} +textures/guis/hud/loadout_icons/quickuse/quickuse_emp +{ + qer_editorimage textures/guis/hud/loadout_icons/quickuse/quickuse_emp + + diffusemap textures/guis/hud/loadout_icons/quickuse/quickuse_emp +} +textures/guis/hud/loadout_icons/quickuse/quickuse_health +{ + qer_editorimage textures/guis/hud/loadout_icons/quickuse/quickuse_health + + diffusemap textures/guis/hud/loadout_icons/quickuse/quickuse_health +} +textures/guis/hud/loadout_icons/quickuse/quickuse_hoverturret +{ + qer_editorimage textures/guis/hud/loadout_icons/quickuse/quickuse_hoverturret + + diffusemap textures/guis/hud/loadout_icons/quickuse/quickuse_hoverturret +} +textures/guis/hud/loadout_icons/quickuse/quickuse_jump +{ + qer_editorimage textures/guis/hud/loadout_icons/quickuse/quickuse_jump + + diffusemap textures/guis/hud/loadout_icons/quickuse/quickuse_jump +} +textures/guis/hud/loadout_icons/quickuse/quickuse_mine +{ + qer_editorimage textures/guis/hud/loadout_icons/quickuse/quickuse_mine + + diffusemap textures/guis/hud/loadout_icons/quickuse/quickuse_mine +} +textures/guis/hud/loadout_icons/quickuse/quickuse_roverbomb +{ + qer_editorimage textures/guis/hud/loadout_icons/quickuse/quickuse_roverbomb + + diffusemap textures/guis/hud/loadout_icons/quickuse/quickuse_roverbomb +} +textures/guis/hud/loadout_icons/quickuse/quickuse_shield +{ + qer_editorimage textures/guis/hud/loadout_icons/quickuse/quickuse_shield + + diffusemap textures/guis/hud/loadout_icons/quickuse/quickuse_shield +} +textures/guis/hud/loadout_icons/weapon/weapon_cluster_bomb +{ + qer_editorimage textures/guis/hud/loadout_icons/weapon/weapon_cluster_bomb + + diffusemap textures/guis/hud/loadout_icons/weapon/weapon_cluster_bomb +} +textures/guis/hud/loadout_icons/weapon/weapon_heavy_machine_gun +{ + qer_editorimage textures/guis/hud/loadout_icons/weapon/weapon_heavy_machine_gun + + diffusemap textures/guis/hud/loadout_icons/weapon/weapon_heavy_machine_gun +} +textures/guis/hud/loadout_icons/weapon/weapon_homing_missile +{ + qer_editorimage textures/guis/hud/loadout_icons/weapon/weapon_homing_missile + + diffusemap textures/guis/hud/loadout_icons/weapon/weapon_homing_missile +} +textures/guis/hud/loadout_icons/weapon/weapon_machine_gun +{ + qer_editorimage textures/guis/hud/loadout_icons/weapon/weapon_machine_gun + + diffusemap textures/guis/hud/loadout_icons/weapon/weapon_machine_gun +} +textures/guis/hud/loadout_icons/weapon/weapon_nail_spreader +{ + qer_editorimage textures/guis/hud/loadout_icons/weapon/weapon_nail_spreader + + diffusemap textures/guis/hud/loadout_icons/weapon/weapon_nail_spreader +} +textures/guis/hud/loadout_icons/weapon/weapon_pulse_cannon +{ + qer_editorimage textures/guis/hud/loadout_icons/weapon/weapon_pulse_cannon + + diffusemap textures/guis/hud/loadout_icons/weapon/weapon_pulse_cannon +} +textures/guis/hud/loadout_icons/weapon/weapon_rocket +{ + qer_editorimage textures/guis/hud/loadout_icons/weapon/weapon_rocket + + diffusemap textures/guis/hud/loadout_icons/weapon/weapon_rocket +} +textures/guis/hud/loadout_icons_big/quickuse/quickuse_boostextender +{ + qer_editorimage textures/guis/hud/loadout_icons_big/quickuse/quickuse_boostextender + + diffusemap textures/guis/hud/loadout_icons_big/quickuse/quickuse_boostextender +} +textures/guis/hud/loadout_icons_big/quickuse/quickuse_emp +{ + qer_editorimage textures/guis/hud/loadout_icons_big/quickuse/quickuse_emp + + diffusemap textures/guis/hud/loadout_icons_big/quickuse/quickuse_emp +} +textures/guis/hud/loadout_icons_big/quickuse/quickuse_health +{ + qer_editorimage textures/guis/hud/loadout_icons_big/quickuse/quickuse_health + + diffusemap textures/guis/hud/loadout_icons_big/quickuse/quickuse_health +} +textures/guis/hud/loadout_icons_big/quickuse/quickuse_hoverturret +{ + qer_editorimage textures/guis/hud/loadout_icons_big/quickuse/quickuse_hoverturret + + diffusemap textures/guis/hud/loadout_icons_big/quickuse/quickuse_hoverturret +} +textures/guis/hud/loadout_icons_big/quickuse/quickuse_jump +{ + qer_editorimage textures/guis/hud/loadout_icons_big/quickuse/quickuse_jump + + diffusemap textures/guis/hud/loadout_icons_big/quickuse/quickuse_jump +} +textures/guis/hud/loadout_icons_big/quickuse/quickuse_mine +{ + qer_editorimage textures/guis/hud/loadout_icons_big/quickuse/quickuse_mine + + diffusemap textures/guis/hud/loadout_icons_big/quickuse/quickuse_mine +} +textures/guis/hud/loadout_icons_big/quickuse/quickuse_roverbomb +{ + qer_editorimage textures/guis/hud/loadout_icons_big/quickuse/quickuse_roverbomb + + diffusemap textures/guis/hud/loadout_icons_big/quickuse/quickuse_roverbomb +} +textures/guis/hud/loadout_icons_big/quickuse/quickuse_shield +{ + qer_editorimage textures/guis/hud/loadout_icons_big/quickuse/quickuse_shield + + diffusemap textures/guis/hud/loadout_icons_big/quickuse/quickuse_shield +} +textures/guis/hud/loadout_icons_big/vehicle/vehicle_buggy_ghost +{ + qer_editorimage textures/guis/hud/loadout_icons_big/vehicle/vehicle_buggy_ghost + + diffusemap textures/guis/hud/loadout_icons_big/vehicle/vehicle_buggy_ghost +} +textures/guis/hud/loadout_icons_big/vehicle/vehicle_buggy_id +{ + qer_editorimage textures/guis/hud/loadout_icons_big/vehicle/vehicle_buggy_id + + diffusemap textures/guis/hud/loadout_icons_big/vehicle/vehicle_buggy_id +} +textures/guis/hud/loadout_icons_big/vehicle/vehicle_cuprino_colt +{ + qer_editorimage textures/guis/hud/loadout_icons_big/vehicle/vehicle_cuprino_colt + + diffusemap textures/guis/hud/loadout_icons_big/vehicle/vehicle_cuprino_colt +} +textures/guis/hud/loadout_icons_big/vehicle/vehicle_monarch_reaver +{ + qer_editorimage textures/guis/hud/loadout_icons_big/vehicle/vehicle_monarch_reaver + + diffusemap textures/guis/hud/loadout_icons_big/vehicle/vehicle_monarch_reaver +} +textures/guis/hud/loadout_icons_big/vehicle/vehicle_monarch_starky +{ + qer_editorimage textures/guis/hud/loadout_icons_big/vehicle/vehicle_monarch_starky + + diffusemap textures/guis/hud/loadout_icons_big/vehicle/vehicle_monarch_starky +} +textures/guis/hud/loadout_icons_big/vehicle/vehicle_monarch_tank +{ + qer_editorimage textures/guis/hud/loadout_icons_big/vehicle/vehicle_monarch_tank + + diffusemap textures/guis/hud/loadout_icons_big/vehicle/vehicle_monarch_tank +} +textures/guis/hud/loadout_icons_big/vehicle_class/buggy +{ + qer_editorimage textures/guis/hud/loadout_icons_big/vehicle_class/buggy + + diffusemap textures/guis/hud/loadout_icons_big/vehicle_class/buggy +} +textures/guis/hud/loadout_icons_big/vehicle_class/cuprino +{ + qer_editorimage textures/guis/hud/loadout_icons_big/vehicle_class/cuprino + + diffusemap textures/guis/hud/loadout_icons_big/vehicle_class/cuprino +} +textures/guis/hud/loadout_icons_big/vehicle_class/monarch +{ + qer_editorimage textures/guis/hud/loadout_icons_big/vehicle_class/monarch + + diffusemap textures/guis/hud/loadout_icons_big/vehicle_class/monarch +} +textures/guis/hud/loadout_icons_big/weapon/weapon_cluster_bomb +{ + qer_editorimage textures/guis/hud/loadout_icons_big/weapon/weapon_cluster_bomb + + diffusemap textures/guis/hud/loadout_icons_big/weapon/weapon_cluster_bomb +} +textures/guis/hud/loadout_icons_big/weapon/weapon_heavy_machine_gun +{ + qer_editorimage textures/guis/hud/loadout_icons_big/weapon/weapon_heavy_machine_gun + + diffusemap textures/guis/hud/loadout_icons_big/weapon/weapon_heavy_machine_gun +} +textures/guis/hud/loadout_icons_big/weapon/weapon_homing_missile +{ + qer_editorimage textures/guis/hud/loadout_icons_big/weapon/weapon_homing_missile + + diffusemap textures/guis/hud/loadout_icons_big/weapon/weapon_homing_missile +} +textures/guis/hud/loadout_icons_big/weapon/weapon_machine_gun +{ + qer_editorimage textures/guis/hud/loadout_icons_big/weapon/weapon_machine_gun + + diffusemap textures/guis/hud/loadout_icons_big/weapon/weapon_machine_gun +} +textures/guis/hud/loadout_icons_big/weapon/weapon_nail_spreader +{ + qer_editorimage textures/guis/hud/loadout_icons_big/weapon/weapon_nail_spreader + + diffusemap textures/guis/hud/loadout_icons_big/weapon/weapon_nail_spreader +} +textures/guis/hud/loadout_icons_big/weapon/weapon_pulse_cannon +{ + qer_editorimage textures/guis/hud/loadout_icons_big/weapon/weapon_pulse_cannon + + diffusemap textures/guis/hud/loadout_icons_big/weapon/weapon_pulse_cannon +} +textures/guis/hud/loadout_icons_big/weapon/weapon_rocket +{ + qer_editorimage textures/guis/hud/loadout_icons_big/weapon/weapon_rocket + + diffusemap textures/guis/hud/loadout_icons_big/weapon/weapon_rocket +} +textures/guis/hud/minimap/you +{ + qer_editorimage textures/guis/hud/minimap/you + + diffusemap textures/guis/hud/minimap/you +} +textures/guis/hud/online/poi_arrow_green +{ + qer_editorimage textures/guis/hud/online/poi_arrow_green + + diffusemap textures/guis/hud/online/poi_arrow_green +} +textures/guis/hud/online/poi_icons/bully_vehicle +{ + qer_editorimage textures/guis/hud/online/poi_icons/bully_vehicle + + diffusemap textures/guis/hud/online/poi_icons/bully_vehicle +} +textures/guis/hud/online/poi_icons/poi_capture_green +{ + qer_editorimage textures/guis/hud/online/poi_icons/poi_capture_green + + diffusemap textures/guis/hud/online/poi_icons/poi_capture_green +} +textures/guis/hud/online/poi_icons/poi_capture_red +{ + qer_editorimage textures/guis/hud/online/poi_icons/poi_capture_red + + diffusemap textures/guis/hud/online/poi_icons/poi_capture_red +} +textures/guis/hud/online/poi_icons/poi_contested_green +{ + qer_editorimage textures/guis/hud/online/poi_icons/poi_contested_green + + diffusemap textures/guis/hud/online/poi_icons/poi_contested_green +} +textures/guis/hud/online/poi_icons/poi_contested_red +{ + qer_editorimage textures/guis/hud/online/poi_icons/poi_contested_red + + diffusemap textures/guis/hud/online/poi_icons/poi_contested_red +} +textures/guis/hud/online/poi_icons/poi_domination_green +{ + qer_editorimage textures/guis/hud/online/poi_icons/poi_domination_green + + diffusemap textures/guis/hud/online/poi_icons/poi_domination_green +} +textures/guis/hud/online/poi_icons/poi_domination_red +{ + qer_editorimage textures/guis/hud/online/poi_icons/poi_domination_red + + diffusemap textures/guis/hud/online/poi_icons/poi_domination_red +} +textures/guis/hud/online/poi_icons/poi_flag_green +{ + qer_editorimage textures/guis/hud/online/poi_icons/poi_flag_green + + diffusemap textures/guis/hud/online/poi_icons/poi_flag_green +} +textures/guis/hud/online/poi_icons/poi_flag_red +{ + qer_editorimage textures/guis/hud/online/poi_icons/poi_flag_red + + diffusemap textures/guis/hud/online/poi_icons/poi_flag_red +} +textures/guis/hud/online/poi_icons/poi_goal_green +{ + qer_editorimage textures/guis/hud/online/poi_icons/poi_goal_green + + diffusemap textures/guis/hud/online/poi_icons/poi_goal_green +} +textures/guis/hud/online/poi_icons/poi_goal_red +{ + qer_editorimage textures/guis/hud/online/poi_icons/poi_goal_red + + diffusemap textures/guis/hud/online/poi_icons/poi_goal_red +} +textures/guis/hud/online/poi_icons/poi_leader_red +{ + qer_editorimage textures/guis/hud/online/poi_icons/poi_leader_red + + diffusemap textures/guis/hud/online/poi_icons/poi_leader_red +} +textures/guis/hud/online/poi_icons/poi_meteor_capture +{ + qer_editorimage textures/guis/hud/online/poi_icons/poi_meteor_capture + + diffusemap textures/guis/hud/online/poi_icons/poi_meteor_capture +} +textures/guis/hud/online/poi_icons/poi_offscreenarrow +{ + qer_editorimage textures/guis/hud/online/poi_icons/poi_offscreenarrow + + diffusemap textures/guis/hud/online/poi_icons/poi_offscreenarrow +} +textures/guis/hud/online/poi_icons/poi_target +{ + qer_editorimage textures/guis/hud/online/poi_icons/poi_target + + diffusemap textures/guis/hud/online/poi_icons/poi_target +} +textures/guis/hud/online/poi_icons/poi_team_mate +{ + qer_editorimage textures/guis/hud/online/poi_icons/poi_team_mate + + diffusemap textures/guis/hud/online/poi_icons/poi_team_mate +} +textures/guis/hud/online/poi_icons/poi_team_mate_afk +{ + qer_editorimage textures/guis/hud/online/poi_icons/poi_team_mate_afk + + diffusemap textures/guis/hud/online/poi_icons/poi_team_mate_afk +} +textures/guis/hud/online/poi_icons/poi_team_mate_defib +{ + qer_editorimage textures/guis/hud/online/poi_icons/poi_team_mate_defib + + diffusemap textures/guis/hud/online/poi_icons/poi_team_mate_defib +} +textures/guis/hud/online/poi_icons/poi_team_mate_down +{ + qer_editorimage textures/guis/hud/online/poi_icons/poi_team_mate_down + + diffusemap textures/guis/hud/online/poi_icons/poi_team_mate_down +} +textures/guis/hud/online/poi_icons/poi_team_mate_offscreen +{ + qer_editorimage textures/guis/hud/online/poi_icons/poi_team_mate_offscreen + + diffusemap textures/guis/hud/online/poi_icons/poi_team_mate_offscreen +} +textures/guis/hud/online/poi_icons/poi_triad_point +{ + qer_editorimage textures/guis/hud/online/poi_icons/poi_triad_point + + diffusemap textures/guis/hud/online/poi_icons/poi_triad_point +} +textures/guis/hud/online/poi_icons/poi_use +{ + qer_editorimage textures/guis/hud/online/poi_icons/poi_use + + diffusemap textures/guis/hud/online/poi_icons/poi_use +} +textures/guis/hud/online/poi_icons/poi_waypoint +{ + qer_editorimage textures/guis/hud/online/poi_icons/poi_waypoint + + diffusemap textures/guis/hud/online/poi_icons/poi_waypoint +} +textures/guis/hud/online/poi_icons/poi_waypointboth +{ + qer_editorimage textures/guis/hud/online/poi_icons/poi_waypointboth + + diffusemap textures/guis/hud/online/poi_icons/poi_waypointboth +} +textures/guis/hud/online/poi_icons/poi_waypointwait +{ + qer_editorimage textures/guis/hud/online/poi_icons/poi_waypointwait + + diffusemap textures/guis/hud/online/poi_icons/poi_waypointwait +} +textures/guis/hud/online/vehicle_weapons/shockwave +{ + qer_editorimage textures/guis/hud/online/vehicle_weapons/shockwave + + diffusemap textures/guis/hud/online/vehicle_weapons/shockwave +} +textures/guis/hud/quickitems/icon_rcbomb +{ + qer_editorimage textures/guis/hud/quickitems/icon_rcbomb + + diffusemap textures/guis/hud/quickitems/icon_rcbomb +} +textures/guis/hud/race_icons/dusty8 +{ + qer_editorimage textures/guis/hud/race_icons/dusty8 + + diffusemap textures/guis/hud/race_icons/dusty8 +} +textures/guis/hud/race_icons/southern_hwy +{ + qer_editorimage textures/guis/hud/race_icons/southern_hwy + + diffusemap textures/guis/hud/race_icons/southern_hwy +} +textures/guis/hud/race_rewards/booster_race_reward +{ + qer_editorimage textures/guis/hud/race_rewards/booster_race_reward + + diffusemap textures/guis/hud/race_rewards/booster_race_reward +} +textures/guis/hud/race_rewards/cuprino_race_reward +{ + qer_editorimage textures/guis/hud/race_rewards/cuprino_race_reward + + diffusemap textures/guis/hud/race_rewards/cuprino_race_reward +} +textures/guis/hud/race_rewards/magnum_race_reward +{ + qer_editorimage textures/guis/hud/race_rewards/magnum_race_reward + + diffusemap textures/guis/hud/race_rewards/magnum_race_reward +} +textures/guis/hud/race_rewards/monarch_race_reward +{ + qer_editorimage textures/guis/hud/race_rewards/monarch_race_reward + + diffusemap textures/guis/hud/race_rewards/monarch_race_reward +} +textures/guis/hud/regime_shotgun/shtgn_spread +{ + qer_editorimage textures/guis/hud/regime_shotgun/shtgn_spread + + diffusemap textures/guis/hud/regime_shotgun/shtgn_spread +} +textures/guis/hud/vehicle/pickup +{ + qer_editorimage textures/guis/hud/vehicle/pickup + + diffusemap textures/guis/hud/vehicle/pickup +} +textures/guis/hud/vehicle_key_icons/paper_side_buggy +{ + qer_editorimage textures/guis/hud/vehicle_key_icons/paper_side_buggy + + diffusemap textures/guis/hud/vehicle_key_icons/paper_side_buggy +} +textures/guis/hud/vehicle_key_icons/paper_side_cuprino +{ + qer_editorimage textures/guis/hud/vehicle_key_icons/paper_side_cuprino + + diffusemap textures/guis/hud/vehicle_key_icons/paper_side_cuprino +} +textures/guis/hud/vehicle_key_icons/paper_side_monarch +{ + qer_editorimage textures/guis/hud/vehicle_key_icons/paper_side_monarch + + diffusemap textures/guis/hud/vehicle_key_icons/paper_side_monarch +} +textures/guis/hud/vehicle_key_icons/paper_side_rod +{ + qer_editorimage textures/guis/hud/vehicle_key_icons/paper_side_rod + + diffusemap textures/guis/hud/vehicle_key_icons/paper_side_rod +} +textures/guis/hud/weapon_icons/regime_shotgun +{ + qer_editorimage textures/guis/hud/weapon_icons/regime_shotgun + + diffusemap textures/guis/hud/weapon_icons/regime_shotgun +} +textures/guis/icons/ammo/am_bfg_round +{ + qer_editorimage textures/guis/icons/ammo/am_bfg_round + + diffusemap textures/guis/icons/ammo/am_bfg_round +} +textures/guis/icons/ammo/am_mg_felt +{ + qer_editorimage textures/guis/icons/ammo/am_mg_felt + + diffusemap textures/guis/icons/ammo/am_mg_felt +} +textures/guis/icons/ammo/am_mg_reg +{ + qer_editorimage textures/guis/icons/ammo/am_mg_reg + + diffusemap textures/guis/icons/ammo/am_mg_reg +} +textures/guis/icons/ammo/am_pstl_fat +{ + qer_editorimage textures/guis/icons/ammo/am_pstl_fat + + diffusemap textures/guis/icons/ammo/am_pstl_fat +} +textures/guis/icons/ammo/am_pstl_fatm +{ + qer_editorimage textures/guis/icons/ammo/am_pstl_fatm + + diffusemap textures/guis/icons/ammo/am_pstl_fatm +} +textures/guis/icons/ammo/am_pstl_kill +{ + qer_editorimage textures/guis/icons/ammo/am_pstl_kill + + diffusemap textures/guis/icons/ammo/am_pstl_kill +} +textures/guis/icons/ammo/am_pstl_reg +{ + qer_editorimage textures/guis/icons/ammo/am_pstl_reg + + diffusemap textures/guis/icons/ammo/am_pstl_reg +} +textures/guis/icons/ammo/am_pulse_round +{ + qer_editorimage textures/guis/icons/ammo/am_pulse_round + + diffusemap textures/guis/icons/ammo/am_pulse_round +} +textures/guis/icons/ammo/am_rail_impale +{ + qer_editorimage textures/guis/icons/ammo/am_rail_impale + + diffusemap textures/guis/icons/ammo/am_rail_impale +} +textures/guis/icons/ammo/am_rail_nail +{ + qer_editorimage textures/guis/icons/ammo/am_rail_nail + + diffusemap textures/guis/icons/ammo/am_rail_nail +} +textures/guis/icons/ammo/am_rail_rail +{ + qer_editorimage textures/guis/icons/ammo/am_rail_rail + + diffusemap textures/guis/icons/ammo/am_rail_rail +} +textures/guis/icons/ammo/am_regmg_av2 +{ + qer_editorimage textures/guis/icons/ammo/am_regmg_av2 + + diffusemap textures/guis/icons/ammo/am_regmg_av2 +} +textures/guis/icons/ammo/am_regmg_reg +{ + qer_editorimage textures/guis/icons/ammo/am_regmg_reg + + diffusemap textures/guis/icons/ammo/am_regmg_reg +} +textures/guis/icons/ammo/am_rrl_cluster +{ + qer_editorimage textures/guis/icons/ammo/am_rrl_cluster + + diffusemap textures/guis/icons/ammo/am_rrl_cluster +} +textures/guis/icons/ammo/am_rrl_reg +{ + qer_editorimage textures/guis/icons/ammo/am_rrl_reg + + diffusemap textures/guis/icons/ammo/am_rrl_reg +} +textures/guis/icons/ammo/am_rrl_stinger +{ + qer_editorimage textures/guis/icons/ammo/am_rrl_stinger + + diffusemap textures/guis/icons/ammo/am_rrl_stinger +} +textures/guis/icons/ammo/am_sht_buck +{ + qer_editorimage textures/guis/icons/ammo/am_sht_buck + + diffusemap textures/guis/icons/ammo/am_sht_buck +} +textures/guis/icons/ammo/am_sht_electroshot +{ + qer_editorimage textures/guis/icons/ammo/am_sht_electroshot + + diffusemap textures/guis/icons/ammo/am_sht_electroshot +} +textures/guis/icons/ammo/am_sht_poppers +{ + qer_editorimage textures/guis/icons/ammo/am_sht_poppers + + diffusemap textures/guis/icons/ammo/am_sht_poppers +} +textures/guis/icons/ammo/am_snp_reg +{ + qer_editorimage textures/guis/icons/ammo/am_snp_reg + + diffusemap textures/guis/icons/ammo/am_snp_reg +} +textures/guis/icons/ammo/am_tln_control +{ + qer_editorimage textures/guis/icons/ammo/am_tln_control + + diffusemap textures/guis/icons/ammo/am_tln_control +} +textures/guis/icons/ammo/am_tln_electro +{ + qer_editorimage textures/guis/icons/ammo/am_tln_electro + + diffusemap textures/guis/icons/ammo/am_tln_electro +} +textures/guis/icons/ammo/am_tln_explosive +{ + qer_editorimage textures/guis/icons/ammo/am_tln_explosive + + diffusemap textures/guis/icons/ammo/am_tln_explosive +} +textures/guis/icons/ammo/am_tln_reg +{ + qer_editorimage textures/guis/icons/ammo/am_tln_reg + + diffusemap textures/guis/icons/ammo/am_tln_reg +} +textures/guis/icons/dlc1/access_card +{ + qer_editorimage textures/guis/icons/dlc1/access_card + + diffusemap textures/guis/icons/dlc1/access_card +} +textures/guis/icons/dlc1/mb_ticket +{ + qer_editorimage textures/guis/icons/dlc1/mb_ticket + + diffusemap textures/guis/icons/dlc1/mb_ticket +} +textures/guis/icons/dlc1/scorcher_plans +{ + qer_editorimage textures/guis/icons/dlc1/scorcher_plans + + diffusemap textures/guis/icons/dlc1/scorcher_plans +} +textures/guis/icons/dossier/dbl_shotgun +{ + qer_editorimage textures/guis/icons/dossier/dbl_shotgun + + diffusemap textures/guis/icons/dossier/dbl_shotgun +} +textures/guis/icons/dossier/ess_authorityaug +{ + qer_editorimage textures/guis/icons/dossier/ess_authorityaug + + diffusemap textures/guis/icons/dossier/ess_authorityaug +} +textures/guis/icons/dossier/ess_bandages +{ + qer_editorimage textures/guis/icons/dossier/ess_bandages + + diffusemap textures/guis/icons/dossier/ess_bandages +} +textures/guis/icons/dossier/ess_cluster_grenade +{ + qer_editorimage textures/guis/icons/dossier/ess_cluster_grenade + + diffusemap textures/guis/icons/dossier/ess_cluster_grenade +} +textures/guis/icons/dossier/ess_cluster_rockets +{ + qer_editorimage textures/guis/icons/dossier/ess_cluster_rockets + + diffusemap textures/guis/icons/dossier/ess_cluster_rockets +} +textures/guis/icons/dossier/ess_damage_enh +{ + qer_editorimage textures/guis/icons/dossier/ess_damage_enh + + diffusemap textures/guis/icons/dossier/ess_damage_enh +} +textures/guis/icons/dossier/ess_dynamite +{ + qer_editorimage textures/guis/icons/dossier/ess_dynamite + + diffusemap textures/guis/icons/dossier/ess_dynamite +} +textures/guis/icons/dossier/ess_emp_grenade +{ + qer_editorimage textures/guis/icons/dossier/ess_emp_grenade + + diffusemap textures/guis/icons/dossier/ess_emp_grenade +} +textures/guis/icons/dossier/ess_fat_mammas +{ + qer_editorimage textures/guis/icons/dossier/ess_fat_mammas + + diffusemap textures/guis/icons/dossier/ess_fat_mammas +} +textures/guis/icons/dossier/ess_health_boost +{ + qer_editorimage textures/guis/icons/dossier/ess_health_boost + + diffusemap textures/guis/icons/dossier/ess_health_boost +} +textures/guis/icons/dossier/ess_lock_grinder +{ + qer_editorimage textures/guis/icons/dossier/ess_lock_grinder + + diffusemap textures/guis/icons/dossier/ess_lock_grinder +} +textures/guis/icons/dossier/ess_mindsnare +{ + qer_editorimage textures/guis/icons/dossier/ess_mindsnare + + diffusemap textures/guis/icons/dossier/ess_mindsnare +} +textures/guis/icons/dossier/ess_pacifier +{ + qer_editorimage textures/guis/icons/dossier/ess_pacifier + + diffusemap textures/guis/icons/dossier/ess_pacifier +} +textures/guis/icons/dossier/ess_pop_rockets +{ + qer_editorimage textures/guis/icons/dossier/ess_pop_rockets + + diffusemap textures/guis/icons/dossier/ess_pop_rockets +} +textures/guis/icons/dossier/ess_rcbomb +{ + qer_editorimage textures/guis/icons/dossier/ess_rcbomb + + diffusemap textures/guis/icons/dossier/ess_rcbomb +} +textures/guis/icons/dossier/ess_rcbomb_upgrade +{ + qer_editorimage textures/guis/icons/dossier/ess_rcbomb_upgrade + + diffusemap textures/guis/icons/dossier/ess_rcbomb_upgrade +} +textures/guis/icons/dossier/ess_regen_pack +{ + qer_editorimage textures/guis/icons/dossier/ess_regen_pack + + diffusemap textures/guis/icons/dossier/ess_regen_pack +} +textures/guis/icons/dossier/ess_sentry +{ + qer_editorimage textures/guis/icons/dossier/ess_sentry + + diffusemap textures/guis/icons/dossier/ess_sentry +} +textures/guis/icons/dossier/ess_sentry_upgrade +{ + qer_editorimage textures/guis/icons/dossier/ess_sentry_upgrade + + diffusemap textures/guis/icons/dossier/ess_sentry_upgrade +} +textures/guis/icons/dossier/ess_turret +{ + qer_editorimage textures/guis/icons/dossier/ess_turret + + diffusemap textures/guis/icons/dossier/ess_turret +} +textures/guis/icons/dossier/ess_turret_full +{ + qer_editorimage textures/guis/icons/dossier/ess_turret_full + + diffusemap textures/guis/icons/dossier/ess_turret_full +} +textures/guis/icons/dossier/ess_wingstick +{ + qer_editorimage textures/guis/icons/dossier/ess_wingstick + + diffusemap textures/guis/icons/dossier/ess_wingstick +} +textures/guis/icons/dossier/fist +{ + qer_editorimage textures/guis/icons/dossier/fist + + diffusemap textures/guis/icons/dossier/fist +} +textures/guis/icons/dossier/fistrage +{ + qer_editorimage textures/guis/icons/dossier/fistrage + + diffusemap textures/guis/icons/dossier/fistrage +} +textures/guis/icons/dossier/nailgun +{ + qer_editorimage textures/guis/icons/dossier/nailgun + + diffusemap textures/guis/icons/dossier/nailgun +} +textures/guis/icons/dossier/pistol +{ + qer_editorimage textures/guis/icons/dossier/pistol + + diffusemap textures/guis/icons/dossier/pistol +} +textures/guis/icons/dossier/pulse_canon +{ + qer_editorimage textures/guis/icons/dossier/pulse_canon + + diffusemap textures/guis/icons/dossier/pulse_canon +} +textures/guis/icons/dossier/regime_mgun +{ + qer_editorimage textures/guis/icons/dossier/regime_mgun + + diffusemap textures/guis/icons/dossier/regime_mgun +} +textures/guis/icons/dossier/regime_shotgun +{ + qer_editorimage textures/guis/icons/dossier/regime_shotgun + + diffusemap textures/guis/icons/dossier/regime_shotgun +} +textures/guis/icons/dossier/rifle +{ + qer_editorimage textures/guis/icons/dossier/rifle + + diffusemap textures/guis/icons/dossier/rifle +} +textures/guis/icons/dossier/rocket_launcher +{ + qer_editorimage textures/guis/icons/dossier/rocket_launcher + + diffusemap textures/guis/icons/dossier/rocket_launcher +} +textures/guis/icons/dossier/settler_mgun +{ + qer_editorimage textures/guis/icons/dossier/settler_mgun + + diffusemap textures/guis/icons/dossier/settler_mgun +} +textures/guis/icons/dossier/talon +{ + qer_editorimage textures/guis/icons/dossier/talon + + diffusemap textures/guis/icons/dossier/talon +} +textures/guis/icons/dossier/wss_crossbow +{ + qer_editorimage textures/guis/icons/dossier/wss_crossbow + + diffusemap textures/guis/icons/dossier/wss_crossbow +} +textures/guis/icons/dossier/wss_dbl_shotgun +{ + qer_editorimage textures/guis/icons/dossier/wss_dbl_shotgun + + diffusemap textures/guis/icons/dossier/wss_dbl_shotgun +} +textures/guis/icons/dossier/wss_fist +{ + qer_editorimage textures/guis/icons/dossier/wss_fist + + diffusemap textures/guis/icons/dossier/wss_fist +} +textures/guis/icons/dossier/wss_fistrage +{ + qer_editorimage textures/guis/icons/dossier/wss_fistrage + + diffusemap textures/guis/icons/dossier/wss_fistrage +} +textures/guis/icons/dossier/wss_nailgun +{ + qer_editorimage textures/guis/icons/dossier/wss_nailgun + + diffusemap textures/guis/icons/dossier/wss_nailgun +} +textures/guis/icons/dossier/wss_pistol +{ + qer_editorimage textures/guis/icons/dossier/wss_pistol + + diffusemap textures/guis/icons/dossier/wss_pistol +} +textures/guis/icons/dossier/wss_plasma +{ + qer_editorimage textures/guis/icons/dossier/wss_plasma + + diffusemap textures/guis/icons/dossier/wss_plasma +} +textures/guis/icons/dossier/wss_regime_mg +{ + qer_editorimage textures/guis/icons/dossier/wss_regime_mg + + diffusemap textures/guis/icons/dossier/wss_regime_mg +} +textures/guis/icons/dossier/wss_regime_rocket +{ + qer_editorimage textures/guis/icons/dossier/wss_regime_rocket + + diffusemap textures/guis/icons/dossier/wss_regime_rocket +} +textures/guis/icons/dossier/wss_settler_mg +{ + qer_editorimage textures/guis/icons/dossier/wss_settler_mg + + diffusemap textures/guis/icons/dossier/wss_settler_mg +} +textures/guis/icons/dossier/wss_shotgun +{ + qer_editorimage textures/guis/icons/dossier/wss_shotgun + + diffusemap textures/guis/icons/dossier/wss_shotgun +} +textures/guis/icons/dossier/wss_sniper +{ + qer_editorimage textures/guis/icons/dossier/wss_sniper + + diffusemap textures/guis/icons/dossier/wss_sniper +} +textures/guis/icons/engineering/antiseptic_formula +{ + qer_editorimage textures/guis/icons/engineering/antiseptic_formula + + diffusemap textures/guis/icons/engineering/antiseptic_formula +} +textures/guis/icons/engineering/eng_blueshine +{ + qer_editorimage textures/guis/icons/engineering/eng_blueshine + + diffusemap textures/guis/icons/engineering/eng_blueshine +} +textures/guis/icons/engineering/eng_c4 +{ + qer_editorimage textures/guis/icons/engineering/eng_c4 + + diffusemap textures/guis/icons/engineering/eng_c4 +} +textures/guis/icons/engineering/eng_cloth_rags +{ + qer_editorimage textures/guis/icons/engineering/eng_cloth_rags + + diffusemap textures/guis/icons/engineering/eng_cloth_rags +} +textures/guis/icons/engineering/eng_cometbloom +{ + qer_editorimage textures/guis/icons/engineering/eng_cometbloom + + diffusemap textures/guis/icons/engineering/eng_cometbloom +} +textures/guis/icons/engineering/eng_desertspore +{ + qer_editorimage textures/guis/icons/engineering/eng_desertspore + + diffusemap textures/guis/icons/engineering/eng_desertspore +} +textures/guis/icons/engineering/eng_feltrite_coupler +{ + qer_editorimage textures/guis/icons/engineering/eng_feltrite_coupler + + diffusemap textures/guis/icons/engineering/eng_feltrite_coupler +} +textures/guis/icons/engineering/eng_feltrite_power +{ + qer_editorimage textures/guis/icons/engineering/eng_feltrite_power + + diffusemap textures/guis/icons/engineering/eng_feltrite_power +} +textures/guis/icons/engineering/eng_mutant_pheromones +{ + qer_editorimage textures/guis/icons/engineering/eng_mutant_pheromones + + diffusemap textures/guis/icons/engineering/eng_mutant_pheromones +} +textures/guis/icons/engineering/eng_nanotrite_conduit +{ + qer_editorimage textures/guis/icons/engineering/eng_nanotrite_conduit + + diffusemap textures/guis/icons/engineering/eng_nanotrite_conduit +} +textures/guis/icons/engineering/eng_ordinance_pack +{ + qer_editorimage textures/guis/icons/engineering/eng_ordinance_pack + + diffusemap textures/guis/icons/engineering/eng_ordinance_pack +} +textures/guis/icons/engineering/eng_rc_car_kit +{ + qer_editorimage textures/guis/icons/engineering/eng_rc_car_kit + + diffusemap textures/guis/icons/engineering/eng_rc_car_kit +} +textures/guis/icons/engineering/eng_small_battery_pack +{ + qer_editorimage textures/guis/icons/engineering/eng_small_battery_pack + + diffusemap textures/guis/icons/engineering/eng_small_battery_pack +} +textures/guis/icons/engineering/eng_small_gears +{ + qer_editorimage textures/guis/icons/engineering/eng_small_gears + + diffusemap textures/guis/icons/engineering/eng_small_gears +} +textures/guis/icons/engineering/eng_steel_blades +{ + qer_editorimage textures/guis/icons/engineering/eng_steel_blades + + diffusemap textures/guis/icons/engineering/eng_steel_blades +} +textures/guis/icons/engineering/eng_turret_barrel +{ + qer_editorimage textures/guis/icons/engineering/eng_turret_barrel + + diffusemap textures/guis/icons/engineering/eng_turret_barrel +} +textures/guis/icons/engineering/eng_wire_kit +{ + qer_editorimage textures/guis/icons/engineering/eng_wire_kit + + diffusemap textures/guis/icons/engineering/eng_wire_kit +} +textures/guis/icons/engineering/hardware_packet +{ + qer_editorimage textures/guis/icons/engineering/hardware_packet + + diffusemap textures/guis/icons/engineering/hardware_packet +} +textures/guis/icons/job/alternator +{ + qer_editorimage textures/guis/icons/job/alternator + + diffusemap textures/guis/icons/job/alternator +} +textures/guis/icons/job/ark_equipment +{ + qer_editorimage textures/guis/icons/job/ark_equipment + + diffusemap textures/guis/icons/job/ark_equipment +} +textures/guis/icons/job/blueshine +{ + qer_editorimage textures/guis/icons/job/blueshine + + diffusemap textures/guis/icons/job/blueshine +} +textures/guis/icons/job/cypher +{ + qer_editorimage textures/guis/icons/job/cypher + + diffusemap textures/guis/icons/job/cypher +} +textures/guis/icons/job/data +{ + qer_editorimage textures/guis/icons/job/data + + diffusemap textures/guis/icons/job/data +} +textures/guis/icons/job/defib_upgrade +{ + qer_editorimage textures/guis/icons/job/defib_upgrade + + diffusemap textures/guis/icons/job/defib_upgrade +} +textures/guis/icons/job/distributor +{ + qer_editorimage textures/guis/icons/job/distributor + + diffusemap textures/guis/icons/job/distributor +} +textures/guis/icons/job/feltrite_sample +{ + qer_editorimage textures/guis/icons/job/feltrite_sample + + diffusemap textures/guis/icons/job/feltrite_sample +} +textures/guis/icons/job/fireworks +{ + qer_editorimage textures/guis/icons/job/fireworks + + diffusemap textures/guis/icons/job/fireworks +} +textures/guis/icons/job/flower +{ + qer_editorimage textures/guis/icons/job/flower + + diffusemap textures/guis/icons/job/flower +} +textures/guis/icons/job/id_drive +{ + qer_editorimage textures/guis/icons/job/id_drive + + diffusemap textures/guis/icons/job/id_drive +} +textures/guis/icons/job/juno_remains +{ + qer_editorimage textures/guis/icons/job/juno_remains + + diffusemap textures/guis/icons/job/juno_remains +} +textures/guis/icons/job/keycard +{ + qer_editorimage textures/guis/icons/job/keycard + + diffusemap textures/guis/icons/job/keycard +} +textures/guis/icons/job/letter_to +{ + qer_editorimage textures/guis/icons/job/letter_to + + diffusemap textures/guis/icons/job/letter_to +} +textures/guis/icons/job/management_office_keys +{ + qer_editorimage textures/guis/icons/job/management_office_keys + + diffusemap textures/guis/icons/job/management_office_keys +} +textures/guis/icons/job/mindcontrol +{ + qer_editorimage textures/guis/icons/job/mindcontrol + + diffusemap textures/guis/icons/job/mindcontrol +} +textures/guis/icons/job/piston +{ + qer_editorimage textures/guis/icons/job/piston + + diffusemap textures/guis/icons/job/piston +} +textures/guis/icons/job/plutonium_feltrite +{ + qer_editorimage textures/guis/icons/job/plutonium_feltrite + + diffusemap textures/guis/icons/job/plutonium_feltrite +} +textures/guis/icons/job/proof_of +{ + qer_editorimage textures/guis/icons/job/proof_of + + diffusemap textures/guis/icons/job/proof_of +} +textures/guis/icons/job/rc_prototype +{ + qer_editorimage textures/guis/icons/job/rc_prototype + + diffusemap textures/guis/icons/job/rc_prototype +} +textures/guis/icons/job/supplies +{ + qer_editorimage textures/guis/icons/job/supplies + + diffusemap textures/guis/icons/job/supplies +} +textures/guis/icons/job/well_toxin +{ + qer_editorimage textures/guis/icons/job/well_toxin + + diffusemap textures/guis/icons/job/well_toxin +} +textures/guis/icons/junk/blake +{ + qer_editorimage textures/guis/icons/junk/blake + + diffusemap textures/guis/icons/junk/blake +} +textures/guis/icons/junk/crayons +{ + qer_editorimage textures/guis/icons/junk/crayons + + diffusemap textures/guis/icons/junk/crayons +} +textures/guis/icons/junk/doggie +{ + qer_editorimage textures/guis/icons/junk/doggie + + diffusemap textures/guis/icons/junk/doggie +} +textures/guis/icons/junk/doommarine +{ + qer_editorimage textures/guis/icons/junk/doommarine + + diffusemap textures/guis/icons/junk/doommarine +} +textures/guis/icons/junk/feltrite +{ + qer_editorimage textures/guis/icons/junk/feltrite + + diffusemap textures/guis/icons/junk/feltrite +} +textures/guis/icons/junk/ju_book +{ + qer_editorimage textures/guis/icons/junk/ju_book + + diffusemap textures/guis/icons/junk/ju_book +} +textures/guis/icons/junk/ju_bottle +{ + qer_editorimage textures/guis/icons/junk/ju_bottle + + diffusemap textures/guis/icons/junk/ju_bottle +} +textures/guis/icons/junk/ju_cans +{ + qer_editorimage textures/guis/icons/junk/ju_cans + + diffusemap textures/guis/icons/junk/ju_cans +} +textures/guis/icons/junk/ju_gastank +{ + qer_editorimage textures/guis/icons/junk/ju_gastank + + diffusemap textures/guis/icons/junk/ju_gastank +} +textures/guis/icons/junk/ju_hardware +{ + qer_editorimage textures/guis/icons/junk/ju_hardware + + diffusemap textures/guis/icons/junk/ju_hardware +} +textures/guis/icons/junk/ju_oilcan +{ + qer_editorimage textures/guis/icons/junk/ju_oilcan + + diffusemap textures/guis/icons/junk/ju_oilcan +} +textures/guis/icons/junk/ju_smalljunk +{ + qer_editorimage textures/guis/icons/junk/ju_smalljunk + + diffusemap textures/guis/icons/junk/ju_smalljunk +} +textures/guis/icons/junk/pinkie +{ + qer_editorimage textures/guis/icons/junk/pinkie + + diffusemap textures/guis/icons/junk/pinkie +} +textures/guis/icons/junk/pipboy +{ + qer_editorimage textures/guis/icons/junk/pipboy + + diffusemap textures/guis/icons/junk/pipboy +} +textures/guis/icons/junk/wolfgoblet +{ + qer_editorimage textures/guis/icons/junk/wolfgoblet + + diffusemap textures/guis/icons/junk/wolfgoblet +} +textures/guis/icons/quickuse/authority_augmentor +{ + qer_editorimage textures/guis/icons/quickuse/authority_augmentor + + diffusemap textures/guis/icons/quickuse/authority_augmentor +} +textures/guis/icons/quickuse/defib_charge +{ + qer_editorimage textures/guis/icons/quickuse/defib_charge + + diffusemap textures/guis/icons/quickuse/defib_charge +} +textures/guis/icons/quickuse/deployable_turret_1 +{ + qer_editorimage textures/guis/icons/quickuse/deployable_turret_1 + + diffusemap textures/guis/icons/quickuse/deployable_turret_1 +} +textures/guis/icons/quickuse/deployable_turret_2 +{ + qer_editorimage textures/guis/icons/quickuse/deployable_turret_2 + + diffusemap textures/guis/icons/quickuse/deployable_turret_2 +} +textures/guis/icons/quickuse/emp_grenade +{ + qer_editorimage textures/guis/icons/quickuse/emp_grenade + + diffusemap textures/guis/icons/quickuse/emp_grenade +} +textures/guis/icons/quickuse/icon_big_health +{ + qer_editorimage textures/guis/icons/quickuse/icon_big_health + + diffusemap textures/guis/icons/quickuse/icon_big_health +} +textures/guis/icons/quickuse/icon_grenade +{ + qer_editorimage textures/guis/icons/quickuse/icon_grenade + + diffusemap textures/guis/icons/quickuse/icon_grenade +} +textures/guis/icons/quickuse/icon_sentry_bot +{ + qer_editorimage textures/guis/icons/quickuse/icon_sentry_bot + + diffusemap textures/guis/icons/quickuse/icon_sentry_bot +} +textures/guis/icons/quickuse/icon_sentry_upgrade +{ + qer_editorimage textures/guis/icons/quickuse/icon_sentry_upgrade + + diffusemap textures/guis/icons/quickuse/icon_sentry_upgrade +} +textures/guis/icons/quickuse/icon_sml_health +{ + qer_editorimage textures/guis/icons/quickuse/icon_sml_health + + diffusemap textures/guis/icons/quickuse/icon_sml_health +} +textures/guis/icons/quickuse/icon_wingstick +{ + qer_editorimage textures/guis/icons/quickuse/icon_wingstick + + diffusemap textures/guis/icons/quickuse/icon_wingstick +} +textures/guis/icons/quickuse/icon_wingstick_multi +{ + qer_editorimage textures/guis/icons/quickuse/icon_wingstick_multi + + diffusemap textures/guis/icons/quickuse/icon_wingstick_multi +} +textures/guis/icons/quickuse/large_bandage +{ + qer_editorimage textures/guis/icons/quickuse/large_bandage + + diffusemap textures/guis/icons/quickuse/large_bandage +} +textures/guis/icons/quickuse/lockgrinder +{ + qer_editorimage textures/guis/icons/quickuse/lockgrinder + + diffusemap textures/guis/icons/quickuse/lockgrinder +} +textures/guis/icons/quickuse/nitro_cell +{ + qer_editorimage textures/guis/icons/quickuse/nitro_cell + + diffusemap textures/guis/icons/quickuse/nitro_cell +} +textures/guis/icons/quickuse/sticky +{ + qer_editorimage textures/guis/icons/quickuse/sticky + + diffusemap textures/guis/icons/quickuse/sticky +} +textures/guis/icons/quickuse/vial_adrenialineboost +{ + qer_editorimage textures/guis/icons/quickuse/vial_adrenialineboost + + diffusemap textures/guis/icons/quickuse/vial_adrenialineboost +} +textures/guis/icons/quickuse/vial_healthbooster +{ + qer_editorimage textures/guis/icons/quickuse/vial_healthbooster + + diffusemap textures/guis/icons/quickuse/vial_healthbooster +} +textures/guis/icons/quickuse/vial_healthregen +{ + qer_editorimage textures/guis/icons/quickuse/vial_healthregen + + diffusemap textures/guis/icons/quickuse/vial_healthregen +} +textures/guis/icons/scenarios/abandoned_distillery +{ + qer_editorimage textures/guis/icons/scenarios/abandoned_distillery + + diffusemap textures/guis/icons/scenarios/abandoned_distillery +} +textures/guis/icons/scenarios/authority_prison +{ + qer_editorimage textures/guis/icons/scenarios/authority_prison + + diffusemap textures/guis/icons/scenarios/authority_prison +} +textures/guis/icons/scenarios/bash_canyon +{ + qer_editorimage textures/guis/icons/scenarios/bash_canyon + + diffusemap textures/guis/icons/scenarios/bash_canyon +} +textures/guis/icons/scenarios/blue_line_station +{ + qer_editorimage textures/guis/icons/scenarios/blue_line_station + + diffusemap textures/guis/icons/scenarios/blue_line_station +} +textures/guis/icons/scenarios/capital_prime +{ + qer_editorimage textures/guis/icons/scenarios/capital_prime + + diffusemap textures/guis/icons/scenarios/capital_prime +} +textures/guis/icons/scenarios/caves +{ + qer_editorimage textures/guis/icons/scenarios/caves + + diffusemap textures/guis/icons/scenarios/caves +} +textures/guis/icons/scenarios/dead_city_central +{ + qer_editorimage textures/guis/icons/scenarios/dead_city_central + + diffusemap textures/guis/icons/scenarios/dead_city_central +} +textures/guis/icons/scenarios/dead_city_streets +{ + qer_editorimage textures/guis/icons/scenarios/dead_city_streets + + diffusemap textures/guis/icons/scenarios/dead_city_streets +} +textures/guis/icons/scenarios/gearhead +{ + qer_editorimage textures/guis/icons/scenarios/gearhead_base + + diffusemap textures/guis/icons/scenarios/gearhead_base +} +textures/guis/icons/scenarios/gearhead_powerplant +{ + qer_editorimage textures/guis/icons/scenarios/gearhead_powerplant + + diffusemap textures/guis/icons/scenarios/gearhead_powerplant +} +textures/guis/icons/scenarios/ghost_hideout +{ + qer_editorimage textures/guis/icons/scenarios/ghost_hideout + + diffusemap textures/guis/icons/scenarios/ghost_hideout +} +textures/guis/icons/scenarios/jackal_canyon +{ + qer_editorimage textures/guis/icons/scenarios/jackal_canyon + + diffusemap textures/guis/icons/scenarios/jackal_canyon +} +textures/guis/icons/scenarios/loadout_assault +{ + qer_editorimage textures/guis/icons/scenarios/loadout_assault + + diffusemap textures/guis/icons/scenarios/loadout_assault +} +textures/guis/icons/scenarios/loadout_authority +{ + qer_editorimage textures/guis/icons/scenarios/loadout_authority + + diffusemap textures/guis/icons/scenarios/loadout_authority +} +textures/guis/icons/scenarios/loadout_demolitions +{ + qer_editorimage textures/guis/icons/scenarios/loadout_demolitions + + diffusemap textures/guis/icons/scenarios/loadout_demolitions +} +textures/guis/icons/scenarios/loadout_electric +{ + qer_editorimage textures/guis/icons/scenarios/loadout_electric + + diffusemap textures/guis/icons/scenarios/loadout_electric +} +textures/guis/icons/scenarios/loadout_item +{ + qer_editorimage textures/guis/icons/scenarios/loadout_item + + diffusemap textures/guis/icons/scenarios/loadout_item +} +textures/guis/icons/scenarios/loadout_settler +{ + qer_editorimage textures/guis/icons/scenarios/loadout_settler + + diffusemap textures/guis/icons/scenarios/loadout_settler +} +textures/guis/icons/scenarios/loadout_sniper +{ + qer_editorimage textures/guis/icons/scenarios/loadout_sniper + + diffusemap textures/guis/icons/scenarios/loadout_sniper +} +textures/guis/icons/scenarios/loadout_super_items +{ + qer_editorimage textures/guis/icons/scenarios/loadout_super_items + + diffusemap textures/guis/icons/scenarios/loadout_super_items +} +textures/guis/icons/scenarios/mutant_bash +{ + qer_editorimage textures/guis/icons/scenarios/mutant_bash + + diffusemap textures/guis/icons/scenarios/mutant_bash +} +textures/guis/icons/scenarios/refinery +{ + qer_editorimage textures/guis/icons/scenarios/refinery + + diffusemap textures/guis/icons/scenarios/refinery +} +textures/guis/icons/scenarios/scorcher +{ + qer_editorimage textures/guis/icons/scenarios/scorcher_base + + diffusemap textures/guis/icons/scenarios/scorcher_base +} +textures/guis/icons/scenarios/shrouded_clan_bunker +{ + qer_editorimage textures/guis/icons/scenarios/shrouded_clan_bunker + + diffusemap textures/guis/icons/scenarios/shrouded_clan_bunker +} +textures/guis/icons/scenarios/the_well +{ + qer_editorimage textures/guis/icons/scenarios/the_well + + diffusemap textures/guis/icons/scenarios/the_well +} +textures/guis/icons/scenarios/wasted_garage +{ + qer_editorimage textures/guis/icons/scenarios/wasted_garage + + diffusemap textures/guis/icons/scenarios/wasted_garage +} +textures/guis/icons/scenarios/wellspring_tunnels +{ + qer_editorimage textures/guis/icons/scenarios/wellspring_tunnels + + diffusemap textures/guis/icons/scenarios/wellspring_tunnels +} +textures/guis/icons/tutorials/tutorial_lockgrinder +{ + qer_editorimage textures/guis/icons/tutorials/tutorial_lockgrinder + + diffusemap textures/guis/icons/tutorials/tutorial_lockgrinder +} +textures/guis/icons/tutorials/tutorial_race_minigun +{ + qer_editorimage textures/guis/icons/tutorials/tutorial_race_minigun + + diffusemap textures/guis/icons/tutorials/tutorial_race_minigun +} +textures/guis/icons/tutorials/tutorial_race_nitro +{ + qer_editorimage textures/guis/icons/tutorials/tutorial_race_nitro + + diffusemap textures/guis/icons/tutorials/tutorial_race_nitro +} +textures/guis/icons/tutorials/tutorial_race_rocket +{ + qer_editorimage textures/guis/icons/tutorials/tutorial_race_rocket + + diffusemap textures/guis/icons/tutorials/tutorial_race_rocket +} +textures/guis/icons/unique/card_deck +{ + qer_editorimage textures/guis/icons/unique/card_deck + + diffusemap textures/guis/icons/unique/card_deck +} +textures/guis/icons/unique/card_full_deck +{ + qer_editorimage textures/guis/icons/unique/card_full_deck + + diffusemap textures/guis/icons/unique/card_full_deck +} +textures/guis/icons/unique/cash +{ + qer_editorimage textures/guis/icons/unique/cash + + diffusemap textures/guis/icons/unique/cash +} +textures/guis/icons/unique/dmg_boost +{ + qer_editorimage textures/guis/icons/unique/dmg_boost + + diffusemap textures/guis/icons/unique/dmg_boost +} +textures/guis/icons/unique/eng_towtruck_radio +{ + qer_editorimage textures/guis/icons/unique/eng_towtruck_radio + + diffusemap textures/guis/icons/unique/eng_towtruck_radio +} +textures/guis/icons/unique/mega_dmg +{ + qer_editorimage textures/guis/icons/unique/mega_dmg + + diffusemap textures/guis/icons/unique/mega_dmg +} +textures/guis/icons/unique/monocular +{ + qer_editorimage textures/guis/icons/unique/monocular + + diffusemap textures/guis/icons/unique/monocular +} +textures/guis/icons/unique/nanosuit +{ + qer_editorimage textures/guis/icons/unique/nanosuit + + diffusemap textures/guis/icons/unique/nanosuit +} +textures/guis/icons/unique/purifier +{ + qer_editorimage textures/guis/icons/unique/purifier + + diffusemap textures/guis/icons/unique/purifier +} +textures/guis/icons/unique/quad_dmg +{ + qer_editorimage textures/guis/icons/unique/quad_dmg + + diffusemap textures/guis/icons/unique/quad_dmg +} +textures/guis/icons/unique/race_certs +{ + qer_editorimage textures/guis/icons/unique/race_certs + + diffusemap textures/guis/icons/unique/race_certs +} +textures/guis/icons/unique/schematic +{ + qer_editorimage textures/guis/icons/unique/schematic + + diffusemap textures/guis/icons/unique/schematic +} +textures/guis/icons/upgrades/upgrade_amg_laser +{ + qer_editorimage textures/guis/icons/upgrades/upgrade_amg_laser + + diffusemap textures/guis/icons/upgrades/upgrade_amg_laser +} +textures/guis/icons/upgrades/upgrade_armor_lvl1 +{ + qer_editorimage textures/guis/icons/upgrades/upgrade_armor_lvl1 + + diffusemap textures/guis/icons/upgrades/upgrade_armor_lvl1 +} +textures/guis/icons/upgrades/upgrade_armor_lvl2 +{ + qer_editorimage textures/guis/icons/upgrades/upgrade_armor_lvl2 + + diffusemap textures/guis/icons/upgrades/upgrade_armor_lvl2 +} +textures/guis/icons/upgrades/upgrade_armor_lvl3 +{ + qer_editorimage textures/guis/icons/upgrades/upgrade_armor_lvl3 + + diffusemap textures/guis/icons/upgrades/upgrade_armor_lvl3 +} +textures/guis/icons/upgrades/upgrade_fistsrage +{ + qer_editorimage textures/guis/icons/upgrades/upgrade_fistsrage + + diffusemap textures/guis/icons/upgrades/upgrade_fistsrage +} +textures/guis/icons/upgrades/upgrade_mg_cocnen +{ + qer_editorimage textures/guis/icons/upgrades/upgrade_mg_cocnen + + diffusemap textures/guis/icons/upgrades/upgrade_mg_cocnen +} +textures/guis/icons/upgrades/upgrade_mg_stable +{ + qer_editorimage textures/guis/icons/upgrades/upgrade_mg_stable + + diffusemap textures/guis/icons/upgrades/upgrade_mg_stable +} +textures/guis/icons/upgrades/upgrade_rifle_mag +{ + qer_editorimage textures/guis/icons/upgrades/upgrade_rifle_mag + + diffusemap textures/guis/icons/upgrades/upgrade_rifle_mag +} +textures/guis/icons/upgrades/upgrade_sg_clip +{ + qer_editorimage textures/guis/icons/upgrades/upgrade_sg_clip + + diffusemap textures/guis/icons/upgrades/upgrade_sg_clip +} +textures/guis/icons/vehicle/ammo_chaingun +{ + qer_editorimage textures/guis/icons/vehicle/ammo_chaingun + + diffusemap textures/guis/icons/vehicle/ammo_chaingun +} +textures/guis/icons/vehicle/ammo_pulse +{ + qer_editorimage textures/guis/icons/vehicle/ammo_pulse + + diffusemap textures/guis/icons/vehicle/ammo_pulse +} +textures/guis/icons/vehicle/ammo_rocket +{ + qer_editorimage textures/guis/icons/vehicle/ammo_rocket + + diffusemap textures/guis/icons/vehicle/ammo_rocket +} +textures/guis/icons/vehicle/armor_level1 +{ + qer_editorimage textures/guis/icons/vehicle/armor_level1 + + diffusemap textures/guis/icons/vehicle/armor_level1 +} +textures/guis/icons/vehicle/armor_level2 +{ + qer_editorimage textures/guis/icons/vehicle/armor_level2 + + diffusemap textures/guis/icons/vehicle/armor_level2 +} +textures/guis/icons/vehicle/armor_level3 +{ + qer_editorimage textures/guis/icons/vehicle/armor_level3 + + diffusemap textures/guis/icons/vehicle/armor_level3 +} +textures/guis/icons/vehicle/booster_level1 +{ + qer_editorimage textures/guis/icons/vehicle/booster_level1 + + diffusemap textures/guis/icons/vehicle/booster_level1 +} +textures/guis/icons/vehicle/booster_level2 +{ + qer_editorimage textures/guis/icons/vehicle/booster_level2 + + diffusemap textures/guis/icons/vehicle/booster_level2 +} +textures/guis/icons/vehicle/booster_level3 +{ + qer_editorimage textures/guis/icons/vehicle/booster_level3 + + diffusemap textures/guis/icons/vehicle/booster_level3 +} +textures/guis/icons/vehicle/bumper_hammer +{ + qer_editorimage textures/guis/icons/vehicle/bumper_hammer + + diffusemap textures/guis/icons/vehicle/bumper_hammer +} +textures/guis/icons/vehicle/bumper_magnum +{ + qer_editorimage textures/guis/icons/vehicle/bumper_magnum + + diffusemap textures/guis/icons/vehicle/bumper_magnum +} +textures/guis/icons/vehicle/empty +{ + qer_editorimage textures/guis/icons/vehicle/empty + + diffusemap textures/guis/icons/vehicle/empty +} +textures/guis/icons/vehicle/engine_standard +{ + qer_editorimage textures/guis/icons/vehicle/engine_standard + + diffusemap textures/guis/icons/vehicle/engine_standard +} +textures/guis/icons/vehicle/engine_upgraded +{ + qer_editorimage textures/guis/icons/vehicle/engine_upgraded + + diffusemap textures/guis/icons/vehicle/engine_upgraded +} +textures/guis/icons/vehicle/machinegun +{ + qer_editorimage textures/guis/icons/vehicle/machinegun + + diffusemap textures/guis/icons/vehicle/machinegun +} +textures/guis/icons/vehicle/missiles +{ + qer_editorimage textures/guis/icons/vehicle/missiles + + diffusemap textures/guis/icons/vehicle/missiles +} +textures/guis/icons/vehicle/qu_aftershocker +{ + qer_editorimage textures/guis/icons/vehicle/qu_aftershocker + + diffusemap textures/guis/icons/vehicle/qu_aftershocker +} +textures/guis/icons/vehicle/qu_autoturret +{ + qer_editorimage textures/guis/icons/vehicle/qu_autoturret + + diffusemap textures/guis/icons/vehicle/qu_autoturret +} +textures/guis/icons/vehicle/qu_mutantbash +{ + qer_editorimage textures/guis/icons/vehicle/qu_mutantbash + + diffusemap textures/guis/icons/vehicle/qu_mutantbash +} +textures/guis/icons/vehicle/qu_repair +{ + qer_editorimage textures/guis/icons/vehicle/qu_repair + + diffusemap textures/guis/icons/vehicle/qu_repair +} +textures/guis/icons/vehicle/qu_rover +{ + qer_editorimage textures/guis/icons/vehicle/qu_rover + + diffusemap textures/guis/icons/vehicle/qu_rover +} +textures/guis/icons/vehicle/qu_shield +{ + qer_editorimage textures/guis/icons/vehicle/qu_shield + + diffusemap textures/guis/icons/vehicle/qu_shield +} +textures/guis/icons/vehicle/qu_spinjet +{ + qer_editorimage textures/guis/icons/vehicle/qu_spinjet + + diffusemap textures/guis/icons/vehicle/qu_spinjet +} +textures/guis/icons/vehicle/qu_stickybomb +{ + qer_editorimage textures/guis/icons/vehicle/qu_stickybomb + + diffusemap textures/guis/icons/vehicle/qu_stickybomb +} +textures/guis/icons/vehicle/suspension_standard +{ + qer_editorimage textures/guis/icons/vehicle/suspension_standard + + diffusemap textures/guis/icons/vehicle/suspension_standard +} +textures/guis/icons/vehicle/suspension_upgraded +{ + qer_editorimage textures/guis/icons/vehicle/suspension_upgraded + + diffusemap textures/guis/icons/vehicle/suspension_upgraded +} +textures/guis/icons/vehicle/theme_generic +{ + qer_editorimage textures/guis/icons/vehicle/theme_generic + + diffusemap textures/guis/icons/vehicle/theme_generic +} +textures/guis/icons/vehicle/theme_id +{ + qer_editorimage textures/guis/icons/vehicle/theme_id + + diffusemap textures/guis/icons/vehicle/theme_id +} +textures/guis/icons/vehicle/theme_orange +{ + qer_editorimage textures/guis/icons/vehicle/theme_orange + + diffusemap textures/guis/icons/vehicle/theme_orange +} +textures/guis/icons/vehicle/theme_patrol +{ + qer_editorimage textures/guis/icons/vehicle/theme_patrol + + diffusemap textures/guis/icons/vehicle/theme_patrol +} +textures/guis/icons/vehicle/theme_scorcher +{ + qer_editorimage textures/guis/icons/vehicle/theme_scorcher + + diffusemap textures/guis/icons/vehicle/theme_scorcher +} +textures/guis/icons/vehicle/theme_skull +{ + qer_editorimage textures/guis/icons/vehicle/theme_skull + + diffusemap textures/guis/icons/vehicle/theme_skull +} +textures/guis/icons/vehicle/tires_standard +{ + qer_editorimage textures/guis/icons/vehicle/tires_standard + + diffusemap textures/guis/icons/vehicle/tires_standard +} +textures/guis/icons/vehicle/tires_standard_spiked +{ + qer_editorimage textures/guis/icons/vehicle/tires_standard_spiked + + diffusemap textures/guis/icons/vehicle/tires_standard_spiked +} +textures/guis/icons/vehicle/tires_sticky +{ + qer_editorimage textures/guis/icons/vehicle/tires_sticky + + diffusemap textures/guis/icons/vehicle/tires_sticky +} +textures/guis/icons/vehicle/tires_sticky_spiked +{ + qer_editorimage textures/guis/icons/vehicle/tires_sticky_spiked + + diffusemap textures/guis/icons/vehicle/tires_sticky_spiked +} +textures/guis/icons/vendor/v_bfg +{ + qer_editorimage textures/guis/icons/vendor/v_bfg + + diffusemap textures/guis/icons/vendor/v_bfg +} +textures/guis/icons/vendor/v_crossbow +{ + qer_editorimage textures/guis/icons/vendor/v_crossbow + + diffusemap textures/guis/icons/vendor/v_crossbow +} +textures/guis/icons/vendor/v_nailgun +{ + qer_editorimage textures/guis/icons/vendor/v_nailgun + + diffusemap textures/guis/icons/vendor/v_nailgun +} +textures/guis/icons/vendor/v_pistol +{ + qer_editorimage textures/guis/icons/vendor/v_pistol + + diffusemap textures/guis/icons/vendor/v_pistol +} +textures/guis/icons/vendor/v_regime_mg +{ + qer_editorimage textures/guis/icons/vendor/v_regime_mg + + diffusemap textures/guis/icons/vendor/v_regime_mg +} +textures/guis/icons/vendor/v_regime_shotgun +{ + qer_editorimage textures/guis/icons/vendor/v_regime_shotgun + + diffusemap textures/guis/icons/vendor/v_regime_shotgun +} +textures/guis/icons/vendor/v_rocket_launcher +{ + qer_editorimage textures/guis/icons/vendor/v_rocket_launcher + + diffusemap textures/guis/icons/vendor/v_rocket_launcher +} +textures/guis/icons/vendor/v_settler_mg +{ + qer_editorimage textures/guis/icons/vendor/v_settler_mg + + diffusemap textures/guis/icons/vendor/v_settler_mg +} +textures/guis/icons/vendor/v_sniper +{ + qer_editorimage textures/guis/icons/vendor/v_sniper + + diffusemap textures/guis/icons/vendor/v_sniper +} +textures/guis/items/inventory/toaster +{ + qer_editorimage textures/guis/items/inventory/toaster + + diffusemap textures/guis/items/inventory/toaster +} +textures/guis/items/throwable/item_default +{ + qer_editorimage textures/guis/items/throwable/item_default + + diffusemap textures/guis/items/throwable/item_default +} +textures/guis/items/weapons/ak47 +{ + qer_editorimage textures/guis/items/weapons/ak47 + + diffusemap textures/guis/items/weapons/ak47 +} +textures/guis/job_note_complete +{ + qer_editorimage textures/guis/job_note_complete + + diffusemap textures/guis/job_note_complete +} +textures/guis/job_note_empty +{ + qer_editorimage textures/guis/job_note_empty + + diffusemap textures/guis/job_note_empty +} +textures/guis/minimap/d8_1_1 +{ + qer_editorimage textures/guis/minimap/d8_1_1 + + diffusemap textures/guis/minimap/d8_1_1 +} +textures/guis/minimap/d8_1_2 +{ + qer_editorimage textures/guis/minimap/d8_1_2 + + diffusemap textures/guis/minimap/d8_1_2 +} +textures/guis/minimap/d8_1_3 +{ + qer_editorimage textures/guis/minimap/d8_1_3 + + diffusemap textures/guis/minimap/d8_1_3 +} +textures/guis/minimap/d8_2_1 +{ + qer_editorimage textures/guis/minimap/d8_2_1 + + diffusemap textures/guis/minimap/d8_2_1 +} +textures/guis/minimap/d8_2_2 +{ + qer_editorimage textures/guis/minimap/d8_2_2 + + diffusemap textures/guis/minimap/d8_2_2 +} +textures/guis/minimap/d8_2_3 +{ + qer_editorimage textures/guis/minimap/d8_2_3 + + diffusemap textures/guis/minimap/d8_2_3 +} +textures/guis/minimap/d8_2_4 +{ + qer_editorimage textures/guis/minimap/d8_2_4 + + diffusemap textures/guis/minimap/d8_2_4 +} +textures/guis/minimap/d8_3_1 +{ + qer_editorimage textures/guis/minimap/d8_3_1 + + diffusemap textures/guis/minimap/d8_3_1 +} +textures/guis/minimap/d8_3_2 +{ + qer_editorimage textures/guis/minimap/d8_3_2 + + diffusemap textures/guis/minimap/d8_3_2 +} +textures/guis/minimap/d8_3_3 +{ + qer_editorimage textures/guis/minimap/d8_3_3 + + diffusemap textures/guis/minimap/d8_3_3 +} +textures/guis/minimap/d8_3_4 +{ + qer_editorimage textures/guis/minimap/d8_3_4 + + diffusemap textures/guis/minimap/d8_3_4 +} +textures/guis/minimap/d8_4_2 +{ + qer_editorimage textures/guis/minimap/d8_4_2 + + diffusemap textures/guis/minimap/d8_4_2 +} +textures/guis/minimap/d8_4_3 +{ + qer_editorimage textures/guis/minimap/d8_4_3 + + diffusemap textures/guis/minimap/d8_4_3 +} +textures/guis/minimap/d8_4_4 +{ + qer_editorimage textures/guis/minimap/d8_4_4 + + diffusemap textures/guis/minimap/d8_4_4 +} +textures/guis/portraits/gboss +{ + qer_editorimage textures/guis/portraits/gboss + + diffusemap textures/guis/portraits/gboss +} +textures/guis/portraits/giant +{ + qer_editorimage textures/guis/portraits/giant + + diffusemap textures/guis/portraits/giant +} +textures/guis/race_points +{ + qer_editorimage textures/guis/race_points + + diffusemap textures/guis/race_points +} +textures/guis/race_points_red +{ + qer_editorimage textures/guis/race_points_red + + diffusemap textures/guis/race_points_red +} +textures/guis/races/bandit +{ + qer_editorimage textures/guis/races/bandit + + diffusemap textures/guis/races/bandit +} +textures/guis/races/northern +{ + qer_editorimage textures/guis/races/northern + + diffusemap textures/guis/races/northern +} +textures/guis/races/raceticket_01 +{ + qer_editorimage textures/guis/races/raceticket_01 + + diffusemap textures/guis/races/raceticket_01 +} +textures/guis/races/raceticket_02 +{ + qer_editorimage textures/guis/races/raceticket_02 + + diffusemap textures/guis/races/raceticket_02 +} +textures/guis/races/raceticket_03 +{ + qer_editorimage textures/guis/races/raceticket_03 + + diffusemap textures/guis/races/raceticket_03 +} +textures/guis/races/raceticket_mb +{ + qer_editorimage textures/guis/races/raceticket_mb + + diffusemap textures/guis/races/raceticket_mb +} +textures/guis/races/settler +{ + qer_editorimage textures/guis/races/settler + + diffusemap textures/guis/races/settler +} +textures/guis/vehicles/buggy_side_b +{ + qer_editorimage textures/guis/vehicles/buggy_side_b + + diffusemap textures/guis/vehicles/buggy_side_b +} +textures/guis/vehicles/cuprino_side_b +{ + qer_editorimage textures/guis/vehicles/cuprino_side_b + + diffusemap textures/guis/vehicles/cuprino_side_b +} +textures/guis/vehicles/monarch_side_b +{ + qer_editorimage textures/guis/vehicles/monarch_side_b + + diffusemap textures/guis/vehicles/monarch_side_b +} +textures/guis/vehicles/rod_side_b +{ + qer_editorimage textures/guis/vehicles/rod_side_b + + diffusemap textures/guis/vehicles/rod_side_b +} +textures/guis/wingstick_icon +{ + qer_editorimage textures/guis/wingstick_icon + + diffusemap textures/guis/wingstick_icon +} +textures/house/baseboard1 +{ + qer_editorimage textures/house/baseboard1 + + diffusemap textures/house/baseboard1 + bumpmap textures/house/baseboard1_h + specularmap textures/house/baseboard1_s +} +textures/house/concrete01 +{ + qer_editorimage textures/house/concrete01 + + diffusemap textures/house/concrete01 +} +textures/house/hardwood4 +{ + qer_editorimage textures/house/hardwood4 + + diffusemap textures/house/hardwood4 + bumpmap textures/house/hardwood4_h +} +textures/house/linoleum1 +{ + qer_editorimage textures/house/linoleum1 + + diffusemap textures/house/linoleum1 + bumpmap textures/house/linoleum1_h + specularmap textures/house/linoleum1_s +} +textures/house/linoleum1_shiny +{ + qer_editorimage textures/house/linoleum1_shiny + + diffusemap textures/house/linoleum1_shiny + bumpmap textures/house/linoleum1_shiny_local + specularmap textures/house/linoleum1_shiny_s +} +textures/house/plaster2 +{ + qer_editorimage textures/house/plaster2 + + diffusemap textures/house/plaster2 + bumpmap textures/house/plaster2_local + specularmap textures/house/plaster2_s +} +textures/house/plaster4 +{ + qer_editorimage textures/house/plaster4 + + diffusemap textures/house/plaster4 + bumpmap textures/house/plaster4_local +} +textures/idstudio/idstudio_folder +{ + qer_editorimage textures/idstudio/idstudio_folder + + diffusemap textures/idstudio/idstudio_folder +} +textures/idstudio/idstudio_image +{ + qer_editorimage textures/idstudio/idstudio_image + + diffusemap textures/idstudio/idstudio_image +} +textures/idstudio/idstudio_model +{ + qer_editorimage textures/idstudio/idstudio_model + + diffusemap textures/idstudio/idstudio_model +} +textures/particles/barrelexpbase1 +{ + qer_editorimage textures/particles/barrelexpbase1 + + diffusemap textures/particles/barrelexpbase1 +} +textures/particles/barrelpoof +{ + qer_editorimage textures/particles/barrelpoof + + diffusemap textures/particles/barrelpoof +} +textures/particles/blastflare2 +{ + qer_editorimage textures/particles/blastflare2 + + diffusemap textures/particles/blastflare2 +} +textures/particles/blood/blood_droplets_liquid +{ + qer_editorimage textures/particles/blood/blood_droplets_liquid + + diffusemap textures/particles/blood/blood_droplets_liquid +} +textures/particles/blood/blood_glowyspray +{ + qer_editorimage textures/particles/blood/blood_glowyspray + + diffusemap textures/particles/blood/blood_glowyspray +} +textures/particles/blood/blood_spray/blood_spray01 +{ + qer_editorimage textures/particles/blood/blood_spray/blood_spray01_color + + diffusemap textures/particles/blood/blood_spray/blood_spray01_color +} +textures/particles/blood/blood_spray_liquid +{ + qer_editorimage textures/particles/blood/blood_spray_liquid + + diffusemap textures/particles/blood/blood_spray_liquid +} +textures/particles/blood/decals/bloodsplatter01_mod +{ + qer_editorimage textures/particles/blood/decals/bloodsplatter01_mod + + diffusemap textures/particles/blood/decals/bloodsplatter01_mod +} +textures/particles/blood/decals/bloodsplatter02_mod +{ + qer_editorimage textures/particles/blood/decals/bloodsplatter02_mod + + diffusemap textures/particles/blood/decals/bloodsplatter02_mod +} +textures/particles/blood/decals/bloodsplatter03_mod +{ + qer_editorimage textures/particles/blood/decals/bloodsplatter03_mod + + diffusemap textures/particles/blood/decals/bloodsplatter03_mod +} +textures/particles/blood/screen/screensplat01_page +{ + qer_editorimage textures/particles/blood/screen/screensplat01_page + + diffusemap textures/particles/blood/screen/screensplat01_page +} +textures/particles/bloop +{ + qer_editorimage textures/particles/bloop + + diffusemap textures/particles/bloop + bumpmap textures/particles/bloop_local +} +textures/particles/boomboom2 +{ + qer_editorimage textures/particles/boomboom2 + + diffusemap textures/particles/boomboom2 +} +textures/particles/circle_hard_add +{ + qer_editorimage textures/particles/circle_hard_add + + diffusemap textures/particles/circle_hard_add +} +textures/particles/circle_soft_add +{ + qer_editorimage textures/particles/circle_soft_add + + diffusemap textures/particles/circle_soft_add +} +textures/particles/clouds +{ + qer_editorimage textures/particles/clouds + + diffusemap textures/particles/clouds +} +textures/particles/debris/blowing_paper01 +{ + qer_editorimage textures/particles/debris/blowing_paper01 + + diffusemap textures/particles/debris/blowing_paper01 +} +textures/particles/debris/cardboard +{ + qer_editorimage textures/particles/debris/cardboard + + diffusemap textures/particles/debris/cardboard +} +textures/particles/debris/cloth_debris +{ + qer_editorimage textures/particles/debris/cloth_debris + + diffusemap textures/particles/debris/cloth_debris +} +textures/particles/debris/dirt01 +{ + qer_editorimage textures/particles/debris/dirt01 + + diffusemap textures/particles/debris/dirt01 +} +textures/particles/debris/dirt_alphatest02 +{ + qer_editorimage textures/particles/debris/dirt_alphatest02 + + diffusemap textures/particles/debris/dirt_alphatest02 +} +textures/particles/debris/dirt_chunks +{ + qer_editorimage textures/particles/debris/dirt_chunks + + diffusemap textures/particles/debris/dirt_chunks +} +textures/particles/debris/glass_debris01 +{ + qer_editorimage textures/particles/debris/glass_debris01 + + diffusemap textures/particles/debris/glass_debris01 +} +textures/particles/debris/glass_sheet +{ + qer_editorimage textures/particles/debris/glass_sheet + + diffusemap textures/particles/debris/glass_sheet +} +textures/particles/debris/rock_chunk01 +{ + qer_editorimage textures/particles/debris/rock_chunk01 + + diffusemap textures/particles/debris/rock_chunk01 +} +textures/particles/debris/rocks_combined +{ + qer_editorimage textures/particles/debris/rocks_combined + + diffusemap textures/particles/debris/rocks_combined +} +textures/particles/debris/wood_debris01 +{ + qer_editorimage textures/particles/debris/wood_debris01 + + diffusemap textures/particles/debris/wood_debris01 +} +textures/particles/decals/bullet_metal +{ + qer_editorimage textures/particles/decals/bullet_metal + + diffusemap textures/particles/decals/bullet_metal +} +textures/particles/decals/bullet_rock +{ + qer_editorimage textures/particles/decals/bullet_rock + + diffusemap textures/particles/decals/bullet_rock +} +textures/particles/decals/bullet_wood +{ + qer_editorimage textures/particles/decals/bullet_wood + + diffusemap textures/particles/decals/bullet_wood +} +textures/particles/decals/ember +{ + qer_editorimage textures/particles/decals/ember + + diffusemap textures/particles/decals/ember +} +textures/particles/decals/explosion_scorch_a +{ + qer_editorimage textures/particles/decals/explosion_scorch_a + + diffusemap textures/particles/decals/explosion_scorch_a +} +textures/particles/decals/explosion_scorch_dirt +{ + qer_editorimage textures/particles/decals/explosion_scorch_dirt + + diffusemap textures/particles/decals/explosion_scorch_dirt +} +textures/particles/decals/explosion_scorch_stone +{ + qer_editorimage textures/particles/decals/explosion_scorch_stone + + diffusemap textures/particles/decals/explosion_scorch_stone +} +textures/particles/decals/minigame_crater_temp_a +{ + qer_editorimage textures/particles/decals/minigame_crater_temp_a + + diffusemap textures/particles/decals/minigame_crater_temp_a +} +textures/particles/decals/mutant_goop_a +{ + qer_editorimage textures/particles/decals/mutant_goop_a + + diffusemap textures/particles/decals/mutant_goop_a +} +textures/particles/default +{ + qer_editorimage textures/particles/default + + diffusemap textures/particles/default +} +textures/particles/drip +{ + qer_editorimage textures/particles/drip + + diffusemap textures/particles/drip + bumpmap textures/particles/drip_local +} +textures/particles/drops +{ + qer_editorimage textures/particles/drops + + diffusemap textures/particles/drops + bumpmap textures/particles/drops_local +} +textures/particles/dust_cyclone01 +{ + qer_editorimage textures/particles/dust_cyclone01 + + diffusemap textures/particles/dust_cyclone01 +} +textures/particles/dust_floating01 +{ + qer_editorimage textures/particles/dust_floating01 + + diffusemap textures/particles/dust_floating01 +} +textures/particles/electricity/electric_bolts01 +{ + qer_editorimage textures/particles/electricity/electric_bolts01 + + diffusemap textures/particles/electricity/electric_bolts01 +} +textures/particles/electricity/electric_bolts04 +{ + qer_editorimage textures/particles/electricity/electric_bolts04 + + diffusemap textures/particles/electricity/electric_bolts04 +} +textures/particles/electricity/lightning01 +{ + qer_editorimage textures/particles/electricity/lightning01 + + diffusemap textures/particles/electricity/lightning01 +} +textures/particles/electricity/lightning_strip +{ + qer_editorimage textures/particles/electricity/lightning_strip + + diffusemap textures/particles/electricity/lightning_strip +} +textures/particles/electricity/ribbon_trail +{ + qer_editorimage textures/particles/electricity/ribbon_trail + + diffusemap textures/particles/electricity/ribbon_trail +} +textures/particles/ember +{ + qer_editorimage textures/particles/ember + + diffusemap textures/particles/ember +} +textures/particles/ember_blue +{ + qer_editorimage textures/particles/ember_blue + + diffusemap textures/particles/ember_blue +} +textures/particles/ember_blue_half +{ + qer_editorimage textures/particles/ember_blue_half + + diffusemap textures/particles/ember_blue_half +} +textures/particles/ember_gold +{ + qer_editorimage textures/particles/ember_gold + + diffusemap textures/particles/ember_gold +} +textures/particles/emp_trail +{ + qer_editorimage textures/particles/emp_trail + + diffusemap textures/particles/emp_trail +} +textures/particles/energy/plasma_flame +{ + qer_editorimage textures/particles/energy/plasma_flame + + diffusemap textures/particles/energy/plasma_flame +} +textures/particles/energy/plasmaring +{ + qer_editorimage textures/particles/energy/plasmaring + + diffusemap textures/particles/energy/plasmaring +} +textures/particles/explosion6 +{ + qer_editorimage textures/particles/explosion6 + + diffusemap textures/particles/explosion6 +} +textures/particles/fire/fire02 +{ + qer_editorimage textures/particles/fire/fire02 + + diffusemap textures/particles/fire/fire02 +} +textures/particles/fire/fire02_e +{ + qer_editorimage textures/particles/fire/fire02_e + + diffusemap textures/particles/fire/fire02_e +} +textures/particles/fire/flameelement01b +{ + qer_editorimage textures/particles/fire/flameelement01b + + diffusemap textures/particles/fire/flameelement01b +} +textures/particles/fire/flameelement01b_add +{ + qer_editorimage textures/particles/fire/flameelement01b_add + + diffusemap textures/particles/fire/flameelement01b_add +} +textures/particles/fire/fumeburst +{ + qer_editorimage textures/particles/fire/fumeburst + + diffusemap textures/particles/fire/fumeburst +} +textures/particles/flame3_strip +{ + qer_editorimage textures/particles/flame3_strip + + diffusemap textures/particles/flame3_strip +} +textures/particles/fly_animated +{ + qer_editorimage textures/particles/fly_animated + + diffusemap textures/particles/fly_animated +} +textures/particles/fly_animated_white +{ + qer_editorimage textures/particles/fly_animated_white + + diffusemap textures/particles/fly_animated_white +} +textures/particles/gravelpuff +{ + qer_editorimage textures/particles/gravelpuff + + diffusemap textures/particles/gravelpuff +} +textures/particles/gunsplash5 +{ + qer_editorimage textures/particles/gunsplash5 + + diffusemap textures/particles/gunsplash5 +} +textures/particles/headlight_beam01 +{ + qer_editorimage textures/particles/headlight_beam01 + + diffusemap textures/particles/headlight_beam01 +} +textures/particles/hotdot +{ + qer_editorimage textures/particles/hotdot + + diffusemap textures/particles/hotdot +} +textures/particles/hotsparks1_small +{ + qer_editorimage textures/particles/hotsparks1_small + + diffusemap textures/particles/hotsparks1_small +} +textures/particles/hoverturret_mp_trail +{ + qer_editorimage textures/particles/hoverturret_mp_trail + + diffusemap textures/particles/hoverturret_mp_trail +} +textures/particles/impacts/metalsparkpanel1 +{ + qer_editorimage textures/particles/impacts/metalsparkpanel1 + + diffusemap textures/particles/impacts/metalsparkpanel1 +} +textures/particles/impacts/metalsparkpanel2 +{ + qer_editorimage textures/particles/impacts/metalsparkpanel2 + + diffusemap textures/particles/impacts/metalsparkpanel2 +} +textures/particles/impacts/spark1 +{ + qer_editorimage textures/particles/impacts/spark1 + + diffusemap textures/particles/impacts/spark1 +} +textures/particles/impacts/spark3 +{ + qer_editorimage textures/particles/impacts/spark3 + + diffusemap textures/particles/impacts/spark3 +} +textures/particles/impacts/waterdropsplash +{ + qer_editorimage textures/particles/impacts/waterdropsplash + + diffusemap textures/particles/impacts/waterdropsplash +} +textures/particles/lighting_distort +{ + qer_editorimage textures/particles/lighting_distort + + diffusemap textures/particles/lighting_distort +} +textures/particles/models/plasma_strip +{ + qer_editorimage textures/particles/models/plasma_strip + + diffusemap textures/particles/models/plasma_strip +} +textures/particles/models/rock_small01 +{ + qer_editorimage textures/particles/models/rock_small01 + + diffusemap textures/particles/models/rock_small01 +} +textures/particles/multiplayer/armor_restore_grid +{ + qer_editorimage textures/particles/multiplayer/armor_restore_grid + + diffusemap textures/particles/multiplayer/armor_restore_grid +} +textures/particles/multiplayer/armor_restore_grid_distortion +{ + qer_editorimage textures/particles/multiplayer/armor_restore_grid_distortion + + diffusemap textures/particles/multiplayer/armor_restore_grid_distortion +} +textures/particles/muzzleflash/muzzle_new_roundfire +{ + qer_editorimage textures/particles/muzzleflash/muzzle_new_roundfire + + diffusemap textures/particles/muzzleflash/muzzle_new_roundfire +} +textures/particles/muzzleflash/muzzleflash_ar_page_blendtest +{ + qer_editorimage textures/particles/muzzleflash/muzzleflash_ar_page_blendtest + + diffusemap textures/particles/muzzleflash/muzzleflash_ar_page_blendtest +} +textures/particles/muzzleflash/muzzleflashassaultrifle0 +{ + qer_editorimage textures/particles/muzzleflash/muzzleflashassaultrifle0 + + diffusemap textures/particles/muzzleflash/muzzleflashassaultrifle0 +} +textures/particles/muzzleflash/muzzleflashassaultrifle2 +{ + qer_editorimage textures/particles/muzzleflash/muzzleflashassaultrifle2 + + diffusemap textures/particles/muzzleflash/muzzleflashassaultrifle2 +} +textures/particles/muzzleflash/muzzleflashpanelsmoke +{ + qer_editorimage textures/particles/muzzleflash/muzzleflashpanelsmoke + + diffusemap textures/particles/muzzleflash/muzzleflashpanelsmoke +} +textures/particles/needle +{ + qer_editorimage textures/particles/needle + + diffusemap textures/particles/needle +} +textures/particles/postglare +{ + qer_editorimage textures/particles/postglare + + diffusemap textures/particles/postglare +} +textures/particles/regime/exhaust01 +{ + qer_editorimage textures/particles/regime/exhaust01 + + diffusemap textures/particles/regime/exhaust01 +} +textures/particles/ring_distort +{ + qer_editorimage textures/particles/ring_distort + + diffusemap textures/particles/ring_distort +} +textures/particles/ring_distort_addlayer +{ + qer_editorimage textures/particles/ring_distort_addlayer + + diffusemap textures/particles/ring_distort_addlayer +} +textures/particles/ring_distort_wide +{ + qer_editorimage textures/particles/ring_distort_wide + + diffusemap textures/particles/ring_distort_wide +} +textures/particles/ring_gray +{ + qer_editorimage textures/particles/ring_gray + + diffusemap textures/particles/ring_gray +} +textures/particles/ring_gray_movelines +{ + qer_editorimage textures/particles/ring_gray_movelines + + diffusemap textures/particles/ring_gray_movelines +} +textures/particles/shelleject/chambersmoke3 +{ + qer_editorimage textures/particles/shelleject/chambersmoke3 + + diffusemap textures/particles/shelleject/chambersmoke3 +} +textures/particles/slime/screen_slime +{ + qer_editorimage textures/particles/slime/screen_slime + + diffusemap textures/particles/slime/screen_slime +} +textures/particles/smoke/dust_swirl02 +{ + qer_editorimage textures/particles/smoke/dust_swirl02 + + diffusemap textures/particles/smoke/dust_swirl02 +} +textures/particles/smoke/puff_static02 +{ + qer_editorimage textures/particles/smoke/puff_static02 + + diffusemap textures/particles/smoke/puff_static02 +} +textures/particles/smoke/smoke_plume +{ + qer_editorimage textures/particles/smoke/smoke_plume + + diffusemap textures/particles/smoke/smoke_plume +} +textures/particles/smoke/smokeball_density +{ + qer_editorimage textures/particles/smoke/smokeball_density + + diffusemap textures/particles/smoke/smokeball_density +} +textures/particles/smoke/smokeburst11 +{ + qer_editorimage textures/particles/smoke/smokeburst11 + + diffusemap textures/particles/smoke/smokeburst11 +} +textures/particles/smoke/smokepuff02 +{ + qer_editorimage textures/particles/smoke/smokepuff02 + + diffusemap textures/particles/smoke/smokepuff02 +} +textures/particles/smoke/tendrilsmoke01 +{ + qer_editorimage textures/particles/smoke/tendrilsmoke01 + + diffusemap textures/particles/smoke/tendrilsmoke01 +} +textures/particles/smoke/thicksmoke01_fire +{ + qer_editorimage textures/particles/smoke/thicksmoke01_fire + + diffusemap textures/particles/smoke/thicksmoke01_fire +} +textures/particles/smoke/thicksmoke02 +{ + qer_editorimage textures/particles/smoke/thicksmoke02 + + diffusemap textures/particles/smoke/thicksmoke02 +} +textures/particles/smoke_wispy_01 +{ + qer_editorimage textures/particles/smoke_wispy_01 + + diffusemap textures/particles/smoke_wispy_01 +} +textures/particles/smokepuff +{ + qer_editorimage textures/particles/smokepuff + + diffusemap textures/particles/smokepuff +} +textures/particles/spark1 +{ + qer_editorimage textures/particles/spark1 + + diffusemap textures/particles/spark1 +} +textures/particles/spark3 +{ + qer_editorimage textures/particles/spark3 + + diffusemap textures/particles/spark3 +} +textures/particles/spark4 +{ + qer_editorimage textures/particles/spark4 + + diffusemap textures/particles/spark4 +} +textures/particles/spark4_nowaste +{ + qer_editorimage textures/particles/spark4_nowaste + + diffusemap textures/particles/spark4_nowaste +} +textures/particles/spark7 +{ + qer_editorimage textures/particles/spark7 + + diffusemap textures/particles/spark7 +} +textures/particles/sparkline_glow_gray +{ + qer_editorimage textures/particles/sparkline_glow_gray + + diffusemap textures/particles/sparkline_glow_gray +} +textures/particles/sparks/spark_chunks_a +{ + qer_editorimage textures/particles/sparks/spark_chunks_a + + diffusemap textures/particles/sparks/spark_chunks_a +} +textures/particles/sparks/spark_chunks_page +{ + qer_editorimage textures/particles/sparks/spark_chunks_page + + diffusemap textures/particles/sparks/spark_chunks_page +} +textures/particles/sparks/trailer +{ + qer_editorimage textures/particles/sparks/trailer + + diffusemap textures/particles/sparks/trailer +} +textures/particles/thoom1 +{ + qer_editorimage textures/particles/thoom1 + + diffusemap textures/particles/thoom1 +} +textures/particles/thoom2 +{ + qer_editorimage textures/particles/thoom2 + + diffusemap textures/particles/thoom2 +} +textures/particles/thoom3 +{ + qer_editorimage textures/particles/thoom3 + + diffusemap textures/particles/thoom3 +} +textures/particles/thoomdrips +{ + qer_editorimage textures/particles/thoomdrips + + diffusemap textures/particles/thoomdrips +} +textures/particles/thoomember +{ + qer_editorimage textures/particles/thoomember + + diffusemap textures/particles/thoomember +} +textures/particles/tiretrack_add +{ + qer_editorimage textures/particles/tiretrack_add + + diffusemap textures/particles/tiretrack_add +} +textures/particles/tiretrack_asphalt +{ + qer_editorimage textures/particles/tiretrack_asphalt + + diffusemap textures/particles/tiretrack_asphalt +} +textures/particles/tiretrack_mul +{ + qer_editorimage textures/particles/tiretrack_mul + + diffusemap textures/particles/tiretrack_mul +} +textures/particles/tracer1 +{ + qer_editorimage textures/particles/tracer1 + + diffusemap textures/particles/tracer1 +} +textures/particles/vulture +{ + qer_editorimage textures/particles/vulture + + diffusemap textures/particles/vulture +} +textures/particles/water/droplet_page01 +{ + qer_editorimage textures/particles/water/droplet_page01 + + diffusemap textures/particles/water/droplet_page01 +} +textures/particles/water/foam_alphatest +{ + qer_editorimage textures/particles/water/foam_alphatest + + diffusemap textures/particles/water/foam_alphatest +} +textures/particles/water/foam_wave +{ + qer_editorimage textures/particles/water/foam_wave + + diffusemap textures/particles/water/foam_wave + bumpmap textures/particles/water/foam_wave_local +} +textures/particles/water/foam_wave_sq +{ + qer_editorimage textures/particles/water/foam_wave_sq + + diffusemap textures/particles/water/foam_wave_sq +} +textures/particles/water/nasty_water01 +{ + qer_editorimage textures/particles/water/nasty_water01 + + diffusemap textures/particles/water/nasty_water01 +} +textures/particles/water/splashup +{ + qer_editorimage textures/particles/water/splashup + + diffusemap textures/particles/water/splashup +} +textures/particles/water/wall_slimedrip01 +{ + qer_editorimage textures/particles/water/wall_slimedrip01 + + diffusemap textures/particles/water/wall_slimedrip01 +} +textures/particles/water/water_droplets +{ + qer_editorimage textures/particles/water/water_droplets + + diffusemap textures/particles/water/water_droplets +} +textures/particles/water/water_foam +{ + qer_editorimage textures/particles/water/water_foam + + diffusemap textures/particles/water/water_foam +} +textures/particles/water/water_screen_drips01 +{ + qer_editorimage textures/particles/water/water_screen_drips01 + + diffusemap textures/particles/water/water_screen_drips01 +} +textures/particles/water/water_strip +{ + qer_editorimage textures/particles/water/water_strip + + diffusemap textures/particles/water/water_strip +} +textures/powersurge/ps_dirt_worn_02 +{ + qer_editorimage textures/powersurge/ps_dirt_worn_02 + + diffusemap textures/powersurge/ps_dirt_worn_02 + bumpmap textures/powersurge/ps_dirt_worn_02_local +} +textures/prison/p_gauge_1 +{ + qer_editorimage textures/prison/p_gauge_1 + + diffusemap textures/prison/p_gauge_1 +} +textures/prison/p_gauge_13 +{ + qer_editorimage textures/prison/p_gauge_13 + + diffusemap textures/prison/p_gauge_13 +} +textures/prison/p_gauge_2 +{ + qer_editorimage textures/prison/p_gauge_2 + + diffusemap textures/prison/p_gauge_2 +} +textures/prison/p_gauge_4 +{ + qer_editorimage textures/prison/p_gauge_4 + + diffusemap textures/prison/p_gauge_4 +} +textures/prison/p_gauge_5 +{ + qer_editorimage textures/prison/p_gauge_5 + + diffusemap textures/prison/p_gauge_5 +} +textures/prison/p_gauges_1 +{ + qer_editorimage textures/prison/p_gauges_1 + + diffusemap textures/prison/p_gauges_1 +} +textures/prison/p_metal_2 +{ + qer_editorimage textures/prison/p_metal_2 + + diffusemap textures/prison/p_metal_2 + specularmap textures/prison/p_metal_2_s +} +textures/prison/p_metal_6 +{ + qer_editorimage textures/prison/p_metal_6 + + diffusemap textures/prison/p_metal_6 +} +textures/prison/p_pipe_1 +{ + qer_editorimage textures/prison/p_pipe_1 + + diffusemap textures/prison/p_pipe_1 +} +textures/prison/pipe4b +{ + qer_editorimage textures/prison/pipe4b + + diffusemap textures/prison/pipe4b + bumpmap textures/prison/pipe4b_local + specularmap textures/prison/pipe4b_s +} +textures/prison/pipe4c +{ + qer_editorimage textures/prison/pipe4c + + diffusemap textures/prison/pipe4c + bumpmap textures/prison/pipe4c_local + specularmap textures/prison/pipe4c_s +} +textures/prison/pipe5a +{ + qer_editorimage textures/prison/pipe5a + + diffusemap textures/prison/pipe5a +} +textures/prison/pipe6a +{ + qer_editorimage textures/prison/pipe6a + + diffusemap textures/prison/pipe6a + specularmap textures/prison/pipe6a_s +} +textures/prison/pipe7 +{ + qer_editorimage textures/prison/pipe7 + + diffusemap textures/prison/pipe7 + bumpmap textures/prison/pipe7_local + specularmap textures/prison/pipe7_s +} +textures/prison/pipe8a +{ + qer_editorimage textures/prison/pipe8a + + diffusemap textures/prison/pipe8a +} +textures/prison/pipeinsulation2a +{ + qer_editorimage textures/prison/pipeinsulation2a + + diffusemap textures/prison/pipeinsulation2a +} +textures/racetrack/arrow_orange_right +{ + qer_editorimage textures/racetrack/arrow_orange_right + + diffusemap textures/racetrack/arrow_orange_right + bumpmap textures/racetrack/arrow_orange_right_local + specularmap textures/racetrack/arrow_orange_right_s +} +textures/racetrack/checker_grey +{ + qer_editorimage textures/racetrack/checker_grey + + diffusemap textures/racetrack/checker_grey + bumpmap textures/racetrack/checker_grey_local +} +textures/racetrack/checker_grey_dark +{ + qer_editorimage textures/racetrack/checker_grey_dark + + diffusemap textures/racetrack/checker_grey_dark +} +textures/racetrack/grate2a +{ + qer_editorimage textures/racetrack/grate2a + + diffusemap textures/racetrack/grate2a +} +textures/racetrack/grate2a2 +{ + qer_editorimage textures/racetrack/grate2a2 + + diffusemap textures/racetrack/grate2a2 +} +textures/racetrack/grate2b +{ + qer_editorimage textures/racetrack/grate2b + + diffusemap textures/racetrack/grate2b +} +textures/racetrack/grate2b2 +{ + qer_editorimage textures/racetrack/grate2b2 + + diffusemap textures/racetrack/grate2b2 +} +textures/racetrack/grate2b_trim +{ + qer_editorimage textures/racetrack/grate2b_trim + + diffusemap textures/racetrack/grate2b_trim +} +textures/racetrack/grate2c +{ + qer_editorimage textures/racetrack/grate2c + + diffusemap textures/racetrack/grate2c +} +textures/racetrack/grate2c2 +{ + qer_editorimage textures/racetrack/grate2c2 + + diffusemap textures/racetrack/grate2c2 +} +textures/racetrack/grate2d +{ + qer_editorimage textures/racetrack/grate2d + + diffusemap textures/racetrack/grate2d +} +textures/racetrack/grate2e +{ + qer_editorimage textures/racetrack/grate2e + + diffusemap textures/racetrack/grate2e +} +textures/rcbombbase/elevatorgears +{ + qer_editorimage textures/rcbombbase/elevatorgears + + diffusemap textures/rcbombbase/elevatorgears + bumpmap textures/rcbombbase/elevatorgears_local + specularmap textures/rcbombbase/elevatorgears_s +} +textures/sawmill/concrete3 +{ + qer_editorimage textures/sawmill/concrete3 + + diffusemap textures/sawmill/concrete3 + bumpmap textures/sawmill/concrete3_h + specularmap textures/sawmill/concrete3_s +} +textures/sawmill/floor_grime2 +{ + qer_editorimage textures/sawmill/floor_grime2 + + diffusemap textures/sawmill/floor_grime2 + bumpmap textures/sawmill/floor_grime2_h +} +textures/sawmill/metal10 +{ + qer_editorimage textures/sawmill/metal10 + + diffusemap textures/sawmill/metal10 + bumpmap textures/sawmill/metal10_h + specularmap textures/sawmill/metal10_s +} +textures/sawmill/metal12 +{ + qer_editorimage textures/sawmill/metal12 + + diffusemap textures/sawmill/metal12 + bumpmap textures/sawmill/metal12_h +} +textures/sawmill/metal13a +{ + qer_editorimage textures/sawmill/metal13a + + diffusemap textures/sawmill/metal13a +} +textures/sawmill/metal14b +{ + qer_editorimage textures/sawmill/metal14b + + diffusemap textures/sawmill/metal14b +} +textures/sawmill/metal17 +{ + qer_editorimage textures/sawmill/metal17 + + diffusemap textures/sawmill/metal17 +} +textures/sawmill/metal4 +{ + qer_editorimage textures/sawmill/metal4 + + diffusemap textures/sawmill/metal4 +} +textures/sawmill/strap3 +{ + qer_editorimage textures/sawmill/strap3 + + diffusemap textures/sawmill/strap3 + bumpmap textures/sawmill/strap3_local +} +textures/sawmill/wood1 +{ + qer_editorimage textures/sawmill/wood1 + + diffusemap textures/sawmill/wood1 +} +textures/sawmill/wood4 +{ + qer_editorimage textures/sawmill/wood4 + + diffusemap textures/sawmill/wood4 +} +textures/sawmill/wood6 +{ + qer_editorimage textures/sawmill/wood6 + + diffusemap textures/sawmill/wood6 + bumpmap textures/sawmill/wood6_local + specularmap textures/sawmill/wood6_s +} +textures/sawmill/wood7 +{ + qer_editorimage textures/sawmill/wood7 + + diffusemap textures/sawmill/wood7 + bumpmap textures/sawmill/wood7_h + specularmap textures/sawmill/wood7_s +} +textures/sawmill/wood8 +{ + qer_editorimage textures/sawmill/wood8 + + diffusemap textures/sawmill/wood8 + bumpmap textures/sawmill/wood8_local + specularmap textures/sawmill/wood8_s +} +textures/sfx/bfg_chargering +{ + qer_editorimage textures/sfx/bfg_chargering + + diffusemap textures/sfx/bfg_chargering +} +textures/sfx/blinklight +{ + qer_editorimage textures/sfx/blinklight + + diffusemap textures/sfx/blinklight +} +textures/sfx/bubble +{ + qer_editorimage textures/sfx/bubble + + diffusemap textures/sfx/bubble +} +textures/sfx/bulleth01b +{ + qer_editorimage textures/sfx/bulleth01b_d + + diffusemap textures/sfx/bulleth01b_d +} +textures/sfx/ceilingfan_add +{ + qer_editorimage textures/sfx/ceilingfan_add + + diffusemap textures/sfx/ceilingfan_add +} +textures/sfx/drip_blood +{ + qer_editorimage textures/sfx/drip_blood + + diffusemap textures/sfx/drip_blood +} +textures/sfx/drone_scan_map +{ + qer_editorimage textures/sfx/drone_scan_map + + diffusemap textures/sfx/drone_scan_map +} +textures/sfx/drone_thrusters_test +{ + qer_editorimage textures/sfx/drone_thrusters_test + + diffusemap textures/sfx/drone_thrusters_test +} +textures/sfx/glass1b_filter2 +{ + qer_editorimage textures/sfx/glass1b_filter2 + + diffusemap textures/sfx/glass1b_filter2 +} +textures/sfx/glass1mask +{ + qer_editorimage textures/sfx/glass1mask + + diffusemap textures/sfx/glass1mask +} +textures/sfx/laserbeam_endpoint +{ + qer_editorimage textures/sfx/laserbeam_endpoint + + diffusemap textures/sfx/laserbeam_endpoint +} +textures/sfx/laserbeam_grey +{ + qer_editorimage textures/sfx/laserbeam_grey + + diffusemap textures/sfx/laserbeam_grey +} +textures/sfx/laserbeam_grey_fpv +{ + qer_editorimage textures/sfx/laserbeam_grey_fpv + + diffusemap textures/sfx/laserbeam_grey_fpv +} +textures/sfx/laserbeam_mutant +{ + qer_editorimage textures/sfx/laserbeam_mutant + + diffusemap textures/sfx/laserbeam_mutant +} +textures/sfx/laserbeam_noise +{ + qer_editorimage textures/sfx/laserbeam_noise + + diffusemap textures/sfx/laserbeam_noise +} +textures/sfx/laserbeam_noise_bright +{ + qer_editorimage textures/sfx/laserbeam_noise_bright + + diffusemap textures/sfx/laserbeam_noise_bright +} +textures/sfx/laserbeam_noise_fpv +{ + qer_editorimage textures/sfx/laserbeam_noise_fpv + + diffusemap textures/sfx/laserbeam_noise_fpv +} +textures/sfx/lensflare3 +{ + qer_editorimage textures/sfx/lensflare3 + + diffusemap textures/sfx/lensflare3 +} +textures/sfx/lensflare5 +{ + qer_editorimage textures/sfx/lensflare5 + + diffusemap textures/sfx/lensflare5 +} +textures/sfx/lensflare6a +{ + qer_editorimage textures/sfx/lensflare6a + + diffusemap textures/sfx/lensflare6a +} +textures/sfx/lensflare7a +{ + qer_editorimage textures/sfx/lensflare7a + + diffusemap textures/sfx/lensflare7a +} +textures/sfx/lensflare8 +{ + qer_editorimage textures/sfx/lensflare8 + + diffusemap textures/sfx/lensflare8 +} +textures/sfx/lensflare9 +{ + qer_editorimage textures/sfx/lensflare9 + + diffusemap textures/sfx/lensflare9 +} +textures/sfx/lensflares/anamorphic/base01 +{ + qer_editorimage textures/sfx/lensflares/anamorphic/base01 + + diffusemap textures/sfx/lensflares/anamorphic/base01 +} +textures/sfx/lensflares/anamorphic/bit01 +{ + qer_editorimage textures/sfx/lensflares/anamorphic/bit01 + + diffusemap textures/sfx/lensflares/anamorphic/bit01 +} +textures/sfx/lensflares/anamorphic/bit02 +{ + qer_editorimage textures/sfx/lensflares/anamorphic/bit02 + + diffusemap textures/sfx/lensflares/anamorphic/bit02 +} +textures/sfx/lensflares/anamorphic/speck01 +{ + qer_editorimage textures/sfx/lensflares/anamorphic/speck01 + + diffusemap textures/sfx/lensflares/anamorphic/speck01 +} +textures/sfx/lensflares/anamorphic/streakflare +{ + qer_editorimage textures/sfx/lensflares/anamorphic/streakflare + + diffusemap textures/sfx/lensflares/anamorphic/streakflare +} +textures/sfx/monitor_wellshot +{ + qer_editorimage textures/sfx/monitor_wellshot + + diffusemap textures/sfx/monitor_wellshot +} +textures/sfx/monsterbasher +{ + qer_editorimage textures/sfx/monsterbasher_base + + diffusemap textures/sfx/monsterbasher_base +} +textures/sfx/monsterbasher_closed +{ + qer_editorimage textures/sfx/monsterbasher_closed + + diffusemap textures/sfx/monsterbasher_closed +} +textures/sfx/monsterbasher_open +{ + qer_editorimage textures/sfx/monsterbasher_open + + diffusemap textures/sfx/monsterbasher_open +} +textures/sfx/neonline_add3 +{ + qer_editorimage textures/sfx/neonline_add3 + + diffusemap textures/sfx/neonline_add3 +} +textures/sfx/orangedot +{ + qer_editorimage textures/sfx/orangedot + + diffusemap textures/sfx/orangedot +} +textures/sfx/orangedot2 +{ + qer_editorimage textures/sfx/orangedot2 + + diffusemap textures/sfx/orangedot2 +} +textures/sfx/plasma_bolt01 +{ + qer_editorimage textures/sfx/plasma_bolt01 + + diffusemap textures/sfx/plasma_bolt01 +} +textures/sfx/regime_add +{ + qer_editorimage textures/sfx/regime_add + + diffusemap textures/sfx/regime_add +} +textures/sfx/regime_laserbeam_colorramp +{ + qer_editorimage textures/sfx/regime_laserbeam_colorramp + + diffusemap textures/sfx/regime_laserbeam_colorramp +} +textures/sfx/regime_laserbeam_colorramp_blue +{ + qer_editorimage textures/sfx/regime_laserbeam_colorramp_blue + + diffusemap textures/sfx/regime_laserbeam_colorramp_blue +} +textures/sfx/scrollglow2 +{ + qer_editorimage textures/sfx/scrollglow2 + + diffusemap textures/sfx/scrollglow2 +} +textures/sfx/shadowblend +{ + qer_editorimage textures/sfx/shadowblend + + diffusemap textures/sfx/shadowblend +} +textures/sfx/shaft_norotate +{ + qer_editorimage textures/sfx/shaft_norotate + + diffusemap textures/sfx/shaft_norotate +} +textures/sfx/smoke_wisptrail +{ + qer_editorimage textures/sfx/smoke_wisptrail + + diffusemap textures/sfx/smoke_wisptrail + bumpmap textures/sfx/smoke_wisptrail_local +} +textures/sfx/tv_static +{ + qer_editorimage textures/sfx/tv_static + + diffusemap textures/sfx/tv_static +} +textures/sfx/vehicle_shield +{ + qer_editorimage textures/sfx/vehicle_shield + + diffusemap textures/sfx/vehicle_shield +} +textures/sfx/vehiclecrosshair +{ + qer_editorimage textures/sfx/vehiclecrosshair + + diffusemap textures/sfx/vehiclecrosshair +} +textures/sfx/whiteglow_round +{ + qer_editorimage textures/sfx/whiteglow_round + + diffusemap textures/sfx/whiteglow_round +} +textures/sfx/wingstickadd +{ + qer_editorimage textures/sfx/wingstickadd + + diffusemap textures/sfx/wingstickadd +} +textures/signs/sign_outtolunch +{ + qer_editorimage textures/signs/sign_outtolunch + + diffusemap textures/signs/sign_outtolunch +} +textures/signs/ws_race_neon +{ + qer_editorimage textures/signs/ws_race_neon + + diffusemap textures/signs/ws_race_neon +} +textures/terrain/ground/sand1 +{ + qer_editorimage textures/terrain/ground/sand1 + + diffusemap textures/terrain/ground/sand1 + bumpmap textures/terrain/ground/sand1_local +} +textures/test/bloodsplat_sphere2 +{ + qer_editorimage textures/test/bloodsplat_sphere2 + + diffusemap textures/test/bloodsplat_sphere2 +} +textures/test/borderoverlay +{ + qer_editorimage textures/test/borderoverlay + + diffusemap textures/test/borderoverlay +} +textures/town/concrete9_shatter +{ + qer_editorimage textures/town/concrete9_shatter + + diffusemap textures/town/concrete9_shatter + bumpmap textures/town/concrete9_shatter_local +} +textures/town/metal_slide +{ + qer_editorimage textures/town/metal_slide + + diffusemap textures/town/metal_slide + specularmap textures/town/metal_slide_s +} +textures/town/phonepole1 +{ + qer_editorimage textures/town/phonepole1 + + diffusemap textures/town/phonepole1 + bumpmap textures/town/phonepole1_local + specularmap textures/town/phonepole1_s +} +textures/town/phonepole2 +{ + qer_editorimage textures/town/phonepole2 + + diffusemap textures/town/phonepole2 + bumpmap textures/town/phonepole2_local +} +textures/town/wood11_bmp +{ + qer_editorimage textures/town/wood11_bmp + + diffusemap textures/town/wood11_bmp +} +textures/town/wood11a +{ + qer_editorimage textures/town/wood11a + + diffusemap textures/town/wood11a +} +textures/town/wood13 +{ + qer_editorimage textures/town/wood13 + + diffusemap textures/town/wood13 + bumpmap textures/town/wood13_local +} +textures/town/wood14_cap +{ + qer_editorimage textures/town/wood14_cap + + diffusemap textures/town/wood14_cap + bumpmap textures/town/wood14_cap_local +} +textures/wastedgarage/firepipe1 +{ + qer_editorimage textures/wastedgarage/firepipe1 + + diffusemap textures/wastedgarage/firepipe1 + bumpmap textures/wastedgarage/firepipe1_local + specularmap textures/wastedgarage/firepipe1_s +} +textures/wastedgarage/firepipe2 +{ + qer_editorimage textures/wastedgarage/firepipe2 + + diffusemap textures/wastedgarage/firepipe2 +} +textures/wastedgarage/firepipejunction2 +{ + qer_editorimage textures/wastedgarage/firepipejunction2 + + diffusemap textures/wastedgarage/firepipejunction2 +} +textures/wastedgarage/glassgridsafety1_add +{ + qer_editorimage textures/wastedgarage/glassgridsafety1_add + + diffusemap textures/wastedgarage/glassgridsafety1_add +} +textures/wastedgarage/wga_baseboard1 +{ + qer_editorimage textures/wastedgarage/wga_baseboard1 + + diffusemap textures/wastedgarage/wga_baseboard1 + bumpmap textures/wastedgarage/wga_baseboard1_local + specularmap textures/wastedgarage/wga_baseboard1_s +} +textures/water/blood_soup_foam2 +{ + qer_editorimage textures/water/blood_soup_foam2 + + diffusemap textures/water/blood_soup_foam2 +} +textures/water/foam_stream +{ + qer_editorimage textures/water/foam_stream + + diffusemap textures/water/foam_stream +} +textures/water/foam_stream2x +{ + qer_editorimage textures/water/foam_stream2x + + diffusemap textures/water/foam_stream2x +} +textures/water/sewer_foam +{ + qer_editorimage textures/water/sewer_foam + + diffusemap textures/water/sewer_foam +} +textures/water/sewer_murk +{ + qer_editorimage textures/water/sewer_murk + + diffusemap textures/water/sewer_murk + bumpmap textures/water/sewer_murk_local +} +textures/water/sewer_sludge_foam +{ + qer_editorimage textures/water/sewer_sludge_foam + + diffusemap textures/water/sewer_sludge_foam +} +textures/water/well_churning_masking +{ + qer_editorimage textures/water/well_churning_masking + + diffusemap textures/water/well_churning_masking +} +textures/water/well_endroom01_masking +{ + qer_editorimage textures/water/well_endroom01_masking + + diffusemap textures/water/well_endroom01_masking +} +textures/water/well_endtunnel01 +{ + qer_editorimage textures/water/well_endtunnel01 + + diffusemap textures/water/well_endtunnel01 +} +textures/water/well_endtunnel02 +{ + qer_editorimage textures/water/well_endtunnel02 + + diffusemap textures/water/well_endtunnel02 +} +textures/water/well_front_masking +{ + qer_editorimage textures/water/well_front_masking + + diffusemap textures/water/well_front_masking +} +textures/water/well_gateroom_masking01 +{ + qer_editorimage textures/water/well_gateroom_masking01 + + diffusemap textures/water/well_gateroom_masking01 +} +textures/water/well_gateroom_masking02 +{ + qer_editorimage textures/water/well_gateroom_masking02 + + diffusemap textures/water/well_gateroom_masking02 +} +textures/water/well_secondroom02_masking +{ + qer_editorimage textures/water/well_secondroom02_masking + + diffusemap textures/water/well_secondroom02_masking +} +textures/water/well_secondroom_masking +{ + qer_editorimage textures/water/well_secondroom_masking + + diffusemap textures/water/well_secondroom_masking +} +textures/well/caverock1 +{ + qer_editorimage textures/well/caverock1 + + diffusemap textures/well/caverock1 + bumpmap textures/well/caverock1_local + specularmap textures/well/caverock1_s +} +textures/well/caverock1b +{ + qer_editorimage textures/well/caverock1b + + diffusemap textures/well/caverock1b +} +textures/well/caverock1c +{ + qer_editorimage textures/well/caverock1c + + diffusemap textures/well/caverock1c +} +textures/well/cavespillartop1 +{ + qer_editorimage textures/well/cavespillartop1 + + diffusemap textures/well/cavespillartop1 + bumpmap textures/well/cavespillartop1_local + specularmap textures/well/cavespillartop1_s +} +textures/well/cavesrocka +{ + qer_editorimage textures/well/cavesrocka + + diffusemap textures/well/cavesrocka + bumpmap textures/well/cavesrocka_local + specularmap textures/well/cavesrocka_s +} +textures/well/cavesrocke +{ + qer_editorimage textures/well/cavesrocke + + diffusemap textures/well/cavesrocke + bumpmap textures/well/cavesrocke_local + specularmap textures/well/cavesrocke_s +} +textures/well/cavesstalactites1 +{ + qer_editorimage textures/well/cavesstalactites1 + + diffusemap textures/well/cavesstalactites1 + bumpmap textures/well/cavesstalactites1_local + specularmap textures/well/cavesstalactites1_s +} +textures/well/cavesstalactites3 +{ + qer_editorimage textures/well/cavesstalactites3 + + diffusemap textures/well/cavesstalactites3 + bumpmap textures/well/cavesstalactites3_local + specularmap textures/well/cavesstalactites3_s +} +textures/well/concrete1 +{ + qer_editorimage textures/well/concrete1 + + diffusemap textures/well/concrete1 + bumpmap textures/well/concrete1_local + specularmap textures/well/concrete1_s +} +textures/well/concrete1dark +{ + qer_editorimage textures/well/concrete1dark + + diffusemap textures/well/concrete1dark +} +textures/well/concrete4 +{ + qer_editorimage textures/well/concrete4 + + diffusemap textures/well/concrete4 + bumpmap textures/well/concrete4_local + specularmap textures/well/concrete4_s +} +textures/well/concrete4c +{ + qer_editorimage textures/well/concrete4c + + diffusemap textures/well/concrete4c +} +textures/well/concretepillar1 +{ + qer_editorimage textures/well/concretepillar1 + + diffusemap textures/well/concretepillar1 + bumpmap textures/well/concretepillar1_local + specularmap textures/well/concretepillar1_s +} +textures/well/concretepillar1e +{ + qer_editorimage textures/well/concretepillar1e + + diffusemap textures/well/concretepillar1e +} +textures/well/concretepillar2 +{ + qer_editorimage textures/well/concretepillar2 + + diffusemap textures/well/concretepillar2 + bumpmap textures/well/concretepillar2_local + specularmap textures/well/concretepillar2_s +} +textures/well/concretetrim1 +{ + qer_editorimage textures/well/concretetrim1 + + diffusemap textures/well/concretetrim1 + bumpmap textures/well/concretetrim1_local + specularmap textures/well/concretetrim1_s +} +textures/well/concretetrim2b +{ + qer_editorimage textures/well/concretetrim2b + + diffusemap textures/well/concretetrim2b +} +textures/well/concretetrim4 +{ + qer_editorimage textures/well/concretetrim4 + + diffusemap textures/well/concretetrim4 + bumpmap textures/well/concretetrim4_local +} +textures/well/concretetrimtop1b +{ + qer_editorimage textures/well/concretetrimtop1b + + diffusemap textures/well/concretetrimtop1b +} +textures/well/concretewall3blong +{ + qer_editorimage textures/well/concretewall3blong + + diffusemap textures/well/concretewall3blong +} +textures/well/concretewall3blong2 +{ + qer_editorimage textures/well/concretewall3blong2 + + diffusemap textures/well/concretewall3blong2 + bumpmap textures/well/concretewall3blong2_local + specularmap textures/well/concretewall3blong2_s +} +textures/well/concretewall3dlong +{ + qer_editorimage textures/well/concretewall3dlong + + diffusemap textures/well/concretewall3dlong +} +textures/well/crumbledwall +{ + qer_editorimage textures/well/crumbledwall + + diffusemap textures/well/crumbledwall + bumpmap textures/well/crumbledwall_local + specularmap textures/well/crumbledwall_s +} +textures/well/glow5 +{ + qer_editorimage textures/well/glow5 + + diffusemap textures/well/glow5 +} +textures/well/mudpile1 +{ + qer_editorimage textures/well/mudpile1 + + diffusemap textures/well/mudpile1 + bumpmap textures/well/mudpile1_local + specularmap textures/well/mudpile1_s +} +textures/well/pipe2b +{ + qer_editorimage textures/well/pipe2b + + diffusemap textures/well/pipe2b +} +textures/well/pipe2c +{ + qer_editorimage textures/well/pipe2c + + diffusemap textures/well/pipe2c + specularmap textures/well/pipe2c_s +} +textures/well/pipe2c2 +{ + qer_editorimage textures/well/pipe2c2 + + diffusemap textures/well/pipe2c2 +} +textures/well/pipe2d +{ + qer_editorimage textures/well/pipe2d + + diffusemap textures/well/pipe2d +} +textures/well/pipe2e +{ + qer_editorimage textures/well/pipe2e + + diffusemap textures/well/pipe2e + bumpmap textures/well/pipe2e_local + specularmap textures/well/pipe2e_s +} +textures/well/pipe2f +{ + qer_editorimage textures/well/pipe2f + + diffusemap textures/well/pipe2f +} +textures/well/pipe2i +{ + qer_editorimage textures/well/pipe2i + + diffusemap textures/well/pipe2i + bumpmap textures/well/pipe2i_local + specularmap textures/well/pipe2i_s +} +textures/well/pipe3 +{ + qer_editorimage textures/well/pipe3 + + diffusemap textures/well/pipe3 +} +textures/well/pipecovering1b +{ + qer_editorimage textures/well/pipecovering1b + + diffusemap textures/well/pipecovering1b +} +textures/well/pump_platform +{ + qer_editorimage textures/well/pump_platform + + diffusemap textures/well/pump_platform + bumpmap textures/well/pump_platform_local + specularmap textures/well/pump_platform_s +} +textures/well/railing1 +{ + qer_editorimage textures/well/railing1 + + diffusemap textures/well/railing1 + bumpmap textures/well/railing1_local + specularmap textures/well/railing1_s +} +textures/well/tunneltexture1 +{ + qer_editorimage textures/well/tunneltexture1 + + diffusemap textures/well/tunneltexture1 + bumpmap textures/well/tunneltexture1_local + specularmap textures/well/tunneltexture1_s +} +textures/well/wire1c +{ + qer_editorimage textures/well/wire1c + + diffusemap textures/well/wire1c +} +textures/well/wire1d +{ + qer_editorimage textures/well/wire1d + + diffusemap textures/well/wire1d +} +textures/well/wire1e +{ + qer_editorimage textures/well/wire1e + + diffusemap textures/well/wire1e +} +textures/well/wire1f +{ + qer_editorimage textures/well/wire1f + + diffusemap textures/well/wire1f +} +textures/wellspring/airduct +{ + qer_editorimage textures/wellspring/airduct + + diffusemap textures/wellspring/airduct + bumpmap textures/wellspring/airduct_local + specularmap textures/wellspring/airduct_s +} +textures/wellspring/bricks1 +{ + qer_editorimage textures/wellspring/bricks1 + + diffusemap textures/wellspring/bricks1 + bumpmap textures/wellspring/bricks1_local +} +textures/wellspring/bricks1_stamp2 +{ + qer_editorimage textures/wellspring/bricks1_stamp2 + + diffusemap textures/wellspring/bricks1_stamp2 + bumpmap textures/wellspring/bricks1_stamp2_local +} +textures/wellspring/bricks1_stamp3 +{ + qer_editorimage textures/wellspring/bricks1_stamp3 + + diffusemap textures/wellspring/bricks1_stamp3 + bumpmap textures/wellspring/bricks1_stamp3_local +} +textures/wellspring/ceilingtiles +{ + qer_editorimage textures/wellspring/ceilingtiles + + diffusemap textures/wellspring/ceilingtiles + bumpmap textures/wellspring/ceilingtiles_local +} +textures/wellspring/concrete1 +{ + qer_editorimage textures/wellspring/concrete1 + + diffusemap textures/wellspring/concrete1 + bumpmap textures/wellspring/concrete1_local + specularmap textures/wellspring/concrete1_s +} +textures/wellspring/concrete1a +{ + qer_editorimage textures/wellspring/concrete1a + + diffusemap textures/wellspring/concrete1a +} +textures/wellspring/concrete1b +{ + qer_editorimage textures/wellspring/concrete1b + + diffusemap textures/wellspring/concrete1b + bumpmap textures/wellspring/concrete1b_local +} +textures/wellspring/concrete1c +{ + qer_editorimage textures/wellspring/concrete1c + + diffusemap textures/wellspring/concrete1c +} +textures/wellspring/concrete1d +{ + qer_editorimage textures/wellspring/concrete1d + + diffusemap textures/wellspring/concrete1d +} +textures/wellspring/concrete1e +{ + qer_editorimage textures/wellspring/concrete1e + + diffusemap textures/wellspring/concrete1e + bumpmap textures/wellspring/concrete1e_local + specularmap textures/wellspring/concrete1e_s +} +textures/wellspring/countertop +{ + qer_editorimage textures/wellspring/countertop + + diffusemap textures/wellspring/countertop + bumpmap textures/wellspring/countertop_local + specularmap textures/wellspring/countertop_s +} +textures/wellspring/diplomas +{ + qer_editorimage textures/wellspring/diplomas + + diffusemap textures/wellspring/diplomas + bumpmap textures/wellspring/diplomas_local + specularmap textures/wellspring/diplomas_s +} +textures/wellspring/diplomas_pm +{ + qer_editorimage textures/wellspring/diplomas_pm + + diffusemap textures/wellspring/diplomas_pm +} +textures/wellspring/doormat +{ + qer_editorimage textures/wellspring/doormat + + diffusemap textures/wellspring/doormat + bumpmap textures/wellspring/doormat_local +} +textures/wellspring/fanroof_addon +{ + qer_editorimage textures/wellspring/fanroof_addon + + diffusemap textures/wellspring/fanroof_addon + bumpmap textures/wellspring/fanroof_addon_local + specularmap textures/wellspring/fanroof_addon_s +} +textures/wellspring/floor_glue1 +{ + qer_editorimage textures/wellspring/floor_glue1 + + diffusemap textures/wellspring/floor_glue1 + bumpmap textures/wellspring/floor_glue1_local +} +textures/wellspring/floor_glue1_stamp1 +{ + qer_editorimage textures/wellspring/floor_glue1_stamp1 + + diffusemap textures/wellspring/floor_glue1_stamp1 + bumpmap textures/wellspring/floor_glue1_stamp1_local +} +textures/wellspring/floor_glue1_stamp2 +{ + qer_editorimage textures/wellspring/floor_glue1_stamp2 + + diffusemap textures/wellspring/floor_glue1_stamp2 + bumpmap textures/wellspring/floor_glue1_stamp2_local +} +textures/wellspring/floor_glue1_stamp3 +{ + qer_editorimage textures/wellspring/floor_glue1_stamp3 + + diffusemap textures/wellspring/floor_glue1_stamp3 + bumpmap textures/wellspring/floor_glue1_stamp3_local +} +textures/wellspring/floor_glue1_stamp4 +{ + qer_editorimage textures/wellspring/floor_glue1_stamp4 + + diffusemap textures/wellspring/floor_glue1_stamp4 + bumpmap textures/wellspring/floor_glue1_stamp4_local +} +textures/wellspring/floor_tile1a +{ + qer_editorimage textures/wellspring/floor_tile1a + + diffusemap textures/wellspring/floor_tile1a +} +textures/wellspring/gratefloor1 +{ + qer_editorimage textures/wellspring/gratefloor1 + + diffusemap textures/wellspring/gratefloor1 + bumpmap textures/wellspring/gratefloor1_local + specularmap textures/wellspring/gratefloor1_s +} +textures/wellspring/gratefloor1b +{ + qer_editorimage textures/wellspring/gratefloor1b + + diffusemap textures/wellspring/gratefloor1b + specularmap textures/wellspring/gratefloor1b_s +} +textures/wellspring/gratefloor1c +{ + qer_editorimage textures/wellspring/gratefloor1c + + diffusemap textures/wellspring/gratefloor1c +} +textures/wellspring/licenseplates +{ + qer_editorimage textures/wellspring/licenseplates + + diffusemap textures/wellspring/licenseplates + bumpmap textures/wellspring/licenseplates_local + specularmap textures/wellspring/licenseplates_s +} +textures/wellspring/licenseplates_back +{ + qer_editorimage textures/wellspring/licenseplates_back + + diffusemap textures/wellspring/licenseplates_back + bumpmap textures/wellspring/licenseplates_back_local + specularmap textures/wellspring/licenseplates_back_s +} +textures/wellspring/light1 +{ + qer_editorimage textures/wellspring/light1 + + diffusemap textures/wellspring/light1 + bumpmap textures/wellspring/light1_local + specularmap textures/wellspring/light1_s +} +textures/wellspring/light1_add +{ + qer_editorimage textures/wellspring/light1_add + + diffusemap textures/wellspring/light1_add +} +textures/wellspring/map_dirty +{ + qer_editorimage textures/wellspring/map_dirty + + diffusemap textures/wellspring/map_dirty +} +textures/wellspring/metal_diner1 +{ + qer_editorimage textures/wellspring/metal_diner1 + + diffusemap textures/wellspring/metal_diner1 + bumpmap textures/wellspring/metal_diner1_local + specularmap textures/wellspring/metal_diner1_s +} +textures/wellspring/metal_diner3 +{ + qer_editorimage textures/wellspring/metal_diner3 + + diffusemap textures/wellspring/metal_diner3 + bumpmap textures/wellspring/metal_diner3_local + specularmap textures/wellspring/metal_diner3_s +} +textures/wellspring/metaltrim1a +{ + qer_editorimage textures/wellspring/metaltrim1a + + diffusemap textures/wellspring/metaltrim1a +} +textures/wellspring/metaltrim1b +{ + qer_editorimage textures/wellspring/metaltrim1b + + diffusemap textures/wellspring/metaltrim1b +} +textures/wellspring/metaltrim1b_side +{ + qer_editorimage textures/wellspring/metaltrim1b_side + + diffusemap textures/wellspring/metaltrim1b_side +} +textures/wellspring/metaltrimbig1 +{ + qer_editorimage textures/wellspring/metaltrimbig1 + + diffusemap textures/wellspring/metaltrimbig1 + bumpmap textures/wellspring/metaltrimbig1_local + specularmap textures/wellspring/metaltrimbig1_s +} +textures/wellspring/painting1 +{ + qer_editorimage textures/wellspring/painting1 + + diffusemap textures/wellspring/painting1 + bumpmap textures/wellspring/painting1_local + specularmap textures/wellspring/painting1_s +} +textures/wellspring/painting1_pm +{ + qer_editorimage textures/wellspring/painting1_pm + + diffusemap textures/wellspring/painting1_pm +} +textures/wellspring/painting2 +{ + qer_editorimage textures/wellspring/painting2 + + diffusemap textures/wellspring/painting2 + bumpmap textures/wellspring/painting2_local + specularmap textures/wellspring/painting2_s +} +textures/wellspring/painting2_pm +{ + qer_editorimage textures/wellspring/painting2_pm + + diffusemap textures/wellspring/painting2_pm +} +textures/wellspring/rope +{ + qer_editorimage textures/wellspring/rope + + diffusemap textures/wellspring/rope + bumpmap textures/wellspring/rope_local +} +textures/wellspring/rug1 +{ + qer_editorimage textures/wellspring/rug1 + + diffusemap textures/wellspring/rug1 + bumpmap textures/wellspring/rug1_local +} +textures/wellspring/rug2 +{ + qer_editorimage textures/wellspring/rug2 + + diffusemap textures/wellspring/rug2 + bumpmap textures/wellspring/rug2_local +} +textures/wellspring/sign1 +{ + qer_editorimage textures/wellspring/sign1 + + diffusemap textures/wellspring/sign1 + bumpmap textures/wellspring/sign1_local + specularmap textures/wellspring/sign1_s +} +textures/wellspring/streamers +{ + qer_editorimage textures/wellspring/streamers + + diffusemap textures/wellspring/streamers + bumpmap textures/wellspring/streamers_local + specularmap textures/wellspring/streamers_s +} +textures/wellspring/tiles01 +{ + qer_editorimage textures/wellspring/tiles01 + + diffusemap textures/wellspring/tiles01 + bumpmap textures/wellspring/tiles01_local + specularmap textures/wellspring/tiles01_s +} +textures/wellspring/trophy +{ + qer_editorimage textures/wellspring/trophy + + diffusemap textures/wellspring/trophy + bumpmap textures/wellspring/trophy_local +} +textures/wellspring/utilitypanel1 +{ + qer_editorimage textures/wellspring/utilitypanel1 + + diffusemap textures/wellspring/utilitypanel1 + bumpmap textures/wellspring/utilitypanel1_local + specularmap textures/wellspring/utilitypanel1_s +} +textures/wellspring/ws_baseboard1 +{ + qer_editorimage textures/wellspring/ws_baseboard1 + + diffusemap textures/wellspring/ws_baseboard1 + bumpmap textures/wellspring/ws_baseboard1_local + specularmap textures/wellspring/ws_baseboard1_s +} +textures/wellspring/ws_plankbumper +{ + qer_editorimage textures/wellspring/ws_plankbumper + + diffusemap textures/wellspring/ws_plankbumper + bumpmap textures/wellspring/ws_plankbumper_local + specularmap textures/wellspring/ws_plankbumper_s +} +textures/wellspring/ws_platewall_a +{ + qer_editorimage textures/wellspring/ws_platewall_a + + diffusemap textures/wellspring/ws_platewall_a + bumpmap textures/wellspring/ws_platewall_a_local + specularmap textures/wellspring/ws_platewall_a_s +} +textures/wellspring/wsspeedway +{ + qer_editorimage textures/wellspring/wsspeedway + + diffusemap textures/wellspring/wsspeedway + bumpmap textures/wellspring/wsspeedway_local + specularmap textures/wellspring/wsspeedway_s +}