diff --git a/source/SXGUIWinApi/dialog_select_file.cpp b/source/SXGUIWinApi/dialog_select_file.cpp
index 0b771430b56341f465d6baeb35d7b70568871a58..0dec976197ea611741f7aa84b544c7db721f37d4 100644
--- a/source/SXGUIWinApi/dialog_select_file.cpp
+++ b/source/SXGUIWinApi/dialog_select_file.cpp
@@ -251,7 +251,8 @@ LRESULT SelFile_ButtonSelect_Click(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM l
 
 	if (iSel < 0)
 	{
-		MessageBox(hWnd, "No select file", 0, 0);
+		if (hWnd == dialog_selfile::ButtonSelect->getHWND())
+			MessageBox(hWnd, "No select file", 0, 0);
 		return 0;
 	}
 
@@ -372,6 +373,7 @@ void dialog_selfile::InitAllElements()
 	dialog_selfile::ListBoxFiles->setTransparentTextBk(true);
 	dialog_selfile::ListBoxFiles->setColorBrush(RGB(255, 255, 255));
 	dialog_selfile::ListBoxFiles->addHandler(SelFile_ListBoxFiles_Click, WM_LBUTTONUP);
+	dialog_selfile::ListBoxFiles->addHandler(SelFile_ButtonSelect_Click, WM_LBUTTONDBLCLK);
 
 	dialog_selfile::StaticPreview = SXGUICrStatic("Preview:", 470, 5, 50, 15, dialog_selfile::SelectFile->getHWND(), 0, 0);
 	dialog_selfile::StaticPreview->setFont("MS Shell Dlg", -11, 0, 400, 0, 0, 0);
diff --git a/source/SkyXEngine_Build/SkyXEngine_Build.cpp b/source/SkyXEngine_Build/SkyXEngine_Build.cpp
index 076d1509f23143c0534d9b62d94988e99bf3332e..0d974e5c565532c9b3cf54de86d5d9b380f293d3 100644
--- a/source/SkyXEngine_Build/SkyXEngine_Build.cpp
+++ b/source/SkyXEngine_Build/SkyXEngine_Build.cpp
@@ -15,8 +15,8 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLin
 	SkyXEngine_Init();
 	SkyXEngine_PreviewKill();
 
-	SGCore_SkyBoxLoadTex("sky/sky_2_cube.dds");
-	SGCore_SkyCloudsLoadTex("sky/sky_oblaka.dds");
+	SGCore_SkyBoxLoadTex("sky_2_cube.dds");
+	SGCore_SkyCloudsLoadTex("sky_oblaka.dds");
 	SGCore_SkyCloudsSetWidthHeightPos(2000, 2000, &float3(0, 0, 0));
 
 	SLevel_Load("stalker_atp", true);
diff --git a/source/aigrid/aigrid.cpp b/source/aigrid/aigrid.cpp
index 2c8b5e9b7dd8371ed792ce134355bac576a228df..2e175dace5bb47f6853073b054d71aa952ecdc4d 100644
--- a/source/aigrid/aigrid.cpp
+++ b/source/aigrid/aigrid.cpp
@@ -2343,7 +2343,7 @@ bool CAIGrid::quadGetPos(ID id, float3* pos) const
 ID CAIGrid::gridTraceBeam(const float3* start, const float3* dir) const
 {
 	ID idf = -1;
-	SXTriangle tmptri;
+	CTriangle tmptri;
 	float3 ip;
 	float3 res;
 	float3 ildir;
@@ -2366,9 +2366,9 @@ ID CAIGrid::gridTraceBeam(const float3* start, const float3* dir) const
 			for (int k = 0, kl = bound->m_aIdsQuads.size(); k < kl; ++k)
 			{
 				posquad = (float3)m_aQuads[bound->m_aIdsQuads[k]]->m_vPos;
-				tmptri.a = (float3_t)(posquad + float3(-AIGRID_QUAD_SIZEDIV2, 0, -AIGRID_QUAD_SIZEDIV2));
-				tmptri.b = (float3_t)(posquad + float3(AIGRID_QUAD_SIZEDIV2, 0, AIGRID_QUAD_SIZEDIV2));
-				tmptri.c = (float3_t)(posquad + float3(AIGRID_QUAD_SIZEDIV2, 0, -AIGRID_QUAD_SIZEDIV2));
+				tmptri.m_vA = (float3_t)(posquad + float3(-AIGRID_QUAD_SIZEDIV2, 0, -AIGRID_QUAD_SIZEDIV2));
+				tmptri.m_vB = (float3_t)(posquad + float3(AIGRID_QUAD_SIZEDIV2, 0, AIGRID_QUAD_SIZEDIV2));
+				tmptri.m_vC = (float3_t)(posquad + float3(AIGRID_QUAD_SIZEDIV2, 0, -AIGRID_QUAD_SIZEDIV2));
 				if (tmptri.IntersectLine((*start), ildir, &ip))
 				{
 					if (SMVector3Length2((*start) - res) > SMVector3Length2((*start) - ip))
@@ -2378,9 +2378,9 @@ ID CAIGrid::gridTraceBeam(const float3* start, const float3* dir) const
 					}
 				}
 
-				tmptri.a = (float3_t)(posquad + float3(-AIGRID_QUAD_SIZEDIV2, 0, -AIGRID_QUAD_SIZEDIV2));
-				tmptri.b = (float3_t)(posquad + float3(-AIGRID_QUAD_SIZEDIV2, 0, AIGRID_QUAD_SIZEDIV2));
-				tmptri.c = (float3_t)(posquad + float3(AIGRID_QUAD_SIZEDIV2, 0, AIGRID_QUAD_SIZEDIV2));
+				tmptri.m_vA = (float3_t)(posquad + float3(-AIGRID_QUAD_SIZEDIV2, 0, -AIGRID_QUAD_SIZEDIV2));
+				tmptri.m_vB = (float3_t)(posquad + float3(-AIGRID_QUAD_SIZEDIV2, 0, AIGRID_QUAD_SIZEDIV2));
+				tmptri.m_vC = (float3_t)(posquad + float3(AIGRID_QUAD_SIZEDIV2, 0, AIGRID_QUAD_SIZEDIV2));
 				if (tmptri.IntersectLine((*start), ildir, &ip))
 				{
 					if (SMVector3Length2((*start) - res) > SMVector3Length2((*start) - ip))
@@ -2510,7 +2510,7 @@ void CAIGrid::renderBB()
 		m_pBoundBox->DrawSubset(0);
 }
 
-void CAIGrid::renderQuads(const ISXFrustum * frustum, const float3 * viewpos, float dist)
+void CAIGrid::renderQuads(const IFrustum * frustum, const float3 * viewpos, float dist)
 {
 	if (!m_useGraphics)
 		return;
diff --git a/source/aigrid/aigrid.h b/source/aigrid/aigrid.h
index 3d0edfb328d01580c587b39d0910cdbd27949ecf..ba4dda39e10190558f9a4a7cb14dc0a5b8c90209 100644
--- a/source/aigrid/aigrid.h
+++ b/source/aigrid/aigrid.h
@@ -386,7 +386,7 @@ public:
 	//{
 
 	//! отрисовка сетки
-	void renderQuads(const ISXFrustum *pFrustum, const float3 *pViewPos, float fDist);
+	void renderQuads(const IFrustum *pFrustum, const float3 *pViewPos, float fDist);
 
 	//! отрисовка графпоинтов
 	void renderGraphPoints(const float3 *pViewPos, float fDist);
diff --git a/source/aigrid/sxaigrid.cpp b/source/aigrid/sxaigrid.cpp
index 84b520cbb97efa92c95dc457c505facef273330f..d7a276c9f2dbe365acabe7e6ca454dc998a5b6bc 100644
--- a/source/aigrid/sxaigrid.cpp
+++ b/source/aigrid/sxaigrid.cpp
@@ -429,7 +429,7 @@ SX_LIB_API ID SAIG_GraphPointGetNear(ID idBegin, ID idEnd)
 }
 
 
-SX_LIB_API void SAIG_RenderQuads(const ISXFrustum *pFrustum, const float3 *pViewPos, float fDist)
+SX_LIB_API void SAIG_RenderQuads(const IFrustum *pFrustum, const float3 *pViewPos, float fDist)
 {
 	AIG_PRECOND(_VOID);
 
diff --git a/source/aigrid/sxaigrid.h b/source/aigrid/sxaigrid.h
index 6b3b1a319dfa4529f754c48e5edb0b1ea978cead..e748e691633c27e927ca533745f51b73ffdbe7a1 100644
--- a/source/aigrid/sxaigrid.h
+++ b/source/aigrid/sxaigrid.h
@@ -350,7 +350,7 @@ SX_LIB_API ID SAIG_GraphPointGetNear(ID idBegin, ID idEnd);
 @{*/
 
 //! отрисовка сетки
-SX_LIB_API void SAIG_RenderQuads(const ISXFrustum *pFrustum, const float3 *pViewPos, float fDist);	
+SX_LIB_API void SAIG_RenderQuads(const IFrustum *pFrustum, const float3 *pViewPos, float fDist);	
 
 //! отрисовка графпоинтов
 SX_LIB_API void SAIG_RenderGraphPoints(const float3 *pViewPos, float fDist);			
diff --git a/source/anim/animated.cpp b/source/anim/animated.cpp
index 2e47a2491fda244a13452843f9a1e4d2827c5fe1..b5d06857dafd17853f12df29df3caa508e077c9b 100644
--- a/source/anim/animated.cpp
+++ b/source/anim/animated.cpp
@@ -2506,7 +2506,7 @@ UINT AnimationManager::getMaterial(const char * mat, bool bStatic)
 	return(SGCore_MtlLoad(tmp, bStatic ? MTL_TYPE_GEOM : MTL_TYPE_SKIN));
 }
 
-void AnimationManager::computeVis(const ISXFrustum * frustum, const float3 * viewpos, ID id_arr)
+void AnimationManager::computeVis(const IFrustum * frustum, const float3 * viewpos, ID id_arr)
 {
 	float3 jcenter;
 	float3 jradius;
diff --git a/source/anim/animated.h b/source/anim/animated.h
index 41df6124b560845300348c68a5e1767def5292c2..b15aeeef671fe78929223d39117f588f7c68f85e 100644
--- a/source/anim/animated.h
+++ b/source/anim/animated.h
@@ -332,7 +332,7 @@ public:
 
 	UINT getMaterial(const char * mat, bool bStatic = false);
 
-	void computeVis(const ISXFrustum * frustum, const float3 * viewpos, ID id_arr);
+	void computeVis(const IFrustum * frustum, const float3 * viewpos, ID id_arr);
 
 	ID getNextVisId();
 	void freeVisID(ID id);
diff --git a/source/anim/sxanim.h b/source/anim/sxanim.h
index 92aca21b1955eb371c1fdc1c346f18c35da4d2a7..3d392fc3f346a2147ecaadf74f80ef736e109553 100644
--- a/source/anim/sxanim.h
+++ b/source/anim/sxanim.h
@@ -327,7 +327,7 @@ SX_LIB_API IAnimPlayer * SXAnim_CreatePlayer(const char * mdl = NULL);
 
 //! просчитать видимость всех моделей для фрустума 
 SX_LIB_API void SXAnim_ModelsComVisible(
-	const ISXFrustum * frustum,	//!< фрустум для которого считаем видимость моделей
+	const IFrustum * frustum,	//!< фрустум для которого считаем видимость моделей
 	const float3 * viewpos,		//!< позиция источника фрустума чтобы просчитать дистанцию
 	ID id_arr = 0			//!< идентификатор массива информации о видимости для фрустума, создается через SXAnim_ModelsAddArrForCom, если 0 то считаем в дефолтный
 	);
diff --git a/source/anim/sxanim_dll.cpp b/source/anim/sxanim_dll.cpp
index 442acbabbfa418463c77b9ec9ad19ff30a5655d7..6f60d8e849f2d9bc820ab46a6e3ce5b42f9a6607 100644
--- a/source/anim/sxanim_dll.cpp
+++ b/source/anim/sxanim_dll.cpp
@@ -83,7 +83,7 @@ SX_LIB_API IAnimPlayer * SXAnim_CreatePlayer(const char * mdl)
 	return(anim);
 }
 
-SX_LIB_API void SXAnim_ModelsComVisible(const ISXFrustum * frustum, const float3 * viewpos, ID id_arr)
+SX_LIB_API void SXAnim_ModelsComVisible(const IFrustum * frustum, const float3 * viewpos, ID id_arr)
 {
 	SA_PRECOND(_VOID);
 	g_mgr->computeVis(frustum, viewpos, id_arr);
diff --git a/source/common b/source/common
index 817245b1612ce3b347067f6f40f915b62652cde4..586727e022d85f3ab1552b93e69b1f7e3ff297cd 160000
--- a/source/common
+++ b/source/common
@@ -1 +1 @@
-Subproject commit 817245b1612ce3b347067f6f40f915b62652cde4
+Subproject commit 586727e022d85f3ab1552b93e69b1f7e3ff297cd
diff --git a/source/game/PointCamera.cpp b/source/game/PointCamera.cpp
index 8aa714eae512aefdbcda523901fb426146d58b56..fd1f95fdc7dce756ec0a291c0625b51ebadefc48 100644
--- a/source/game/PointCamera.cpp
+++ b/source/game/PointCamera.cpp
@@ -29,7 +29,7 @@ CPointCamera::~CPointCamera()
 	mem_release(m_pSXC);
 }
 
-ISXCamera * CPointCamera::getCamera()
+ICamera * CPointCamera::getCamera()
 {
 	return(m_pSXC);
 }
diff --git a/source/game/PointCamera.h b/source/game/PointCamera.h
index f8682e810cf3bc679e69a17dd573c0320c1a82b5..ed21f4fb31be8cf9964d554c2bbdc8728f41ffd3 100644
--- a/source/game/PointCamera.h
+++ b/source/game/PointCamera.h
@@ -30,10 +30,10 @@ public:
 	~CPointCamera();
 
 	//! Возвращает объект камеры из графической либы
-	ISXCamera * getCamera();
+	ICamera * getCamera();
 
 protected:
-	ISXCamera * m_pSXC;
+	ICamera * m_pSXC;
 
 	void onSync();
 };
diff --git a/source/game/sxgame.h b/source/game/sxgame.h
index e8104bdb4781b242fe0b612a3f754e1a8bc842b1..ab66fb3529bb38d6040eeac91cac9914071e885f 100644
--- a/source/game/sxgame.h
+++ b/source/game/sxgame.h
@@ -215,7 +215,7 @@ SX_LIB_API void SXGame_RenderHUD();
 
 SX_LIB_API void SXGame_EditorRender(ID id, ID id_sel_tex);
 
-SX_LIB_API ISXCamera * SXGame_GetActiveCamera();
+SX_LIB_API ICamera * SXGame_GetActiveCamera();
 
 /*! Получает количество зарегистрированных классов entity
 */
diff --git a/source/game/sxgame_dll.cpp b/source/game/sxgame_dll.cpp
index 637fd1bc5228b5facdec3a85cdbe923baf626348..0d6b49a119e1d0c35bc3869269fcdfac645c5620 100644
--- a/source/game/sxgame_dll.cpp
+++ b/source/game/sxgame_dll.cpp
@@ -96,7 +96,7 @@ void ccmd_save_as(int argc, const char ** argv)
 	}
 }
 
-SX_LIB_API ISXCamera * SXGame_GetActiveCamera()
+SX_LIB_API ICamera * SXGame_GetActiveCamera()
 {
 	SG_PRECOND(NULL);
 	return(GameData::m_pActiveCamera->getCamera());
diff --git a/source/gcore/LoaderTextures.cpp b/source/gcore/LoaderTextures.cpp
index a3dbba57ad95567091458ab0b988f6621a21332e..3f485f092fc9d3e4aca29d6eacb7575e4859b1b6 100644
--- a/source/gcore/LoaderTextures.cpp
+++ b/source/gcore/LoaderTextures.cpp
@@ -6,27 +6,27 @@ See the license in LICENSE
 
 #include "LoaderTextures.h"
 
-LoaderTextures::LoaderTextures()
+�LoaderTextures::�LoaderTextures()
 {
 	CurrFirstFree = -1;
 }
 
-LoaderTextures::~LoaderTextures()
+�LoaderTextures::~�LoaderTextures()
 {
-	for (int i = 0; i < ArrTextures.size(); i++)
+	for (int i = 0; i < m_aTextures.size(); i++)
 	{
-		mem_delete(ArrTextures[i]);
+		mem_delete(m_aTextures[i]);
 	}
-	ArrTextures.clear();
+	m_aTextures.clear();
 
-	for (int i = 0; i < Arr.size(); i++)
+	for (int i = 0; i < m_aPathes.size(); i++)
 	{
-		mem_delete(Arr[i]);
+		mem_delete(m_aPathes[i]);
 	}
-	Arr.clear();
+	m_aPathes.clear();
 }
 
-bool LoaderTextures::FileExists(const char* name)
+bool �LoaderTextures::fileExists(const char* name)
 {
 	char tmppath[SXGC_LOADTEX_MAX_SIZE_FULLPATH];
 	char tmp_path[SXGC_LOADTEX_MAX_SIZE_DIR];
@@ -48,30 +48,31 @@ bool LoaderTextures::FileExists(const char* name)
 
 	if (!IsTruePath)
 	{
-		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - wrong texture name [%s]!!!", GEN_MSG_LOCATION, name);
+		//LibReport(REPORT_MSG_LEVEL_ERROR, "%s - wrong texture name [%s]!!!", GEN_MSG_LOCATION, name);
 		return false;
 	}
 
-	sprintf(tmppath, "%s%s\\%s", Core_RStringGet(G_RI_STRING_PATH_GS_SHADERS), tmp_path, name);
+	sprintf(tmppath, "%s%s\\%s", Core_RStringGet(G_RI_STRING_PATH_GS_TEXTURES), tmp_path, name);
 	return FileExistsFile(tmppath);
 }
 
-void LoaderTextures::ClearLoaded()
+void �LoaderTextures::clearLoaded()
 {
 	int tmpcountdel = 0;
-	for (int i = 0; i < Arr.size(); ++i)
+	for (int i = 0; i < m_aPathes.size(); ++i)
 	{
-		for (int k = 0; k < Arr[i]->ArrTex.size(); ++k)
+		for (int k = 0; k < m_aPathes[i]->m_aTextures.size(); ++k)
 		{
-			if (Arr[i]->ArrTex[k]->type == LOAD_TEXTURE_TYPE_LOAD)
+			if (m_aPathes[i]->m_aTextures[k]->m_type == LOAD_TEXTURE_TYPE_LOAD)
 			{
-				mem_release_del(ArrTextures[Arr[i]->ArrTex[k]->id]->tex);
+				mem_release_del(m_aTextures[m_aPathes[i]->m_aTextures[k]->m_id]->m_pTex2d);
+				mem_release_del(m_aTextures[m_aPathes[i]->m_aTextures[k]->m_id]->m_pTexCube);
 				++tmpcountdel;
-				if (CurrFirstFree > Arr[i]->ArrTex[k]->id)
-					CurrFirstFree = Arr[i]->ArrTex[k]->id;
+				if (CurrFirstFree > m_aPathes[i]->m_aTextures[k]->m_id)
+					CurrFirstFree = m_aPathes[i]->m_aTextures[k]->m_id;
 
-				mem_delete(Arr[i]->ArrTex[k]);
-				Arr[i]->ArrTex.erase(k);
+				mem_delete(m_aPathes[i]->m_aTextures[k]);
+				m_aPathes[i]->m_aTextures.erase(k);
 				--k;
 			}
 		}
@@ -80,33 +81,34 @@ void LoaderTextures::ClearLoaded()
 	int qwert = 0;
 }
 
-void LoaderTextures::Delete(ID id)
+void �LoaderTextures::deleteTexture(ID id)
 {
-	if (!(id < ArrTextures.size() && id >= 0))
+	if (!(id < m_aTextures.size() && id >= 0))
 		return;
 
-	if (ArrTextures[id]->tex == 0)
+	if (m_aTextures[id]->m_pTex2d == 0 || m_aTextures[id]->m_pTexCube == 0)
 		return;
 
-	mem_release_del(ArrTextures[id]->tex);
+	mem_release_del(m_aTextures[id]->m_pTex2d);
+	mem_release_del(m_aTextures[id]->m_pTexCube);
 
 	if (CurrFirstFree > id)
 		CurrFirstFree = id;
 
-	TLPath* tmpp = Arr[ArrTextures[id]->IDDir];
+	CPath* tmpp = m_aPathes[m_aTextures[id]->m_idDir];
 
-	for (int i = 0; i < tmpp->ArrTex.size(); ++i)
+	for (int i = 0; i < tmpp->m_aTextures.size(); ++i)
 	{
-		if (tmpp->ArrTex[i] && tmpp->ArrTex[i]->id == id)
+		if (tmpp->m_aTextures[i] && tmpp->m_aTextures[i]->m_id == id)
 		{
-			mem_delete(tmpp->ArrTex[i]);
-			tmpp->ArrTex.erase(i);
+			mem_delete(tmpp->m_aTextures[i]);
+			tmpp->m_aTextures.erase(i);
 			break;
 		}
 	}
 }
 
-ID LoaderTextures::AddName(const char* name, LOAD_TEXTURE_TYPE type, ID* iddir, ID* idname)
+ID �LoaderTextures::addName(const char* name, LOAD_TEXTURE_TYPE type, ID* iddir, ID* idname)
 {
 	char tmp_path[SXGC_LOADTEX_MAX_SIZE_DIR];//�����
 	char tmp_name[SXGC_LOADTEX_MAX_SIZE_NAME];//���� ��� ������� � �����������
@@ -132,9 +134,9 @@ ID LoaderTextures::AddName(const char* name, LOAD_TEXTURE_TYPE type, ID* iddir,
 
 	int tmpkey = -1;	//���������� � ������� ������ ���� �� ������� � ������� ����������
 	
-	for (int i = 0; i<Arr.size(); i++)
+	for (int i = 0; i<m_aPathes.size(); i++)
 	{
-		if(strcmp(Arr[i]->Path.c_str(),tmp_path) == 0)
+		if (strcmp(m_aPathes[i]->m_sPath.c_str(), tmp_path) == 0)
 		{
 			tmpkey = i;
 			break;
@@ -144,20 +146,20 @@ ID LoaderTextures::AddName(const char* name, LOAD_TEXTURE_TYPE type, ID* iddir,
 		//���� �� �� ����� ���������� ������ ���� �������� ...
 		if(tmpkey == -1)
 		{
-			tmpkey = Arr.size();
-			Arr.push_back(new TLPath());
-			Arr[tmpkey]->Path = tmp_path;
+			tmpkey = m_aPathes.size();
+			m_aPathes.push_back(new CPath());
+			m_aPathes[tmpkey]->m_sPath = tmp_path;
 		}
 
 	bool isunic = true;
 	
 		//��������� �������� �� ��� ��� ��������
-		for(int i=0;i<Arr[tmpkey]->ArrTex.size();i++)
+		for(int i=0;i<m_aPathes[tmpkey]->m_aTextures.size();i++)
 		{
-				if(strcmp(Arr[tmpkey]->ArrTex[i]->name.c_str(),tmp_name) == 0)
+				if(strcmp(m_aPathes[tmpkey]->m_aTextures[i]->m_sName.c_str(),tmp_name) == 0)
 				{
 					isunic = false;
-					id = Arr[tmpkey]->ArrTex[i]->id;
+					id = m_aPathes[tmpkey]->m_aTextures[i]->m_id;
 					if (idname)
 						*idname = i;
 					break;
@@ -170,21 +172,21 @@ ID LoaderTextures::AddName(const char* name, LOAD_TEXTURE_TYPE type, ID* iddir,
 		//���� ���������� �� ����������
 		if(isunic)
 		{
-			if (CurrFirstFree + 1 == ArrTextures.size())
+			if (CurrFirstFree + 1 == m_aTextures.size())
 			{
-				ArrTextures.push_back(new TexAndName());
-				CurrFirstFree = id = ArrTextures.size() - 1;
+				m_aTextures.push_back(new CTexture());
+				CurrFirstFree = id = m_aTextures.size() - 1;
 			}
 			else
 			{
-				if (CurrFirstFree < 0 || ArrTextures[CurrFirstFree] != 0)
+				if (CurrFirstFree < 0 || m_aTextures[CurrFirstFree] != 0)
 				{
 					if (CurrFirstFree < 0)
 						CurrFirstFree = 0;
 
-					for (int i = CurrFirstFree; i < ArrTextures.size(); ++i)
+					for (int i = CurrFirstFree; i < m_aTextures.size(); ++i)
 					{
-						if (ArrTextures[i] == 0)
+						if (m_aTextures[i] == 0)
 						{
 							CurrFirstFree = i;
 							break;
@@ -200,22 +202,22 @@ ID LoaderTextures::AddName(const char* name, LOAD_TEXTURE_TYPE type, ID* iddir,
 			if (type == LOAD_TEXTURE_TYPE_SELF)
 				type = LOAD_TEXTURE_TYPE_LOAD;
 
-			Arr[tmpkey]->ArrTex.push_back(new TLPath::TLTex(id, tmp_name, type));
+			m_aPathes[tmpkey]->m_aTextures.push_back(new CPath::CTex(id, tmp_name, type));
 
 			if (idname)
-				*idname = Arr[tmpkey]->ArrTex.size() - 1;
+				*idname = m_aPathes[tmpkey]->m_aTextures.size() - 1;
 
-			ArrTextures[id]->name = name;
-			ArrTextures[id]->IDDir = tmpkey;
+			m_aTextures[id]->m_sName = name;
+			m_aTextures[id]->m_idDir = tmpkey;
 			
 			if (type != LOAD_TEXTURE_TYPE_CUSTOM)
-				ArrIDsLoad.push_back(id);
+				m_aQueueToLoadIDs.push_back(id);
 		}
 
 	return id;
 }
 
-ID LoaderTextures::GetID(const char* name)
+ID �LoaderTextures::getID(const char* name)
 {
 	char tmp_path[SXGC_LOADTEX_MAX_SIZE_DIR];//�����
 	char tmp_name[SXGC_LOADTEX_MAX_SIZE_NAME];//���� ��� �������� � �����������
@@ -232,16 +234,16 @@ ID LoaderTextures::GetID(const char* name)
 				}
 		}
 
-		for (int i = 0; i<Arr.size(); i++)
+		for (int i = 0; i<m_aPathes.size(); i++)
 		{
-				if(strcmp(Arr[i]->Path.c_str(),tmp_path) == 0)
+				if(strcmp(m_aPathes[i]->m_sPath.c_str(),tmp_path) == 0)
 				{
-						for(int k=0;k<Arr[i]->ArrTex.size();k++)
+						for(int k=0;k<m_aPathes[i]->m_aTextures.size();k++)
 						{
-								if(strcmp(Arr[i]->ArrTex[k]->name.c_str(),tmp_name) == 0)
+								if(strcmp(m_aPathes[i]->m_aTextures[k]->m_sName.c_str(),tmp_name) == 0)
 								{
-									id = Arr[i]->ArrTex[k]->id;
-									i = Arr.size();
+									id = m_aPathes[i]->m_aTextures[k]->m_id;
+									i = m_aPathes.size();
 									break;
 								}
 						}
@@ -250,120 +252,192 @@ ID LoaderTextures::GetID(const char* name)
 	return id;
 }
 
-void LoaderTextures::GetName(ID id, char* name)
+void �LoaderTextures::getName(ID id, char* name)
 {
-		if(id < ArrTextures.size())
+		if(id < m_aTextures.size())
 		{
-			String tmpname = ArrTextures[id]->name;
+			String tmpname = m_aTextures[id]->m_sName;
 			sprintf(name,"%s",tmpname.c_str());
 		}
 }
 
-ID LoaderTextures::Create(const char* name, IDirect3DTexture9* tex)
+ID �LoaderTextures::create(const char* name, IDirect3DTexture9* tex)
 {
 	ID tmpkey, tmpKeyName;
-	ID id = this->AddName(name, LOAD_TEXTURE_TYPE_CUSTOM, &tmpkey, &tmpKeyName);
-	ArrTextures[id]->tex = tex;
+	ID id = addName(name, LOAD_TEXTURE_TYPE_CUSTOM, &tmpkey, &tmpKeyName);
+	m_aTextures[id]->m_pTex2d = tex;
 	return id;
 }
 
-void LoaderTextures::Update(ID id)
+void �LoaderTextures::update(ID id)
 {
-	if(id < ArrTextures.size())
+	if(id < m_aTextures.size())
 	{
-		Update(ArrTextures[id]->name.c_str(), LOAD_TEXTURE_TYPE_SELF);
+		update(m_aTextures[id]->m_sName.c_str(), LOAD_TEXTURE_TYPE_SELF);
 	}
 }
 
-ID LoaderTextures::Update(const char* name, LOAD_TEXTURE_TYPE type)
+ID �LoaderTextures::update(const char* name, LOAD_TEXTURE_TYPE type)
 {
 	ID tmpkey, tmpKeyName;
-	ID id = AddName(name, type, &tmpkey, &tmpKeyName);
+	ID id = addName(name, type, &tmpkey, &tmpKeyName);
 
 	//LibReport(0,"update texture [%s] ...",name);
 
 	char tmpPath[SXGC_LOADTEX_MAX_SIZE_FULLPATH];
-	sprintf(tmpPath, "%s%s%s%s%s%s", Core_RStringGet(G_RI_STRING_PATH_GS_TEXTURES), Arr[tmpkey]->Path.c_str(), "\\", Arr[tmpkey]->Path.c_str(), "_", Arr[tmpkey]->ArrTex[tmpKeyName]->name.c_str());
-	IDirect3DTexture9* tex=0;
-		if(FAILED(D3DXCreateTextureFromFileEx(
-			g_pDXDevice,
-											tmpPath,
-											D3DX_DEFAULT,
-											D3DX_DEFAULT,
-											SXGC_LOADTEX_COUNT_MIPMAP,
-											0,
-											SXGC_LOADTEX_FORMAT_TEX,
-											D3DPOOL_MANAGED, 
-											D3DX_FILTER_BOX, 
-											D3DX_FILTER_BOX,  0, 0, 0, &tex
-											)
-			)
-		)
-		{
+	sprintf(tmpPath, "%s%s%s%s%s%s", Core_RStringGet(G_RI_STRING_PATH_GS_TEXTURES), m_aPathes[tmpkey]->m_sPath.c_str(), "\\", m_aPathes[tmpkey]->m_sPath.c_str(), "_", m_aPathes[tmpkey]->m_aTextures[tmpKeyName]->m_sName.c_str());
+
+	if (getTypeFileTex(tmpPath) == D3DRTYPE_TEXTURE)
+	{
+		IDirect3DTexture9 *pTex = loadTexture2d(tmpPath);
+
+		if (pTex == 0)
 			LibReport(REPORT_MSG_LEVEL_ERROR, "%s - not found texture [%s]", GEN_MSG_LOCATION, tmpPath);
-		}
 		else
-		{
-			ArrTextures[Arr[tmpkey]->ArrTex[tmpKeyName]->id]->tex = tex;
-			//LibReport(0, "is ok\n");
-		}
+			m_aTextures[m_aPathes[tmpkey]->m_aTextures[tmpKeyName]->m_id]->m_pTex2d = pTex;
+	}
+	else if (getTypeFileTex(tmpPath) == D3DRTYPE_CUBETEXTURE)
+	{
+		IDirect3DCubeTexture9 *pTex = loadTextureCube(tmpPath);
+
+		if (pTex == 0)
+			LibReport(REPORT_MSG_LEVEL_ERROR, "%s - not found texture [%s]", GEN_MSG_LOCATION, tmpPath);
+		else
+			m_aTextures[m_aPathes[tmpkey]->m_aTextures[tmpKeyName]->m_id]->m_pTexCube = pTex;
+	}
 	
 	return id;
 }
 
-void LoaderTextures::LoadTextures()
+void �LoaderTextures::loadTextures()
 {
-	if (ArrIDsLoad.size() <= 0)
+	if (m_aQueueToLoadIDs.size() <= 0)
 		return;
 	LibReport(REPORT_MSG_LEVEL_NOTICE, "load textures ...\n");
 
 	char tmpPath[SXGC_LOADTEX_MAX_SIZE_FULLPATH];
 	ID tmpiddir;
 	int iCountLoaded = 0;
-	for (int i = 0; i<ArrIDsLoad.size(); i++)
+	for (int i = 0; i<m_aQueueToLoadIDs.size(); i++)
 	{
-		tmpiddir = ArrTextures[ArrIDsLoad[i]]->IDDir;
-		TLPath* tmpdir = Arr[tmpiddir];
-		sprintf(tmpPath, "%s%s%s%s", Core_RStringGet(G_RI_STRING_PATH_GS_TEXTURES), Arr[tmpiddir]->Path.c_str(), "\\", ArrTextures[ArrIDsLoad[i]]->name.c_str());
-		IDirect3DTexture9* tex = 0;
+		tmpiddir = m_aTextures[m_aQueueToLoadIDs[i]]->m_idDir;
+		CPath* tmpdir = m_aPathes[tmpiddir];
+		sprintf(tmpPath, "%s%s%s%s", Core_RStringGet(G_RI_STRING_PATH_GS_TEXTURES), m_aPathes[tmpiddir]->m_sPath.c_str(), "\\", m_aTextures[m_aQueueToLoadIDs[i]]->m_sName.c_str());
 		
-		if (FAILED(D3DXCreateTextureFromFileEx(
-			g_pDXDevice,
-			tmpPath,
-			D3DX_DEFAULT,
-			D3DX_DEFAULT,
-			SXGC_LOADTEX_COUNT_MIPMAP,
-			0,
-			SXGC_LOADTEX_FORMAT_TEX,
-			D3DPOOL_MANAGED,
-			D3DX_FILTER_BOX,
-			D3DX_FILTER_BOX, 0, 0, 0, &tex
-			)))
+		if (getTypeFileTex(tmpPath) == D3DRTYPE_TEXTURE)
 		{
-			ArrTextures[ArrIDsLoad[i]]->tex = 0;
-			LibReport(REPORT_MSG_LEVEL_WARNING, "  not found [%s]\n", ArrTextures[ArrIDsLoad[i]]->name.c_str());
+			IDirect3DTexture9 *pTex = loadTexture2d(tmpPath);
+
+			if (pTex == 0)
+			{
+				m_aTextures[m_aQueueToLoadIDs[i]]->m_pTex2d = 0;
+				LibReport(REPORT_MSG_LEVEL_WARNING, "  not found [%s]\n", m_aTextures[m_aQueueToLoadIDs[i]]->m_sName.c_str());
+			}
+			else
+			{
+				m_aTextures[m_aQueueToLoadIDs[i]]->m_pTex2d = pTex;
+				LibReport(REPORT_MSG_LEVEL_NOTICE, "  texture id [%d], [%s]\n", m_aQueueToLoadIDs[i], m_aTextures[m_aQueueToLoadIDs[i]]->m_sName.c_str());
+				++iCountLoaded;
+			}
 		}
-		else
+		else if (getTypeFileTex(tmpPath) == D3DRTYPE_CUBETEXTURE)
 		{
-			ArrTextures[ArrIDsLoad[i]]->tex = tex;
-			LibReport(REPORT_MSG_LEVEL_NOTICE, "  texture id [%d], [%s]\n", ArrIDsLoad[i], ArrTextures[ArrIDsLoad[i]]->name.c_str());
-			++iCountLoaded;
+			IDirect3DCubeTexture9 *pTex = loadTextureCube(tmpPath);
+
+			if (pTex == 0)
+			{
+				m_aTextures[m_aQueueToLoadIDs[i]]->m_pTex2d = 0;
+				LibReport(REPORT_MSG_LEVEL_WARNING, "  not found [%s]\n", m_aTextures[m_aQueueToLoadIDs[i]]->m_sName.c_str());
+			}
+			else
+			{
+				m_aTextures[m_aQueueToLoadIDs[i]]->m_pTexCube = pTex;
+				LibReport(REPORT_MSG_LEVEL_NOTICE, "  texture id [%d], [%s]\n", m_aQueueToLoadIDs[i], m_aTextures[m_aQueueToLoadIDs[i]]->m_sName.c_str());
+				++iCountLoaded;
+			}
 		}
 	}
 
-	ArrIDsLoad.clear();
-	LibReport(REPORT_MSG_LEVEL_NOTICE, "all loaded textures [%d]\n", ArrTextures.size());
+	m_aQueueToLoadIDs.clear();
+	LibReport(REPORT_MSG_LEVEL_NOTICE, "all loaded textures [%d]\n", m_aTextures.size());
 }
 
-IDirect3DTexture9* LoaderTextures::GetTexture(ID id)
+IDirect3DTexture9* �LoaderTextures::getTexture2d(ID id)
 {
-		if(id < ArrTextures.size())
+		if(id < m_aTextures.size())
 		{
-			/*IDirect3DTexture9* tex = ArrTextures[id]->tex;
-			if (tex == 0)
-				int qwert = 0;*/
-			return ArrTextures[id]->tex;
+			return m_aTextures[id]->m_pTex2d;
 		}
 		else 
 			return 0;
+}
+
+IDirect3DCubeTexture9* �LoaderTextures::getTextureCube(ID id)
+{
+	if (id < m_aTextures.size())
+	{
+		return m_aTextures[id]->m_pTexCube;
+	}
+	else
+		return 0;
+}
+
+bool �LoaderTextures::addConstAllInDir(const char *szDir)
+{
+	Array<String> aPathes = FileGetListFiles((String(Core_RStringGet(G_RI_STRING_PATH_GS_TEXTURES)) + szDir + "/*.dds").c_str());
+
+	for (int i = 0, il = aPathes.size(); i < il; ++i)
+	{
+		addName(aPathes[i].c_str(), LOAD_TEXTURE_TYPE_CONST);
+	}
+
+	return (aPathes.size() > 0);
+}
+
+//##########################################################################
+
+IDirect3DTexture9* �LoaderTextures::loadTexture2d(const char *szPath)
+{
+	IDirect3DTexture9 *pTex = 0;
+	D3DXCreateTextureFromFileEx(
+		g_pDXDevice,
+		szPath,
+		D3DX_DEFAULT,
+		D3DX_DEFAULT,
+		SXGC_LOADTEX_COUNT_MIPMAP,
+		0,
+		SXGC_LOADTEX_FORMAT_TEX,
+		D3DPOOL_MANAGED,
+		D3DX_FILTER_BOX,
+		D3DX_FILTER_BOX, 0, 0, 0, &pTex
+		);
+
+	return pTex;
+}
+
+IDirect3DCubeTexture9* �LoaderTextures::loadTextureCube(const char *szPath)
+{
+	IDirect3DCubeTexture9 *pTex = 0;
+	D3DXCreateCubeTextureFromFileEx(
+		g_pDXDevice,
+		szPath,
+		D3DX_DEFAULT,
+		SXGC_LOADTEX_COUNT_MIPMAP,
+		0,
+		SXGC_LOADTEX_FORMAT_TEX,
+		D3DPOOL_MANAGED,
+		D3DX_FILTER_BOX,
+		D3DX_FILTER_BOX, 0, 0, 0, &pTex
+		);
+
+	return pTex;
+}
+
+D3DRESOURCETYPE �LoaderTextures::getTypeFileTex(const char *szPath)
+{
+	D3DXIMAGE_INFO oTexInfo;
+	memset(&oTexInfo, 0, sizeof(D3DXIMAGE_INFO));
+
+	D3DXGetImageInfoFromFile(szPath, &oTexInfo);
+	return oTexInfo.ResourceType;
 }
\ No newline at end of file
diff --git a/source/gcore/LoaderTextures.h b/source/gcore/LoaderTextures.h
index 10619669de54a507933871a945b05c178a12f93c..b2c432ad54aa60b071309b31cae0fb95eba388d3 100644
--- a/source/gcore/LoaderTextures.h
+++ b/source/gcore/LoaderTextures.h
@@ -18,74 +18,131 @@ void LibReport(int iLevel, const char *szFormat, ...);
 extern IDirect3DDevice9 *g_pDXDevice;
 extern D3DPRESENT_PARAMETERS g_oD3DAPP;
 
-class LoaderTextures
+//! ��������� �������
+class �LoaderTextures
 {
 public:
-	LoaderTextures();
-	~LoaderTextures();
+	�LoaderTextures();
+	~�LoaderTextures();
 
-	bool FileExists(const char* name);
+	//! ���������� �� �������� �� �����
+	bool fileExists(const char *szName);
 
-	void ClearLoaded();
+	//! ������� ��� ����������� ��������
+	void clearLoaded();
 
-	void Delete(ID id);	//������� �������� id
+	//! ������� �������� id
+	void deleteTexture(ID id);	
 
-	ID AddName(const char* name, LOAD_TEXTURE_TYPE type, ID* iddir = 0, ID* idname = 0);	//��������� ��� ��������, ������ �������� �� ��� ID (��������� � �������)
-	ID GetID(const char* name);		//�������� id �� �����
-	void GetName(ID id, char* name);//�������� ��� �� id
+	//! ��������� ��� ��������, ������ �������� �� ��� ID (��������� � �������)
+	ID addName(const char *szName, LOAD_TEXTURE_TYPE type, ID *pIDdir = 0, ID *pIDname = 0);
 
-	ID Create(const char* name, IDirect3DTexture9* tex);	//������� ����� ��� �������� tex
-	ID Update(const char* name, LOAD_TEXTURE_TYPE type);			//������������� �������� name
-	void Update(ID id);
+	//! �������� id �� �����
+	ID getID(const char *szName);
 
-	void LoadTextures();	//�������� ���� ������� ������������ � �������
+	//�������� ��� �� id
+	void getName(ID id, char *szName);
 
-	IDirect3DTexture9* GetTexture(ID id);//�������� �������� �� id
+	//! ������� ����� ��� �������� tex
+	ID create(const char *szName, IDirect3DTexture9 *pTex);
+
+	//! ������������� �������� name
+	ID update(const char *szName, LOAD_TEXTURE_TYPE type);
+
+	//! ������������� �������� �� id
+	void update(ID id);
+
+	//! �������� ���� ������� ������������ � �������
+	void loadTextures();	
+
+	//! �������� �������� �� id
+	IDirect3DTexture9* getTexture2d(ID id);
+
+	//! �������� �������� �� id
+	IDirect3DCubeTexture9* getTextureCube(ID id);
+
+	//! ��������� ��� �������� �� ���������� szDir (������������ ���������� �������) � ��������� �� ������ �����������
+	bool addConstAllInDir(const char *szDir);
 
 private:
 
-	//��������� ����������� ����� � ��� �������� � ���, � ������ ���� id ��� �������
-	struct TLPath
+	//! ��������� ����������� ����� � ��� �������� � ���, � ������ ���� id ��� �������
+	struct CPath
 	{
-		TLPath(){}
-		~TLPath()
+		CPath(){}
+		~CPath()
 		{
-			for (int i = 0; i < ArrTex.size(); ++i)
+			for (int i = 0; i < m_aTextures.size(); ++i)
 			{
-				mem_delete(ArrTex[i]);
+				mem_delete(m_aTextures[i]);
 			}
+			m_aTextures.clear();
 		}
 
-		String Path;	//��� �����
+		//! ��� �����
+		String m_sPath;	
 
-		struct TLTex
+		//! ������� ������������� ��������
+		struct CTex
 		{
-			TLTex(){ id = -1; type = LOAD_TEXTURE_TYPE_LOAD; }
-			TLTex(ID _id, const char* _name, LOAD_TEXTURE_TYPE _type){ id = _id; name = _name; type = _type; }
+			CTex(){ m_id = -1; m_type = LOAD_TEXTURE_TYPE_LOAD; }
+			CTex(ID id, const char *szNname, LOAD_TEXTURE_TYPE type){ m_id = id; m_sName = szNname; m_type = type; }
 			
-			ID id;
-			String name;
-			LOAD_TEXTURE_TYPE type;
+			//! ���������� �������������
+			ID m_id;
+
+			//! ��� ��������
+			String m_sName;
+
+			//! ��� #LOAD_TEXTURE_TYPE
+			LOAD_TEXTURE_TYPE m_type;
 		};
 		
-		Array<TLTex*> ArrTex;
+		Array<CTex*> m_aTextures;
 	};
 
-	struct TexAndName
+	//! ������������� ��������
+	struct CTexture
 	{
-		TexAndName(){ tex = 0; IDDir = -1; }
-		~TexAndName(){ mem_release(tex); }
-		String name;
-		IDirect3DTexture9* tex;
-		ID IDDir;
-		
+		CTexture(){ m_pTex2d = 0; m_pTexCube = 0; m_idDir = -1; }
+		~CTexture(){ mem_release(m_pTex2d); mem_release(m_pTexCube); }
+
+		//! ���
+		String m_sName;
+
+		//! 2� ��������
+		IDirect3DTexture9 *m_pTex2d;
+
+		//! ���������� ��������
+		IDirect3DCubeTexture9 *m_pTexCube;
+
+		//! ���������� id ����������
+		ID m_idDir;
 	};
 
-	Array<TLPath*> Arr;
+	//**********************************************************************
+
+	//! ������ ����� � ����������
+	Array<CPath*> m_aPathes;
+
 	int CurrFirstFree;
 
-	Array<TexAndName*> ArrTextures;
-	Array<ID> ArrIDsLoad;
+	//! ������ �������, ���� == �������������
+	Array<CTexture*> m_aTextures;
+
+	//! ������ id ������� �� ��������
+	Array<ID> m_aQueueToLoadIDs;
+
+	//**********************************************************************
+
+	//! �������� 2d ��������
+	IDirect3DTexture9* loadTexture2d(const char *szPath);
+
+	//! �������� ���������� ��������
+	IDirect3DCubeTexture9* loadTextureCube(const char *szPath);
+
+	//! ���������� ��� ����� ��������
+	D3DRESOURCETYPE getTypeFileTex(const char *szPath);
 };
 
 #endif
\ No newline at end of file
diff --git a/source/gcore/bound.cpp b/source/gcore/bound.cpp
index 751bf1c43e20061996a191eaff4e7dd2943af76f..968f387b1ccd08dac20fd8613cfec0c6e1761393 100644
--- a/source/gcore/bound.cpp
+++ b/source/gcore/bound.cpp
@@ -424,7 +424,7 @@ void ComputeBoundingBoxArr4(ISXBound* bound, ISXBound** bound_arr)
 
 //##########################################################################
 
-bool InPosition2D(float3* min,float3* max,float3* pos)
+bool InPosition2D(const float3* min, const float3* max, const float3* pos)
 {
 		if((max->x >= pos->x && min->x <= pos->x) && (max->z >= pos->z && min->z <= pos->z))
 			return true;
@@ -554,7 +554,7 @@ bool InPositionPoints3D(float3* min,float3* max,float3* p1,float3* p2,float3* p3
 
 //##########################################################################
 
-void CreateBoundingBoxMesh(float3* min, float3* max, ID3DXMesh** bbmesh, IDirect3DDevice9* device)
+void CreateBoundingBoxMesh(const float3* min, const float3* max, ID3DXMesh** bbmesh, IDirect3DDevice9* device)
 {
 	float dist_x = abs(max->x - min->x);
 	float dist_y = abs(max->y - min->y);
diff --git a/source/gcore/bound.h b/source/gcore/bound.h
index 7cd66b7d17ecbfd62215310c9de0ae508c5a744c..917f6185a2282efffba3ee91224372fed62ad171 100644
--- a/source/gcore/bound.h
+++ b/source/gcore/bound.h
@@ -16,7 +16,7 @@ void CreateCone(float fTopRadius, float fBottomRadius, float fHeight, ID3DXMesh
 void ComputeBoundingBox(IDirect3DVertexBuffer9* vertex_buffer,ISXBound** bound,DWORD count_vert,DWORD bytepervert);
 void ComputeBoundingBox2(IDirect3DVertexBuffer9* vertex_buffer,ISXBound* bound,DWORD count_vert,DWORD bytepervert);
 
-bool InPosition2D(float3* min,float3* max,float3* pos);
+bool InPosition2D(const float3* min, const float3* max, const float3* pos);
 bool InPositionAbs2D(float3* min,float3* max,float3* pos);
 
 int CountPositionPoints2D(float3* min,float3* max,float3* p1,float3* p2,float3* p3);
@@ -33,7 +33,7 @@ bool InPositionPoints3D(float3* min,float3* max,float3* p1,float3* p2,float3* p3
 void ComputeBoundingBoxArr8(ISXBound* bound,ISXBound** bound_arr);
 void ComputeBoundingBoxArr4(ISXBound* bound,ISXBound** bound_arr);
 
-void CreateBoundingBoxMesh(float3* min, float3* max, ID3DXMesh** bbmesh, IDirect3DDevice9* device);
+void CreateBoundingBoxMesh(const float3* min, const float3* max, ID3DXMesh** bbmesh, IDirect3DDevice9* device);
 
 //������� ������ � ����������� ���������
 //��� ����������� ������������� ���������� ������� ���������� �������/�������/������� ����� ���� CalculateWorld
diff --git a/source/gcore/camera.cpp b/source/gcore/camera.cpp
index 2532e2c2b23e4d87e4a3db06468e0e873294ff37..32764f242c70db044ef274fccd6f133ceb840392 100644
--- a/source/gcore/camera.cpp
+++ b/source/gcore/camera.cpp
@@ -337,7 +337,7 @@ void CCamera::updateFrustum(const float4x4 *pProjection)
 	m_oFrustum.update(&m_mView, pProjection);
 }
 
-const ISXFrustum* CCamera::getFrustum()
+const IFrustum* CCamera::getFrustum()
 {
 	return &m_oFrustum;
 }
\ No newline at end of file
diff --git a/source/gcore/camera.h b/source/gcore/camera.h
index be7842ec5a1e3cf9a5c7ef6e51cc127363b090a7..955639825ce4120240566c930a7a0fe4547e9946 100644
--- a/source/gcore/camera.h
+++ b/source/gcore/camera.h
@@ -10,7 +10,7 @@ See the license in LICENSE
 #include "sxgcore.h"
 
 //����� ����������� �������
-class CFrustum : public virtual ISXFrustum
+class CFrustum : public virtual IFrustum
 {
 public:
 	CFrustum();
@@ -38,7 +38,7 @@ public:
 
 private:
 
-	CSXFrustumPlane m_aFrustumPlanes[6];
+	CFrustumPlane m_aFrustumPlanes[6];
 
 	float3 m_aPoints[8];
 	float3 m_vCenter;
@@ -46,7 +46,7 @@ private:
 
 //**************************************************************************
 
-class CCamera : public virtual ISXCamera
+class CCamera : public virtual ICamera
 {
 public:
 	CCamera	();
@@ -86,7 +86,7 @@ public:
 	void updateView();
 
 	void updateFrustum(const float4x4 *pmProjection);
-	const ISXFrustum* getFrustum();
+	const IFrustum* getFrustum();
 
 protected:
 	CFrustum m_oFrustum;	//!< ������� ���� ������
diff --git a/source/gcore/sky.cpp b/source/gcore/sky.cpp
index bf211490c4004eec8b1abb5bba082b2f4197cddf..9c978cc97c2867316d53986f67581df01614e959 100644
--- a/source/gcore/sky.cpp
+++ b/source/gcore/sky.cpp
@@ -8,9 +8,6 @@ See the license in LICENSE
 
 CSkyBox::CSkyBox()
 {
-	m_szTexActive[0] = 0;
-	m_szTexSecond[0] = 0;
-
 	D3DVERTEXELEMENT9 layoutskybox[] =
 	{
 		{ 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 },
@@ -93,11 +90,11 @@ CSkyBox::CSkyBox()
 
 	m_pIndeces->Unlock();
 
-	m_pTexture = 0;
-	m_pTexture2 = 0;
+	m_idTex1 = -1;
+	m_idTex2 = -1;
 
 	m_isChange = false;
-	m_isChangeMainTex = false;
+	//m_isChangeMainTex = false;
 	m_fFactorBlend = 0.0f;
 };
 
@@ -106,62 +103,64 @@ CSkyBox::~CSkyBox()
 	mem_release_del(m_pVertices);
 	mem_release_del(m_pIndeces);
 
-	mem_release_del(m_pTexture);
-	mem_release_del(m_pTexture2);
-
 	mem_release_del(m_pVertexDeclarationSkyBox);
 }
 
-void CSkyBox::loadTextures(const char *texture)
+void CSkyBox::loadTexture(const char *texture)
 {
-	mem_release_del(m_pTexture);
+	m_idTex1 = 0;
 	if (!texture)
 	{
-		mem_release_del(m_pTexture2);
+		m_idTex2 = 0;
 
 		m_isChange = false;
-		m_isChangeMainTex = false;
+		//m_isChangeMainTex = false;
 		m_fFactorBlend = 0.0f;
 
 		return;
 	}
 
-	char tmppath[1024];
-	sprintf(tmppath, "%s%s", Core_RStringGet(G_RI_STRING_PATH_GS_TEXTURES), texture);
-	if (FAILED(D3DXCreateCubeTextureFromFile(g_pDXDevice, tmppath, &m_pTexture)))
-	{
-		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - failed load cube texture '%s'", GEN_MSG_LOCATION, tmppath);
-	}
+	m_idTex1 = SGCore_LoadTexAddName(texture, LOAD_TEXTURE_TYPE_CONST);
+
+	if (m_idTex1 == -1)
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - failed load texture '%s'", GEN_MSG_LOCATION, texture);
 }
 
 bool CSkyBox::isLoadTex()
 {
-	return (m_pTexture != 0 || m_pTexture2 != 0);
+	return (m_idTex1 != -1 || m_idTex2 != -1);
 }
 
 void CSkyBox::changeTexture(const char *texture)
 {
-	mem_release_del((m_isChangeMainTex ? m_pTexture : m_pTexture2));
-	char tmpsb1[1024];
-	sprintf(tmpsb1, "%s%s", Core_RStringGet(G_RI_STRING_PATH_GS_TEXTURES), texture);
-	if (!FAILED(D3DXCreateCubeTextureFromFile(g_pDXDevice, tmpsb1, (m_isChangeMainTex ? &m_pTexture : &m_pTexture2))))
-			m_isChange = true;
-		else
-		{
-			LibReport(REPORT_MSG_LEVEL_ERROR, "%s - failed load cube texture '%s'", GEN_MSG_LOCATION, tmpsb1);
-		}
+	ID idNew = -1;
+	if (/*m_isChangeMainTex*/m_isChange)
+	{
+		m_idTex1 = SGCore_LoadTexAddName(texture, LOAD_TEXTURE_TYPE_CONST);
+		idNew = m_idTex1;
+	}
+	else
+	{
+		m_idTex2 = SGCore_LoadTexAddName(texture, LOAD_TEXTURE_TYPE_CONST);
+		idNew = m_idTex2;
+	}
+
+	if (idNew != -1)
+		m_isChange = true;
+	else
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - failed load texture '%s'", GEN_MSG_LOCATION, texture);
 }
 
 void CSkyBox::getActiveTexture(char *texture)
 {
 	if (texture)
-		strcpy(texture, m_szTexActive);
+		SGCore_LoadTexGetName((/*m_isChangeMainTex*/m_isChange ? m_idTex2 : m_idTex1), texture);
 }
 
 void CSkyBox::getSecondTexture(char *texture)
 {
 	if (texture)
-		strcpy(texture, m_szTexSecond);
+		SGCore_LoadTexGetName((/*m_isChangeMainTex*/m_isChange ? m_idTex1 : m_idTex2), texture);
 }
 
 void CSkyBox::setRotation(float angle)
@@ -192,11 +191,8 @@ void CSkyBox::render(float timeDelta, const float3* pos,bool is_shadow)
 
 	float4x4 World = m_mMatRotation * SMMatrixTranslation(pos->x, pos->y, pos->z);
 
-	//D3DXMATRIX tmpdxView, tmpdxProjection;
-	//g_pDXDevice->GetTransform(D3DTS_PROJECTION, &tmpdxProjection);
-	//g_pDXDevice->GetTransform(D3DTS_VIEW, &tmpdxView);
-	float4x4 View;// = float4x4(tmpdxView);
-	float4x4 Proj;// = float4x4(tmpdxProjection);
+	float4x4 View;
+	float4x4 Proj;
 
 	Core_RMatrixGet(G_RI_MATRIX_VIEW, &View);
 	Core_RMatrixGet(G_RI_MATRIX_PROJECTION, &Proj);
@@ -208,19 +204,19 @@ void CSkyBox::render(float timeDelta, const float3* pos,bool is_shadow)
 	if (m_isChange && m_fFactorBlend >= 1.0)
 	{
 		m_fFactorBlend = 0.0;
-		m_isChangeMainTex = !m_isChangeMainTex;
+		//m_isChangeMainTex = !m_isChangeMainTex;
 		m_isChange = false;
 	}
 
-	if (m_isChangeMainTex)
+	if (/*m_isChangeMainTex*/m_isChange)
 	{
-		g_pDXDevice->SetTexture(0, m_pTexture2);
-		g_pDXDevice->SetTexture(1, m_pTexture);
+		g_pDXDevice->SetTexture(0, SGCore_LoadTexGetTexCube(m_idTex2));
+		g_pDXDevice->SetTexture(1, SGCore_LoadTexGetTexCube(m_idTex1));
 	}
 	else
 	{
-		g_pDXDevice->SetTexture(0, m_pTexture);
-		g_pDXDevice->SetTexture(1, m_pTexture2);
+		g_pDXDevice->SetTexture(0, SGCore_LoadTexGetTexCube(m_idTex1));
+		g_pDXDevice->SetTexture(1, SGCore_LoadTexGetTexCube(m_idTex2));
 	}
 
 	SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, m_idVS, "WorldViewProjection", &WVP);
@@ -265,7 +261,7 @@ CSkyClouds::CSkyClouds()
 								0,
 								0,
 								D3DPOOL_MANAGED,
-								&m_pSkyCloudsVertices,
+								&m_pVertices,
 								0
 								);
 
@@ -274,21 +270,22 @@ CSkyClouds::CSkyClouds()
                0,
                D3DFMT_INDEX16,
                D3DPOOL_MANAGED,
-			   &m_pSkyCloudsIndeces,
+			   &m_pIndeces,
                0);
 
 	float X = 800;
 	float Y = 0;
 	float Z = 800;
 
-	m_pSkyCloudsVertices->Lock(0, 0, (void**)&m_pVertices, 0);
+	CSkyCloudsVertex *pVertices;
+	m_pVertices->Lock(0, 0, (void**)&pVertices, 0);
 
-	m_pVertices[3] = CSkyCloudsVertex(-X, Y, -Z, 0.0f, 2.0f);
-	m_pVertices[2] = CSkyCloudsVertex(-X, Y, Z, 0.0f, 0.0f);
-	m_pVertices[1] = CSkyCloudsVertex(X, Y, Z, 2.0f, 0.0f);
-	m_pVertices[0] = CSkyCloudsVertex(X, Y, -Z, 2.0f, 2.0f);
+	pVertices[3] = CSkyCloudsVertex(-X, Y, -Z, 0.0f, 2.0f);
+	pVertices[2] = CSkyCloudsVertex(-X, Y, Z, 0.0f, 0.0f);
+	pVertices[1] = CSkyCloudsVertex(X, Y, Z, 2.0f, 0.0f);
+	pVertices[0] = CSkyCloudsVertex(X, Y, -Z, 2.0f, 2.0f);
 
-	m_pSkyCloudsVertices->Unlock();
+	m_pVertices->Unlock();
 
 
 	WORD indices_tmp[] =
@@ -299,50 +296,55 @@ CSkyClouds::CSkyClouds()
 
 
 	WORD* indices = 0;
-	m_pSkyCloudsIndeces->Lock(0, 0, (void**)&indices, 0);
+	m_pIndeces->Lock(0, 0, (void**)&indices, 0);
 
 	memcpy(indices,indices_tmp,6 * sizeof(WORD));
 
-	m_pSkyCloudsIndeces->Unlock();
+	m_pIndeces->Unlock();
 
 	m_fBias = 0.f;
 	m_fSpeed = 0.01f;
 
-	m_pSkyCloudsTex = 0;
-	m_pSkyCloudsTex2 = 0;
+	m_idTex1 = -1;
+	m_idTex1 = -1;
 
 	m_isChange = false;
-	m_isChangeMainTex = false;
+	//m_isChangeMainTex = false;
 	m_fFactorBlend = 0.0f;
 }
 
 CSkyClouds::~CSkyClouds()
 {
-	mem_release_del(m_pSkyCloudsTex);
-	mem_release_del(m_pSkyCloudsTex2);
-
-	mem_release_del(m_pSkyCloudsVertices);
-	mem_release_del(m_pSkyCloudsIndeces);
+	mem_release_del(m_pVertices);
+	mem_release_del(m_pIndeces);
 
 	mem_release_del(m_pVertexDeclarationClouds);
 }
 
 void CSkyClouds::changeTexture(const char *texture)
 {
-	mem_release_del((m_isChangeMainTex ? m_pSkyCloudsTex : m_pSkyCloudsTex2));
-	char tmpsb1[1024];
-	sprintf(tmpsb1, "%s%s", Core_RStringGet(G_RI_STRING_PATH_GS_TEXTURES), texture);
-	if (!FAILED(D3DXCreateTextureFromFile(g_pDXDevice, tmpsb1, (m_isChangeMainTex ? &m_pSkyCloudsTex : &m_pSkyCloudsTex2))))
-			m_isChange = true;
-		else
-		{
-			LibReport(REPORT_MSG_LEVEL_ERROR, "%s - failed load texture '%s'", GEN_MSG_LOCATION, tmpsb1);
-		}
+	ID idNew;
+	if (/*m_isChangeMainTex*/m_isChange)
+	{
+		m_idTex1 = SGCore_LoadTexAddName(texture, LOAD_TEXTURE_TYPE_CONST);
+		idNew = m_idTex1;
+	}
+	else
+	{
+		m_idTex2 = SGCore_LoadTexAddName(texture, LOAD_TEXTURE_TYPE_CONST);
+		idNew = m_idTex2;
+	}
+
+	if (idNew != -1)
+		m_isChange = true;
+	else
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - failed load texture '%s'", GEN_MSG_LOCATION, texture);
 }
 
 void CSkyClouds::setWidthHeightPos(float width,float height, const float3* pos)
 {
-	m_pSkyCloudsVertices->Lock(0, 0, (void**)&m_pVertices, 0);
+	CSkyCloudsVertex *pVertices;
+	m_pVertices->Lock(0, 0, (void**)&pVertices, 0);
 
 	float X = pos->x + (width*0.5f);
 	float Y = pos->y;
@@ -353,12 +355,12 @@ void CSkyClouds::setWidthHeightPos(float width,float height, const float3* pos)
 
 	//float2_t tmpwh = float2_t(width*0.5f,height*0.5f);
 
-	m_pVertices[3] = CSkyCloudsVertex(-X, Y, -Z, 0.0f, 2.0f);
-	m_pVertices[2] = CSkyCloudsVertex(-X, Y, Z, 0.0f, 0.0f);
-	m_pVertices[1] = CSkyCloudsVertex(X, Y, Z, 2.0f, 0.0f);
-	m_pVertices[0] = CSkyCloudsVertex(X, Y, -Z, 2.0f, 2.0f);
+	pVertices[3] = CSkyCloudsVertex(-X, Y, -Z, 0.0f, 2.0f);
+	pVertices[2] = CSkyCloudsVertex(-X, Y, Z, 0.0f, 0.0f);
+	pVertices[1] = CSkyCloudsVertex(X, Y, Z, 2.0f, 0.0f);
+	pVertices[0] = CSkyCloudsVertex(X, Y, -Z, 2.0f, 2.0f);
 
-	m_pSkyCloudsVertices->Unlock();
+	m_pVertices->Unlock();
 }
 
 void CSkyClouds::setRotation(float angle)
@@ -402,31 +404,29 @@ float CSkyClouds::getSpeed()
 	return m_fSpeed;
 }
 
-void CSkyClouds::loadTextures(const char *texture)
+void CSkyClouds::loadTexture(const char *texture)
 {
-	mem_release_del(m_pSkyCloudsTex);
+	m_idTex1 = 0;
 	if (!texture)
 	{
-		mem_release_del(m_pSkyCloudsTex2);
+		m_idTex2 = 0;
 
 		m_isChange = false;
-		m_isChangeMainTex = false;
+		//m_isChangeMainTex = false;
 		m_fFactorBlend = 0.0f;
 
 		return;
 	}
 
-	char tmppath[1024];
-	sprintf(tmppath, "%s%s", Core_RStringGet(G_RI_STRING_PATH_GS_TEXTURES), texture);
-	if (FAILED(D3DXCreateTextureFromFile(g_pDXDevice, tmppath, &m_pSkyCloudsTex)))
-	{
-		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - failed load texture '%s'", GEN_MSG_LOCATION, tmppath);
-	}
+	m_idTex1 = SGCore_LoadTexAddName(texture, LOAD_TEXTURE_TYPE_CONST);
+
+	if (m_idTex1 == -1)
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - failed load texture '%s'", GEN_MSG_LOCATION, texture);
 }
 
 bool CSkyClouds::isLoadTex()
 {
-	return (m_pSkyCloudsTex != 0 || m_pSkyCloudsTex2 != 0);
+	return (m_idTex1 != -1 || m_idTex2 != -1);
 }
 
 void CSkyClouds::render(DWORD timeDelta, const float3* pos,bool is_shadow)
@@ -439,32 +439,30 @@ void CSkyClouds::render(DWORD timeDelta, const float3* pos,bool is_shadow)
 	if (m_fBias >= 2.f)
 		m_fBias = 0.f;
 
-	//float4x4 World = SMMatrixTranslation(Core::Data::ConstCurrentCameraPosition.x, Core::Data::ConstCurrentCameraPosition.y+50, Core::Data::ConstCurrentCameraPosition.z);
-	//float4x4 World = SMMatrixTranslation(pos->x, pos->y+50, pos->z);
 	float4x4 World = SMMatrixTranslation(0, pos->y, 0);
 
 	if (m_isChange && m_fFactorBlend >= 1.0)
-		{
+	{
 		m_fFactorBlend = 0.0;
-			m_isChangeMainTex = !m_isChangeMainTex;
-			m_isChange = false;
-		}
+		//m_isChangeMainTex = !m_isChangeMainTex;
+		m_isChange = false;
+	}
 
-	if (m_isChangeMainTex)
+	if (/*m_isChangeMainTex*/m_isChange)
 	{
-		g_pDXDevice->SetTexture(0, m_pSkyCloudsTex2);
-		g_pDXDevice->SetTexture(1, m_pSkyCloudsTex);
+		g_pDXDevice->SetTexture(0, SGCore_LoadTexGetTex(m_idTex2));
+		g_pDXDevice->SetTexture(1, SGCore_LoadTexGetTex(m_idTex1));
 	}
 	else
 	{
-		g_pDXDevice->SetTexture(0, m_pSkyCloudsTex);
-		g_pDXDevice->SetTexture(1, m_pSkyCloudsTex2);
+		g_pDXDevice->SetTexture(0, SGCore_LoadTexGetTex(m_idTex1));
+		g_pDXDevice->SetTexture(1, SGCore_LoadTexGetTex(m_idTex2));
 	}
 
 	if(!is_shadow)
 	{
-		float4x4 View;// = float4x4(tmpdxView);
-		float4x4 Proj;// = float4x4(tmpdxProjection);
+		float4x4 View;
+		float4x4 Proj;
 
 		Core_RMatrixGet(G_RI_MATRIX_VIEW, &View);
 		Core_RMatrixGet(G_RI_MATRIX_PROJECTION, &Proj);
@@ -482,7 +480,7 @@ void CSkyClouds::render(DWORD timeDelta, const float3* pos,bool is_shadow)
 	}
 	else
 	{
-		float4x4 ViewProj;// = float4x4(tmpdxViewProj);
+		float4x4 ViewProj;
 		Core_RMatrixGet(G_RI_MATRIX_VIEWPROJ, &ViewProj);
 		float4x4 WVP = (m_mMatRotation * World) * ViewProj;
 
@@ -490,14 +488,13 @@ void CSkyClouds::render(DWORD timeDelta, const float3* pos,bool is_shadow)
 
 		SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, m_idVS, "WorldViewProjection", &WVP);
 		SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, m_idPS_Shadow, "BlendFactorBias", &float2(m_fFactorBlend, m_fBias));
-		//SGCore_ShaderSetVRF(1, PS_RenderSkyCloudsShadow, "Color", &Color);
 		SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, m_idPS_Shadow, "Alpha", &m_fAlpha);
 		SGCore_ShaderBind(SHADER_TYPE_VERTEX, m_idVS);
 		SGCore_ShaderBind(SHADER_TYPE_PIXEL, m_idPS_Shadow);
 	}
 	
-	g_pDXDevice->SetStreamSource(0, m_pSkyCloudsVertices, 0, sizeof(CSkyCloudsVertex));
-	g_pDXDevice->SetIndices(m_pSkyCloudsIndeces);
+	g_pDXDevice->SetStreamSource(0, m_pVertices, 0, sizeof(CSkyCloudsVertex));
+	g_pDXDevice->SetIndices(m_pIndeces);
 	g_pDXDevice->SetVertexDeclaration(m_pVertexDeclarationClouds);
 
 	g_pDXDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 4, 0, 2);
diff --git a/source/gcore/sky.h b/source/gcore/sky.h
index 0f273680bb8b69121aa28ff2dafdad96d7744c5a..b650063dc01732dbe1bed4482b7bdfe73ab37563 100644
--- a/source/gcore/sky.h
+++ b/source/gcore/sky.h
@@ -18,125 +18,216 @@ extern D3DPRESENT_PARAMETERS g_oD3DAPP;
 
 //##########################################################################
 
+//! ��������� ������ ��� ���������
 struct CSkyBoxVertex
 {
-	CSkyBoxVertex(float x,float y,float z,float u,float v,float w)
+	CSkyBoxVertex(float fX,float fY,float fZ,float fU,float fV,float fW)
 	{
-		_x  = x;  _y  = y;  _z  = z; _u = u; _v = v; _w = w;
+		x = fX;  y = fY;  z = fZ; u = fU; v = fV; w = fW;
 	}
-	float _x, _y, _z;
-	float _u, _v, _w;
+	float x, y, z;
+	float u, v, w;
 };
 
 //**************************************************************************
 
+//! ��������, ���, �� ������� ������������� ���������� �������� � ������������ ����
 class CSkyBox
 {
 public:
 	CSkyBox();
 	~CSkyBox();
-	void loadTextures(const char *szTexture);
+
+	SX_ALIGNED_OP_MEM
+
+	//! �������� ��������
+	void loadTexture(const char *szTexture);
+
+	//! ��������� �� ��������
 	bool isLoadTex();
+
+	//! ������ ��������
 	void changeTexture(const char *szTexture);
+
+	//! � szTexture ������� ��� ������� �������� ��������
 	void getActiveTexture(char *szTexture);
+
+	//! � szTexture ������� ��� ��������� ��������
 	void getSecondTexture(char *szTexture);
+
+	//! ���������� ���� ��������
 	void setRotation(float fAngle);
+
+	//! ���������� ���� ��������
 	float getRotation();
+
+	//! ���������� ����, w ���������� ��� ����������� ����� [0,1]
 	void setColor(const float4_t *pColor);
+
+	//! � pColor ���������� ����
 	void getColor(float4_t *pColor);
-	void render(float timeDelta, const float3 *pPos,bool isShadow);
 
-	
-	SX_ALIGNED_OP_MEM
+	//! ������
+	void render(float timeDelta, const float3 *pPos,bool isShadow);
 
 protected:
 
+	//! ���������� ������
 	IDirect3DVertexDeclaration9* m_pVertexDeclarationSkyBox;
 	
-	char m_szTexActive[SXGC_LOADTEX_MAX_SIZE_DIRNAME];
-	char m_szTexSecond[SXGC_LOADTEX_MAX_SIZE_DIRNAME];
+	//! ���� ��������
 	float m_fRotaionY;
+
+	//! ������� ��������
 	float4x4 m_mMatRotation;
+
+	//! ����
 	float4_t m_vColor;
+
+	//! ���������� ���������� �������
 	float m_fFactorBlend;
 
+	//! ���������� �� ����� �������
 	bool m_isChange;
-	bool m_isChangeMainTex;
 
-	IDirect3DCubeTexture9  *m_pTexture;
-	IDirect3DCubeTexture9  *m_pTexture2;
+	
+	//bool m_isChangeMainTex;
+
+	//! ������ (�������� ��������)
+	ID m_idTex1;
+
+	//! ������ (�������� ������ ��� #changeTexture)
+	ID m_idTex2;
+
+	//! ��������� �����
 	IDirect3DVertexBuffer9 *m_pVertices;
+
+	//! ��������� �����
 	IDirect3DIndexBuffer9  *m_pIndeces;
 
+	//! ��������� ������
 	ID m_idVS;
+
+	//! ���������� ������
 	ID m_idPS;
 };
 
 //##########################################################################
 
+//! ��������� ������ �������
 struct CSkyCloudsVertex
 {
-	CSkyCloudsVertex(float x,float y,float z,float u,float v)
+	CSkyCloudsVertex(float fX,float fY,float fZ,float fU,float fV)
 	{
-	_x  = x;  _y  = y;  _z  = z; _u = u; _v = v;
+		x = fX;  y = fY;  z = fZ; u = fU; v = fV;
 	}
-	float _x, _y, _z;
-	float _u, _v;
+	float x, y, z;
+	float u, v;
 };
 
 //**************************************************************************
 
+//! ������
 class CSkyClouds
 {
 public:
 	CSkyClouds();
 	~CSkyClouds();
 
-	//���������� ��������� �������
-	//���� ������ ����������� ����, �� ���� ���� ������ ��������� ����� ���� �������
+	SX_ALIGNED_OP_MEM
+
+	//! ���������� ��������� �������
 	void setWidthHeightPos(float iWidth,float iHeight, const float3 *pPos);
-	void loadTextures(const char *szTexture);
+
+	//! �������� ��������
+	void loadTexture(const char *szTexture);
+
+	//! ��������� �� ��������
 	bool isLoadTex();
+
+	//! �������� ��������
 	void changeTexture(const char *szTexture);
 
+	//���������� �������
 	void setRotation(float fAngle);
+
+	//! ���������� �������
 	float getRotation();
+
+	//! ������������� ������������
 	void setAlpha(float fAngle);
+
+	//! ���������� ������������
 	float getAlpha();
+
+	//! ����������� ����, w ���������� ��� ����������� ����� [0,1]
 	void setColor(const float4_t *pColor);
+
+	//! � pColor ���������� ����
 	void getColor(float4_t *pColor);
 
+	//! ���������� �������� ��������
 	void setSpeed(float fSpeed);
+
+	//! ���������� �������� ��������
 	float getSpeed();
 
-	void render(DWORD timeDetlta, const float3 *pPos,bool isShadow);
+	//! ������
+	void render(DWORD timeDetlta, const float3 *pPos, bool isShadow);
 
-	SX_ALIGNED_OP_MEM
 private:
 
+	//! ���������� ������
 	IDirect3DVertexDeclaration9 *m_pVertexDeclarationClouds;
+
+	//! ���������� ������������
 	float m_fAlpha;
+
+	//! ������� �� ��� Y
 	float m_fRotaionY;
+
+	//! ������� ��������
 	float4x4 m_mMatRotation;
+
+	//! ���� �������
 	float4_t m_vColor;
 
+	//! ���������� ���������� ���������� �������� � �����
 	float m_fFactorBlend;
+
+	//! ������� ����� �������
 	float2_t m_vWidthHeight;
+
+	//! ���������� �� ������ ����� �������
 	bool m_isChange;
-	bool m_isChangeMainTex;
 
+	//bool m_isChangeMainTex;
+
+	//! �������� �������� �������
 	float m_fSpeed;
+
+	//! ������� �������� � ���������� �����������
 	float m_fBias;
-	CSkyCloudsVertex *m_pVertices;
-	IDirect3DVertexBuffer9 *m_pSkyCloudsVertices;
-	IDirect3DIndexBuffer9 *m_pSkyCloudsIndeces;
 
-	IDirect3DTexture9 *m_pSkyCloudsTex;
-	IDirect3DTexture9 *m_pSkyCloudsTex2;
+	//! ��������� �����
+	IDirect3DVertexBuffer9 *m_pVertices;
+
+	//! ��������� �����
+	IDirect3DIndexBuffer9 *m_pIndeces;
 
+	//! ������ (�������� ��������)
+	ID m_idTex1;
+
+	//! ������ (�������� ������ ��� #changeTexture)
+	ID m_idTex2;
+
+	//! ��������� ������
 	ID m_idVS;
+
+	//! ���������� ������ (��������� ��� ������)
 	ID m_idPS;
 
+	//! ���������� ������ (��������� ��� �����)
 	ID m_idPS_Shadow;
 };
 
diff --git a/source/gcore/sxgcore.cpp b/source/gcore/sxgcore.cpp
index ecd001b144d15be7442d66f489cbdf14a3460db8..001de58d50105729150dfd123357eabca8b3be10 100644
--- a/source/gcore/sxgcore.cpp
+++ b/source/gcore/sxgcore.cpp
@@ -75,15 +75,15 @@ void StdDrawIndexedPrimitive(UINT type_primitive, long base_vertexIndex, UINT mi
 	g_pDXDevice->DrawIndexedPrimitive((D3DPRIMITIVETYPE)type_primitive, base_vertexIndex, min_vertex_index, num_vertices, start_index, prim_count);
 }
 
-void StdMtlSet(ID id, float4x4* world)
+void StdMtlSet(ID id, float4x4 *pWorld)
 {
 
 	g_pDXDevice->SetTexture(0, SGCore_LoadTexGetTex(id));
 }
 
-ID StdMtlLoad(const char* name, int mtl_type)
+ID StdMtlLoad(const char *szName, int iMtlType)
 {
-	return SGCore_LoadTexAddName(name, LOAD_TEXTURE_TYPE_LOAD);
+	return SGCore_LoadTexAddName(szName, LOAD_TEXTURE_TYPE_LOAD);
 }
 
 int StdMtlGetSort(ID id)
@@ -117,7 +117,7 @@ IDirect3DVertexDeclaration9 *g_pStaticVertexDecl = 0;
 
 CShaderManager *g_pManagerShaders = 0;
 CreatorTextures *g_pManagerRenderTargets = 0;
-LoaderTextures *g_pManagerTextures = 0;
+�LoaderTextures *g_pManagerTextures = 0;
 ID3DXMesh *g_pScreenTexture = 0;
 CSkyBox *g_pSkyBox = 0;
 CSkyClouds *g_pSkyClouds = 0;
@@ -175,7 +175,7 @@ void GCoreInit(HWND hWnd, int iWidth, int iHeight, bool isWindowed, DWORD dwFlag
 
 	D3DXCreateFontIndirect(g_pDXDevice, &LF, &g_pFPStext);
 
-	D3DVERTEXELEMENT9 layoutquad[] =
+	D3DVERTEXELEMENT9 oLayoutQuad[] =
 	{
 		{ 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 },
 		{ 0, 12, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0 },
@@ -185,45 +185,40 @@ void GCoreInit(HWND hWnd, int iWidth, int iHeight, bool isWindowed, DWORD dwFlag
 	//IDirect3DVertexDeclaration9* VertexDeclarationQuad;
 	//GData::g_pDXDevice->CreateVertexDeclaration(layoutquad, &VertexDeclarationQuad);
 
-	D3DXCreateMesh(2, 4, D3DXMESH_MANAGED, layoutquad, g_pDXDevice, &g_pScreenTexture);
+	D3DXCreateMesh(2, 4, D3DXMESH_MANAGED, oLayoutQuad, g_pDXDevice, &g_pScreenTexture);
 
-	struct  VERTEX_SCREEN_TEXTURE { float x, y, z, tx, ty, tz; };
+	struct VERTEX_SCREEN_TEXTURE { float x, y, z, tx, ty, tz; };
 
-	const float offset_pixel_x = 1.0f / float(g_oD3DAPP.BackBufferWidth);
-	const float offset_pixel_y = 1.0f / float(g_oD3DAPP.BackBufferHeight);
+	const float fOffsetPixelX = 1.0f / float(g_oD3DAPP.BackBufferWidth);
+	const float fOffsetPixelY = 1.0f / float(g_oD3DAPP.BackBufferHeight);
 
-	VERTEX_SCREEN_TEXTURE AddVertices[] =
+	VERTEX_SCREEN_TEXTURE aVertices[] =
 	{
-		{ -1.0f - offset_pixel_x, -1.0f + offset_pixel_y, 1.0f, 0.0f, 1.0f, 0 },
-		{ -1.0f - offset_pixel_x, 1.0f + offset_pixel_y, 1.0f, 0.0f, 0.0f, 1 },
-		{ 1.0f - offset_pixel_x, 1.0f + offset_pixel_y, 1.0f, 1.0f, 0.0f, 2 },
-		{ 1.0f - offset_pixel_x, -1.0f + offset_pixel_y, 1.0f, 1.0f, 1.0f, 3 },
+		{ -1.0f - fOffsetPixelX, -1.0f + fOffsetPixelY, 1.0f, 0.0f, 1.0f, 0 },
+		{ -1.0f - fOffsetPixelX,  1.0f + fOffsetPixelY, 1.0f, 0.0f, 0.0f, 1 },
+		{  1.0f - fOffsetPixelX,  1.0f + fOffsetPixelY, 1.0f, 1.0f, 0.0f, 2 },
+		{  1.0f - fOffsetPixelX, -1.0f + fOffsetPixelY, 1.0f, 1.0f, 1.0f, 3 },
 	};
 
-	void* Vertices;
-	if (!FAILED(g_pScreenTexture->LockVertexBuffer(0, (void**)&Vertices)))
+	void * pVertices;
+	if (!FAILED(g_pScreenTexture->LockVertexBuffer(0, (void**)&pVertices)))
 	{
-		memcpy(Vertices, AddVertices, sizeof(AddVertices));
+		memcpy(pVertices, aVertices, sizeof(aVertices));
 		g_pScreenTexture->UnlockVertexBuffer();
 	}
 
-	WORD* i = 0;
-	g_pScreenTexture->LockIndexBuffer(0, (void**)&i);
-	i[0] = 0; i[1] = 1; i[2] = 2;
-	i[3] = 0; i[4] = 2; i[5] = 3;
+	WORD *pIndeces = 0;
+	g_pScreenTexture->LockIndexBuffer(0, (void**)&pIndeces);
+	pIndeces[0] = 0; pIndeces[1] = 1; pIndeces[2] = 2;
+	pIndeces[3] = 0; pIndeces[4] = 2; pIndeces[5] = 3;
 	g_pScreenTexture->UnlockIndexBuffer();
 
 	
-	//������������� ������ � ��������
-	/*Core_RFloatSet(G_RI_FLOAT_WINSIZE_WIDTH, (float)width);
-	Core_RFloatSet(G_RI_FLOAT_WINSIZE_HEIGHT, (float)heigth);
-	Core_RBoolSet(G_RI_BOOL_RENDER_WINDOWED, windowed);*/
-
 	g_pManagerShaders = new CShaderManager();
 	g_pManagerRenderTargets = new CreatorTextures();
-	g_pManagerTextures = new LoaderTextures();
+	g_pManagerTextures = new �LoaderTextures();
 
-	D3DVERTEXELEMENT9 layoutstatic[] =
+	D3DVERTEXELEMENT9 oLayoutStatic[] =
 	{
 		{ 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 },
 		{ 0, 12, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0 },
@@ -231,21 +226,21 @@ void GCoreInit(HWND hWnd, int iWidth, int iHeight, bool isWindowed, DWORD dwFlag
 		D3DDECL_END()
 	};
 
-	g_pDXDevice->CreateVertexDeclaration(layoutstatic, &g_pStaticVertexDecl);
+	g_pDXDevice->CreateVertexDeclaration(oLayoutStatic, &g_pStaticVertexDecl);
 
 
 	//��������� ���� ��������� ���������� ��������
-	DEVMODE dm;
+	DEVMODE oDevMode;
 	int iNum = 0;
-	while (EnumDisplaySettings(NULL, iNum, &dm))
+	while (EnumDisplaySettings(NULL, iNum, &oDevMode))
 	{
 		iNum++;
-		if (dm.dmBitsPerPel >= 32 && dm.dmPelsWidth >= 800 && dm.dmPelsHeight >= 600)
+		if (oDevMode.dmBitsPerPel >= 32 && oDevMode.dmPelsWidth >= 800 && oDevMode.dmPelsHeight >= 600)
 		{
 			bool isUnic = true;
 			for (int i = 0, il = g_aArrModes.size(); i < il; ++i)
 			{
-				if (g_aArrModes[i].dmPelsWidth == dm.dmPelsWidth && g_aArrModes[i].dmPelsHeight == dm.dmPelsHeight)
+				if (g_aArrModes[i].dmPelsWidth == oDevMode.dmPelsWidth && g_aArrModes[i].dmPelsHeight == oDevMode.dmPelsHeight)
 				{
 					isUnic = false;
 					break;
@@ -253,7 +248,7 @@ void GCoreInit(HWND hWnd, int iWidth, int iHeight, bool isWindowed, DWORD dwFlag
 			}
 
 			if (isUnic)
-				g_aArrModes.push_back(dm);
+				g_aArrModes.push_back(oDevMode);
 		}
 	}
 
@@ -310,12 +305,12 @@ SX_LIB_API void SGCore_0Create(const char *szName, HWND hWnd, int iWidth, int iH
 		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - not init argument [name], sxgcore", GEN_MSG_LOCATION);
 }
 
-SX_LIB_API const DEVMODE* SGCore_GetModes(int *iCount)
+SX_LIB_API const DEVMODE* SGCore_GetModes(int *pCount)
 {
 	SG_PRECOND(0);
 
-	if (iCount)
-		*iCount = g_aArrModes.size();
+	if (pCount)
+		*pCount = g_aArrModes.size();
 
 	return &(g_aArrModes[0]);
 }
@@ -388,7 +383,7 @@ SX_LIB_API void SGCore_OnLostDevice()
 	g_pManagerRenderTargets->OnLostDevice();
 }
 
-SX_LIB_API bool SGCore_OnDeviceReset(int iWidth, int iHeight, bool windowed)
+SX_LIB_API bool SGCore_OnDeviceReset(int iWidth, int iHeight, bool isWindowed)
 {
 	SG_PRECOND(false);
 
@@ -406,11 +401,7 @@ SX_LIB_API bool SGCore_OnDeviceReset(int iWidth, int iHeight, bool windowed)
 
 	g_oD3DAPP.BackBufferWidth = iWidth;
 	g_oD3DAPP.BackBufferHeight = iHeight;
-	g_oD3DAPP.Windowed = windowed;
-
-	/*Core_RFloatSet(G_RI_FLOAT_WINSIZE_WIDTH, (float)width);
-	Core_RFloatSet(G_RI_FLOAT_WINSIZE_HEIGHT, (float)heigth);
-	Core_RBoolSet(G_RI_BOOL_RENDER_WINDOWED, windowed);*/
+	g_oD3DAPP.Windowed = isWindowed;
 
 	return (FAILED(g_pDXDevice->Reset(&g_oD3DAPP)));
 }
@@ -424,21 +415,21 @@ SX_LIB_API void SGCore_OnResetDevice()
 	
 	struct  VERTEX_SCREEN_TEXTURE { float x, y, z, tx, ty, tz; };
 
-	const float offset_pixel_x = 1.0f / float(g_oD3DAPP.BackBufferWidth);
-	const float offset_pixel_y = 1.0f / float(g_oD3DAPP.BackBufferHeight);
+	const float fOffsetPixelX = 1.0f / float(g_oD3DAPP.BackBufferWidth);
+	const float fOffsetPixelY = 1.0f / float(g_oD3DAPP.BackBufferHeight);
 
-	VERTEX_SCREEN_TEXTURE AddVertices[] =
+	VERTEX_SCREEN_TEXTURE aVertices[] =
 	{
-		{ -1.0f - offset_pixel_x, -1.0f + offset_pixel_y, 1.0f, 0.0f, 1.0f, 0 },
-		{ -1.0f - offset_pixel_x, 1.0f + offset_pixel_y, 1.0f, 0.0f, 0.0f, 1 },
-		{ 1.0f - offset_pixel_x, 1.0f + offset_pixel_y, 1.0f, 1.0f, 0.0f, 2 },
-		{ 1.0f - offset_pixel_x, -1.0f + offset_pixel_y, 1.0f, 1.0f, 1.0f, 3 },
+		{ -1.0f - fOffsetPixelX, -1.0f + fOffsetPixelY, 1.0f, 0.0f, 1.0f, 0 },
+		{ -1.0f - fOffsetPixelX,  1.0f + fOffsetPixelY, 1.0f, 0.0f, 0.0f, 1 },
+		{  1.0f - fOffsetPixelX,  1.0f + fOffsetPixelY, 1.0f, 1.0f, 0.0f, 2 },
+		{  1.0f - fOffsetPixelX, -1.0f + fOffsetPixelY, 1.0f, 1.0f, 1.0f, 3 },
 	};
 
-	void* Vertices;
-	if (!FAILED(g_pScreenTexture->LockVertexBuffer(0, (void**)&Vertices)))
+	void * pVertices;
+	if (!FAILED(g_pScreenTexture->LockVertexBuffer(0, (void**)&pVertices)))
 	{
-		memcpy(Vertices, AddVertices, sizeof(AddVertices));
+		memcpy(pVertices, aVertices, sizeof(aVertices));
 		g_pScreenTexture->UnlockVertexBuffer();
 	}
 }
@@ -535,11 +526,11 @@ SX_LIB_API void SGCore_OC_SetEnable(bool isEnable)
 	g_isOCenable = isEnable;
 }
 
-const ISXFrustum *g_pFrustum = 0;
+const IFrustum *g_pFrustum = 0;
 int g_iOCcountFC = 0;
 int g_iOCcountFCfail = 0;
 
-SX_LIB_API void SGCore_OC_Update(ID idDepthMap, const ISXFrustum *pFrustum)
+SX_LIB_API void SGCore_OC_Update(ID idDepthMap, const IFrustum *pFrustum)
 {
 	SG_PRECOND(_VOID);
 
@@ -549,8 +540,7 @@ SX_LIB_API void SGCore_OC_Update(ID idDepthMap, const ISXFrustum *pFrustum)
 	g_pFrustum = pFrustum;
 	g_iOCcountFC = 0;
 	g_iOCcountFCfail = 0;
-
-	
+		
 
 	static const float *r_near = GET_PCVAR_FLOAT("r_near");
 	static const float *r_far = GET_PCVAR_FLOAT("r_far");
@@ -1436,198 +1426,212 @@ SX_LIB_API void SGCore_ShaderUnBind()
 	return g_pManagerShaders->unbind();
 }
 
-SX_LIB_API void SGCore_ShaderSetVRFN(SHADER_TYPE type_shader, const char* name_shader, const char* name_var, void* data, int count_float4)
+SX_LIB_API void SGCore_ShaderSetVRFN(SHADER_TYPE type_shader, const char *szNameShader, const char *szNameVar, void *pData, int iCountFloat4)
 {
 	SG_PRECOND(_VOID);
 
-	return g_pManagerShaders->setValueRegisterF(type_shader, name_shader, name_var, data, count_float4);
+	return g_pManagerShaders->setValueRegisterF(type_shader, szNameShader, szNameVar, pData, iCountFloat4);
 }
 
-SX_LIB_API void SGCore_ShaderSetVRF(SHADER_TYPE type_shader, ID num_shader, const char* name_var, void* data, int count_float4)
+SX_LIB_API void SGCore_ShaderSetVRF(SHADER_TYPE type_shader, ID idShader, const char *szNameVar, void *pData, int iCountFloat4)
 {
 	SG_PRECOND(_VOID);
 
-	return g_pManagerShaders->setValueRegisterF(type_shader, num_shader, name_var, data, count_float4);
+	return g_pManagerShaders->setValueRegisterF(type_shader, idShader, szNameVar, pData, iCountFloat4);
 }
 
-SX_LIB_API void SGCore_ShaderSetVRIN(SHADER_TYPE type_shader, const char* name_shader, const char* name_var, void* data, int count_int4)
+SX_LIB_API void SGCore_ShaderSetVRIN(SHADER_TYPE type_shader, const char *szNameShader, const char *szNameVar, void *pData, int iCountInt4)
 {
 	SG_PRECOND(_VOID);
 
-	return g_pManagerShaders->setValueRegisterI(type_shader, name_shader, name_var, data, count_int4);
+	return g_pManagerShaders->setValueRegisterI(type_shader, szNameShader, szNameVar, pData, iCountInt4);
 }
 
-SX_LIB_API void SGCore_ShaderSetVRI(SHADER_TYPE type_shader, ID num_shader, const char* name_var, void* data, int count_int4)
+SX_LIB_API void SGCore_ShaderSetVRI(SHADER_TYPE type_shader, ID idShader, const char* szNameVar, void *pData, int iCountInt4)
 {
 	SG_PRECOND(_VOID);
 
-	return g_pManagerShaders->setValueRegisterI(type_shader, num_shader, name_var, data, count_int4);
+	return g_pManagerShaders->setValueRegisterI(type_shader, idShader, szNameVar, pData, iCountInt4);
 }
 
 
-SX_LIB_API ID SGCore_ShaderExistsName(SHADER_TYPE type_shader, const char* name)
+SX_LIB_API ID SGCore_ShaderExistsName(SHADER_TYPE type_shader, const char *szName)
 {
 	SG_PRECOND(-1);
 
-	return g_pManagerShaders->existsName(type_shader, name);
+	return g_pManagerShaders->existsName(type_shader, szName);
 }
 
-SX_LIB_API ID SGCore_ShaderExistsPath(SHADER_TYPE type_shader, const char* name)
+SX_LIB_API ID SGCore_ShaderExistsPath(SHADER_TYPE type_shader, const char *szName)
 {
 	SG_PRECOND(-1);
 
-	return g_pManagerShaders->existsName(type_shader, name);
+	return g_pManagerShaders->existsName(type_shader, szName);
 }
 
-SX_LIB_API bool SGCore_ShaderIsValidated(SHADER_TYPE type_shader, ID id)
+SX_LIB_API bool SGCore_ShaderIsValidated(SHADER_TYPE type_shader, ID idShader)
 {
 	SG_PRECOND(0);
 
-	return g_pManagerShaders->isValidated(type_shader, id);
+	return g_pManagerShaders->isValidated(type_shader, idShader);
 }
 
-SX_LIB_API void SGCore_ShaderGetPath(SHADER_TYPE type_shader, ID id, char* path)
+SX_LIB_API void SGCore_ShaderGetPath(SHADER_TYPE type_shader, ID idShader, char *szPath)
 {
 	SG_PRECOND(_VOID);
 
-	g_pManagerShaders->getPath(type_shader, id, path);
+	g_pManagerShaders->getPath(type_shader, idShader, szPath);
 }
 
-SX_LIB_API void SGCore_ShaderGetName(SHADER_TYPE type_shader, ID id, char* name)
+SX_LIB_API void SGCore_ShaderGetName(SHADER_TYPE type_shader, ID idShader, char *szName)
 {
 	SG_PRECOND(_VOID);
 
-	g_pManagerShaders->getName(type_shader, id, name);
+	g_pManagerShaders->getName(type_shader, idShader, szName);
 }
 
-SX_LIB_API bool SGCore_ShaderFileExists(const char* name)
+SX_LIB_API bool SGCore_ShaderFileExists(const char *szName)
 {
 	SG_PRECOND(false);
 
-	return g_pManagerShaders->existsFile(name);
+	return g_pManagerShaders->existsFile(szName);
 }
 
 //##########################################################################
 
-SX_LIB_API bool SGCore_LoadTexFileExists(const char* name)
+SX_LIB_API bool SGCore_LoadTexFileExists(const char *szName)
 {
 	SG_PRECOND(false);
 
-	return g_pManagerTextures->FileExists(name);
+	return g_pManagerTextures->fileExists(szName);
 }
 
 SX_LIB_API void SGCore_LoadTexClearLoaded()
 {
 	SG_PRECOND(_VOID);
 
-	g_pManagerTextures->ClearLoaded();
+	g_pManagerTextures->clearLoaded();
 }
 
 SX_LIB_API void SGCore_LoadTexDelete(ID id)
 {
 	SG_PRECOND(_VOID);
 
-	g_pManagerTextures->Delete(id);
+	g_pManagerTextures->deleteTexture(id);
 }
 
-SX_LIB_API ID SGCore_LoadTexAddName(const char* name, LOAD_TEXTURE_TYPE type)
+SX_LIB_API ID SGCore_LoadTexAddName(const char *szName, LOAD_TEXTURE_TYPE type)
 {
 	SG_PRECOND(-1);
 
-	return g_pManagerTextures->AddName(name, type);
+	return g_pManagerTextures->addName(szName, type);
 }
 
-SX_LIB_API ID SGCore_LoadTexGetID(const char* name)
+SX_LIB_API ID SGCore_LoadTexAddConstAllInDir(const char *szDir)
+{
+	SG_PRECOND(false);
+
+	return g_pManagerTextures->addConstAllInDir(szDir);
+}
+
+SX_LIB_API ID SGCore_LoadTexGetID(const char *szName)
 {
 	SG_PRECOND(-1);
 
-	return g_pManagerTextures->GetID(name);
+	return g_pManagerTextures->getID(szName);
 }
 
-SX_LIB_API void SGCore_LoadTexGetName(ID id, char* name)
+SX_LIB_API void SGCore_LoadTexGetName(ID id, char *szName)
 {
 	SG_PRECOND(_VOID);
 
-	return g_pManagerTextures->GetName(id, name);
+	return g_pManagerTextures->getName(id, szName);
 }
 
-SX_LIB_API ID SGCore_LoadTexCreate(const char* name, IDirect3DTexture9* tex)
+SX_LIB_API ID SGCore_LoadTexCreate(const char *szName, IDirect3DTexture9 *pTex)
 {
 	SG_PRECOND(-1);
 
-	return g_pManagerTextures->Create(name, tex);
+	return g_pManagerTextures->create(szName, pTex);
 }
 
-SX_LIB_API ID SGCore_LoadTexUpdateN(const char* name, LOAD_TEXTURE_TYPE type)
+SX_LIB_API ID SGCore_LoadTexUpdateN(const char *szName, LOAD_TEXTURE_TYPE type)
 {
 	SG_PRECOND(-1);
 
-	return g_pManagerTextures->Update(name, type);
+	return g_pManagerTextures->update(szName, type);
 }
 
 SX_LIB_API void SGCore_LoadTexUpdate(ID id)
 {
 	SG_PRECOND(_VOID);
 
-	return g_pManagerTextures->Update(id);
+	return g_pManagerTextures->update(id);
+}
+
+SX_LIB_API IDirect3DTexture9* SGCore_LoadTexGetTex(ID idTexture)
+{
+	SG_PRECOND(0);
+
+	return g_pManagerTextures->getTexture2d(idTexture);
 }
 
-SX_LIB_API IDirect3DTexture9* SGCore_LoadTexGetTex(ID id)
+SX_LIB_API IDirect3DCubeTexture9* SGCore_LoadTexGetTexCube(ID idTexture)
 {
 	SG_PRECOND(0);
 
-	return g_pManagerTextures->GetTexture(id);
+	return g_pManagerTextures->getTextureCube(idTexture);
 }
 
 SX_LIB_API void SGCore_LoadTexAllLoad()
 {
 	SG_PRECOND(_VOID);
 
-	return g_pManagerTextures->LoadTextures();
+	return g_pManagerTextures->loadTextures();
 }
 
 //##########################################################################
 
-SX_LIB_API ID SGCore_RTAdd(UINT width, UINT height, UINT levels, DWORD usage, D3DFORMAT format, D3DPOOL pool, const char* name, float coeffullscreen)
+SX_LIB_API ID SGCore_RTAdd(UINT uiWidth, UINT uiHeight, UINT uiLevels, DWORD dwUsage, D3DFORMAT format, D3DPOOL pool, const char *szName, float fCoefFullScreen)
 {
 	SG_PRECOND(-1);
 
-	return g_pManagerRenderTargets->Add(width, height, levels, usage, format, pool, name, coeffullscreen);
+	return g_pManagerRenderTargets->Add(uiWidth, uiHeight, uiLevels, dwUsage, format, pool, szName, fCoefFullScreen);
 }
 
-SX_LIB_API void SGCore_RTDeleteN(const char* text)
+SX_LIB_API void SGCore_RTDeleteN(const char *szName)
 {
 	SG_PRECOND(_VOID);
 
-	return g_pManagerRenderTargets->Delete(text);
+	return g_pManagerRenderTargets->Delete(szName);
 }
 
-SX_LIB_API void SGCore_RTDelete(ID num)
+SX_LIB_API void SGCore_RTDelete(ID id)
 {
 	SG_PRECOND(_VOID);
 
-	return g_pManagerRenderTargets->Delete(num);
+	return g_pManagerRenderTargets->Delete(id);
 }
 
-SX_LIB_API ID SGCore_RTGetNum(const char* text)
+SX_LIB_API ID SGCore_RTGetId(const char *szName)
 {
 	SG_PRECOND(-1);
 
-	return g_pManagerRenderTargets->GetNum(text);
+	return g_pManagerRenderTargets->GetNum(szName);
 }
 
-SX_LIB_API IDirect3DTexture9* SGCore_RTGetTextureN(const char* text)
+SX_LIB_API IDirect3DTexture9* SGCore_RTGetTextureN(const char *szName)
 {
 	SG_PRECOND(0);
 
-	return g_pManagerRenderTargets->GetTexture(text);
+	return g_pManagerRenderTargets->GetTexture(szName);
 }
 
-SX_LIB_API IDirect3DTexture9* SGCore_RTGetTexture(ID num)
+SX_LIB_API IDirect3DTexture9* SGCore_RTGetTexture(ID id)
 {
 	SG_PRECOND(0);
 
-	return g_pManagerRenderTargets->GetTexture(num);
+	return g_pManagerRenderTargets->GetTexture(id);
 }
 
 //##########################################################################
@@ -1639,44 +1643,44 @@ SX_LIB_API void SGCore_FCreateCone(float fTopRadius, float fBottomRadius, float
 	CreateCone(fTopRadius, fBottomRadius, fHeight, ppMesh, g_pDXDevice, iSideCount);
 }
 
-SX_LIB_API void SGCore_FCompBoundBox(IDirect3DVertexBuffer9* vertex_buffer, ISXBound** bound, DWORD count_vert, DWORD bytepervert)
+SX_LIB_API void SGCore_FCompBoundBox(IDirect3DVertexBuffer9 *pVertexBuffer, ISXBound **ppBound, DWORD dwCountVertices, DWORD dwBytesPerVertex)
 {
 	SG_PRECOND(_VOID);
 
-	ComputeBoundingBox(vertex_buffer, bound, count_vert, bytepervert);
+	ComputeBoundingBox(pVertexBuffer, ppBound, dwCountVertices, dwBytesPerVertex);
 }
 
-SX_LIB_API void SGCore_FCompBoundBox2(IDirect3DVertexBuffer9* vertex_buffer, ISXBound* bound, DWORD count_vert, DWORD bytepervert)
+SX_LIB_API void SGCore_FCompBoundBox2(IDirect3DVertexBuffer9 *pVertexBuffer, ISXBound *pBound, DWORD dwCountVertices, DWORD dwBytesPerVertex)
 {
 	SG_PRECOND(_VOID);
 
-	ComputeBoundingBox2(vertex_buffer, bound, count_vert, bytepervert);
+	ComputeBoundingBox2(pVertexBuffer, pBound, dwCountVertices, dwBytesPerVertex);
 }
 
-SX_LIB_API void SGCore_FCreateBoundingBoxMesh(float3* min, float3* max, ID3DXMesh** bbmesh)
+SX_LIB_API void SGCore_FCreateBoundingBoxMesh(const float3 *pMin, const float3 *pMax, ID3DXMesh **ppBBmesh)
 {
 	SG_PRECOND(_VOID);
 
-	CreateBoundingBoxMesh(min, max, bbmesh,g_pDXDevice);
+	CreateBoundingBoxMesh(pMin, pMax, ppBBmesh, g_pDXDevice);
 }
 
-SX_LIB_API void SGCore_OptimizeIndecesInSubsetUint16(uint16_t* ib, uint16_t numFaces, uint16_t numVerts)
+SX_LIB_API void SGCore_OptimizeIndecesInSubsetUint16(uint16_t *pIndecesBuffer, uint16_t numFaces, uint16_t numVerts)
 {
 	SG_PRECOND(_VOID);
 
-	OptimizeIndecesInSubsetUint16(ib, numFaces, numVerts);
+	OptimizeIndecesInSubsetUint16(pIndecesBuffer, numFaces, numVerts);
 }
 
-SX_LIB_API void SGCore_OptimizeIndecesInSubsetUint32(uint32_t* ib, uint32_t numFaces, uint32_t numVerts)
+SX_LIB_API void SGCore_OptimizeIndecesInSubsetUint32(uint32_t *pIndecesBuffer, uint32_t numFaces, uint32_t numVerts)
 {
 	SG_PRECOND(_VOID);
 
-	OptimizeIndecesInSubsetUint32(ib, numFaces, numVerts);
+	OptimizeIndecesInSubsetUint32(pIndecesBuffer, numFaces, numVerts);
 }
 
 //##########################################################################
 
-SX_LIB_API bool SGCore_0InPos2D(float3* min, float3* max, float3* pos)
+SX_LIB_API bool SGCore_0InPos2D(const float3* min, const float3* max, const float3* pos)
 {
 	return InPosition2D(min, max, pos);
 }
@@ -1761,12 +1765,12 @@ SX_LIB_API bool SGCore_0InretsectBox(const float3 * min1, const float3 * max1, c
 
 //##########################################################################
 
-SX_LIB_API ISXFrustum* SGCore_CrFrustum()
+SX_LIB_API IFrustum* SGCore_CrFrustum()
 {
 	return new CFrustum();
 }
 
-SX_LIB_API ISXCamera* SGCore_CrCamera()
+SX_LIB_API ICamera* SGCore_CrCamera()
 {
 	return new CCamera();
 }
@@ -1850,7 +1854,7 @@ SX_LIB_API bool SGCore_SkyBoxIsLoadTex()
 SX_LIB_API void SGCore_SkyBoxLoadTex(const char *texture)
 {
 	SG_PRECOND_SKY_BOX(_VOID);
-	g_pSkyBox->loadTextures(texture);
+	g_pSkyBox->loadTexture(texture);
 }
 
 SX_LIB_API void SGCore_SkyBoxChangeTex(const char *texture)
@@ -1936,7 +1940,7 @@ SX_LIB_API void SGCore_SkyCloudsSetWidthHeightPos(float width, float height, con
 SX_LIB_API void SGCore_SkyCloudsLoadTex(const char *texture)
 {
 	SG_PRECOND_SKY_CLOUDS(_VOID);
-	g_pSkyClouds->loadTextures(texture);
+	g_pSkyClouds->loadTexture(texture);
 }
 
 SX_LIB_API void SGCore_SkyCloudsChangeTex(const char *texture)
diff --git a/source/gcore/sxgcore.h b/source/gcore/sxgcore.h
index 6c55acb29408aa5615b35051b72744dac35eae5c..47b1b1f420b3af7299f1da0dd828abeee1e853d8 100644
--- a/source/gcore/sxgcore.h
+++ b/source/gcore/sxgcore.h
@@ -59,7 +59,7 @@ See the license in LICENSE
 #define SXGC_ERR_NON_DETECTED_D3D -1
 #define SXGC_ERR_FAILED_INIT_D3D -2
 
-class ISXFrustum;
+class IFrustum;
 
 //! \name Базовые функции библиотеки 
 //!@{
@@ -260,7 +260,7 @@ SX_LIB_API void SGCore_SetFunc_MtlGroupRenderIsSingly(g_func_mtl_group_render_is
 SX_LIB_API void SGCore_OC_SetEnable(bool isEnable);
 
 //! обновление буфера глубины для теста, должна вызываться в старом кадре, к примеру после всего рендера (глубина и матрицы для текущего)
-SX_LIB_API void SGCore_OC_Update(ID idDepthMap, const ISXFrustum *pFrustum);
+SX_LIB_API void SGCore_OC_Update(ID idDepthMap, const IFrustum *pFrustum);
 
 //! репроекция глубины, должна вызываться в новом кадре до основного рендера всего того, что подвергается тесту на загороженность, матрицы должны быть от нового кадра
 SX_LIB_API void SGCore_OC_Reprojection();
@@ -319,16 +319,24 @@ SX_LIB_API bool SGCore_OC_IsVisible(const float3 *pMax, const float3 *pMin);
 //! типы шейдеров (int type_shader)
 enum SHADER_TYPE
 {
-	SHADER_TYPE_VERTEX,	//!< вершинный
-	SHADER_TYPE_PIXEL	//!< пиксельный
+	//! вершинный
+	SHADER_TYPE_VERTEX,	
+
+	//! пиксельный
+	SHADER_TYPE_PIXEL	
 };
 
 //! типы проверок дубликатов шейдеров
 enum SHADER_CHECKDOUBLE
 {
-	SHADER_CHECKDOUBLE_NONE,	//!< нет проверки
-	SHADER_CHECKDOUBLE_PATH,	//!< проверка по пути (имени шейдера с расширением)
-	SHADER_CHECKDOUBLE_NAME		//!< проверка по пользовательскому имени
+	//! нет проверки
+	SHADER_CHECKDOUBLE_NONE,	
+
+	//! проверка по пути (имени шейдера с расширением)
+	SHADER_CHECKDOUBLE_PATH,	
+
+	//! проверка по пользовательскому имени
+	SHADER_CHECKDOUBLE_NAME		
 };
 
 //**************************************************************************
@@ -474,10 +482,18 @@ SX_LIB_API void SGCore_ShaderSetVRI(
 /*! \name Типы материалов
 !@{*/
 
-#define MTL_TYPE_GEOM 0		/*!< статическая геометрия */
-#define MTL_TYPE_GRASS 1	/*!< растительность - трава */
-#define MTL_TYPE_TREE 2		/*!< растительность - деревья */
-#define MTL_TYPE_SKIN 3		/*!< скелетная модель */
+//! статическая геометрия
+#define MTL_TYPE_GEOM 0		
+
+//! растительность - трава
+#define MTL_TYPE_GRASS 1	
+
+//! растительность - деревья 
+#define MTL_TYPE_TREE 2		
+
+//! скелетная модель
+#define MTL_TYPE_SKIN 3	
+
 //#define MTL_LIGHT 4
 
 //!@}
@@ -485,9 +501,14 @@ SX_LIB_API void SGCore_ShaderSetVRI(
 //! типы текстур
 enum LOAD_TEXTURE_TYPE
 {
-	LOAD_TEXTURE_TYPE_LOAD,		//!< загружаемая
-	LOAD_TEXTURE_TYPE_CONST,	//!< неудаляемая загружаемая
-	LOAD_TEXTURE_TYPE_CUSTOM,	//!< созданная пользователем
+	//! загружаемая
+	LOAD_TEXTURE_TYPE_LOAD,		
+
+	//! неудаляемая загружаемая
+	LOAD_TEXTURE_TYPE_CONST,	
+
+	//! созданная пользователем
+	LOAD_TEXTURE_TYPE_CUSTOM,	
 
 	/*! самоопределение типа, на тот случай когда обновляем текстуру которая точно есть.
 	Если определить этот тип, а внутри у текстуры на самом деле нет типа (скорее всего нет текстуры)
@@ -510,6 +531,8 @@ SX_LIB_API void SGCore_LoadTexDelete(ID idTexture);
 //! добавляем имя текстуры, взамен получаем на нее ID (поставить в очередь)
 SX_LIB_API ID SGCore_LoadTexAddName(const char *szName, LOAD_TEXTURE_TYPE type);
 
+SX_LIB_API ID SGCore_LoadTexAddConstAllInDir(const char *szDir);
+
 //! получить id по имени
 SX_LIB_API ID SGCore_LoadTexGetID(const char *szName);
 
@@ -534,6 +557,9 @@ SX_LIB_API void SGCore_LoadTexUpdate(ID idTexture);
 //! возвращает текстуру по id
 SX_LIB_API IDirect3DTexture9* SGCore_LoadTexGetTex(ID idTexture);
 
+//! возвращает текстуру по id
+SX_LIB_API IDirect3DCubeTexture9* SGCore_LoadTexGetTexCube(ID idTexture);
+
 //! загрузка всех текстур поставленных в очередь, если есть очередь
 SX_LIB_API void SGCore_LoadTexAllLoad();	
 
@@ -569,7 +595,7 @@ SX_LIB_API void SGCore_RTDeleteN(const char *szName);
 SX_LIB_API void SGCore_RTDelete(ID id);				
 
 //! возвращает id по имени
-SX_LIB_API ID SGCore_RTGetNum(const char *szName);
+SX_LIB_API ID SGCore_RTGetId(const char *szName);
 
 //! возвращает текстуру по имени
 SX_LIB_API IDirect3DTexture9* SGCore_RTGetTextureN(const char *szName);
@@ -806,7 +832,7 @@ SX_LIB_API void SGCore_FCompBoundBox(
 	);
 
 //! создание меша (ID3DXMesh) ограничивающего объема
-SX_LIB_API void SGCore_FCreateBoundingBoxMesh(float3* min, float3* max, ID3DXMesh** bbmesh);
+SX_LIB_API void SGCore_FCreateBoundingBoxMesh(const float3* min, const float3* max, ID3DXMesh** bbmesh);
 
 /*! \name Оптимизация индексных буферов
 @{*/
@@ -839,37 +865,37 @@ Abs - абсолютное нахождение внутри, не на гран
 @{*/
 
 //! находится ли точка pos в пределах [min,max] по осям x z
-SX_LIB_API bool SGCore_0InPos2D(float3* min, float3* max, float3* pos);		
+SX_LIB_API bool SGCore_0InPos2D(const float3 *pMin, const float3 *pMax, const float3 *pPos);
 
 //! находится ли точка pos в пределах (min,max) по осям x z
-SX_LIB_API bool SGCore_0InPosAbs2D(float3* min, float3* max, float3* pos);	
+SX_LIB_API bool SGCore_0InPosAbs2D(float3 *pMin, float3 *pMax, float3 *pPos);
 
 
 //! возвращает количество точек (p1,p2,p3) лежащих в пределах [min,max]  по осям x z
-SX_LIB_API int SGCore_0CountPosPoints2D(float3* min, float3* max, float3* p1, float3* p2, float3* p3);
+SX_LIB_API int SGCore_0CountPosPoints2D(float3 *pMin, float3 *pMax, float3 *p1, float3 *p2, float3 *p3);
 
 //! возвращает количество точек (p1,p2,p3) лежащих в пределах (min,max)  по осям x z
-SX_LIB_API int SGCore_0CountPosPointsAbs2D(float3* min, float3* max, float3* p1, float3* p2, float3* p3);
+SX_LIB_API int SGCore_0CountPosPointsAbs2D(float3 *pMin, float3 *pMax, float3 *p1, float3 *p2, float3 *p3);
 
 //! лежит ли хотя бы одна точка абсолютно в (min,max) или хотя бы 2 точки в пределах [min,max], из числа трех точек p1,p2,p3, по осям x z
-SX_LIB_API bool SGCore_0InPosPoints2D(float3* min, float3* max, float3* p1, float3* p2, float3* p3);
+SX_LIB_API bool SGCore_0InPosPoints2D(float3 *pMin, float3 *pMax, float3 *p1, float3 *p2, float3 *p3);
 
 
 //! находится ли точка pos в пределах [min,max]
-SX_LIB_API bool SGCore_0InPos3D(float3* min, float3* max, float3* pos);		
+SX_LIB_API bool SGCore_0InPos3D(float3 *pMin, float3 *pMax, float3 *pPos);
 
 //! находится ли точка pos в пределах (min,max)
-SX_LIB_API bool SGCore_0InPosAbs3D(float3* min, float3* max, float3* pos);	
+SX_LIB_API bool SGCore_0InPosAbs3D(float3 *pMin, float3 *pMax, float3 *pPos);
 
 
 //! возвращает количество точек (p1,p2,p3) лежащих в пределах [min,max]
-SX_LIB_API int SGCore_0CountPosPoints3D(float3* min, float3* max, float3* p1, float3* p2, float3* p3);
+SX_LIB_API int SGCore_0CountPosPoints3D(float3 *pMin, float3 *pMax, float3 *p1, float3 *p2, float3 *p3);
 
 //! возвращает количество точек (p1,p2,p3) лежащих в пределах (min,max)
-SX_LIB_API int SGCore_0CountPosPointsAbs3D(float3* min, float3* max, float3* p1, float3* p2, float3* p3);
+SX_LIB_API int SGCore_0CountPosPointsAbs3D(float3 *pMin, float3 *pMax, float3 *p1, float3 *p2, float3 *p3);
 
 //! лежит ли хотя бы одна точка абсолютно в (min,max) или хотя бы 2 точки в пределах [min,max], из числа трех точек p1,p2,p3
-SX_LIB_API bool SGCore_0InPosPoints3D(float3* min, float3* max, float3* p1, float3* p2, float3* p3);
+SX_LIB_API bool SGCore_0InPosPoints3D(float3 *pMin, float3 *pMax, float3 *p1, float3 *p2, float3 *p3);
 
 //!@}
 
@@ -878,43 +904,46 @@ SX_LIB_API bool SGCore_0InPosPoints3D(float3* min, float3* max, float3* p1, floa
 /*! кубическое (octo) деление объема (по всем трем осям)
  \warning массивы и объекты должны быть заранее инициализированны
  */
-SX_LIB_API void SGCore_0ComBoundBoxArr8(ISXBound* bound, ISXBound** bound_arr);
+SX_LIB_API void SGCore_0ComBoundBoxArr8(ISXBound *pBound, ISXBound **ppBoundArr);
 
 /*! квадратичное (quad) деление объема (по двум осям x и z)
  \warning массивы и объекты должны быть заранее инициализированны
 */
-SX_LIB_API void SGCore_0ComBoundBoxArr4(ISXBound* bound, ISXBound** bound_arr);
+SX_LIB_API void SGCore_0ComBoundBoxArr4(ISXBound *pBound, ISXBound **ppBoundArr);
 
 //! находит квадрат расстояния между лучем и точкой
-SX_LIB_API float SGCore_0DistancePointBeam2(const float3 & p, const float3 & start, const float3 & dir);
+SX_LIB_API float SGCore_0DistancePointBeam2(const float3 &vPoint, const float3 &vStart, const float3 &vDir);
 
 //! возвращает пересекаются ли боксы или нет
-SX_LIB_API bool SGCore_0InretsectBox(const float3 * min1, const float3 * max1, const float3 * min2, const float3 * max2);
+SX_LIB_API bool SGCore_0InretsectBox(const float3 *pMin1, const float3 *pMax1, const float3 *pMin2, const float3 *pMax2);
 
-struct SXTriangle
+struct CTriangle
 {
-	float3_t a;
-	float3_t b;
-	float3_t c;
-	SXTriangle()
+	float3_t m_vA;
+	float3_t m_vB;
+	float3_t m_vC;
+
+	CTriangle()
 	{
 	};
-	SXTriangle(float3_t _a, float3_t _b, float3_t _c) :a(_a), b(_b), c(_c)
+	CTriangle(float3_t vA, float3_t vB, float3_t vC) :m_vA(vA), m_vB(vB), m_vC(vC)
 	{
 	};
 
 	//Проверкка пересечения треугольника и отрезка
 	bool IntersectLine(const float3 & l1, const float3 &l2, float3 * p)
 	{
-		float3 n = SMVector3Normalize(SMVector3Cross((b - a), (c - b)));
-		float d1 = SMVector3Dot((l1 - a), n) / SMVector3Length(n);
-		float d2 = SMVector3Dot((l2 - a), n) / SMVector3Length(n);
+		float3 n = SMVector3Normalize(SMVector3Cross((m_vB - m_vA), (m_vC - m_vB)));
+		float d1 = SMVector3Dot((l1 - m_vA), n) / SMVector3Length(n);
+		float d2 = SMVector3Dot((l2 - m_vA), n) / SMVector3Length(n);
+
 		if ((d1 > 0 && d2 > 0) || (d1 < 0 && d2 < 0))
 			return(false);
+
 		*p = l1 + (l2 - l1) * (-d1 / (d2 - d1));
-		if (SMVector3Dot(SMVector3Cross((b - a), (*p - a)), n) <= 0) return(false);
-		if (SMVector3Dot(SMVector3Cross((c - b), (*p - b)), n) <= 0) return(false);
-		if (SMVector3Dot(SMVector3Cross((a - c), (*p - c)), n) <= 0) return(false);
+		if (SMVector3Dot(SMVector3Cross((m_vB - m_vA), (*p - m_vA)), n) <= 0) return(false);
+		if (SMVector3Dot(SMVector3Cross((m_vC - m_vB), (*p - m_vB)), n) <= 0) return(false);
+		if (SMVector3Dot(SMVector3Cross((m_vA - m_vC), (*p - m_vC)), n) <= 0) return(false);
 		return(true);
 	}
 };
@@ -932,7 +961,7 @@ struct SXTriangle
 */
 
 //! структура описание плоскости
-struct CSXFrustumPlane
+struct CFrustumPlane
 {
 	float3_t m_vNormal;
 	float m_fDistance;
@@ -950,10 +979,10 @@ struct CSXFrustumPlane
 };
 
 //! класс описывающий фрустум
-class ISXFrustum : public IBaseObject
+class IFrustum : public IBaseObject
 {
 public:
-	virtual ~ISXFrustum(){};
+	virtual ~IFrustum(){};
 
 	SX_ALIGNED_OP_MEM
 
@@ -997,15 +1026,15 @@ public:
 };
 
 //! создать ISXFrustum
-SX_LIB_API ISXFrustum* SGCore_CrFrustum(); 
+SX_LIB_API IFrustum* SGCore_CrFrustum(); 
 
 //**************************************************************************
 
 //! камера
-class ISXCamera : public IBaseObject
+class ICamera : public IBaseObject
 {
 public:
-	virtual ~ISXCamera(){};
+	virtual ~ICamera(){};
 
 	SX_ALIGNED_OP_MEM
 
@@ -1092,11 +1121,11 @@ public:
 	virtual void updateFrustum(const float4x4 *mProjection) = 0;
 
 	//! возвращает константный указатель фрустума
-	virtual const ISXFrustum* getFrustum() = 0;
+	virtual const IFrustum* getFrustum() = 0;
 };
 
 //! создать ISXCamera
-SX_LIB_API ISXCamera* SGCore_CrCamera();	
+SX_LIB_API ICamera* SGCore_CrCamera();	
 
 //!@} sxgcore_camera
 
diff --git a/source/geom/green.cpp b/source/geom/green.cpp
index bf97f943ad51defc357128830b2d7526c19aaf94..a72aa0fa9fe64d68dd9cb0e20d45bb05b6d7c941 100644
--- a/source/geom/green.cpp
+++ b/source/geom/green.cpp
@@ -637,7 +637,7 @@ void CGreen::ComputeBBtrans(ID idGreen)
 	}
 }
 
-void CGreen::comArrIndeces(const ISXFrustum* frustum, const float3* viewpos, ID id_arr)
+void CGreen::comArrIndeces(const IFrustum* frustum, const float3* viewpos, ID id_arr)
 {
 	GREEN_PRECOND_ARRCOMFOR_ERR_ID(id_arr);
 
@@ -670,7 +670,7 @@ void CGreen::comArrIndeces(const ISXFrustum* frustum, const float3* viewpos, ID
 	int qwert = 0;
 }
 
-void CGreen::comRecArrIndeces(ID idGreen, ID idArr, const ISXFrustum* frustum, CSegment** arrsplits, int *count, CSegment* comsegment, const float3* viewpos, Array<CSegment*, GREEN_DEFAULT_RESERVE_COM>* queue, ID curr_splits_ids_render)
+void CGreen::comRecArrIndeces(ID idGreen, ID idArr, const IFrustum* frustum, CSegment** arrsplits, int *count, CSegment* comsegment, const float3* viewpos, Array<CSegment*, GREEN_DEFAULT_RESERVE_COM>* queue, ID curr_splits_ids_render)
 {
 	float3 jcenter;
 	float jradius;
@@ -1044,7 +1044,7 @@ ID CGreen::init(CStaticGeom* geom, const char* name,
 	const char* path, const char* lod1, const char* lod2, 
 	const char* navmesh)
 {
-	if (geom->getCountModel() > 0 && def_str_validate(path))
+	if (geom->getCountModel() > 0 && STR_VALIDATE(path))
 	{
 		CModel* tmpnewmpdel = new CModel();
 		sprintf(tmpnewmpdel->m_szName, name);
@@ -1070,7 +1070,7 @@ ID CGreen::init(CStaticGeom* geom, const char* name,
 			tmpnewmpdel->m_aLods[0]->m_aIDsTextures[i] = SGCore_MtlLoad(tmppathtex, (tmpnewmpdel->m_typeGreen == GREEN_TYPE_TREE ? MTL_TYPE_TREE : MTL_TYPE_GRASS));
 		}
 
-		if (def_str_validate(lod1))
+		if (STR_VALIDATE(lod1))
 		{
 			if (stricmp(path, lod1) == 0)
 				tmpnewmpdel->m_aLods[1] = tmpnewmpdel->m_aLods[0];
@@ -1089,7 +1089,7 @@ ID CGreen::init(CStaticGeom* geom, const char* name,
 			}
 		}
 
-		if (def_str_validate(lod2))
+		if (STR_VALIDATE(lod2))
 		{
 			if (stricmp(path, lod2) == 0)
 				tmpnewmpdel->m_aLods[2] = tmpnewmpdel->m_aLods[0];
@@ -1120,7 +1120,7 @@ ID CGreen::init(CStaticGeom* geom, const char* name,
 		float3 tmpmin, tmpmax;
 		geom->getMinMax(&tmpmin, &tmpmax);
 
-		if (def_str_validate(path_mask))
+		if (STR_VALIDATE(path_mask))
 		{
 			ID IDTexMask = SGCore_LoadTexAddName(path_mask, LOAD_TEXTURE_TYPE_LOAD);
 			SGCore_LoadTexAllLoad();
@@ -1137,7 +1137,7 @@ ID CGreen::init(CStaticGeom* geom, const char* name,
 
 		ComputeBBtrans(m_aGreens.size() - 1);
 
-		if (def_str_validate(navmesh))
+		if (STR_VALIDATE(navmesh))
 		{
 			setGreenNav(m_aGreens.size() - 1, navmesh);
 		}
@@ -2309,7 +2309,7 @@ bool CGreen::traceBeam(const float3* start, const float3* dir, float3* _res, ID*
 	if (m_aGreens.size() <= 0)
 		return false;
 
-	SXTriangle tmptri;
+	CTriangle tmptri;
 	bool tmpiscom = true;
 	float3 ip;
 	float3 res;
@@ -2354,9 +2354,9 @@ bool CGreen::traceBeam(const float3* start, const float3* dir, float3* _res, ID*
 						float tmpscale = oDataVertex.m_vTexCoord.x;
 						mat = SMMatrixScaling(tmpscale, tmpscale, tmpscale) * SMMatrixRotationY(oDataVertex.m_vTexCoord.y) * SMMatrixTranslation(oDataVertex.m_vPosition);
 
-						tmptri.a = SMVector3Transform(pVertData[pIndData[poly]].Pos, mat);
-						tmptri.b = SMVector3Transform(pVertData[pIndData[poly + 1]].Pos, mat);
-						tmptri.c = SMVector3Transform(pVertData[pIndData[poly + 2]].Pos, mat);
+						tmptri.m_vA = SMVector3Transform(pVertData[pIndData[poly]].Pos, mat);
+						tmptri.m_vB = SMVector3Transform(pVertData[pIndData[poly + 1]].Pos, mat);
+						tmptri.m_vC = SMVector3Transform(pVertData[pIndData[poly + 2]].Pos, mat);
 
 						if (tmptri.IntersectLine((*start), il, &ip))
 						{
diff --git a/source/geom/green.h b/source/geom/green.h
index 738632d8282a30557e8ab86e9e096071e55f04a6..b4f265b760331b581e45288eea2ac044139a4143 100644
--- a/source/geom/green.h
+++ b/source/geom/green.h
@@ -100,7 +100,7 @@ public:
 	void save(const char *szPath);
 	void load(const char *szPath);
 	void clear();
-	void comArrIndeces(const ISXFrustum *pFrustum, const float3 *pViewPos, ID idArr = 0);
+	void comArrIndeces(const IFrustum *pFrustum, const float3 *pViewPos, ID idArr = 0);
 	void render(DWORD timeDelta, const float3 *pViewPos, GREEN_TYPE type, ID idArr = 0);
 	void renderSingly(DWORD timeDelta, const float3 *pViewPos, ID id, ID idTexture);
 	void renderObject(DWORD timeDelta, const float3 *pViewPos, ID id, ID idSplit, ID idObj, ID idTexture);
@@ -299,7 +299,7 @@ protected:
 	void getPartBeam(const float3 *pPos, const float3 *pDir, CSegment **ppArrSplits, int *pCount, CSegment *pSegment, ID idCurrSplitRender);
 	void getPartBB(float3 *pMin, float3 *pMax, CSegment **ppArrSplits, int *pCount, CSegment *pSegment, ID idCurrSplitRender);
 
-	void comRecArrIndeces(ID idGreen, ID idArr, const ISXFrustum *pFrustum, CSegment **ppArrSplits, int *pCount, CSegment *pSegment, const float3 *pViewPos, Array<CSegment*, GREEN_DEFAULT_RESERVE_COM> *pQueue, ID idCurrSplitRender);
+	void comRecArrIndeces(ID idGreen, ID idArr, const IFrustum *pFrustum, CSegment **ppArrSplits, int *pCount, CSegment *pSegment, const float3 *pViewPos, Array<CSegment*, GREEN_DEFAULT_RESERVE_COM> *pQueue, ID idCurrSplitRender);
 
 	void addModelInArrCom(ID idModel);
 	void deleteModelInArrCom(ID idModel);
diff --git a/source/geom/static_geom.cpp b/source/geom/static_geom.cpp
index e1fc0c5c3b493ef061f26593ac6766b2a6f39d7d..63cb685a383bc0495833e4b06ec4e5ca58654774 100644
--- a/source/geom/static_geom.cpp
+++ b/source/geom/static_geom.cpp
@@ -239,7 +239,7 @@ ID CStaticGeom::addModel(const char* path, const char* lod1, const char* name)
 
 	CModel* tmpmodel = new CModel();
 	ID tmpidmodel = m_aAllModels.size() - 1;
-	if (!def_str_validate(name))
+	if (!STR_VALIDATE(name))
 		sprintf(tmpmodel->m_szName, "");
 	else
 		sprintf(tmpmodel->m_szName, "%s", name);
@@ -990,7 +990,7 @@ void CStaticGeom::initArrIndexPtr()
 }
 
 
-void CStaticGeom::comArrIndeces(const ISXFrustum* frustum, const float3* viewpos, ID id_arr)
+void CStaticGeom::comArrIndeces(const IFrustum* frustum, const float3* viewpos, ID id_arr)
 {
 	STATIC_PRECOND_ARRCOMFOR_ERR_ID(id_arr);
 
@@ -1043,7 +1043,7 @@ void CStaticGeom::comArrIndeces(const ISXFrustum* frustum, const float3* viewpos
 	}
 }
 
-void CStaticGeom::comRecArrIndeces(ID idArr, const ISXFrustum* frustum, CSegment** arrsplits, int *count, CSegment* comsegment, const float3* viewpos, Array<CSegment*, GEOM_DEFAULT_RESERVE_COM>* queue, ID curr_splits_ids_render)
+void CStaticGeom::comRecArrIndeces(ID idArr, const IFrustum* frustum, CSegment** arrsplits, int *count, CSegment* comsegment, const float3* viewpos, Array<CSegment*, GEOM_DEFAULT_RESERVE_COM>* queue, ID curr_splits_ids_render)
 {
 	float jradius;
 	float3 jcenter;
@@ -2950,7 +2950,7 @@ const char* CStaticGeom::getModelLodPath(ID id)
 
 void CStaticGeom::setModelLodPath(ID id, const char* path)
 {
-	if (id < m_aAllModels.size() && def_str_validate(path))
+	if (id < m_aAllModels.size() && STR_VALIDATE(path))
 	{
 		mem_delete(m_aAllModels[id]->m_oLod0.m_pModel);
 		m_aAllModels[id]->m_oLod0.m_aIDsTextures.clear();
@@ -3335,7 +3335,7 @@ bool CStaticGeom::traceBeam(const float3* start, const float3* dir, float3* _res
 	if (m_aAllModels.size() <= 0)
 		return false;
 
-	SXTriangle tmptri;
+	CTriangle tmptri;
 	bool tmpiscom = true;
 	float3 ip;
 	float3 res;
@@ -3363,9 +3363,9 @@ bool CStaticGeom::traceBeam(const float3* start, const float3* dir, float3* _res
 
 				for (DWORD numpoly = 0; numpoly<m_aArrComFor[1]->m_aIRS[id]->m_ppSegments[k]->m_pCountPoly[group] * 3; numpoly += 3)
 				{
-					tmptri.a = pData[m_aArrComFor[1]->m_aIRS[id]->m_ppSegments[k]->m_ppArrPoly[group][numpoly]].Pos;
-					tmptri.b = pData[m_aArrComFor[1]->m_aIRS[id]->m_ppSegments[k]->m_ppArrPoly[group][numpoly + 1]].Pos;
-					tmptri.c = pData[m_aArrComFor[1]->m_aIRS[id]->m_ppSegments[k]->m_ppArrPoly[group][numpoly + 2]].Pos;
+					tmptri.m_vA = pData[m_aArrComFor[1]->m_aIRS[id]->m_ppSegments[k]->m_ppArrPoly[group][numpoly]].Pos;
+					tmptri.m_vB = pData[m_aArrComFor[1]->m_aIRS[id]->m_ppSegments[k]->m_ppArrPoly[group][numpoly + 1]].Pos;
+					tmptri.m_vC = pData[m_aArrComFor[1]->m_aIRS[id]->m_ppSegments[k]->m_ppArrPoly[group][numpoly + 2]].Pos;
 
 					if (tmptri.IntersectLine((*start), il, &ip))
 					{
diff --git a/source/geom/static_geom.h b/source/geom/static_geom.h
index 6d8526329aa1b1aa59491ab83e4d62d9a0281d2c..b3f9df38b435126ecfb5da074c71263756ab509c 100644
--- a/source/geom/static_geom.h
+++ b/source/geom/static_geom.h
@@ -355,7 +355,7 @@ public:
 	
 	int getCountModel();
 
-	void comArrIndeces(const ISXFrustum *pFrustum, const float3 *pViewPos, ID idArr = 0);
+	void comArrIndeces(const IFrustum *pFrustum, const float3 *pViewPos, ID idArr = 0);
 	bool getIntersectedRayY(float3 *pPos);
 
 	bool sortExistsForRender(int iSortMtl, ID idArr = 0);
@@ -468,7 +468,7 @@ protected:
 
 	void getIntersectedRayY2(float3 *pPos, CSegment **ppSplits, int *iCount, CSegment *pSegment, ID idCurrSplitRender);
 
-	void comRecArrIndeces(ID idArr, const ISXFrustum *pFrustum, CSegment **ppSplits, int *iCount, CSegment *pSegment, const float3 *pViewPos, Array<CSegment*, GEOM_DEFAULT_RESERVE_COM> *pQueue, ID idCurrSplitRender);
+	void comRecArrIndeces(ID idArr, const IFrustum *pFrustum, CSegment **ppSplits, int *iCount, CSegment *pSegment, const float3 *pViewPos, Array<CSegment*, GEOM_DEFAULT_RESERVE_COM> *pQueue, ID idCurrSplitRender);
 
 	//*************************************************************************
 
diff --git a/source/geom/sxgeom.cpp b/source/geom/sxgeom.cpp
index 3e7b1551a544f5bd66aff962d5193fea4f636c1b..500fb5749a59a7c8ef1baf7b065e6c66ad4cbb3d 100644
--- a/source/geom/sxgeom.cpp
+++ b/source/geom/sxgeom.cpp
@@ -201,7 +201,7 @@ SX_LIB_API int SGeom_ModelsGetCount()
 	return g_pGeometry->getCountModel();
 }
 
-SX_LIB_API void SGeom_ModelsComVisible(const ISXFrustum *pFrustum, const float3 *pViewPos, ID idArr)
+SX_LIB_API void SGeom_ModelsComVisible(const IFrustum *pFrustum, const float3 *pViewPos, ID idArr)
 {
 	GEOM_PRECOND(_VOID);
 	g_pGeometry->comArrIndeces(pFrustum, pViewPos, idArr);
@@ -477,7 +477,7 @@ SX_LIB_API void SGeom_GreenClear()
 	g_pGreen->clear();
 }
 
-SX_LIB_API void SGeom_GreenComVisible(const ISXFrustum* frustum, float3 *pViewPos, ID idArr)
+SX_LIB_API void SGeom_GreenComVisible(const IFrustum* frustum, float3 *pViewPos, ID idArr)
 {
 	GEOM_PRECOND(_VOID);
 	g_pGreen->comArrIndeces(frustum, pViewPos, idArr);
diff --git a/source/geom/sxgeom.h b/source/geom/sxgeom.h
index 6be504c2b2941c4e2dda35cdbf5d8831a0600cc8..818c29a060972a7707b5f1e1c193917c072ed7ac 100644
--- a/source/geom/sxgeom.h
+++ b/source/geom/sxgeom.h
@@ -186,7 +186,7 @@ SX_LIB_API int SGeom_ModelsGetCount();
 
 //! просчитать видимость всех моделей для фрустума 
 SX_LIB_API void SGeom_ModelsComVisible(	
-	const ISXFrustum *pFrustum,	//!< фрустум для которого считаем видимость моделей
+	const IFrustum *pFrustum,	//!< фрустум для которого считаем видимость моделей
 	const float3 *pViewPos,		//!< позиция источника фрустума чтобы просчитать дистанцию
 	ID idArr = 0				//!< идентификатор массива информации о видимости для фрустума, создается через #SGeom_ModelsAddArrForCom, если 0 то считаем в дефолтный
 	);	
@@ -533,7 +533,7 @@ SX_LIB_API void SGeom_GreenClear();
 
 //! просчитать видимость всей растительности для фрустума
 SX_LIB_API void SGeom_GreenComVisible(
-	const ISXFrustum *pFrustum,	//!< фрустум для которого считаем видимость моделей
+	const IFrustum *pFrustum,	//!< фрустум для которого считаем видимость моделей
 	float3 *pViewPos,			//!< позиция источника фрустума чтобы просчитать дистанцию
 	ID idArr = 0				//!< идентификатор массива информации о видимости для фрустума, создается через #SGeom_ModelsAddArrForCom, если 0 то считаем в дефолтный
 	);
diff --git a/source/mtllight/light.cpp b/source/mtllight/light.cpp
index 24e6501ef27ce3209c27ce21374ad23ffb1ffcec..d9fdb6a22679e0d165579e2600e3f3e94d908bcd 100644
--- a/source/mtllight/light.cpp
+++ b/source/mtllight/light.cpp
@@ -6,7 +6,7 @@ See the license in LICENSE
 
 #include "light.h"
 
-Lights::Lights()
+CLights::CLights()
 {
 	HowShadow = 0;
 
@@ -20,7 +20,7 @@ Lights::Lights()
 	m_isCastGlobalShadow = false;
 }
 
-Lights::~Lights()
+CLights::~CLights()
 {
 	for (int i = 0; i < ArrLights.size(); ++i)
 	{
@@ -33,7 +33,7 @@ Lights::~Lights()
 	SGCore_RTDelete(ShadowMap2);
 }
 
-ID Lights::CreateCopy(ID id)
+ID CLights::createCopy(ID id)
 {
 	LIGHTS_PRE_COND_ID(id,-1);
 	
@@ -116,10 +116,10 @@ ID Lights::CreateCopy(ID id)
 
 		tmplight->Mesh->CloneMeshFVF(tmplight->Mesh->GetOptions(), tmplight->Mesh->GetFVF(), MLSet::DXDevice, &(tmplight2->Mesh));
 
-	return AddLight(tmplight);
+	return addLight(tmplight);
 }
 
-Lights::Light::Light()
+CLights::Light::Light()
 {
 	TypeLight = LTYPE_LIGHT_NONE;
 	Name[0] = 0;
@@ -148,7 +148,7 @@ Lights::Light::Light()
 	ShadowCube = 0;
 }
 
-Lights::Light::~Light()
+CLights::Light::~Light()
 {
 	mem_release_del(Mesh);
 	mem_release_del(BoundVolume);
@@ -158,7 +158,7 @@ Lights::Light::~Light()
 	mem_delete(ShadowCube);
 }
 
-void Lights::OnLostDevice()
+void CLights::onLostDevice()
 {
 	for (int i = 0; i < ArrLights.size(); ++i)
 	{
@@ -171,7 +171,7 @@ void Lights::OnLostDevice()
 	}
 }
 
-void Lights::OnResetDevice()
+void CLights::onResetDevice()
 {
 	for (int i = 0; i < ArrLights.size(); ++i)
 	{
@@ -182,11 +182,11 @@ void Lights::OnResetDevice()
 		else if (ArrLights[i]->ShadowPSSM)
 			ArrLights[i]->ShadowPSSM->OnResetDevice();
 
-		LightCountUpdateNull(i);
+		lightCountUpdateNull(i);
 	}
 }
 
-ID Lights::AddLight(Light* obj)
+ID CLights::addLight(Light* obj)
 {
 	ID idadd = -1;
 
@@ -205,12 +205,12 @@ ID Lights::AddLight(Light* obj)
 	return obj->Id;
 }
 
-int Lights::GetCountLights() const 
+int CLights::getCountLights() const 
 {
 	return ArrLights.size();
 }
 
-void Lights::Clear()
+void CLights::clear()
 {
 	for (int i = 0; i < ArrLights.size(); ++i)
 	{
@@ -221,7 +221,7 @@ void Lights::Clear()
 	GlobalLight = -1;
 }
 
-void Lights::ClearIDArr()
+void CLights::clearIDArr()
 {
 	for (int i = 0; i < ArrLights.size(); ++i)
 	{
@@ -261,12 +261,12 @@ void Lights::ClearIDArr()
 	}
 }
 
-bool Lights::getExists(ID id) const
+bool CLights::getExists(ID id) const
 {
 	return (ArrLights.size() > id && ArrLights[id]);
 }
 
-void Lights::DeleteLight(ID id)
+void CLights::deleteLight(ID id)
 {
 	LIGHTS_PRE_COND_ID(id, _VOID);
 
@@ -280,24 +280,27 @@ void Lights::DeleteLight(ID id)
 	ArrFreeIDs.push_back(id);
 }
 
-char* Lights::GetLightName(ID id)
+char* CLights::getLightName(ID id)
 {
 	LIGHTS_PRE_COND_ID(id, 0);
 	return ArrLights[id]->Name;
 }
 
-void Lights::SetLightName(ID id, const char* name)
+void CLights::setLightName(ID id, const char* name)
 {
 	LIGHTS_PRE_COND_ID(id, _VOID);
 	sprintf(ArrLights[id]->Name, "%s", name);
 }
 
-ID Lights::CreatePoint(ID id, const float3* center, float dist, const float3* color, bool isglobal, bool is_shadow/*, const char* bound_volume*/)
+ID CLights::createPoint(ID id, const float3* center, float dist, const float3* color, bool isglobal, bool is_shadow/*, const char* bound_volume*/)
 {
 	if (GlobalLight != -1 && isglobal)
 	{
-		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - light: global light exists, you can not create 2 global light sources", GEN_MSG_LOCATION);
-		return -1;
+		setLightPos(GlobalLight, center);
+		setLightColor(GlobalLight, color);
+		setLightTypeShadowed(GlobalLight, (is_shadow ? LTYPE_SHADOW_DYNAMIC : LTYPE_SHADOW_NONE));
+		LibReport(REPORT_MSG_LEVEL_WARNING, "%s - light: global light exists, you can not create 2 global light sources\n", GEN_MSG_LOCATION);
+		return GlobalLight;
 	}
 
 	Light* tmplight = 0;// new Light();
@@ -356,9 +359,9 @@ ID Lights::CreatePoint(ID id, const float3* center, float dist, const float3* co
 	ID tmpid = id;
 
 	if (id == -1)
-		tmpid = AddLight(tmplight);
+		tmpid = addLight(tmplight);
 
-	SetLightPos(tmpid, &float3(center->x, center->y, center->z));
+	setLightPos(tmpid, &float3(center->x, center->y, center->z));
 
 	tmplight->Color = *color;
 	tmplight->IsEnable = true;
@@ -374,7 +377,7 @@ ID Lights::CreatePoint(ID id, const float3* center, float dist, const float3* co
 	return tmpid;
 }
 
-ID Lights::CreateDirection(ID id, const float3* pos, float dist, const float3* color, const SMQuaternion* orient, float top_radius, float angle, bool is_shadow/*, const char* bound_volume*/)
+ID CLights::createDirection(ID id, const float3* pos, float dist, const float3* color, const SMQuaternion* orient, float top_radius, float angle, bool is_shadow/*, const char* bound_volume*/)
 {
 	Light* tmplight = 0;
 
@@ -439,12 +442,12 @@ ID Lights::CreateDirection(ID id, const float3* pos, float dist, const float3* c
 	ID tmpid = id;
 
 	if (id == -1)
-		tmpid = AddLight(tmplight);
+		tmpid = addLight(tmplight);
 	
 	return tmpid;
 }
 
-void Lights::Render(ID id, DWORD timeDelta)
+void CLights::render(ID id, DWORD timeDelta)
 {
 	LIGHTS_PRE_COND_ID(id, _VOID);
 
@@ -454,36 +457,36 @@ void Lights::Render(ID id, DWORD timeDelta)
 	Core_RIntSet(G_RI_INT_COUNT_POLY, Core_RIntGet(G_RI_INT_COUNT_POLY) + (ArrLights[id]->Mesh->GetNumFaces() / 3));
 }
 
-ID Lights::GetLightGlobal() const
+ID CLights::getLightGlobal() const
 {
 	return GlobalLight;
 }
 
-bool Lights::GetCastGlobalShadow() const
+bool CLights::getCastGlobalShadow() const
 {
 	return m_isCastGlobalShadow;
 }
 
-void Lights::SetCastGlobalShadow(bool isShadowed)
+void CLights::setCastGlobalShadow(bool isShadowed)
 {
 	m_isCastGlobalShadow = isShadowed;
 }
 
-void Lights::GetLightColor(ID id, float3* vec) const
+void CLights::getLightColor(ID id, float3* vec) const
 {
 	LIGHTS_PRE_COND_ID(id, _VOID);
 
 	(*vec) = ArrLights[id]->Color;
 }
 
-void Lights::SetLightColor(ID id, const float3* vec)
+void CLights::setLightColor(ID id, const float3* vec)
 {
 	LIGHTS_PRE_COND_ID(id, _VOID);
 
 	ArrLights[id]->Color = *vec;
 }
 
-void Lights::GetLightPos(ID id, float3* vec, bool greal) const
+void CLights::getLightPos(ID id, float3* vec, bool greal) const
 {
 	LIGHTS_PRE_COND_ID(id, _VOID);
 
@@ -501,7 +504,7 @@ void Lights::GetLightPos(ID id, float3* vec, bool greal) const
 	}
 }
 
-float Lights::GetLightPower(ID id) const
+float CLights::getLightPower(ID id) const
 {
 	LIGHTS_PRE_COND_ID(id, -1);
 
@@ -521,14 +524,14 @@ float Lights::GetLightPower(ID id) const
 	}
 }
 
-float Lights::GetLightDist(ID id) const
+float CLights::getLightDist(ID id) const
 {
 	LIGHTS_PRE_COND_ID(id, -1);
 
 	return ArrLights[id]->Dist;
 }
 
-void Lights::SetLightDist(ID id, float radius_height, bool is_create)
+void CLights::setLightDist(ID id, float radius_height, bool is_create)
 {
 	LIGHTS_PRE_COND_ID(id, _VOID);
 
@@ -560,10 +563,10 @@ void Lights::SetLightDist(ID id, float radius_height, bool is_create)
 		mem_release_del(vertexbuf);
 	}
 
-	LightCountUpdateNull(id);
+	lightCountUpdateNull(id);
 }
 
-void Lights::SetLightPos(ID id, const float3* vec, bool greal)
+void CLights::setLightPos(ID id, const float3* vec, bool greal)
 {
 	LIGHTS_PRE_COND_ID(id, _VOID);
 
@@ -613,17 +616,17 @@ void Lights::SetLightPos(ID id, const float3* vec, bool greal)
 			}
 	}
 
-	LightCountUpdateNull(id);
+	lightCountUpdateNull(id);
 }
 
-void Lights::GetLightOrient(ID id, SMQuaternion* q) const
+void CLights::getLightOrient(ID id, SMQuaternion* q) const
 {
 	LIGHTS_PRE_COND_ID(id, _VOID);
 
 	*q = ArrLights[id]->Quaternion;
 }
 
-void Lights::SetLightOrient(ID id, const SMQuaternion* q)
+void CLights::setLightOrient(ID id, const SMQuaternion* q)
 {
 	LIGHTS_PRE_COND_ID(id, _VOID);
 
@@ -632,10 +635,10 @@ void Lights::SetLightOrient(ID id, const SMQuaternion* q)
 	if (ArrLights[id]->ShadowSM)
 		ArrLights[id]->ShadowSM->SetDirection(&(ArrLights[id]->Quaternion * LIGHTS_DIR_BASE));
 
-	LightCountUpdateNull(id);
+	lightCountUpdateNull(id);
 }
 
-void Lights::SetShadowBias(ID id, float val)
+void CLights::setShadowBias(ID id, float val)
 {
 	LIGHTS_PRE_COND_ID(id, _VOID);
 
@@ -644,10 +647,10 @@ void Lights::SetShadowBias(ID id, float val)
 		else if (ArrLights[id]->ShadowCube)
 			ArrLights[id]->ShadowCube->SetBias(val);
 
-		LightCountUpdateNull(id);
+		lightCountUpdateNull(id);
 }
 
-float Lights::GetShadowBias(ID id) const
+float CLights::getShadowBias(ID id) const
 {
 	LIGHTS_PRE_COND_ID(id, -1);
 
@@ -658,7 +661,7 @@ float Lights::GetShadowBias(ID id) const
 	return(0);
 }
 
-float Lights::GetLightTopRadius(ID id) const
+float CLights::getLightTopRadius(ID id) const
 {
 	LIGHTS_PRE_COND_ID(id, -1);
 
@@ -667,7 +670,7 @@ float Lights::GetLightTopRadius(ID id) const
 	return(0);
 }
 
-float Lights::GetLightAngle(ID id) const
+float CLights::getLightAngle(ID id) const
 {
 	LIGHTS_PRE_COND_ID(id, -1);
 
@@ -677,7 +680,7 @@ float Lights::GetLightAngle(ID id) const
 }
 
 
-bool Lights::ComVisibleForFrustum(ID id, const ISXFrustum* frustum)
+bool CLights::comVisibleForFrustum(ID id, const IFrustum* frustum)
 {
 	LIGHTS_PRE_COND_ID(id, false);
 
@@ -689,73 +692,73 @@ bool Lights::ComVisibleForFrustum(ID id, const ISXFrustum* frustum)
 	return frustum->sphereInFrustum(&tmpcenter, tmpradius);
 }
 
-bool Lights::GetVisibleForFrustum(ID id)
+bool CLights::getVisibleForFrustum(ID id)
 {
 	LIGHTS_PRE_COND_ID(id, false);
 
 	return ArrLights[id]->IsVisibleFor;
 }
 
-float Lights::ComDistFor(ID id, const float3* vec)
+float CLights::comDistFor(ID id, const float3* vec)
 {
 	LIGHTS_PRE_COND_ID(id, -1);
 
 	return SMVector3Distance((float3)ArrLights[id]->Position, *vec);
 }
 
-void Lights::ComVisibleFrustumDistFor(const ISXFrustum* frustum, const float3* vec)
+void CLights::comVisibleFrustumDistFor(const IFrustum* frustum, const float3* vec)
 {
 	for (int i = 0; i < ArrLights.size(); ++i)
 	{
 		if (ArrLights[i])
 		{
 			ArrLights[i]->DistFor = SMVector3Distance((float3)ArrLights[i]->Position, *vec);
-			ArrLights[i]->IsVisibleFor = ComVisibleForFrustum(ArrLights[i]->Id, frustum);
+			ArrLights[i]->IsVisibleFor = comVisibleForFrustum(ArrLights[i]->Id, frustum);
 		}
 	}
 }
 
-float Lights::GetDistFor(ID id)
+float CLights::getDistFor(ID id)
 {
 	LIGHTS_PRE_COND_ID(id, -1);
 
 	return ArrLights[id]->DistFor;
 }
 
-IDirect3DTexture9* Lights::GetShadow2()
+IDirect3DTexture9* CLights::getShadow2()
 {
 	return SGCore_RTGetTexture((HowShadow == 1 ? ShadowMap2 : ShadowMap));
 }
 
-bool Lights::GetLightEnable(ID id) const
+bool CLights::getLightEnable(ID id) const
 {
 	LIGHTS_PRE_COND_ID(id, false);
 
 	return ArrLights[id]->IsEnable;
 }
 
-void Lights::SetLightEnable(ID id, bool val)
+void CLights::setLightEnable(ID id, bool val)
 {
 	LIGHTS_PRE_COND_ID(id, _VOID);
 
 	ArrLights[id]->IsEnable = val;
-	LightCountUpdateNull(id);
+	lightCountUpdateNull(id);
 }
 
-bool Lights::GetLightShadowed(ID id) const
+bool CLights::getLightShadowed(ID id) const
 {
 	LIGHTS_PRE_COND_ID(id, false);
 
 	return (ArrLights[id]->TypeShadowed != LTYPE_SHADOW_NONE);
 }
 
-LTYPE_LIGHT Lights::GetLightType(ID id) const
+LTYPE_LIGHT CLights::getLightType(ID id) const
 {
 	LIGHTS_PRE_COND_ID(id, LTYPE_LIGHT_NONE);
 	return ArrLights[id]->TypeLight;
 }
 
-void Lights::ShadowRenderBegin(ID id)
+void CLights::shadowRenderBegin(ID id)
 {
 	LIGHTS_PRE_COND_ID(id, _VOID);
 
@@ -767,7 +770,7 @@ void Lights::ShadowRenderBegin(ID id)
 		ArrLights[id]->ShadowPSSM->Begin();
 }
 
-void Lights::ShadowRenderEnd(ID id)
+void CLights::shadowRenderEnd(ID id)
 {
 	LIGHTS_PRE_COND_ID(id, _VOID);
 
@@ -779,7 +782,7 @@ void Lights::ShadowRenderEnd(ID id)
 		ArrLights[id]->ShadowPSSM->End();
 }
 
-void Lights::ShadowRenderPre(ID id, int cube)
+void CLights::shadowRenderPre(ID id, int cube)
 {
 	LIGHTS_PRE_COND_ID(id, _VOID);
 
@@ -789,7 +792,7 @@ void Lights::ShadowRenderPre(ID id, int cube)
 		ArrLights[id]->ShadowPSSM->PreRender(cube);
 }
 
-void Lights::ShadowRenderPost(ID id, int cube)
+void CLights::shadowRenderPost(ID id, int cube)
 {
 	LIGHTS_PRE_COND_ID(id, _VOID);
 
@@ -797,7 +800,7 @@ void Lights::ShadowRenderPost(ID id, int cube)
 		ArrLights[id]->ShadowCube->Post(cube);
 }
 
-void Lights::InitShaderOfTypeMaterial(ID id, int typemat, float4x4* wmat)
+void CLights::initShaderOfTypeMaterial(ID id, int typemat, float4x4* wmat)
 {
 	if (!wmat)
 		wmat = &SMMatrixIdentity();
@@ -870,7 +873,7 @@ void Lights::InitShaderOfTypeMaterial(ID id, int typemat, float4x4* wmat)
 	}
 }
 
-ISXFrustum* Lights::GetLightFrustum(ID id, int how) const
+IFrustum* CLights::getLightFrustum(ID id, int how) const
 {
 	LIGHTS_PRE_COND_ID(id, 0);
 
@@ -892,7 +895,7 @@ ISXFrustum* Lights::GetLightFrustum(ID id, int how) const
 	return(NULL);
 }
 
-ISXFrustum* Lights::GetLightFrustumG(ID id, int split) const
+IFrustum* CLights::getLightFrustumG(ID id, int split) const
 {
 	LIGHTS_PRE_COND_ID(id, 0);
 
@@ -901,14 +904,14 @@ ISXFrustum* Lights::GetLightFrustumG(ID id, int split) const
 	return(NULL);
 }
 
-void Lights::UpdateLightGFrustums(ID id, int split, const float3* pos, const float3* dir)
+void CLights::updateLightGFrustums(ID id, int split, const float3* pos, const float3* dir)
 {
 	LIGHTS_PRE_COND_ID(id, _VOID);
 
 	ArrLights[id]->ShadowPSSM->UpdateFrustums(split, pos, dir);
 }
 
-void Lights::ShadowGen2(ID id)
+void CLights::shadowGen2(ID id)
 {
 	LIGHTS_PRE_COND_ID(id, _VOID);
 
@@ -925,7 +928,7 @@ void Lights::ShadowGen2(ID id)
 	}
 }
 
-void Lights::ShadowNull()
+void CLights::shadowNull()
 {
 	LPDIRECT3DSURFACE9 RenderSurf, BackBuf;
 
@@ -946,7 +949,7 @@ void Lights::ShadowNull()
 	HowShadow = 0;
 }
 
-void Lights::SetLightAngle(ID id, float angle, bool is_create)
+void CLights::setLightAngle(ID id, float angle, bool is_create)
 {
 	LIGHTS_PRE_COND_ID(id, _VOID);
 
@@ -970,10 +973,10 @@ void Lights::SetLightAngle(ID id, float angle, bool is_create)
 		if (ArrLights[id]->TypeLight == LTYPE_LIGHT_DIR && ArrLights[id]->ShadowSM)
 			ArrLights[id]->ShadowSM->SetAngleNearFar(&float3(angle, 0.1, ArrLights[id]->Dist));
 
-		LightCountUpdateNull(id);
+		lightCountUpdateNull(id);
 }
 
-void Lights::SetLightTopRadius(ID id, float top_radius)
+void CLights::setLightTopRadius(ID id, float top_radius)
 {
 	LIGHTS_PRE_COND_ID(id, _VOID);
 
@@ -992,10 +995,10 @@ void Lights::SetLightTopRadius(ID id, float top_radius)
 			mem_release_del(vertexbuf);
 		}
 
-		LightCountUpdateNull(id);
+		lightCountUpdateNull(id);
 }
 
-void Lights::SetShadowBlurPixel(ID id, float blur_pixel)
+void CLights::setShadowBlurPixel(ID id, float blur_pixel)
 {
 	LIGHTS_PRE_COND_ID(id, _VOID);
 
@@ -1006,10 +1009,10 @@ void Lights::SetShadowBlurPixel(ID id, float blur_pixel)
 		else if (ArrLights[id]->ShadowPSSM)
 			ArrLights[id]->ShadowPSSM->SetBlurPixel(blur_pixel);
 
-		LightCountUpdateNull(id);
+		lightCountUpdateNull(id);
 }
 
-float Lights::GetShadowBlurPixel(ID id) const
+float CLights::getShadowBlurPixel(ID id) const
 {
 	LIGHTS_PRE_COND_ID(id, -1);
 
@@ -1022,7 +1025,7 @@ float Lights::GetShadowBlurPixel(ID id) const
 	return(0);
 }
 
-void Lights::SetShadowLocalNear(ID id, float slnear)
+void CLights::setShadowLocalNear(ID id, float slnear)
 {
 	LIGHTS_PRE_COND_ID(id, _VOID);
 
@@ -1031,10 +1034,10 @@ void Lights::SetShadowLocalNear(ID id, float slnear)
 	else if (ArrLights[id]->ShadowSM)
 		ArrLights[id]->ShadowSM->SetNear(slnear);
 
-	LightCountUpdateNull(id);
+	lightCountUpdateNull(id);
 }
 
-float Lights::GetShadowLocalNear(ID id) const
+float CLights::getShadowLocalNear(ID id) const
 {
 	LIGHTS_PRE_COND_ID(id, -1);
 
@@ -1045,7 +1048,7 @@ float Lights::GetShadowLocalNear(ID id) const
 	return(0);
 }
 
-void Lights::SetShadowLocalFar(ID id, float slfar)
+void CLights::setShadowLocalFar(ID id, float slfar)
 {
 	LIGHTS_PRE_COND_ID(id, _VOID);
 
@@ -1059,10 +1062,10 @@ void Lights::SetShadowLocalFar(ID id, float slfar)
 	else if (ArrLights[id]->ShadowSM)
 		ArrLights[id]->ShadowSM->SetFar(slfar);
 
-	LightCountUpdateNull(id);
+	lightCountUpdateNull(id);
 }
 
-float Lights::GetShadowLocalFar(ID id) const
+float CLights::getShadowLocalFar(ID id) const
 {
 	LIGHTS_PRE_COND_ID(id, -1);
 
@@ -1078,17 +1081,17 @@ float Lights::GetShadowLocalFar(ID id) const
 		return ArrLights[id]->Dist;
 }
 
-void Lights::SetLightCubeEdgeEnable(ID id, int edge, bool enable)
+void CLights::setLightCubeEdgeEnable(ID id, int edge, bool enable)
 {
 	LIGHTS_PRE_COND_ID(id, _VOID);
 
 	if (ArrLights[id]->ShadowCube)
 		ArrLights[id]->ShadowCube->SetEnableCubeEdge(edge, enable);
 
-	LightCountUpdateNull(id);
+	lightCountUpdateNull(id);
 }
 
-bool Lights::GetLightCubeEdgeEnable(ID id, int edge) const
+bool CLights::getLightCubeEdgeEnable(ID id, int edge) const
 {
 	LIGHTS_PRE_COND_ID(id, false);
 
@@ -1097,7 +1100,7 @@ bool Lights::GetLightCubeEdgeEnable(ID id, int edge) const
 	return(false);
 }
 
-ID Lights::GetLightIDArr(ID id, ID inid, int how)
+ID CLights::getLightIDArr(ID id, ID inid, int how)
 {
 	LIGHTS_PRE_COND_ID(id, -1);
 
@@ -1119,7 +1122,7 @@ ID Lights::GetLightIDArr(ID id, ID inid, int how)
 	return(-1);
 }
 
-void Lights::SetLightIDArr(ID id, ID inid, int how, ID id_arr)
+void CLights::setLightIDArr(ID id, ID inid, int how, ID id_arr)
 {
 	LIGHTS_PRE_COND_ID(id, _VOID);
 
@@ -1140,10 +1143,13 @@ void Lights::SetLightIDArr(ID id, ID inid, int how, ID id_arr)
 		}
 }
 
-void Lights::SetLightTypeShadowed(ID id, LTYPE_SHADOW type)
+void CLights::setLightTypeShadowed(ID id, LTYPE_SHADOW type)
 {
 	LIGHTS_PRE_COND_ID(id, _VOID);
 
+	if (ArrLights[id]->TypeShadowed == type)
+		return;
+
 	ArrLights[id]->TypeShadowed = type;
 
 	if (ArrLights[id]->TypeLight == LTYPE_LIGHT_DIR)
@@ -1180,10 +1186,10 @@ void Lights::SetLightTypeShadowed(ID id, LTYPE_SHADOW type)
 		}
 	}
 
-	LightCountUpdateNull(id);
+	lightCountUpdateNull(id);
 }
 
-LTYPE_SHADOW Lights::GetLightTypeShadowed(ID id) const
+LTYPE_SHADOW CLights::getLightTypeShadowed(ID id) const
 {
 	LIGHTS_PRE_COND_ID(id, LTYPE_SHADOW_NONE);
 
@@ -1191,7 +1197,7 @@ LTYPE_SHADOW Lights::GetLightTypeShadowed(ID id) const
 }
 
 
-bool Lights::LightCountUpdateUpdate(ID id, const float3* viewpos, int ghow)
+bool CLights::lightCountUpdateUpdate(ID id, const float3* viewpos, int ghow)
 {
 	LIGHTS_PRE_COND_ID(id, false);
 
@@ -1261,7 +1267,7 @@ bool Lights::LightCountUpdateUpdate(ID id, const float3* viewpos, int ghow)
 	return(false);
 }
 
-bool Lights::LightCountUpdateAllowed(ID id, int ghow) const
+bool CLights::lightCountUpdateAllowed(ID id, int ghow) const
 {
 	LIGHTS_PRE_COND_ID(id, false);
 
@@ -1280,7 +1286,7 @@ bool Lights::LightCountUpdateAllowed(ID id, int ghow) const
 	return(ArrLights[id]->CountUpdate == 0);
 }
 
-void Lights::LightCountUpdateNull(ID id)
+void CLights::lightCountUpdateNull(ID id)
 {
 	if (id >= 0 && id < ArrLights.size())
 	{
@@ -1297,7 +1303,7 @@ void Lights::LightCountUpdateNull(ID id)
 	}
 }
 
-void Lights::ShadowSoft(bool randomsam, float size, bool isfirst)
+void CLights::shadowSoft(bool randomsam, float size, bool isfirst)
 {
 	if (isfirst)
 		HowShadow = 0;
@@ -1369,7 +1375,7 @@ void Lights::ShadowSoft(bool randomsam, float size, bool isfirst)
 			HowShadow = 1;
 }
 
-void Lights::ToneMappingCom(DWORD timeDelta, float factor_adapted)
+void CLights::toneMappingCom(DWORD timeDelta, float factor_adapted)
 {
 	static const int *r_win_width = GET_PCVAR_INT("r_win_width");
 	static const int *r_win_height = GET_PCVAR_INT("r_win_height");
@@ -1491,7 +1497,7 @@ void Lights::ToneMappingCom(DWORD timeDelta, float factor_adapted)
 	
 }
 
-void Lights::Set4Or3Splits(ID id, bool is4)
+void CLights::set4Or3Splits(ID id, bool is4)
 {
 	LIGHTS_PRE_COND_ID(id, _VOID);
 
@@ -1499,7 +1505,7 @@ void Lights::Set4Or3Splits(ID id, bool is4)
 		ArrLights[id]->ShadowPSSM->Set4Or3Splits(is4);
 }
 
-bool Lights::Get4Or3Splits(ID id)
+bool CLights::get4Or3Splits(ID id)
 {
 	LIGHTS_PRE_COND_ID(id, false);
 
@@ -1511,25 +1517,25 @@ bool Lights::Get4Or3Splits(ID id)
 
 //##########################################################################
 
-int Lights::DelGetCount()
+int CLights::delGetCount()
 {
 	return ArrDelLights.size();
 }
 
-LTYPE_LIGHT Lights::DelGetType(ID key)
+LTYPE_LIGHT CLights::delGetType(ID key)
 {
 	LIGHTS_PRE_COND_KEY_DEL(key, LTYPE_LIGHT_NONE);
 	return ArrDelLights[key]->TypeLight;
 }
 
-void Lights::DelDel(ID key)
+void CLights::delDel(ID key)
 {
 	LIGHTS_PRE_COND_KEY_DEL(key, _VOID);
 	mem_delete(ArrDelLights[key]);
 	ArrDelLights.erase(key);
 }
 
-ID Lights::DelGetIDArr(ID key, ID inid, int how)
+ID CLights::delGetIDArr(ID key, ID inid, int how)
 {
 	LIGHTS_PRE_COND_KEY_DEL(key, -1);
 
diff --git a/source/mtllight/light.h b/source/mtllight/light.h
index 41326569f872cd231348a36541398577fb3a7783..5cf2ba1ce8bcd291257d5370fb74898bff818429 100644
--- a/source/mtllight/light.h
+++ b/source/mtllight/light.h
@@ -29,154 +29,154 @@ if (!(key >= 0 && key < ArrDelLights.size()))\
 {LibReport(REPORT_MSG_LEVEL_ERROR, "%s - light: unresolved key of access '%d'", GEN_MSG_LOCATION, key); return stdval; }
 
 #include "shadow.h"
-//#include <common\\string.cpp>
 
-class Lights
+
+class CLights
 {
 public:
 
-	Lights();
-	~Lights();
+	CLights();
+	~CLights();
 
-	ID CreateCopy(ID id);
+	ID createCopy(ID id);
 
-	void OnLostDevice();
-	void OnResetDevice();
+	void onLostDevice();
+	void onResetDevice();
 
-	int GetCountLights() const;
-	void Clear();
+	int getCountLights() const;
+	void clear();
 
 	//очистка массивов идентификацторов (просчетов видимости)
-	void ClearIDArr();
+	void clearIDArr();
 
 	bool getExists(ID id) const;
 
-	ID CreatePoint(ID id, const  float3* center, float dist, const  float3* color, bool isglobal, bool is_shadow/*, const char* bound_volume*/);
-	ID CreateDirection(ID id, const  float3* pos, float dist, const  float3* color, const SMQuaternion* orient, float top_radius, float angle, bool is_shadow/*, const char* bound_volume*/);
+	ID createPoint(ID id, const  float3* center, float dist, const  float3* color, bool isglobal, bool is_shadow/*, const char* bound_volume*/);
+	ID createDirection(ID id, const  float3* pos, float dist, const  float3* color, const SMQuaternion* orient, float top_radius, float angle, bool is_shadow/*, const char* bound_volume*/);
 
-	void DeleteLight(ID id);
+	void deleteLight(ID id);
 
-	void Render(ID id, DWORD timeDelta);
+	void render(ID id, DWORD timeDelta);
 
-	ID GetLightGlobal() const;
+	ID getLightGlobal() const;
 
-	bool GetCastGlobalShadow() const;
-	void SetCastGlobalShadow(bool isShadowed);
+	bool getCastGlobalShadow() const;
+	void setCastGlobalShadow(bool isShadowed);
 
 	//-----------------------------------------------------------------------------
 
-	char* GetLightName(ID id);
-	void SetLightName(ID id, const char* name);
+	char* getLightName(ID id);
+	void setLightName(ID id, const char* name);
 
-	void GetLightColor(ID id, float3* vec) const;
-	void SetLightColor(ID id, const float3* vec);
+	void getLightColor(ID id, float3* vec) const;
+	void setLightColor(ID id, const float3* vec);
 
-	void GetLightPos(ID id, float3* vec, bool greal = false) const;
-	void SetLightPos(ID id, const float3* vec, bool greal = false);
+	void getLightPos(ID id, float3* vec, bool greal = false) const;
+	void setLightPos(ID id, const float3* vec, bool greal = false);
 
-	float GetLightPower(ID id) const;
+	float getLightPower(ID id) const;
 
-	float GetLightDist(ID id) const;
-	void SetLightDist(ID id, float radius_height, bool is_create);
+	float getLightDist(ID id) const;
+	void setLightDist(ID id, float radius_height, bool is_create);
 
 	//-----------------------------------------------------------------------------
 	
-	void GetLightOrient(ID id, SMQuaternion* q) const;
-	void SetLightOrient(ID id, const  SMQuaternion* q);
+	void getLightOrient(ID id, SMQuaternion* q) const;
+	void setLightOrient(ID id, const  SMQuaternion* q);
 
-	float GetLightTopRadius(ID id) const;
-	void SetLightTopRadius(ID id, float top_radius);
+	float getLightTopRadius(ID id) const;
+	void setLightTopRadius(ID id, float top_radius);
 
-	float GetLightAngle(ID id) const;
-	void SetLightAngle(ID id, float angle, bool is_create);
+	float getLightAngle(ID id) const;
+	void setLightAngle(ID id, float angle, bool is_create);
 
-	void SetLightCubeEdgeEnable(ID id, int edge, bool enable);
-	bool GetLightCubeEdgeEnable(ID id, int edge) const;
+	void setLightCubeEdgeEnable(ID id, int edge, bool enable);
+	bool getLightCubeEdgeEnable(ID id, int edge) const;
 	
 	//-----------------------------------------------------------------------------
 	
-	void SetShadowBias(ID id, float val);
-	float GetShadowBias(ID id) const;
+	void setShadowBias(ID id, float val);
+	float getShadowBias(ID id) const;
 	
-	void SetShadowBlurPixel(ID id, float blur_pixel);
-	float GetShadowBlurPixel(ID id) const;
+	void setShadowBlurPixel(ID id, float blur_pixel);
+	float getShadowBlurPixel(ID id) const;
 
-	void SetShadowLocalNear(ID id, float slnear);
-	float GetShadowLocalNear(ID id) const;
+	void setShadowLocalNear(ID id, float slnear);
+	float getShadowLocalNear(ID id) const;
 
-	void SetShadowLocalFar(ID id, float slfar);
-	float GetShadowLocalFar(ID id) const;
+	void setShadowLocalFar(ID id, float slfar);
+	float getShadowLocalFar(ID id) const;
 
 	//-----------------------------------------------------------------------------
 	
-	bool ComVisibleForFrustum(ID id, const ISXFrustum* frustum);
-	bool GetVisibleForFrustum(ID id);
-	float ComDistFor(ID id, const float3* vec);
-	float GetDistFor(ID id);
-	void ComVisibleFrustumDistFor(const ISXFrustum* frustum, const float3* vec);
+	bool comVisibleForFrustum(ID id, const IFrustum* frustum);
+	bool getVisibleForFrustum(ID id);
+	float comDistFor(ID id, const float3* vec);
+	float getDistFor(ID id);
+	void comVisibleFrustumDistFor(const IFrustum* frustum, const float3* vec);
 
 	//-----------------------------------------------------------------------------
 
-	bool GetLightEnable(ID id) const;
-	void SetLightEnable(ID id, bool val);
-	bool GetLightShadowed(ID id) const;
-	LTYPE_LIGHT GetLightType(ID id) const;
-	void SetLightTypeShadowed(ID id, LTYPE_SHADOW type);
-	LTYPE_SHADOW GetLightTypeShadowed(ID id) const;
+	bool getLightEnable(ID id) const;
+	void setLightEnable(ID id, bool val);
+	bool getLightShadowed(ID id) const;
+	LTYPE_LIGHT getLightType(ID id) const;
+	void setLightTypeShadowed(ID id, LTYPE_SHADOW type);
+	LTYPE_SHADOW getLightTypeShadowed(ID id) const;
 
 	//-----------------------------------------------------------------------------
 
-	IDirect3DTexture9* GetShadow2();
+	IDirect3DTexture9* getShadow2();
 
-	void ShadowRenderBegin(ID id);
-	void ShadowRenderEnd(ID id);
-	void ShadowRenderPre(ID id, int cube);
-	void ShadowRenderPost(ID id, int cube);
+	void shadowRenderBegin(ID id);
+	void shadowRenderEnd(ID id);
+	void shadowRenderPre(ID id, int cube);
+	void shadowRenderPost(ID id, int cube);
 
 	//-----------------------------------------------------------------------------
 
-	void InitShaderOfTypeMaterial(ID id, int typemat, float4x4* wmat);
+	void initShaderOfTypeMaterial(ID id, int typemat, float4x4* wmat);
 
 	//-----------------------------------------------------------------------------
 
-	ISXFrustum* GetLightFrustum(ID id, int how) const;
-	ISXFrustum* GetLightFrustumG(ID id, int split) const;
+	IFrustum* getLightFrustum(ID id, int how) const;
+	IFrustum* getLightFrustumG(ID id, int split) const;
 
-	void UpdateLightGFrustums(ID id, int split, const float3* pos, const float3* dir);
+	void updateLightGFrustums(ID id, int split, const float3* pos, const float3* dir);
 
 	//-----------------------------------------------------------------------------
 
-	ID GetLightIDArr(ID id, ID inid, int how);
-	void SetLightIDArr(ID id, ID inid, int how, ID id_arr);
+	ID getLightIDArr(ID id, ID inid, int how);
+	void setLightIDArr(ID id, ID inid, int how, ID id_arr);
 
 	//-----------------------------------------------------------------------------
 
-	bool LightCountUpdateUpdate(ID id, const float3* viewpos, int ghow = -1);
-	bool LightCountUpdateAllowed(ID id, int ghow = -1) const;
-	void LightCountUpdateNull(ID id);
+	bool lightCountUpdateUpdate(ID id, const float3* viewpos, int ghow = -1);
+	bool lightCountUpdateAllowed(ID id, int ghow = -1) const;
+	void lightCountUpdateNull(ID id);
 
 	//-----------------------------------------------------------------------------
 
-	void ToneMappingCom(DWORD timeDelta, float factor_adapted = 10);
+	void toneMappingCom(DWORD timeDelta, float factor_adapted = 10);
 
 	//-----------------------------------------------------------------------------
 
-	void Set4Or3Splits(ID id, bool is4);
-	bool Get4Or3Splits(ID id);
+	void set4Or3Splits(ID id, bool is4);
+	bool get4Or3Splits(ID id);
 
 	//-----------------------------------------------------------------------------
 
-	void ShadowGen(ID id);
-	void ShadowNull();
-	void ShadowGen2(ID id);
-	void ShadowSoft(bool randomsam, float size, bool isfirst = false);
+	void shadowGen(ID id);
+	void shadowNull();
+	void shadowGen2(ID id);
+	void shadowSoft(bool randomsam, float size, bool isfirst = false);
 
 	//-----------------------------------------------------------------------------
 
-	int DelGetCount();
-	LTYPE_LIGHT DelGetType(ID key);
-	void DelDel(ID key);
-	ID DelGetIDArr(ID key, ID inid, int how);
+	int delGetCount();
+	LTYPE_LIGHT delGetType(ID key);
+	void delDel(ID key);
+	ID delGetIDArr(ID key, ID inid, int how);
 
 	//-----------------------------------------------------------------------------
 
@@ -224,7 +224,7 @@ public:
 	};
 
 protected:
-	ID AddLight(Light* obj);
+	ID addLight(Light* obj);
 
 	Array<Light*> ArrLights;	//массив всех элементов, основанный на id
 	Array<Light*> ArrDelLights;	//массив света который надо удалить
diff --git a/source/mtllight/material.cpp b/source/mtllight/material.cpp
index a3598d3c0649db4a221186797cf52462ce717f18..a4d93d93e03e6d458070fb4d9e5a5f2d8e8d56d1 100644
--- a/source/mtllight/material.cpp
+++ b/source/mtllight/material.cpp
@@ -459,7 +459,7 @@ void Materials::MtlRefPreRenderPlane(ID id, D3DXPLANE* plane)
 	ArrMaterials[id]->Reflect->preRenderRefPlane(plane);
 }
 
-const ISXFrustum* Materials::MtlRefGetfrustum(ID id, int cube)
+const IFrustum* Materials::MtlRefGetfrustum(ID id, int cube)
 {
 	MTL_REF_PRE_COND_ID(id, 0);
 	if (cube == 0 || (cube > 0 && (ArrMaterials[id]->Reflect->getTypeReflect() == MTLTYPE_REFLECT_CUBE_STATIC || ArrMaterials[id]->Reflect->getTypeReflect() == MTLTYPE_REFLECT_CUBE_DYNAMIC)))
@@ -1188,12 +1188,12 @@ bool Materials::LoadMtl(const char* name, Material** mtl)
 			tmpMtl->PhysicsMaterial = MTLTYPE_PHYSIC_DEFAULT;
 
 
-		if (def_str_validate(tmpVS))
+		if (STR_VALIDATE(tmpVS))
 			tmpMtl->PreShaderVS = SGCore_ShaderLoad(SHADER_TYPE_VERTEX, tmpVS, tmpVS, SHADER_CHECKDOUBLE_PATH);
 		else
 			tmpMtl->PreShaderVS = SGCore_ShaderGetID(SHADER_TYPE_VERTEX, "mtrlgeom_base.vs");
 
-		if (def_str_validate(tmpPS))
+		if (STR_VALIDATE(tmpPS))
 			tmpMtl->PreShaderPS = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, tmpPS, tmpPS, SHADER_CHECKDOUBLE_PATH);
 		else
 			tmpMtl->PreShaderPS = SGCore_ShaderGetID(SHADER_TYPE_PIXEL, "mtrlgeom_base.ps");
diff --git a/source/mtllight/material.h b/source/mtllight/material.h
index 65a5f56277dd809bce1e48ba3d6bb09898b3c203..1ca4ec22692e8bfaebdbe2cd64347b3ff66e054c 100644
--- a/source/mtllight/material.h
+++ b/source/mtllight/material.h
@@ -77,7 +77,7 @@ public:
 	//void MtlRefSetPlane(ID id, D3DXPLANE* plane);
 	//void MtlRefSetCenter(ID id, float3_t* center);
 	void MtlRefPreRenderPlane(ID id, D3DXPLANE* plane);
-	const ISXFrustum* MtlRefGetfrustum(ID id, int cube);
+	const IFrustum* MtlRefGetfrustum(ID id, int cube);
 	void MtlRefPostRenderPlane(ID id);
 	IDirect3DTexture9* MtlRefPlaneGetTex(ID id);
 
diff --git a/source/mtllight/reflection.cpp b/source/mtllight/reflection.cpp
index 8e8d4fa9a3112a9319b5862a3b7a4c9e62beb9a9..8e6b25843a4c71e14980fc2604ee7f5a0f3fd307 100644
--- a/source/mtllight/reflection.cpp
+++ b/source/mtllight/reflection.cpp
@@ -130,7 +130,7 @@ MTLTYPE_REFLECT CReflection::getTypeReflect()
 	return type_reflection; 
 }
 
-const ISXFrustum* CReflection::getFrustum(ID id)
+const IFrustum* CReflection::getFrustum(ID id)
 { 
 	return m_aFrustums[id]; 
 }
diff --git a/source/mtllight/reflection.h b/source/mtllight/reflection.h
index 39351d5e8b62c59759b8c88872a721d38e0a9b74..f4bf34729c9f5db41e4e0044299cdc904f9dfa05 100644
--- a/source/mtllight/reflection.h
+++ b/source/mtllight/reflection.h
@@ -41,7 +41,7 @@ public:
 	MTLTYPE_REFLECT getTypeReflect();
 
 	//! возвращает фрустум по id, для плоских отражений 0, для кубических [0,5] 
-	const ISXFrustum* getFrustum(ID id);
+	const IFrustum* getFrustum(ID id);
 
 	//! обновление количесвтенных данных обновления, возаращет true в случае если можно рисовать отражения, false если отражения рисовать не надо, pViewPos - позиция наблюдателя (обязательно)
 	bool updateCountUpdate(const float3_t *pViewPos);
@@ -105,7 +105,7 @@ protected:
 	float4x4 m_mView;
 
 	//! массив фрустумов, для плоских отражений используется только нулевой, для кубических все
-	ISXFrustum *m_aFrustums[6];
+	IFrustum *m_aFrustums[6];
 
 	//! массивы идентификаторов для просчета видимости
 	Array<ID*> m_aIDsArr;
diff --git a/source/mtllight/shadow.h b/source/mtllight/shadow.h
index d9dead086777e8756838c33810e4ae9e50bf7130..db31a11cd887fc54038ea2a04640d2b5d972820d 100644
--- a/source/mtllight/shadow.h
+++ b/source/mtllight/shadow.h
@@ -52,7 +52,7 @@ public:
 	long GetCountIDArrs();
 	ID GetIDArr(ID id, int split);
 
-	ISXFrustum* Frustums[5];
+	IFrustum* Frustums[5];
 	//long IDArr[5];
 
 	int IsUpdate[5];
@@ -133,7 +133,7 @@ public:
 	long GetCountIDArrs();
 	long GetIDArr(long id);
 
-	ISXFrustum* Frustum;
+	IFrustum* Frustum;
 	//long IDArr;
 
 	float4x4 View;
@@ -206,7 +206,7 @@ public:
 	long GetCountIDArrs();
 	long GetIDArr(long id, int split);
 
-	ISXFrustum* Frustums[6];
+	IFrustum* Frustums[6];
 	//long IDArr[6];
 
 private:
diff --git a/source/mtllight/sxmtllight.cpp b/source/mtllight/sxmtllight.cpp
index 0bab051a7ab28919f1bd4fe8a8c8ed3ec1f4b0ad..7fe7c48bb836afed8808ef094584f48748649917 100644
--- a/source/mtllight/sxmtllight.cpp
+++ b/source/mtllight/sxmtllight.cpp
@@ -17,7 +17,7 @@ See the license in LICENSE
 report_func g_fnReportf = DefReport;
 #endif
 
-Lights* ArrLights = 0;
+CLights* ArrLights = 0;
 Materials* ArrMaterials = 0;
 
 #define ML_PRECOND(retval) if(!ArrLights){LibReport(-1, "%s - sxmtlligth is not init", GEN_MSG_LOCATION); return retval;}
@@ -50,7 +50,7 @@ SX_LIB_API void SML_0Create(const char* name, bool is_unic)
 			{
 				MLSet::MLInit();
 				MLSet::ReCalcSize();
-				ArrLights = new Lights();
+				ArrLights = new CLights();
 				ArrMaterials = new Materials();
 			}
 		}
@@ -58,7 +58,7 @@ SX_LIB_API void SML_0Create(const char* name, bool is_unic)
 		{
 			MLSet::MLInit();
 			MLSet::ReCalcSize();
-			ArrLights = new Lights();
+			ArrLights = new CLights();
 			ArrMaterials = new Materials();
 		}
 	}
@@ -75,7 +75,7 @@ SX_LIB_API void SML_AKill()
 SX_LIB_API void SML_OnLostDevice()
 {
 	ML_PRECOND(_VOID);
-	ArrLights->OnLostDevice();
+	ArrLights->onLostDevice();
 	ArrMaterials->OnLostDevice();
 }
 
@@ -87,7 +87,7 @@ SX_LIB_API void SML_OnResetDevice()
 	MLSet::ProjFov = projfov;
 	MLSet::ProjRatio = MLSet::WinSize.x / MLSet::WinSize.y;*/
 	MLSet::ReCalcSize();
-	ArrLights->OnResetDevice();
+	ArrLights->onResetDevice();
 	ArrMaterials->OnResetDevice();
 
 	//MLSet::IDsRenderTargets::ToneMaps.clear();
@@ -163,21 +163,21 @@ SX_LIB_API void SML_LigthsClear()
 {
 	ML_PRECOND(_VOID);
 
-	ArrLights->Clear();
+	ArrLights->clear();
 }
 
 SX_LIB_API void SML_LigthsClearIDArr()
 {
 	ML_PRECOND(_VOID);
 
-	ArrLights->ClearIDArr();
+	ArrLights->clearIDArr();
 }
 
 SX_LIB_API long SML_LigthsGetCount()
 {
 	ML_PRECOND(-1);
 
-	return ArrLights->GetCountLights();
+	return ArrLights->getCountLights();
 }
 
 SX_LIB_API bool SML_LigthsGetExists(ID id)
@@ -191,218 +191,218 @@ SX_LIB_API bool SML_LigthsGetExists(ID id)
 SX_LIB_API ID SML_LigthsCreatePoint(const float3* center, float dist, const float3* color, bool isglobal, bool is_shadowed/*, const char* bound_volume*/)
 {
 	ML_PRECOND(-1);
-	return ArrLights->CreatePoint(-1,center, dist, color, isglobal, is_shadowed/*, 0*/);
+	return ArrLights->createPoint(-1,center, dist, color, isglobal, is_shadowed/*, 0*/);
 }
 
 SX_LIB_API ID SML_LigthsCreateDirection(const float3* pos, float dist, const float3* color, const SMQuaternion* orient, float top_radius, float angle, bool is_shadow/*, const char* bound_volume*/)
 {
 	ML_PRECOND(-1);
-	return ArrLights->CreateDirection(-1, pos, dist, color, orient, top_radius, angle, is_shadow/*, 0*/);
+	return ArrLights->createDirection(-1, pos, dist, color, orient, top_radius, angle, is_shadow/*, 0*/);
 }
 
 SX_LIB_API void SML_LigthsRender(ID id, DWORD timeDelta)
 {
 	ML_PRECOND(_VOID);
-	ArrLights->Render(id, timeDelta);
+	ArrLights->render(id, timeDelta);
 }
 
 SX_LIB_API ID SML_LigthsGetGlobal()
 {
 	ML_PRECOND(-1);
-	return ArrLights->GetLightGlobal();
+	return ArrLights->getLightGlobal();
 }
 
 SX_LIB_API bool SML_LigthsGetCastGlobalShadow()
 {
 	ML_PRECOND(false);
-	return ArrLights->GetCastGlobalShadow();
+	return ArrLights->getCastGlobalShadow();
 }
 
 SX_LIB_API void SML_LigthsSetCastGlobalShadow(bool isShadowed)
 {
 	ML_PRECOND(_VOID);
-	return ArrLights->SetCastGlobalShadow(isShadowed);
+	return ArrLights->setCastGlobalShadow(isShadowed);
 }
 
 SX_LIB_API void SML_LigthsGetColor(ID id, float3* color)
 {
 	ML_PRECOND(_VOID);
-	ArrLights->GetLightColor(id, color);
+	ArrLights->getLightColor(id, color);
 }
 
 SX_LIB_API void SML_LigthsSetColor(ID id, const float3* vec)
 {
 	ML_PRECOND(_VOID);
-	ArrLights->SetLightColor(id, vec);
+	ArrLights->setLightColor(id, vec);
 }
 
 SX_LIB_API void SML_LigthsGetPos(ID id, float3* vec, bool greal)
 {
 	ML_PRECOND(_VOID);
-	ArrLights->GetLightPos(id, vec, greal);
+	ArrLights->getLightPos(id, vec, greal);
 }
 
 SX_LIB_API float SML_LigthsGetPower(ID id)
 {
 	ML_PRECOND(-1);
-	return ArrLights->GetLightPower(id);
+	return ArrLights->getLightPower(id);
 }
 
 SX_LIB_API float SML_LigthsGetDist(ID id)
 {
 	ML_PRECOND(-1);
-	return ArrLights->GetLightDist(id);
+	return ArrLights->getLightDist(id);
 }
 
 SX_LIB_API void SML_LigthsSetPos(ID id, const float3* vec, bool greal)
 {
 	ML_PRECOND(_VOID);
-	ArrLights->SetLightPos(id, vec, greal);
+	ArrLights->setLightPos(id, vec, greal);
 }
 
 SX_LIB_API void SML_LigthsGetOrient(ID id, SMQuaternion* q)
 {
 	ML_PRECOND(_VOID);
-	ArrLights->GetLightOrient(id, q);
+	ArrLights->getLightOrient(id, q);
 }
 
 SX_LIB_API void SML_LigthsSetOrient(ID id, const SMQuaternion* q)
 {
 	ML_PRECOND(_VOID);
-	ArrLights->SetLightOrient(id, q);
+	ArrLights->setLightOrient(id, q);
 }
 
 SX_LIB_API LTYPE_LIGHT SML_LigthsGetType(ID id)
 {
 	ML_PRECOND(LTYPE_LIGHT_NONE);
-	return ArrLights->GetLightType(id);
+	return ArrLights->getLightType(id);
 }
 
-SX_LIB_API bool SML_LigthsComVisibleForFrustum(ID id, const ISXFrustum* frustum)
+SX_LIB_API bool SML_LigthsComVisibleForFrustum(ID id, const IFrustum* frustum)
 {
 	ML_PRECOND(-1);
-	return ArrLights->ComVisibleForFrustum(id, frustum);
+	return ArrLights->comVisibleForFrustum(id, frustum);
 }
 
 SX_LIB_API bool SML_LigthsGetVisibleForFrustum(ID id)
 {
 	ML_PRECOND(false);
-	return ArrLights->GetVisibleForFrustum(id);
+	return ArrLights->getVisibleForFrustum(id);
 }
 
 SX_LIB_API float SML_LigthsComDistFor(ID id, const float3* vec)
 {
 	ML_PRECOND(-1);
-	return ArrLights->ComDistFor(id, vec);
+	return ArrLights->comDistFor(id, vec);
 }
 
 SX_LIB_API float SML_LigthsGetDistFor(ID id)
 {
 	ML_PRECOND(-1);
-	return ArrLights->GetDistFor(id);
+	return ArrLights->getDistFor(id);
 }
 
-SX_LIB_API void SML_LigthsComVisibleFrustumDistFor(const ISXFrustum* frustum, const float3* vec)
+SX_LIB_API void SML_LigthsComVisibleFrustumDistFor(const IFrustum* frustum, const float3* vec)
 {
 	ML_PRECOND(_VOID);
-	return ArrLights->ComVisibleFrustumDistFor(frustum, vec);
+	return ArrLights->comVisibleFrustumDistFor(frustum, vec);
 }
 
 SX_LIB_API bool SML_LigthsGetEnable(ID id)
 {
 	ML_PRECOND(-1);
-	return ArrLights->GetLightEnable(id);
+	return ArrLights->getLightEnable(id);
 }
 
 SX_LIB_API void SML_LigthsSetEnable(ID id, bool val)
 {
 	ML_PRECOND(_VOID);
-	return ArrLights->SetLightEnable(id, val);
+	return ArrLights->setLightEnable(id, val);
 }
 
 SX_LIB_API bool SML_LigthsGetShadowed(ID id)
 {
 	ML_PRECOND(-1);
-	return ArrLights->GetLightShadowed(id);
+	return ArrLights->getLightShadowed(id);
 }
 
 SX_LIB_API bool SML_LigthsGet4Or3SplitsG(ID id)
 {
 	ML_PRECOND(0);
-	return ArrLights->Get4Or3Splits(id);
+	return ArrLights->get4Or3Splits(id);
 }
 
 SX_LIB_API void SML_LigthsSet4Or3SplitsG(ID id, bool bf4or3)
 {
 	ML_PRECOND(_VOID);
 
-	ArrLights->Set4Or3Splits(id, bf4or3);
+	ArrLights->set4Or3Splits(id, bf4or3);
 }
 
 SX_LIB_API IDirect3DTexture9* SML_LigthsGetShadow()
 {
 	ML_PRECOND(0);
-	return ArrLights->GetShadow2();
+	return ArrLights->getShadow2();
 }
 
 SX_LIB_API void SML_LigthsShadowNull()
 {
 	ML_PRECOND(_VOID);
-	return ArrLights->ShadowNull();
+	return ArrLights->shadowNull();
 }
 
 SX_LIB_API void SML_LigthsShadowRenderBegin(ID id)
 {
 	ML_PRECOND(_VOID);
-	ArrLights->ShadowRenderBegin(id);
+	ArrLights->shadowRenderBegin(id);
 }
 
 SX_LIB_API void SML_LigthsShadowRenderEnd(ID id)
 {
 	ML_PRECOND(_VOID);
-	ArrLights->ShadowRenderEnd(id);
+	ArrLights->shadowRenderEnd(id);
 }
 
 SX_LIB_API void SML_LigthsShadowRenderPre(ID id, int cube)
 {
 	ML_PRECOND(_VOID);
-	ArrLights->ShadowRenderPre(id, cube);
+	ArrLights->shadowRenderPre(id, cube);
 }
 
 SX_LIB_API void SML_LigthsShadowRenderPost(ID id, int cube)
 {
 	ML_PRECOND(_VOID);
-	ArrLights->ShadowRenderPost(id, cube);
+	ArrLights->shadowRenderPost(id, cube);
 }
 
-SX_LIB_API ISXFrustum* SML_LigthsGetFrustum(ID id, int how)
+SX_LIB_API IFrustum* SML_LigthsGetFrustum(ID id, int how)
 {
 	ML_PRECOND(0);
-	return ArrLights->GetLightFrustum(id, how);
+	return ArrLights->getLightFrustum(id, how);
 }
 
 SX_LIB_API void SML_LigthsUpdateGFrustums(ID id, int split, const float3* pos, const float3* dir)
 {
 	ML_PRECOND(_VOID);
-	return ArrLights->UpdateLightGFrustums(id, split, pos, dir);
+	return ArrLights->updateLightGFrustums(id, split, pos, dir);
 }
 
 SX_LIB_API void SML_LigthsShadowSetShaderOfTypeMat(ID id, int typemat, float4x4* wmat)
 {
 	ML_PRECOND(_VOID);
-	ArrLights->InitShaderOfTypeMaterial(id, typemat, wmat);
+	ArrLights->initShaderOfTypeMaterial(id, typemat, wmat);
 }
 
 SX_LIB_API void SML_LigthsShadowGen(ID id)
 {
 	ML_PRECOND(_VOID);
-	ArrLights->ShadowGen2(id);
+	ArrLights->shadowGen2(id);
 }
 
 SX_LIB_API void SML_LigthsShadowSoft(bool randomsam, float size, bool isfirst)
 {
 	ML_PRECOND(_VOID);
-	ArrLights->ShadowSoft(randomsam, size, isfirst);
+	ArrLights->shadowSoft(randomsam, size, isfirst);
 }
 
 
@@ -410,189 +410,189 @@ SX_LIB_API void SML_LigthsShadowSoft(bool randomsam, float size, bool isfirst)
 SX_LIB_API ID SML_LigthsCreateCopy(ID id)
 {
 	ML_PRECOND(-1);
-	return ArrLights->CreateCopy(id);
+	return ArrLights->createCopy(id);
 }
 
 SX_LIB_API void SML_LigthsDeleteLight(ID id)
 {
 	ML_PRECOND(_VOID);
-	ArrLights->DeleteLight(id);
+	ArrLights->deleteLight(id);
 }
 
 SX_LIB_API char* SML_LigthsGetName(ID id)
 {
 	ML_PRECOND(0);
-	return ArrLights->GetLightName(id);
+	return ArrLights->getLightName(id);
 }
 
 SX_LIB_API void SML_LigthsSetName(ID id, const char* name)
 {
 	ML_PRECOND(_VOID);
-	ArrLights->SetLightName(id, name);
+	ArrLights->setLightName(id, name);
 }
 
 
 SX_LIB_API void SML_LigthsSetAngle(ID id, float angle)
 {
 	ML_PRECOND(_VOID);
-	ArrLights->SetLightAngle(id, angle, true);
+	ArrLights->setLightAngle(id, angle, true);
 }
 
 SX_LIB_API void SML_LigthsSetTopRadius(ID id, float top_radius)
 {
 	ML_PRECOND(_VOID);
-	ArrLights->SetLightTopRadius(id, top_radius);
+	ArrLights->setLightTopRadius(id, top_radius);
 }
 
 SX_LIB_API void SML_LigthsSetDist(ID id, float radius_height, bool is_create)
 {
 	ML_PRECOND(_VOID);
-	ArrLights->SetLightDist(id, radius_height, is_create);
+	ArrLights->setLightDist(id, radius_height, is_create);
 }
 
 
 SX_LIB_API float SML_LigthsGetShadowBias(ID id)
 {
 	ML_PRECOND(-1);
-	return ArrLights->GetShadowBias(id);
+	return ArrLights->getShadowBias(id);
 }
 
 SX_LIB_API void SML_LigthsSetShadowBias(ID id, float bias)
 {
 	ML_PRECOND(_VOID);
-	return ArrLights->SetShadowBias(id, bias);
+	return ArrLights->setShadowBias(id, bias);
 }
 
 SX_LIB_API void SML_LigthsSetShadowBlurPixel(ID id, float blur_pixel)
 {
 	ML_PRECOND(_VOID);
-	ArrLights->SetShadowBlurPixel(id, blur_pixel);
+	ArrLights->setShadowBlurPixel(id, blur_pixel);
 }
 
 SX_LIB_API float SML_LigthsGetShadowBlurPixel(ID id)
 {
 	ML_PRECOND(-1);
-	return ArrLights->GetShadowBlurPixel(id);
+	return ArrLights->getShadowBlurPixel(id);
 }
 SX_LIB_API void SML_LigthsSetShadowLocalNear(ID id, float slnear)
 {
 	ML_PRECOND(_VOID);
-	ArrLights->SetShadowLocalNear(id, slnear);
+	ArrLights->setShadowLocalNear(id, slnear);
 }
 
 SX_LIB_API float SML_LigthsGetShadowLocalNear(ID id)
 {
 	ML_PRECOND(-1);
-	return ArrLights->GetShadowLocalNear(id);
+	return ArrLights->getShadowLocalNear(id);
 }
 
 SX_LIB_API void SML_LigthsSetShadowLocalFar(ID id, float slfar)
 {
 	ML_PRECOND(_VOID);
-	ArrLights->SetShadowLocalFar(id, slfar);
+	ArrLights->setShadowLocalFar(id, slfar);
 }
 
 SX_LIB_API float SML_LigthsGetShadowLocalFar(ID id)
 {
 	ML_PRECOND(-1);
-	return ArrLights->GetShadowLocalFar(id);
+	return ArrLights->getShadowLocalFar(id);
 }
 
 SX_LIB_API void SML_LigthsSetCubeEdgeEnable(ID id, int edge, bool enable)
 {
 	ML_PRECOND(_VOID);
-	ArrLights->SetLightCubeEdgeEnable(id, edge, enable);
+	ArrLights->setLightCubeEdgeEnable(id, edge, enable);
 }
 
 SX_LIB_API bool SML_LigthsGetCubeEdgeEnable(ID id, int edge)
 {
 	ML_PRECOND(false);
-	return ArrLights->GetLightCubeEdgeEnable(id, edge);
+	return ArrLights->getLightCubeEdgeEnable(id, edge);
 }
 
 
 SX_LIB_API float SML_LigthsGetAngle(ID id)
 {
 	ML_PRECOND(-1);
-	return ArrLights->GetLightAngle(id);
+	return ArrLights->getLightAngle(id);
 }
 
 SX_LIB_API float SML_LigthsGetTopRadius(ID id)
 {
 	ML_PRECOND(-1);
-	return ArrLights->GetLightTopRadius(id);
+	return ArrLights->getLightTopRadius(id);
 }
 
 SX_LIB_API ID SML_LigthsGetIDArr(ID id, ID inid, int how)
 {
 	ML_PRECOND(-1);
-	return ArrLights->GetLightIDArr(id, inid, how);
+	return ArrLights->getLightIDArr(id, inid, how);
 }
 
 SX_LIB_API void SML_LigthsSetIDArr(ID id, ID inid, int how, ID id_arr)
 {
 	ML_PRECOND(_VOID);
-	ArrLights->SetLightIDArr(id, inid, how, id_arr);
+	ArrLights->setLightIDArr(id, inid, how, id_arr);
 }
 
 SX_LIB_API void SML_LigthsSetTypeShadowed(ID id, LTYPE_SHADOW type)
 {
 	ML_PRECOND(_VOID);
-	ArrLights->SetLightTypeShadowed(id, type);
+	ArrLights->setLightTypeShadowed(id, type);
 }
 
 SX_LIB_API LTYPE_SHADOW SML_LigthsGetTypeShadowed(ID id)
 {
 	ML_PRECOND(LTYPE_SHADOW_NONE);
-	return ArrLights->GetLightTypeShadowed(id);
+	return ArrLights->getLightTypeShadowed(id);
 }
 
 SX_LIB_API bool SML_LigthsCountUpdateUpdate(ID id, const float3* viewpos, int ghow)
 {
 	ML_PRECOND(false);
-	return ArrLights->LightCountUpdateUpdate(id, viewpos, ghow);
+	return ArrLights->lightCountUpdateUpdate(id, viewpos, ghow);
 }
 
 SX_LIB_API bool SML_LigthsCountUpdateAllowed(ID id, int ghow)
 {
 	ML_PRECOND(false);
-	return ArrLights->LightCountUpdateAllowed(id, ghow);
+	return ArrLights->lightCountUpdateAllowed(id, ghow);
 }
 
 SX_LIB_API void SML_LigthsCountUpdateNull(ID id)
 {
 	ML_PRECOND(_VOID);
-	ArrLights->LightCountUpdateNull(id);
+	ArrLights->lightCountUpdateNull(id);
 }
 
 SX_LIB_API void SML_LigthsToneMappingCom(DWORD timeDelta, float factor_adapted)
 {
 	ML_PRECOND(_VOID);
-	ArrLights->ToneMappingCom(timeDelta, factor_adapted);
+	ArrLights->toneMappingCom(timeDelta, factor_adapted);
 }
 
 SX_LIB_API int SML_LigthsDelGetCount()
 {
 	ML_PRECOND(-1);
-	return ArrLights->DelGetCount();
+	return ArrLights->delGetCount();
 }
 
 SX_LIB_API LTYPE_LIGHT SML_LigthsDelGetType(ID key)
 {
 	ML_PRECOND(LTYPE_LIGHT_NONE);
-	return ArrLights->DelGetType(key);
+	return ArrLights->delGetType(key);
 }
 
 SX_LIB_API void SML_LigthsDelDel(ID key)
 {
 	ML_PRECOND(_VOID);
-	ArrLights->DelDel(key);
+	ArrLights->delDel(key);
 }
 
 SX_LIB_API ID SML_LigthsDelGetIDArr(ID key, ID inid, int how)
 {
 	ML_PRECOND(-1);
-	return ArrLights->DelGetIDArr(key, inid, how);
+	return ArrLights->delGetIDArr(key, inid, how);
 }
 
 //#############################################################################
@@ -819,7 +819,7 @@ SX_LIB_API void SML_MtlRefPreRenderPlane(ID id, D3DXPLANE* plane)
 	ArrMaterials->MtlRefPreRenderPlane(id, plane);
 }
 
-SX_LIB_API const ISXFrustum* SML_MtlRefGetfrustum(ID id, int cube)
+SX_LIB_API const IFrustum* SML_MtlRefGetfrustum(ID id, int cube)
 {
 	ML_PRECOND(0);
 	return ArrMaterials->MtlRefGetfrustum(id, cube);
diff --git a/source/mtllight/sxmtllight.h b/source/mtllight/sxmtllight.h
index 304e0ef31a58a568a6279295e360b5c0c5352220..6bb2102dbaad3165f1145a4ca13e6676efe55b13 100644
--- a/source/mtllight/sxmtllight.h
+++ b/source/mtllight/sxmtllight.h
@@ -230,11 +230,11 @@ SX_LIB_API void SML_LigthsSetCastGlobalShadow(bool isShadowed);
  \note Предварительный просчет - просчет для всего света (к примеру в другом потоке)
 @{*/
 
-SX_LIB_API bool SML_LigthsComVisibleForFrustum(ID id, const ISXFrustum *pFrustum);	//!< виден ли свет в данном фрустуме frustum (отдельный просчет)
+SX_LIB_API bool SML_LigthsComVisibleForFrustum(ID id, const IFrustum *pFrustum);	//!< виден ли свет в данном фрустуме frustum (отдельный просчет)
 SX_LIB_API float SML_LigthsComDistFor(ID id, const float3 *pViewPos);				//!< дистанция от viewpos до начала света (отдельный просчет)
 
 //! просчет видимости и расстояния от наблюдателя viewpos до начала света, для каждого света (предварительный просчет)
-SX_LIB_API void SML_LigthsComVisibleFrustumDistFor(const ISXFrustum *pFrustum, const float3 *pViewPos);
+SX_LIB_API void SML_LigthsComVisibleFrustumDistFor(const IFrustum *pFrustum, const float3 *pViewPos);
 SX_LIB_API bool SML_LigthsGetVisibleForFrustum(ID id);	//!< виден ли свет в просчитанном фрустуме
 SX_LIB_API float SML_LigthsGetDistFor(ID id);			//!< просчитанная дистанция от позиции наблюдателя до начала света
 
@@ -375,7 +375,7 @@ SX_LIB_API void SML_LigthsShadowSoft(
 	);
 
 //! возвращает указатель фрустума света
-SX_LIB_API ISXFrustum* SML_LigthsGetFrustum(
+SX_LIB_API IFrustum* SML_LigthsGetFrustum(
 	ID id,	//!< идентификатор света
 	int iHow	//!< номер сплита для глобального, 0 для направленного, и номер стороны для точечного
 	);
@@ -807,7 +807,7 @@ SX_LIB_API void SML_MtlRefNullingCountUpdate(ID id);
 SX_LIB_API void SML_MtlRefSetMinMax(ID id, float3_t *pMin, float3_t *pMax);//!< установка экстремумов материала
 
 //! возвращает фрустум отражения, cube - сторона куба
-SX_LIB_API const ISXFrustum* SML_MtlRefGetfrustum(
+SX_LIB_API const IFrustum* SML_MtlRefGetfrustum(
 	ID id,		//!< идентификатора материала
 	int iCube	//!< сторона куба, если отражение плоское то необходимо указать в cube передать 0, иначе вернет NULL
 	);
diff --git a/source/particles/effect.cpp b/source/particles/effect.cpp
index 0a8216cec2cc02c1a669f04d6aca4177d07d2a7a..1e912425762aec4e0d33e8fcb76ade99a6f0af6d 100644
--- a/source/particles/effect.cpp
+++ b/source/particles/effect.cpp
@@ -1127,7 +1127,7 @@ void Effects::EffectRenderAll(DWORD timeDelta)
 	}
 }
 
-bool Effects::EffectVisibleCom(ID id, const ISXFrustum* frustum, float3* view)
+bool Effects::EffectVisibleCom(ID id, const IFrustum* frustum, float3* view)
 {
 	EFFECTS_EFFECT_PRECOND(id, false);
 
@@ -1151,7 +1151,7 @@ bool Effects::EffectVisibleCom(ID id, const ISXFrustum* frustum, float3* view)
 	return eff->ViewRender;
 }
 
-void Effects::EffectVisibleComAll(const ISXFrustum* frustum, float3* view)
+void Effects::EffectVisibleComAll(const IFrustum* frustum, float3* view)
 {
 	Core_RMatrixSet(G_RI_MATRIX_WORLD, &SMMatrixIdentity());
 
diff --git a/source/particles/effect.h b/source/particles/effect.h
index 8c083f92142c619118576540fa9687a117479af9..e3c5bac0f2cc15f81356b8f3226487018731bc2d 100644
--- a/source/particles/effect.h
+++ b/source/particles/effect.h
@@ -159,8 +159,8 @@ public:
 	void EffectDirGet(ID id, float3* dir);
 	void EffectRotGet(ID id, float3* rot);
 
-	bool EffectVisibleCom(ID id, const ISXFrustum* frustum, float3* view);
-	void EffectVisibleComAll(const ISXFrustum* frustum, float3* view);
+	bool EffectVisibleCom(ID id, const IFrustum* frustum, float3* view);
+	void EffectVisibleComAll(const IFrustum* frustum, float3* view);
 	bool EffectVisibleGet(ID id);
 	float EffectDistToViewGet(ID id);
 
diff --git a/source/particles/sxparticles.cpp b/source/particles/sxparticles.cpp
index f9d62c87b39af23599fc7c09a64d91eedabae6cb..4497c85ff902a1cc7a0fb4cf270143e7f60205d9 100644
--- a/source/particles/sxparticles.cpp
+++ b/source/particles/sxparticles.cpp
@@ -326,14 +326,14 @@ SX_LIB_API void SPE_EffectRotGet(ID id, float3* rot)
 }
 
 
-SX_LIB_API bool SPE_EffectVisibleCom(ID id, const ISXFrustum* frustum, float3* view)
+SX_LIB_API bool SPE_EffectVisibleCom(ID id, const IFrustum* frustum, float3* view)
 {
 	PE_PRECOND(false);
 
 	return ArrEffects->EffectVisibleCom(id, frustum, view);
 }
 
-SX_LIB_API void SPE_EffectVisibleComAll(const ISXFrustum* frustum, float3* view)
+SX_LIB_API void SPE_EffectVisibleComAll(const IFrustum* frustum, float3* view)
 {
 	PE_PRECOND(_VOID);
 
diff --git a/source/particles/sxparticles.h b/source/particles/sxparticles.h
index dfc0eeb06847ae3256c6e9140a99d8c51a6171d3..c931ca4be67139916e27b4d447217207dbab29cd 100644
--- a/source/particles/sxparticles.h
+++ b/source/particles/sxparticles.h
@@ -498,10 +498,10 @@ SX_LIB_API void SPE_EffectRotGet(ID id, float3* rot);
 
 
 //! просчет видимости эффекта для фрустума frustum, и расчет расстояния от позиции наблюдателя view до эффекта, возвращает виден ли фруустуму эффект
-SX_LIB_API bool SPE_EffectVisibleCom(ID id, const ISXFrustum* frustum, float3* view);	
+SX_LIB_API bool SPE_EffectVisibleCom(ID id, const IFrustum* frustum, float3* view);	
 
 //! просчет видимости всех эффектов для фрустума frustum, и расчет расстояний от позиции наблюдателя view до всех эффектов
-SX_LIB_API void SPE_EffectVisibleComAll(const ISXFrustum* frustum, float3* view);
+SX_LIB_API void SPE_EffectVisibleComAll(const IFrustum* frustum, float3* view);
 
 
 //! виден ли эффект? по результатам просчетов #SPE_EffectVisibleComAll
diff --git a/source/render/gdata.cpp b/source/render/gdata.cpp
index 0591d76b0542589663e2e9548ccfa3bda5927e2b..5460a14c33e2cfc0dbb190e6dc080e48e479aa8a 100644
--- a/source/render/gdata.cpp
+++ b/source/render/gdata.cpp
@@ -17,7 +17,7 @@ namespace GData
 
 
 	DS_RT FinalImage = DS_RT_SCENELIGHT;
-	ISXCamera* ObjCamera = 0;
+	ICamera* ObjCamera = 0;
 	ID IDSelectTex = -1;
 	
 	float2_t NearFar = float2_t(0.025, 400);
diff --git a/source/render/gdata.h b/source/render/gdata.h
index 02125fe56524158ab2c30ba6dedc4f10ae37506b..4fa35d7da60352e2fe7790a3f27f6184173d3d5b 100644
--- a/source/render/gdata.h
+++ b/source/render/gdata.h
@@ -51,7 +51,7 @@ namespace GData
 	extern DS_RT FinalImage;
 
 	//!< камера для которой будет рендер
-	extern ISXCamera* ObjCamera;	
+	extern ICamera* ObjCamera;	
 
 	//! id текстуры с цветмо выделения (для редакторов)
 	extern ID IDSelectTex;
diff --git a/source/render/sxrender.cpp b/source/render/sxrender.cpp
index 987be6f37c2a822ca23ae055520077c5e9c4d7fb..0b5458146650a2a006e1d5dcda5367ff30367eaa 100644
--- a/source/render/sxrender.cpp
+++ b/source/render/sxrender.cpp
@@ -144,12 +144,12 @@ SX_LIB_API void SRender_SetParentHandleWin3D(HWND hWnd)
 	GData::HandleParent3D = hWnd;
 }
 
-SX_LIB_API void SRender_SetCamera(ISXCamera *pCamera)
+SX_LIB_API void SRender_SetCamera(ICamera *pCamera)
 {
 	GData::ObjCamera = pCamera;
 }
 
-SX_LIB_API ISXCamera* SRender_GetCamera()
+SX_LIB_API ICamera* SRender_GetCamera()
 {
 	return GData::ObjCamera;
 }
diff --git a/source/render/sxrender.h b/source/render/sxrender.h
index 1b529bdc9ef464a9d52b79213efe70ca52a14580..eba1c9b18e60eb75a72f426544535e176c708aa0 100644
--- a/source/render/sxrender.h
+++ b/source/render/sxrender.h
@@ -231,10 +231,10 @@ SX_LIB_API void SRender_SetParentHandleWin3D(HWND hWnd);
 
 
 //! установка текущей камеры
-SX_LIB_API void SRender_SetCamera(ISXCamera *pCamera);
+SX_LIB_API void SRender_SetCamera(ICamera *pCamera);
 
 //! возвращает текущую камеру
-SX_LIB_API ISXCamera* SRender_GetCamera();
+SX_LIB_API ICamera* SRender_GetCamera();
 
 //**************************************************************************
 
diff --git a/source/score/sound.cpp b/source/score/sound.cpp
index 20f62be813b105057ff6a5599c71ea293f579546..6c4d69edefb6902ee2a8a7dc8aaade743b6a0a3c 100644
--- a/source/score/sound.cpp
+++ b/source/score/sound.cpp
@@ -1157,6 +1157,7 @@ ID CSoundManager::addSound(CSound* snd)
 	}
 
 	m_aSounds.push_back(snd);
+
 	return m_aSounds.size() - 1;
 }
 
@@ -1186,7 +1187,7 @@ void CSoundManager::soundDelete(ID id)
 		else
 			m_a2dInst.erase(szStr);
 	}
-	mem_delete(snd);
+	mem_delete(m_aSounds[id]);
 }
 
 //#############################################################################
diff --git a/source/skyxengine.cpp b/source/skyxengine.cpp
index 73bf1a17f4c9e753dd43582bf6e348404cced800..66db341e6eb2901a543ab6599d980291ad0e317c 100644
--- a/source/skyxengine.cpp
+++ b/source/skyxengine.cpp
@@ -226,7 +226,10 @@ void SkyXEngine_Init(HWND hWnd3D, HWND hWndParent3D)
 	SGCore_SetFunc_MtlGetPhysicType((g_func_mtl_get_physic_type)SML_MtlGetPhysicMaterial);
 
 	SGCore_SkyBoxCr();
+#if !defined(SX_MATERIAL_EDITOR)
 	SGCore_SkyCloudsCr();
+#endif
+	SGCore_LoadTexAddConstAllInDir("sky");
 
 //#if defined(SX_GAME)
 	SGCore_OC_SetEnable(true);
@@ -375,20 +378,22 @@ void SkyXEngine_InitPaths()
 		}
 	}
 
-	Core_RStringSet(G_RI_STRING_PATH_EXE, tmppathexe);
+	const char *szPathToExe = FileCanonizePath(tmppathexe);
+
+	Core_RStringSet(G_RI_STRING_PATH_EXE, szPathToExe);
 
-	sprintf(tmppath, "%s%s", tmppathexe, "/worktex/");
+	sprintf(tmppath, "%s%s", szPathToExe, "/worktex/");
 	Core_RStringSet(G_RI_STRING_PATH_WORKTEX, tmppath);
 	FileCreateDir(tmppath);
 
-	sprintf(tmppath, "%s/%s/", tmppathexe, SKYXENGINE_RELPATH_GAMESOURCE);
+	sprintf(tmppath, "%s/%s/", szPathToExe, SKYXENGINE_RELPATH_GAMESOURCE);
 	Core_RStringSet(G_RI_STRING_PATH_GAMESOURCE, tmppath);
 	SetCurrentDirectoryA(tmppath);
 
-	sprintf(tmppath, "%s/%s/", tmppathexe, SKYXENGINE_RELPATH_EDITOR_CACHE);
+	sprintf(tmppath, "%s/%s/", szPathToExe, SKYXENGINE_RELPATH_EDITOR_CACHE);
 	Core_RStringSet(G_RI_STRING_PATH_EDITOR_CACHE, tmppath);
 
-	sprintf(tmppath, "%s%s", tmppathexe, "/screenshots/");
+	sprintf(tmppath, "%s%s", szPathToExe, "/screenshots/");
 	Core_RStringSet(G_RI_STRING_PATH_SCREENSHOTS, tmppath);
 	FileCreateDir(tmppath);
 
@@ -584,6 +589,13 @@ HWND SkyXEngine_CreateWindow(const char *szName, const char *szCaption, int iWid
 
 void SkyXEngine_Frame(DWORD timeDelta)
 {
+
+	if (SSInput_GetKeyState(SIK_O))
+	{
+		SLevel_Clear();
+		SLevel_Load("stalker_atp", true);
+	}
+
 	static IDirect3DDevice9 *pDXDevice = SGCore_GetDXDevice();
 	static float3 vCamPos, vCamDir;
 	static float4x4 mView, mProjLight;
@@ -959,24 +971,22 @@ void SkyXEngine_Frame(DWORD timeDelta)
 
 void SkyXEngind_UpdateDataCVar()
 {
-	ID GlobalLight = SML_LigthsGetGlobal();
+	ID idGlobalLight = SML_LigthsGetGlobal();
 	static const bool * r_pssm_4or3 = GET_PCVAR_BOOL("r_pssm_4or3");
 	static bool r_pssm_4or3_old = true;
 
 	//проверяем не изменилось ли значение квара, если изменилось то меняем и количество сплитов
-	if (r_pssm_4or3 && r_pssm_4or3_old != (*r_pssm_4or3) && GlobalLight >= 0)
+	if (r_pssm_4or3 && r_pssm_4or3_old != (*r_pssm_4or3) && idGlobalLight >= 0)
 	{
 		r_pssm_4or3_old = (*r_pssm_4or3);
-		SML_LigthsSet4Or3SplitsG(GlobalLight, r_pssm_4or3_old);
+		SML_LigthsSet4Or3SplitsG(idGlobalLight, r_pssm_4or3_old);
 	}
 
 	static const bool * r_pssm_shadowed = GET_PCVAR_BOOL("r_pssm_shadowed");
-	static bool r_pssm_shadowed_old = true;
 
-	if (r_pssm_shadowed && r_pssm_shadowed_old != (*r_pssm_shadowed) && GlobalLight >= 0)
+	if (r_pssm_shadowed && idGlobalLight >= 0)
 	{
-		r_pssm_shadowed_old = (*r_pssm_shadowed);
-		SML_LigthsSetTypeShadowed(GlobalLight, (r_pssm_shadowed_old ? LTYPE_SHADOW_DYNAMIC : LTYPE_SHADOW_NONE));
+		SML_LigthsSetTypeShadowed(idGlobalLight, ((*r_pssm_shadowed) ? LTYPE_SHADOW_DYNAMIC : LTYPE_SHADOW_NONE));
 	}
 
 	static const float * r_pssm_quality = GET_PCVAR_FLOAT("r_pssm_quality");
diff --git a/source/sxleveleditor/game_callback.cpp b/source/sxleveleditor/game_callback.cpp
index fb0cd3e14ce96d538cf2e63b4d84127580cd2ac6..2fbe3b32db669f4698110e2b6fb40ac972762148 100644
--- a/source/sxleveleditor/game_callback.cpp
+++ b/source/sxleveleditor/game_callback.cpp
@@ -432,17 +432,18 @@ LRESULT SXLevelEditor_ButtonGameValue_Click(HWND hwnd, UINT msg, WPARAM wParam,
 	
 	if (gui_func::dialogs::SelectFileOwn(tmpname, tmppath, Core_RStringGet(G_RI_STRING_PATH_GS_MODELS), "dse", "Select model", true, Core_RStringGet(G_RI_STRING_PATH_GS_MODELS), SXLevelEditor::JobWindow->getHWND(), SkyXEngine_EditorHandlerGetPreviewData, SkyXEngine_EditorHandlerGetDSEinfo))
 	{
-		String tmpstr = tmppath + strlen(Core_RStringGet(G_RI_STRING_PATH_GAMESOURCE));
+		String sRpath = StrCutStrI(tmppath, Core_RStringGet(G_RI_STRING_PATH_GS_MODELS));
+		/*String tmpstr = tmppath + strlen(Core_RStringGet(G_RI_STRING_PATH_GAMESOURCE));
 		tmpstr.replaceAll("\\", "/");
-		sprintf(tmpname, "%s", tmpstr.c_str());
-		SXLevelEditor::EditGameValue->setText(tmpname);
+		sprintf(tmpname, "%s", tmpstr.c_str());*/
+		SXLevelEditor::EditGameValue->setText(sRpath.c_str());
 
 		int sel = SXLevelEditor::ListBoxList->getSel();
-		SXLevelEditor::ListViewGameClass->setItemText(tmpname, 1, str);
+		SXLevelEditor::ListViewGameClass->setItemText((char*)sRpath.c_str(), 1, str);
 		CBaseEntity* bEnt = SXGame_EntGet(SXLevelEditor::ListBoxList->getItemData(sel));
 		if (bEnt)
 		{
-			bEnt->setKV(pd->szKey, tmpname);
+			bEnt->setKV(pd->szKey, sRpath.c_str());
 		}
 	}
 
diff --git a/source/sxleveleditor/green_callback.cpp b/source/sxleveleditor/green_callback.cpp
index 7ed03c3c401bd7446473b3a8d9427871c177d6cb..efdf8d7136267ddc2245300ca251cb2cb2fffb67 100644
--- a/source/sxleveleditor/green_callback.cpp
+++ b/source/sxleveleditor/green_callback.cpp
@@ -122,13 +122,13 @@ LRESULT SXLevelEditor_ButtonGreenModel_Click(HWND hwnd, UINT msg, WPARAM wParam,
 	
 	if (gui_func::dialogs::SelectFileOwn(tmpname, tmppath, Core_RStringGet(G_RI_STRING_PATH_GS_MESHES), "dse", "Select model", true, Core_RStringGet(G_RI_STRING_PATH_GS_MESHES), SXLevelEditor::JobWindow->getHWND(), SkyXEngine_EditorHandlerGetPreviewData, SkyXEngine_EditorHandlerGetDSEinfo))
 	{
-		StrCutMesh(tmppath, tmpname);
-		SXLevelEditor::EditGreenModel->setText(tmpname);
+		String sRpath = StrCutStrI(tmppath, Core_RStringGet(G_RI_STRING_PATH_GS_MESHES));
+		SXLevelEditor::EditGreenModel->setText(sRpath.c_str());
 		int sel = SXLevelEditor::ListBoxList->getSel();
 		if (SXLevelEditor::ActiveGroupType == EDITORS_LEVEL_GROUPTYPE_GREEN)
 		{
 			if (sel >= 0 && sel < SGeom_GreenGetCount())
-				SGeom_GreenMSetLod(sel, 0, tmpname);
+				SGeom_GreenMSetLod(sel, 0, sRpath.c_str());
 		}
 	}
 	return 0;
@@ -143,13 +143,13 @@ LRESULT SXLevelEditor_ButtonGreenLod1_Click(HWND hwnd, UINT msg, WPARAM wParam,
 
 	if (gui_func::dialogs::SelectFileOwn(tmpname, tmppath, Core_RStringGet(G_RI_STRING_PATH_GS_MESHES), "dse", "Select model", true, Core_RStringGet(G_RI_STRING_PATH_GS_MESHES), SXLevelEditor::JobWindow->getHWND(), SkyXEngine_EditorHandlerGetPreviewData, SkyXEngine_EditorHandlerGetDSEinfo))
 	{
-		StrCutMesh(tmppath, tmpname);
-		SXLevelEditor::EditGreenLod1->setText(tmpname);
+		String sRpath = StrCutStrI(tmppath, Core_RStringGet(G_RI_STRING_PATH_GS_MESHES));
+		SXLevelEditor::EditGreenLod1->setText(sRpath.c_str());
 		int sel = SXLevelEditor::ListBoxList->getSel();
 		if (SXLevelEditor::ActiveGroupType == EDITORS_LEVEL_GROUPTYPE_GREEN)
 		{
 			if (sel >= 0 && sel < SGeom_GreenGetCount())
-				SGeom_GreenMSetLod(sel, 1, tmpname);
+				SGeom_GreenMSetLod(sel, 1, sRpath.c_str());
 		}
 	}
 	return 0;
@@ -164,13 +164,13 @@ LRESULT SXLevelEditor_ButtonGreenLod2_Click(HWND hwnd, UINT msg, WPARAM wParam,
 
 	if (gui_func::dialogs::SelectFileOwn(tmpname, tmppath, Core_RStringGet(G_RI_STRING_PATH_GS_MESHES), "dse", "Select model", true, Core_RStringGet(G_RI_STRING_PATH_GS_MESHES), SXLevelEditor::JobWindow->getHWND(), SkyXEngine_EditorHandlerGetPreviewData, SkyXEngine_EditorHandlerGetDSEinfo))
 	{
-		StrCutMesh(tmppath, tmpname);
-		SXLevelEditor::EditGreenLod2->setText(tmpname);
+		String sRpath = StrCutStrI(tmppath, Core_RStringGet(G_RI_STRING_PATH_GS_MESHES));
+		SXLevelEditor::EditGreenLod2->setText(sRpath.c_str());
 		int sel = SXLevelEditor::ListBoxList->getSel();
 		if (SXLevelEditor::ActiveGroupType == EDITORS_LEVEL_GROUPTYPE_GREEN)
 		{
 			if (sel >= 0 && sel < SGeom_GreenGetCount())
-				SGeom_GreenMSetLod(sel, 2, tmpname);
+				SGeom_GreenMSetLod(sel, 2, sRpath.c_str());
 		}
 	}
 	return 0;
@@ -209,13 +209,13 @@ LRESULT SXLevelEditor_ButtonGreenNav_Click(HWND hwnd, UINT msg, WPARAM wParam, L
 
 	if (gui_func::dialogs::SelectFileOwn(tmpname, tmppath, Core_RStringGet(G_RI_STRING_PATH_GS_MESHES), "dse", "Select model", true, Core_RStringGet(G_RI_STRING_PATH_GS_MESHES), SXLevelEditor::JobWindow->getHWND(), SkyXEngine_EditorHandlerGetPreviewData, SkyXEngine_EditorHandlerGetDSEinfo))
 	{
-		StrCutMesh(tmppath, tmpname);
-		SXLevelEditor::EditGreenNav->setText(tmpname);
+		String sRpath = StrCutStrI(tmppath, Core_RStringGet(G_RI_STRING_PATH_GS_MESHES));
+		SXLevelEditor::EditGreenNav->setText(sRpath.c_str());
 		int sel = SXLevelEditor::ListBoxList->getSel();
 		if (SXLevelEditor::ActiveGroupType == EDITORS_LEVEL_GROUPTYPE_GREEN)
 		{
 			if (sel >= 0 && sel < SGeom_GreenGetCount())
-				SGeom_GreenMSetNav(sel, tmpname);
+				SGeom_GreenMSetNav(sel, sRpath.c_str());
 		}
 	}
 	return 0;
diff --git a/source/sxleveleditor/model_callback.cpp b/source/sxleveleditor/model_callback.cpp
index b1077a5eed113df7834eed23e6bdef8ecc3aead2..ad67fbbf3742c14a9a29fad100fe46a27b1987ea 100644
--- a/source/sxleveleditor/model_callback.cpp
+++ b/source/sxleveleditor/model_callback.cpp
@@ -137,8 +137,8 @@ LRESULT SXLevelEditor_ButtonGeomModel_Click(HWND hwnd, UINT msg, WPARAM wParam,
 
 	if (gui_func::dialogs::SelectFileOwn(tmpname, tmppath, Core_RStringGet(G_RI_STRING_PATH_GS_MESHES), "dse", "Select model", true, Core_RStringGet(G_RI_STRING_PATH_GS_MESHES), SXLevelEditor::JobWindow->getHWND(), SkyXEngine_EditorHandlerGetPreviewData, SkyXEngine_EditorHandlerGetDSEinfo))
 	{
-		StrCutMesh(tmppath, tmpname);
-		SXLevelEditor::EditGeomModel->setText(tmpname);
+		String sRpath = StrCutStrI(tmppath, Core_RStringGet(G_RI_STRING_PATH_GS_MESHES));
+		SXLevelEditor::EditGeomModel->setText(sRpath.c_str());
 	}
 	return 0;
 }
@@ -152,13 +152,13 @@ LRESULT SXLevelEditor_ButtonGeomLod1_Click(HWND hwnd, UINT msg, WPARAM wParam, L
 
 	if (gui_func::dialogs::SelectFileOwn(tmpname, tmppath, Core_RStringGet(G_RI_STRING_PATH_GS_MESHES), "dse", "Select model", true, Core_RStringGet(G_RI_STRING_PATH_GS_MESHES), SXLevelEditor::JobWindow->getHWND(), SkyXEngine_EditorHandlerGetPreviewData, SkyXEngine_EditorHandlerGetDSEinfo))
 	{
-		StrCutMesh(tmppath, tmpname);
-		SXLevelEditor::EditGeomLod1->setText(tmpname);
+		String sRpath = StrCutStrI(tmppath, Core_RStringGet(G_RI_STRING_PATH_GS_MESHES));
+		SXLevelEditor::EditGeomLod1->setText(sRpath.c_str());
 		int sel = SXLevelEditor::ListBoxList->getSel();
 		if (SXLevelEditor::ActiveGroupType == EDITORS_LEVEL_GROUPTYPE_GEOM)
 		{
 			if (sel >= 0 && sel < SGeom_ModelsGetCount())
-				SGeom_ModelsMSetLodPath(sel, tmpname);
+				SGeom_ModelsMSetLodPath(sel, sRpath.c_str());
 		}
 	}
 	return 0;
diff --git a/source/sxleveleditor/sxleveleditor.cpp b/source/sxleveleditor/sxleveleditor.cpp
index 8b5dc29a832ec0d07359aa7fe22a1b9f4ae4be90..407eacd317af2ae8d35015f19e17137321f8e37b 100644
--- a/source/sxleveleditor/sxleveleditor.cpp
+++ b/source/sxleveleditor/sxleveleditor.cpp
@@ -212,6 +212,10 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLin
 
 	SkyXEngine_Init(SXLevelEditor::RenderWindow->getHWND(), SXLevelEditor::JobWindow->getHWND());
 
+	SGCore_SkyBoxLoadTex("sky_2_cube.dds");
+	SGCore_SkyCloudsLoadTex("sky_oblaka.dds");
+	SGCore_SkyCloudsSetWidthHeightPos(2000, 2000, &float3(0, 0, 0));
+
 	SkyXEngine_RunGenPreview();
 
 	SRender_GetCamera()->setPosition(&float3(0, 0.5, -2));
diff --git a/source/sxmaterialeditor/buttons_callback.cpp b/source/sxmaterialeditor/buttons_callback.cpp
index c4fdd8fa0a7e5a2ba0a88adad4763f2ebad68406..8e5eb7c3b26bd4d9d23c36f3790066c00899d17d 100644
--- a/source/sxmaterialeditor/buttons_callback.cpp
+++ b/source/sxmaterialeditor/buttons_callback.cpp
@@ -3,17 +3,14 @@
 
 LRESULT SXMaterialEditor_ButtonSkyBox_Click(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 {
-	char tmppath[1024];
-	tmppath[0] = 0;
-	char* tmpname = 0;
+	char szName[1024];
 	//gui_func::dialogs::SelectFile(SXGUI_DIALOG_FILE_OPEN, tmppath, 0, Core_RStringGet(G_RI_STRING_PATH_GS_TEXTURES), FILE_FILTER_TEXTURE);
 	
-	if (gui_func::dialogs::SelectFileOwn(tmpname, tmppath, Core_RStringGet(G_RI_STRING_PATH_GS_TEXTURES), "dds", "Select texture", true, Core_RStringGet(G_RI_STRING_PATH_GS_TEXTURES), SXMaterialEditor::JobWindow->getHWND(), SkyXEngine_EditorHandlerGetPreviewData, SkyXEngine_EditorHandlerGetTextureInfo))
+	if (gui_func::dialogs::SelectFileOwn(szName, 0, Core_RStringGet(G_RI_STRING_PATH_GS_TEXTURES), "dds", "Select texture", true, Core_RStringGet(G_RI_STRING_PATH_GS_TEXTURES), SXMaterialEditor::JobWindow->getHWND(), SkyXEngine_EditorHandlerGetPreviewData, SkyXEngine_EditorHandlerGetTextureInfo))
 	{
-		tmpname = tmppath + strlen(Core_RStringGet(G_RI_STRING_PATH_GS_TEXTURES));
-		SXMaterialEditor::EditSkyBox->setText(tmpname);
+		SXMaterialEditor::EditSkyBox->setText(szName);
 
-		SGCore_SkyBoxLoadTex(tmpname);
+		SGCore_SkyBoxLoadTex(szName);
 	}
 	return 0;
 }
diff --git a/source/sxmaterialeditor/edits_callback.cpp b/source/sxmaterialeditor/edits_callback.cpp
index bfadb9bb574daba3b608ed28cf1e1c5a075b2245..0b5f9cbe204a2901a4c02dacb8855b5a83895f38 100644
--- a/source/sxmaterialeditor/edits_callback.cpp
+++ b/source/sxmaterialeditor/edits_callback.cpp
@@ -1,21 +1,34 @@
 
 #include "edits_callback.h"
 
+void TexProcInputString(const char *szStr)
+{
+	if (StrTrim(szStr).length() > 0)
+	{
+		char szMessage[1024];
+		szMessage[0] = 0;
+		sprintf(szMessage, "Texture '%s' not found", szStr);
+		MessageBox(0, szMessage, 0, 0);
+	}
+}
+
 LRESULT SXMaterialEditor_EditSkyBox_Enter(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 {
-	char tmptextval[SXGC_LOADTEX_MAX_SIZE_DIRNAME];
-	tmptextval[0] = 0;
+	char szStr[SXGC_LOADTEX_MAX_SIZE_DIRNAME];
+	szStr[0] = 0;
 
-	SXMaterialEditor::EditSkyBox->getText(tmptextval, SXGC_LOADTEX_MAX_SIZE_DIRNAME);
+	SXMaterialEditor::EditSkyBox->getText(szStr, SXGC_LOADTEX_MAX_SIZE_DIRNAME);
 
-	if (SGCore_LoadTexFileExists(tmptextval))
-		SGCore_SkyBoxLoadTex(tmptextval);
+	//MessageBox(0, "it is not done yet :)", 0, 0);
+	if (SGCore_LoadTexFileExists(szStr))
+		SGCore_SkyBoxLoadTex(szStr);
 	else
 	{
-		SGCore_SkyBoxGetActiveTex(tmptextval);
-		SXMaterialEditor::EditSkyBox->setText(tmptextval);
-
-		MessageBox(0,"texture not found",0,0);
+		char szStr2[SXGC_LOADTEX_MAX_SIZE_DIRNAME];
+		szStr2[0] = 0;
+		SGCore_SkyBoxGetActiveTex(szStr2);
+		SXMaterialEditor::EditSkyBox->setText(szStr2);
+		TexProcInputString(szStr);
 	}
 
 	return 0;
@@ -23,18 +36,20 @@ LRESULT SXMaterialEditor_EditSkyBox_Enter(HWND hwnd, UINT msg, WPARAM wParam, LP
 
 LRESULT SXMaterialEditor_EditTex_Enter(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 {
-	char tmptextval[SXGC_LOADTEX_MAX_SIZE_DIRNAME];
-	tmptextval[0] = 0;
+	char szStr[SXGC_LOADTEX_MAX_SIZE_DIRNAME];
+	szStr[0] = 0;
 
-	SXMaterialEditor::EditTex->getText(tmptextval, SXGC_LOADTEX_MAX_SIZE_DIRNAME);
-	if (SGCore_LoadTexFileExists(tmptextval))
-		SML_MtlSetTexture(SXMaterialEditor::IDMat, tmptextval);
+	SXMaterialEditor::EditTex->getText(szStr, SXGC_LOADTEX_MAX_SIZE_DIRNAME);
+	if (SGCore_LoadTexFileExists(szStr))
+		SML_MtlSetTexture(SXMaterialEditor::IDMat, szStr);
 	else
 	{
-		SML_MtlGetTexture(SXMaterialEditor::IDMat, tmptextval);
-		SXMaterialEditor::EditTex->setText(tmptextval);
-
-		MessageBox(0, "texture not found", 0, 0);
+		char szStr2[SXGC_LOADTEX_MAX_SIZE_DIRNAME];
+		szStr2[0] = 0;
+		SML_MtlGetTexture(SXMaterialEditor::IDMat, szStr2);
+		TexProcInputString(szStr);
+		
+		SXMaterialEditor::EditTex->setText(szStr);
 	}
 
 	return 0;
@@ -42,19 +57,21 @@ LRESULT SXMaterialEditor_EditTex_Enter(HWND hwnd, UINT msg, WPARAM wParam, LPARA
 
 LRESULT SXMaterialEditor_EditVS_Enter(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 {
-	char tmptextval[SXGC_SHADER_MAX_SIZE_DIRNAME];
-	tmptextval[0] = 0;
+	char szStr[SXGC_SHADER_MAX_SIZE_DIRNAME];
+	szStr[0] = 0;
 
-	SXMaterialEditor::EditVS->getText(tmptextval, SXGC_SHADER_MAX_SIZE_DIRNAME);
+	SXMaterialEditor::EditVS->getText(szStr, SXGC_SHADER_MAX_SIZE_DIRNAME);
 
-	if (SGCore_ShaderFileExists(tmptextval))
-		SML_MtlSetVS(SXMaterialEditor::IDMat, tmptextval);
+	if (SGCore_ShaderFileExists(szStr))
+		SML_MtlSetVS(SXMaterialEditor::IDMat, szStr);
 	else
 	{
-		SML_MtlGetVS(SXMaterialEditor::IDMat, tmptextval);
-		SXMaterialEditor::EditVS->setText(tmptextval);
-
-		MessageBox(0, "shader not found", 0, 0);
+		char szStr2[SXGC_LOADTEX_MAX_SIZE_DIRNAME];
+		szStr2[0] = 0;
+		SML_MtlGetVS(SXMaterialEditor::IDMat, szStr2);
+		TexProcInputString(szStr);
+		
+		SXMaterialEditor::EditVS->setText(szStr);
 	}
 
 	return 0;
@@ -62,19 +79,21 @@ LRESULT SXMaterialEditor_EditVS_Enter(HWND hwnd, UINT msg, WPARAM wParam, LPARAM
 
 LRESULT SXMaterialEditor_EditPS_Enter(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 {
-	char tmptextval[SXGC_SHADER_MAX_SIZE_DIRNAME];
-	tmptextval[0] = 0;
+	char szStr[SXGC_SHADER_MAX_SIZE_DIRNAME];
+	szStr[0] = 0;
 
-	SXMaterialEditor::EditPS->getText(tmptextval, SXGC_SHADER_MAX_SIZE_DIRNAME);
+	SXMaterialEditor::EditPS->getText(szStr, SXGC_SHADER_MAX_SIZE_DIRNAME);
 
-	if (SGCore_ShaderFileExists(tmptextval))
-		SML_MtlSetPS(SXMaterialEditor::IDMat, tmptextval);
+	if (SGCore_ShaderFileExists(szStr))
+		SML_MtlSetPS(SXMaterialEditor::IDMat, szStr);
 	else
 	{
-		SML_MtlGetPS(SXMaterialEditor::IDMat, tmptextval);
-		SXMaterialEditor::EditPS->setText(tmptextval);
-
-		MessageBox(0, "shader not found", 0, 0);
+		char szStr2[SXGC_LOADTEX_MAX_SIZE_DIRNAME];
+		szStr2[0] = 0;
+		SML_MtlGetPS(SXMaterialEditor::IDMat, szStr2);
+		TexProcInputString(szStr);
+		
+		SXMaterialEditor::EditPS->setText(szStr);
 	}
 
 	return 0;
@@ -82,13 +101,13 @@ LRESULT SXMaterialEditor_EditPS_Enter(HWND hwnd, UINT msg, WPARAM wParam, LPARAM
 
 LRESULT SXMaterialEditor_EditPenetration_Enter(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 {
-	char tmptextval[256];
-	tmptextval[0] = 0;
+	char szStr[256];
+	szStr[0] = 0;
 	float tmpval = 0;
 
-	SXMaterialEditor::EditPenetration->getText(tmptextval, 256);
+	SXMaterialEditor::EditPenetration->getText(szStr, 256);
 
-	sscanf(tmptextval, "%f", &tmpval);
+	sscanf(szStr, "%f", &tmpval);
 
 	SXMaterialEditor::TrackBarPenetration->setPos(tmpval * 100);
 	SML_MtlSetPenetration(SXMaterialEditor::IDMat, tmpval*0.01f);
@@ -99,19 +118,21 @@ LRESULT SXMaterialEditor_EditPenetration_Enter(HWND hwnd, UINT msg, WPARAM wPara
 
 LRESULT SXMaterialEditor_EditTexLighting_Enter(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 {
-	char tmptextval[SXGC_LOADTEX_MAX_SIZE_DIRNAME];
-	tmptextval[0] = 0;
+	char szStr[SXGC_LOADTEX_MAX_SIZE_DIRNAME];
+	szStr[0] = 0;
 	
-	SXMaterialEditor::EditTexLighting->getText(tmptextval, SXGC_LOADTEX_MAX_SIZE_DIRNAME);
+	SXMaterialEditor::EditTexLighting->getText(szStr, SXGC_LOADTEX_MAX_SIZE_DIRNAME);
 
-	if (SGCore_LoadTexFileExists(tmptextval))
-		SML_MtlSetTextureLighting(SXMaterialEditor::IDMat, tmptextval);
+	if (SGCore_LoadTexFileExists(szStr))
+		SML_MtlSetTextureLighting(SXMaterialEditor::IDMat, szStr);
 	else
 	{
-		SML_MtlGetTextureLighting(SXMaterialEditor::IDMat, tmptextval);
-		SXMaterialEditor::EditTexLighting->setText(tmptextval);
-
-		MessageBox(0, "texture not found", 0, 0);
+		char szStr2[SXGC_LOADTEX_MAX_SIZE_DIRNAME];
+		szStr2[0] = 0;
+		SML_MtlGetTextureLighting(SXMaterialEditor::IDMat, szStr2);
+		TexProcInputString(szStr);
+		
+		SXMaterialEditor::EditTexLighting->setText(szStr);
 	}
 
 	return 0;
@@ -120,19 +141,21 @@ LRESULT SXMaterialEditor_EditTexLighting_Enter(HWND hwnd, UINT msg, WPARAM wPara
 
 LRESULT SXMaterialEditor_EditMask_Enter(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 {
-	char tmptextval[SXGC_LOADTEX_MAX_SIZE_DIRNAME];
-	tmptextval[0] = 0;
+	char szStr[SXGC_LOADTEX_MAX_SIZE_DIRNAME];
+	szStr[0] = 0;
 	
-	SXMaterialEditor::EditMask->getText(tmptextval, SXGC_LOADTEX_MAX_SIZE_DIRNAME);
+	SXMaterialEditor::EditMask->getText(szStr, SXGC_LOADTEX_MAX_SIZE_DIRNAME);
 
-	if (SGCore_LoadTexFileExists(tmptextval))
-		SML_MtlSetMaskTex(SXMaterialEditor::IDMat, tmptextval);
+	if (SGCore_LoadTexFileExists(szStr))
+		SML_MtlSetMaskTex(SXMaterialEditor::IDMat, szStr);
 	else
 	{
-		SML_MtlGetMaskTex(SXMaterialEditor::IDMat, tmptextval);
-		SXMaterialEditor::EditMask->setText(tmptextval);
-
-		MessageBox(0, "texture not found", 0, 0);
+		char szStr2[SXGC_LOADTEX_MAX_SIZE_DIRNAME];
+		szStr2[0] = 0;
+		SML_MtlGetMaskTex(SXMaterialEditor::IDMat, szStr2);
+		TexProcInputString(szStr);
+		
+		SXMaterialEditor::EditMask->setText(szStr);
 	}
 
 	return 0;
@@ -140,19 +163,21 @@ LRESULT SXMaterialEditor_EditMask_Enter(HWND hwnd, UINT msg, WPARAM wParam, LPAR
 
 LRESULT SXMaterialEditor_EditMR_Enter(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 {
-	char tmptextval[SXGC_LOADTEX_MAX_SIZE_DIRNAME];
-	tmptextval[0] = 0;
+	char szStr[SXGC_LOADTEX_MAX_SIZE_DIRNAME];
+	szStr[0] = 0;
 	
-	SXMaterialEditor::EditMR->getText(tmptextval, SXGC_LOADTEX_MAX_SIZE_DIRNAME);
+	SXMaterialEditor::EditMR->getText(szStr, SXGC_LOADTEX_MAX_SIZE_DIRNAME);
 
-	if (SGCore_LoadTexFileExists(tmptextval))
-		SML_MtlSetMRTex(SXMaterialEditor::IDMat, 0, tmptextval);
+	if (SGCore_LoadTexFileExists(szStr))
+		SML_MtlSetMRTex(SXMaterialEditor::IDMat, 0, szStr);
 	else
 	{
-		SML_MtlGetMRTex(SXMaterialEditor::IDMat, 0, tmptextval);
-		SXMaterialEditor::EditMR->setText(tmptextval);
-
-		MessageBox(0, "texture not found", 0, 0);
+		char szStr2[SXGC_LOADTEX_MAX_SIZE_DIRNAME];
+		szStr2[0] = 0;
+		SML_MtlGetMRTex(SXMaterialEditor::IDMat, 0, szStr2);
+		TexProcInputString(szStr);
+		
+		SXMaterialEditor::EditMR->setText(szStr);
 	}
 
 	return 0;
@@ -160,19 +185,21 @@ LRESULT SXMaterialEditor_EditMR_Enter(HWND hwnd, UINT msg, WPARAM wParam, LPARAM
 
 LRESULT SXMaterialEditor_EditMG_Enter(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 {
-	char tmptextval[SXGC_LOADTEX_MAX_SIZE_DIRNAME];
-	tmptextval[0] = 0;
+	char szStr[SXGC_LOADTEX_MAX_SIZE_DIRNAME];
+	szStr[0] = 0;
 
-	SXMaterialEditor::EditMG->getText(tmptextval, SXGC_LOADTEX_MAX_SIZE_DIRNAME);
+	SXMaterialEditor::EditMG->getText(szStr, SXGC_LOADTEX_MAX_SIZE_DIRNAME);
 
-	if (SGCore_LoadTexFileExists(tmptextval))
-		SML_MtlSetMRTex(SXMaterialEditor::IDMat, 1, tmptextval);
+	if (SGCore_LoadTexFileExists(szStr))
+		SML_MtlSetMRTex(SXMaterialEditor::IDMat, 1, szStr);
 	else
 	{
-		SML_MtlGetMRTex(SXMaterialEditor::IDMat, 1, tmptextval);
-		SXMaterialEditor::EditMG->setText(tmptextval);
-
-		MessageBox(0, "texture not found", 0, 0);
+		char szStr2[SXGC_LOADTEX_MAX_SIZE_DIRNAME];
+		szStr2[0] = 0;
+		SML_MtlGetMRTex(SXMaterialEditor::IDMat, 1, szStr2);
+		TexProcInputString(szStr);
+		
+		SXMaterialEditor::EditMG->setText(szStr);
 	}
 
 	return 0;
@@ -180,19 +207,21 @@ LRESULT SXMaterialEditor_EditMG_Enter(HWND hwnd, UINT msg, WPARAM wParam, LPARAM
 
 LRESULT SXMaterialEditor_EditMB_Enter(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 {
-	char tmptextval[SXGC_LOADTEX_MAX_SIZE_DIRNAME];
-	tmptextval[0] = 0;
+	char szStr[SXGC_LOADTEX_MAX_SIZE_DIRNAME];
+	szStr[0] = 0;
 
-	SXMaterialEditor::EditMB->getText(tmptextval, SXGC_LOADTEX_MAX_SIZE_DIRNAME);
+	SXMaterialEditor::EditMB->getText(szStr, SXGC_LOADTEX_MAX_SIZE_DIRNAME);
 
-	if (SGCore_LoadTexFileExists(tmptextval))
-		SML_MtlSetMRTex(SXMaterialEditor::IDMat, 2, tmptextval);
+	if (SGCore_LoadTexFileExists(szStr))
+		SML_MtlSetMRTex(SXMaterialEditor::IDMat, 2, szStr);
 	else
 	{
-		SML_MtlGetMRTex(SXMaterialEditor::IDMat, 2, tmptextval);
-		SXMaterialEditor::EditMB->setText(tmptextval);
-
-		MessageBox(0, "texture not found", 0, 0);
+		char szStr2[SXGC_LOADTEX_MAX_SIZE_DIRNAME];
+		szStr2[0] = 0;
+		SML_MtlGetMRTex(SXMaterialEditor::IDMat, 2, szStr2);
+		TexProcInputString(szStr);
+		
+		SXMaterialEditor::EditMB->setText(szStr);
 	}
 
 	return 0;
@@ -200,19 +229,21 @@ LRESULT SXMaterialEditor_EditMB_Enter(HWND hwnd, UINT msg, WPARAM wParam, LPARAM
 
 LRESULT SXMaterialEditor_EditMA_Enter(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 {
-	char tmptextval[SXGC_LOADTEX_MAX_SIZE_DIRNAME];
-	tmptextval[0] = 0;
+	char szStr[SXGC_LOADTEX_MAX_SIZE_DIRNAME];
+	szStr[0] = 0;
 
-	SXMaterialEditor::EditMA->getText(tmptextval, SXGC_LOADTEX_MAX_SIZE_DIRNAME);
+	SXMaterialEditor::EditMA->getText(szStr, SXGC_LOADTEX_MAX_SIZE_DIRNAME);
 
-	if (SGCore_LoadTexFileExists(tmptextval))
-		SML_MtlSetMRTex(SXMaterialEditor::IDMat, 3, tmptextval);
+	if (SGCore_LoadTexFileExists(szStr))
+		SML_MtlSetMRTex(SXMaterialEditor::IDMat, 3, szStr);
 	else
 	{
-		SML_MtlGetMRTex(SXMaterialEditor::IDMat, 3, tmptextval);
-		SXMaterialEditor::EditMA->setText(tmptextval);
-
-		MessageBox(0, "texture not found", 0, 0);
+		char szStr2[SXGC_LOADTEX_MAX_SIZE_DIRNAME];
+		szStr2[0] = 0;
+		SML_MtlGetMRTex(SXMaterialEditor::IDMat, 3, szStr);
+		TexProcInputString(szStr);
+		
+		SXMaterialEditor::EditMA->setText(szStr);
 	}
 
 	return 0;
@@ -221,19 +252,21 @@ LRESULT SXMaterialEditor_EditMA_Enter(HWND hwnd, UINT msg, WPARAM wParam, LPARAM
 
 LRESULT SXMaterialEditor_EditDR_Enter(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 {
-	char tmptextval[SXGC_LOADTEX_MAX_SIZE_DIRNAME];
-	tmptextval[0] = 0;
+	char szStr[SXGC_LOADTEX_MAX_SIZE_DIRNAME];
+	szStr[0] = 0;
 
-	SXMaterialEditor::EditDR->getText(tmptextval, SXGC_LOADTEX_MAX_SIZE_DIRNAME);
+	SXMaterialEditor::EditDR->getText(szStr, SXGC_LOADTEX_MAX_SIZE_DIRNAME);
 
-	if (SGCore_LoadTexFileExists(tmptextval))
-		SML_MtlSetDTex(SXMaterialEditor::IDMat, 0, tmptextval);
+	if (SGCore_LoadTexFileExists(szStr))
+		SML_MtlSetDTex(SXMaterialEditor::IDMat, 0, szStr);
 	else
 	{
-		SML_MtlGetDTex(SXMaterialEditor::IDMat, 0, tmptextval);
-		SXMaterialEditor::EditDR->setText(tmptextval);
-
-		MessageBox(0, "texture not found", 0, 0);
+		char szStr2[SXGC_LOADTEX_MAX_SIZE_DIRNAME];
+		szStr2[0] = 0;
+		SML_MtlGetDTex(SXMaterialEditor::IDMat, 0, szStr);
+		TexProcInputString(szStr);
+		
+		SXMaterialEditor::EditDR->setText(szStr);
 	}
 
 	return 0;
@@ -241,19 +274,21 @@ LRESULT SXMaterialEditor_EditDR_Enter(HWND hwnd, UINT msg, WPARAM wParam, LPARAM
 
 LRESULT SXMaterialEditor_EditDG_Enter(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 {
-	char tmptextval[SXGC_LOADTEX_MAX_SIZE_DIRNAME];
-	tmptextval[0] = 0;
+	char szStr[SXGC_LOADTEX_MAX_SIZE_DIRNAME];
+	szStr[0] = 0;
 
-	SXMaterialEditor::EditDG->getText(tmptextval, SXGC_LOADTEX_MAX_SIZE_DIRNAME);
+	SXMaterialEditor::EditDG->getText(szStr, SXGC_LOADTEX_MAX_SIZE_DIRNAME);
 
-	if (SGCore_LoadTexFileExists(tmptextval))
-		SML_MtlSetDTex(SXMaterialEditor::IDMat, 1, tmptextval);
+	if (SGCore_LoadTexFileExists(szStr))
+		SML_MtlSetDTex(SXMaterialEditor::IDMat, 1, szStr);
 	else
 	{
-		SML_MtlGetDTex(SXMaterialEditor::IDMat, 1, tmptextval);
-		SXMaterialEditor::EditDR->setText(tmptextval);
-
-		MessageBox(0, "texture not found", 0, 0);
+		char szStr2[SXGC_LOADTEX_MAX_SIZE_DIRNAME];
+		szStr2[0] = 0;
+		SML_MtlGetDTex(SXMaterialEditor::IDMat, 1, szStr);
+		TexProcInputString(szStr);
+		
+		SXMaterialEditor::EditDR->setText(szStr);
 	}
 
 	return 0;
@@ -261,19 +296,21 @@ LRESULT SXMaterialEditor_EditDG_Enter(HWND hwnd, UINT msg, WPARAM wParam, LPARAM
 
 LRESULT SXMaterialEditor_EditDB_Enter(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 {
-	char tmptextval[SXGC_LOADTEX_MAX_SIZE_DIRNAME];
-	tmptextval[0] = 0;
+	char szStr[SXGC_LOADTEX_MAX_SIZE_DIRNAME];
+	szStr[0] = 0;
 
-	SXMaterialEditor::EditDB->getText(tmptextval, SXGC_LOADTEX_MAX_SIZE_DIRNAME);
+	SXMaterialEditor::EditDB->getText(szStr, SXGC_LOADTEX_MAX_SIZE_DIRNAME);
 
-	if (SGCore_LoadTexFileExists(tmptextval))
-		SML_MtlSetDTex(SXMaterialEditor::IDMat, 2, tmptextval);
+	if (SGCore_LoadTexFileExists(szStr))
+		SML_MtlSetDTex(SXMaterialEditor::IDMat, 2, szStr);
 	else
 	{
-		SML_MtlGetDTex(SXMaterialEditor::IDMat, 2, tmptextval);
-		SXMaterialEditor::EditDR->setText(tmptextval);
-
-		MessageBox(0, "texture not found", 0, 0);
+		char szStr2[SXGC_LOADTEX_MAX_SIZE_DIRNAME];
+		szStr2[0] = 0;
+		SML_MtlGetDTex(SXMaterialEditor::IDMat, 2, szStr);
+		TexProcInputString(szStr);
+		
+		SXMaterialEditor::EditDR->setText(szStr);
 	}
 
 	return 0;
@@ -281,35 +318,37 @@ LRESULT SXMaterialEditor_EditDB_Enter(HWND hwnd, UINT msg, WPARAM wParam, LPARAM
 
 LRESULT SXMaterialEditor_EditDA_Enter(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 {
-	char tmptextval[SXGC_LOADTEX_MAX_SIZE_DIRNAME];
-	tmptextval[0] = 0;
+	char szStr[SXGC_LOADTEX_MAX_SIZE_DIRNAME];
+	szStr[0] = 0;
 
-	SXMaterialEditor::EditDA->getText(tmptextval, SXGC_LOADTEX_MAX_SIZE_DIRNAME);
+	SXMaterialEditor::EditDA->getText(szStr, SXGC_LOADTEX_MAX_SIZE_DIRNAME);
 
-	if (SGCore_LoadTexFileExists(tmptextval))
-		SML_MtlSetDTex(SXMaterialEditor::IDMat, 3, tmptextval);
+	if (SGCore_LoadTexFileExists(szStr))
+		SML_MtlSetDTex(SXMaterialEditor::IDMat, 3, szStr);
 	else
 	{
-		SML_MtlGetDTex(SXMaterialEditor::IDMat, 3, tmptextval);
-		SXMaterialEditor::EditDR->setText(tmptextval);
-
-		MessageBox(0, "texture not found", 0, 0);
+		char szStr2[SXGC_LOADTEX_MAX_SIZE_DIRNAME];
+		szStr2[0] = 0;
+		SML_MtlGetDTex(SXMaterialEditor::IDMat, 3, szStr);
+		TexProcInputString(szStr);
+		
+		SXMaterialEditor::EditDR->setText(szStr);
 	}
 
 	return 0;
 }
 
-/////////////
+//##########################################################################
 
 LRESULT SXMaterialEditor_EditRoughness_Enter(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 {
-	char tmptextval[256];
-	tmptextval[0] = 0;
+	char szStr[256];
+	szStr[0] = 0;
 	float tmpval = 0;
 
-	SXMaterialEditor::EditRoughness->getText(tmptextval, 256);
+	SXMaterialEditor::EditRoughness->getText(szStr, 256);
 
-	sscanf(tmptextval, "%f", &tmpval);
+	sscanf(szStr, "%f", &tmpval);
 
 	SXMaterialEditor::TrackBarRoughness->setPos(tmpval*100);
 	SML_MtlSetRoughness(SXMaterialEditor::IDMat, tmpval);
@@ -319,13 +358,13 @@ LRESULT SXMaterialEditor_EditRoughness_Enter(HWND hwnd, UINT msg, WPARAM wParam,
 
 LRESULT SXMaterialEditor_EditF0_Enter(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 {
-	char tmptextval[256];
-	tmptextval[0] = 0;
+	char szStr[256];
+	szStr[0] = 0;
 	float tmpval = 0;
 
-	SXMaterialEditor::EditF0->getText(tmptextval, 256);
+	SXMaterialEditor::EditF0->getText(szStr, 256);
 
-	sscanf(tmptextval, "%f", &tmpval);
+	sscanf(szStr, "%f", &tmpval);
 
 	SXMaterialEditor::TrackBarF0->setPos(tmpval * 100);
 	SML_MtlSetF0(SXMaterialEditor::IDMat, tmpval);
@@ -334,13 +373,13 @@ LRESULT SXMaterialEditor_EditF0_Enter(HWND hwnd, UINT msg, WPARAM wParam, LPARAM
 
 LRESULT SXMaterialEditor_EditThickness_Enter(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 {
-	char tmptextval[256];
-	tmptextval[0] = 0;
+	char szStr[256];
+	szStr[0] = 0;
 	float tmpval = 0;
 
-	SXMaterialEditor::EditThickness->getText(tmptextval, 256);
+	SXMaterialEditor::EditThickness->getText(szStr, 256);
 
-	sscanf(tmptextval, "%f", &tmpval);
+	sscanf(szStr, "%f", &tmpval);
 
 	SXMaterialEditor::TrackBarThickness->setPos(tmpval * 100);
 	SML_MtlSetThickness(SXMaterialEditor::IDMat, tmpval);
@@ -351,13 +390,13 @@ LRESULT SXMaterialEditor_EditThickness_Enter(HWND hwnd, UINT msg, WPARAM wParam,
 
 LRESULT SXMaterialEditor_EditUDVSX_Enter(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 {
-	char tmptextval[256];
-	tmptextval[0] = 0;
+	char szStr[256];
+	szStr[0] = 0;
 	float tmpval = 0;
 
-	SXMaterialEditor::EditUDVSX->getText(tmptextval, 256);
+	SXMaterialEditor::EditUDVSX->getText(szStr, 256);
 
-	sscanf(tmptextval, "%f", &tmpval);
+	sscanf(szStr, "%f", &tmpval);
 
 	SXMaterialEditor::TrackBarUDVSX->setPos(tmpval * 100);
 	SML_MtlSetUDVS(SXMaterialEditor::IDMat, 0, tmpval);
@@ -366,13 +405,13 @@ LRESULT SXMaterialEditor_EditUDVSX_Enter(HWND hwnd, UINT msg, WPARAM wParam, LPA
 
 LRESULT SXMaterialEditor_EditUDVSY_Enter(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 {
-	char tmptextval[256];
-	tmptextval[0] = 0;
+	char szStr[256];
+	szStr[0] = 0;
 	float tmpval = 0;
 
-	SXMaterialEditor::EditUDVSY->getText(tmptextval, 256);
+	SXMaterialEditor::EditUDVSY->getText(szStr, 256);
 
-	sscanf(tmptextval, "%f", &tmpval);
+	sscanf(szStr, "%f", &tmpval);
 
 	SXMaterialEditor::TrackBarUDVSY->setPos(tmpval * 100);
 	SML_MtlSetUDVS(SXMaterialEditor::IDMat, 1, tmpval);
@@ -381,13 +420,13 @@ LRESULT SXMaterialEditor_EditUDVSY_Enter(HWND hwnd, UINT msg, WPARAM wParam, LPA
 
 LRESULT SXMaterialEditor_EditUDVSZ_Enter(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 {
-	char tmptextval[256];
-	tmptextval[0] = 0;
+	char szStr[256];
+	szStr[0] = 0;
 	float tmpval = 0;
 
-	SXMaterialEditor::EditUDVSZ->getText(tmptextval, 256);
+	SXMaterialEditor::EditUDVSZ->getText(szStr, 256);
 
-	sscanf(tmptextval, "%f", &tmpval);
+	sscanf(szStr, "%f", &tmpval);
 
 	SXMaterialEditor::TrackBarUDVSZ->setPos(tmpval * 100);
 	SML_MtlSetUDVS(SXMaterialEditor::IDMat, 2, tmpval);
@@ -396,13 +435,13 @@ LRESULT SXMaterialEditor_EditUDVSZ_Enter(HWND hwnd, UINT msg, WPARAM wParam, LPA
 
 LRESULT SXMaterialEditor_EditUDVSW_Enter(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 {
-	char tmptextval[256];
-	tmptextval[0] = 0;
+	char szStr[256];
+	szStr[0] = 0;
 	float tmpval = 0;
 
-	SXMaterialEditor::EditUDVSW->getText(tmptextval, 256);
+	SXMaterialEditor::EditUDVSW->getText(szStr, 256);
 
-	sscanf(tmptextval, "%f", &tmpval);
+	sscanf(szStr, "%f", &tmpval);
 
 	SXMaterialEditor::TrackBarUDVSW->setPos(tmpval * 100);
 	SML_MtlSetUDVS(SXMaterialEditor::IDMat, 3, tmpval);
@@ -412,13 +451,13 @@ LRESULT SXMaterialEditor_EditUDVSW_Enter(HWND hwnd, UINT msg, WPARAM wParam, LPA
 
 LRESULT SXMaterialEditor_EditUDPSX_Enter(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 {
-	char tmptextval[256];
-	tmptextval[0] = 0;
+	char szStr[256];
+	szStr[0] = 0;
 	float tmpval = 0;
 
-	SXMaterialEditor::EditUDPSX->getText(tmptextval, 256);
+	SXMaterialEditor::EditUDPSX->getText(szStr, 256);
 
-	sscanf(tmptextval, "%f", &tmpval);
+	sscanf(szStr, "%f", &tmpval);
 
 	SXMaterialEditor::TrackBarUDPSX->setPos(tmpval * 100);
 	SML_MtlSetUDPS(SXMaterialEditor::IDMat, 0, tmpval);
@@ -427,13 +466,13 @@ LRESULT SXMaterialEditor_EditUDPSX_Enter(HWND hwnd, UINT msg, WPARAM wParam, LPA
 
 LRESULT SXMaterialEditor_EditUDPSY_Enter(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 {
-	char tmptextval[256];
-	tmptextval[0] = 0;
+	char szStr[256];
+	szStr[0] = 0;
 	float tmpval = 0;
 
-	SXMaterialEditor::EditUDPSY->getText(tmptextval, 256);
+	SXMaterialEditor::EditUDPSY->getText(szStr, 256);
 
-	sscanf(tmptextval, "%f", &tmpval);
+	sscanf(szStr, "%f", &tmpval);
 
 	SXMaterialEditor::TrackBarUDPSY->setPos(tmpval * 100);
 	SML_MtlSetUDPS(SXMaterialEditor::IDMat, 1, tmpval);
@@ -442,13 +481,13 @@ LRESULT SXMaterialEditor_EditUDPSY_Enter(HWND hwnd, UINT msg, WPARAM wParam, LPA
 
 LRESULT SXMaterialEditor_EditUDPSZ_Enter(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 {
-	char tmptextval[256];
-	tmptextval[0] = 0;
+	char szStr[256];
+	szStr[0] = 0;
 	float tmpval = 0;
 
-	SXMaterialEditor::EditUDPSZ->getText(tmptextval, 256);
+	SXMaterialEditor::EditUDPSZ->getText(szStr, 256);
 
-	sscanf(tmptextval, "%f", &tmpval);
+	sscanf(szStr, "%f", &tmpval);
 
 	SXMaterialEditor::TrackBarUDPSZ->setPos(tmpval * 100);
 	SML_MtlSetUDPS(SXMaterialEditor::IDMat, 2, tmpval);
@@ -457,13 +496,13 @@ LRESULT SXMaterialEditor_EditUDPSZ_Enter(HWND hwnd, UINT msg, WPARAM wParam, LPA
 
 LRESULT SXMaterialEditor_EditUDPSW_Enter(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 {
-	char tmptextval[256];
-	tmptextval[0] = 0;
+	char szStr[256];
+	szStr[0] = 0;
 	float tmpval = 0;
 
-	SXMaterialEditor::EditUDPSW->getText(tmptextval, 256);
+	SXMaterialEditor::EditUDPSW->getText(szStr, 256);
 
-	sscanf(tmptextval, "%f", &tmpval);
+	sscanf(szStr, "%f", &tmpval);
 
 	SXMaterialEditor::TrackBarUDPSW->setPos(tmpval * 100);
 	SML_MtlSetUDPS(SXMaterialEditor::IDMat, 3, tmpval);
diff --git a/source/sxmaterialeditor/sxmaterialeditor.cpp b/source/sxmaterialeditor/sxmaterialeditor.cpp
index a9fc8df2202a3843c9fbf44ac0d0d5b8688cee2b..e98b551dffad7a732ef0ec514611547b866575bb 100644
--- a/source/sxmaterialeditor/sxmaterialeditor.cpp
+++ b/source/sxmaterialeditor/sxmaterialeditor.cpp
@@ -467,8 +467,8 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLin
 	SXMaterialEditor::ComboBoxParamL->setSel(0);
 
 
-	SGCore_SkyBoxLoadTex("sky/sky_2_cube.dds");
-	SXMaterialEditor::EditSkyBox->setText("sky/sky_2_cube.dds");
+	SGCore_SkyBoxLoadTex("sky_2_cube.dds");
+	SXMaterialEditor::EditSkyBox->setText("sky_2_cube.dds");
 		
 	SRender_GetCamera()->setPosition(&float3(0, 0, -100));