From 9f448afade02a06d6e0981ba7121ef2af84d4795 Mon Sep 17 00:00:00 2001
From: Byurrer <byurrer@mail.ru>
Date: Fri, 19 Jan 2018 19:08:07 +0300
Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?=
 =?UTF-8?q?=D0=BA=D0=BE=D0=BF=D0=B8=D1=80=D0=B0=D0=B9=D1=82=D1=8B,=20?=
 =?UTF-8?q?=D0=B7=D0=B0=D0=BC=D0=B5=D0=BD=D0=B8=D0=BB=20=D0=BD=D0=B0=D1=87?=
 =?UTF-8?q?=D0=B0=D0=BB=D1=8C=D1=8B=D0=BD=D0=B5=20=D0=B4=D0=B5=D1=84=D0=B0?=
 =?UTF-8?q?=D0=B9=D0=BD=D1=8B=20=D0=B2=20=D1=85=D0=B8=D0=B4=D0=B5=D1=80?=
 =?UTF-8?q?=D0=B0=D1=85,=20=D1=80=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE?=
 =?UTF-8?q?=D1=80=D0=B8=D0=BB=20=D1=85=D0=B8=D0=B4=D0=B5=D1=80=D1=8B=20?=
 =?UTF-8?q?=D0=B8=20=D0=BD=D0=B5=D0=BA=D0=BE=D1=82=D0=BE=D1=80=D1=83=D1=8E?=
 =?UTF-8?q?=20=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8E?=
 =?UTF-8?q?=20=D0=B2=20=D0=B3=D1=80=D0=B0=D1=84=D1=8F=D0=B4=D1=80=D0=B5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 proj/SkyXEngine/vs2013/SkyXEngine.sln         |  16 +-
 proj/SkyXEngine/vs2013/SkyXEngine.vcxproj     |   6 +-
 proj/sxae/vs2013/sxae.vcxproj                 |   7 +-
 proj/sxaigrid/vs2013/sxaigrid.vcxproj         |   6 +-
 proj/sxanim/vs2013/sxanim.vcxproj             |   6 +-
 proj/sxconsole/vs2013/sxconsole.vcxproj       |   3 +-
 proj/sxcore/vs2013/sxcore.vcxproj             |   6 +-
 proj/sxdecals/vs2013/sxdecals.vcxproj         |   9 +-
 proj/sxgame/vs2013/sxgame.vcxproj             |   9 +-
 proj/sxgcore/vs2013/sxgcore.vcxproj           |   6 +-
 proj/sxgeom/vs2013/sxgeom.vcxproj             |   6 +-
 proj/sxguiwinapi/vs2013/sxguiwinapi.vcxproj   |   3 +-
 proj/sxinput/vs2013/sxinput.vcxproj           |   6 +-
 proj/sxlevel/vs2013/sxlevel.vcxproj           |   4 +-
 .../vs2013/sxleveleditor.vcxproj              |   6 +-
 .../vs2013/sxmaterialeditor.vcxproj           |   4 +-
 proj/sxmtllight/vs2013/sxmtllight.vcxproj     |   6 +-
 proj/sxparticles/vs2013/sxparticles.vcxproj   |   6 +-
 .../vs2013/sxparticleseditor.vcxproj          |   4 +-
 proj/sxphysics/vs2013/sxphysics.vcxproj       |   7 +-
 proj/sxpp/vs2013/sxpp.vcxproj                 |   6 +-
 proj/sxrender/vs2013/sxrender.vcxproj         |   5 +-
 proj/sxrender/vs2013/sxrender_d.dll           | Bin 0 -> 733696 bytes
 proj/sxscore/vs2013/sxscore.vcxproj           |   6 +-
 source/GRegisterIndex.h                       |  10 +-
 source/SkyXEngine.h                           |   6 +-
 source/SkyXEngine_Build/SkyXEngine_Build.cpp  |   6 +-
 source/aigrid/aigrid.cpp                      |  61 +-
 source/aigrid/aigrid.h                        |  10 +-
 source/aigrid/sxaigrid.cpp                    |  11 +-
 source/aigrid/sxaigrid.h                      |   6 +-
 source/aigrid/sxaigrid_dll.cpp                |   7 +-
 source/anim/ModelFile.h                       |  10 +-
 source/anim/animated.cpp                      |  33 +-
 source/anim/animated.h                        |  12 +-
 source/anim/sxanim.h                          |   6 +-
 source/anim/sxanim_dll.cpp                    |  14 +-
 source/core/Config.cpp                        |   9 +-
 source/core/Config.h                          |  10 +-
 source/core/File.h                            |   5 +
 source/core/Task.cpp                          |   5 +
 source/core/Task.h                            |  10 +-
 source/core/TaskManager.cpp                   |   8 +-
 source/core/TaskManager.h                     |  10 +-
 source/core/concmd.cpp                        |   5 +
 source/core/concmd.h                          |   9 +-
 source/core/cvars.cpp                         |  17 +-
 source/core/cvars.h                           |   9 +-
 source/core/file.cpp                          |   5 +
 source/core/sxcore.cpp                        |  20 +-
 source/core/sxcore.h                          |  11 +-
 source/core/sxcore_dll.cpp                    |   6 +-
 source/core/time.cpp                          |   5 +
 source/core/time.h                            |   8 +-
 source/decals/DecalManager.cpp                |  16 +-
 source/decals/DecalManager.h                  |  10 +-
 source/decals/sxdecals.h                      |   8 +-
 source/decals/sxdecals_dll.cpp                |  16 +-
 source/editors_utils/axes_helper.cpp          |   5 +
 source/editors_utils/axes_helper.h            |   9 +-
 source/game/BaseAmmo.cpp                      |   6 +
 source/game/BaseAmmo.h                        |  11 +-
 source/game/BaseAmmoBox.cpp                   |   6 +
 source/game/BaseAmmoBox.h                     |  11 +-
 source/game/BaseAnimating.cpp                 |  10 +-
 source/game/BaseAnimating.h                   |  10 +-
 source/game/BaseCharacter.cpp                 |   5 +
 source/game/BaseCharacter.h                   |  10 +-
 source/game/BaseEntity.cpp                    |   6 +
 source/game/BaseEntity.h                      |  10 +-
 source/game/BaseHandle.cpp                    |   6 +
 source/game/BaseHandle.h                      |  11 +-
 source/game/BaseItem.cpp                      |   6 +
 source/game/BaseItem.h                        |  11 +-
 source/game/BaseMag.cpp                       |   6 +
 source/game/BaseMag.h                         |  11 +-
 source/game/BasePistol.h                      |  11 +-
 source/game/BaseRiffle.cpp                    |   6 +
 source/game/BaseRiffle.h                      |  11 +-
 source/game/BaseScope.cpp                     |   6 +
 source/game/BaseScope.h                       |  11 +-
 source/game/BaseSilencer.cpp                  |   6 +
 source/game/BaseSilencer.h                    |  11 +-
 source/game/BaseSupply.cpp                    |   6 +
 source/game/BaseSupply.h                      |  11 +-
 source/game/BaseTool.cpp                      |   8 +-
 source/game/BaseTool.h                        |  11 +-
 source/game/BaseTrigger.cpp                   |   6 +
 source/game/BaseTrigger.h                     |  10 +-
 source/game/BaseWeapon.cpp                    |   5 +
 source/game/BaseWeapon.h                      |  11 +-
 source/game/BaseWeaponAddon.cpp               |   6 +
 source/game/BaseWeaponAddon.h                 |  11 +-
 source/game/CrosshairManager.cpp              |  17 +-
 source/game/CrosshairManager.h                |  10 +-
 source/game/EntityFactory.cpp                 |   6 +
 source/game/EntityFactory.h                   |  10 +-
 source/game/EntityManager.cpp                 |   6 +
 source/game/EntityManager.h                   |  10 +-
 source/game/FuncTrain.cpp                     |   6 +
 source/game/FuncTrain.h                       |  11 +-
 source/game/GameData.cpp                      |   6 +
 source/game/GameData.h                        |  10 +-
 source/game/LightDirectional.cpp              |   5 +
 source/game/LightDirectional.h                |   6 +-
 source/game/LightPoint.cpp                    |   5 +
 source/game/LightPoint.h                      |   6 +-
 source/game/NPCBase.cpp                       |   5 +
 source/game/NPCBase.h                         |  11 +-
 source/game/NPCZombie.cpp                     |   5 +
 source/game/NPCZombie.h                       |  11 +-
 source/game/PathCorner.cpp                    |   6 +
 source/game/PathCorner.h                      |  10 +-
 source/game/Player.cpp                        |   6 +
 source/game/Player.h                          |  10 +-
 source/game/PlayerSpawn.cpp                   |   6 +
 source/game/PlayerSpawn.h                     |  10 +-
 source/game/PointCamera.cpp                   |  12 +-
 source/game/PointCamera.h                     |  10 +-
 source/game/PointEntity.cpp                   |   6 +
 source/game/PointEntity.h                     |  10 +-
 source/game/Ragdoll.cpp                       |   6 +
 source/game/Ragdoll.h                         |  10 +-
 source/game/SXbaseSnipe.h                     |  11 +-
 source/game/crosshair.cpp                     |   4 +
 source/game/crosshair.h                       |  10 +-
 source/game/proptable.cpp                     |   6 +
 source/game/proptable.h                       |  10 +-
 source/game/sxgame.h                          |  10 +-
 source/game/sxgame_dll.cpp                    |  18 +-
 source/gcore/CreatorTextures.cpp              |  95 ++--
 source/gcore/GeomOptimize.cpp                 |   5 +
 source/gcore/GeomOptimize.h                   |   5 +
 source/gcore/LoaderTextures.cpp               |  39 +-
 source/gcore/LoaderTextures.h                 |  17 +-
 source/gcore/ModelFile.h                      |  10 +-
 source/gcore/bound.cpp                        | 538 +++++++++---------
 source/gcore/bound.h                          |  44 +-
 source/gcore/camera.cpp                       | 266 +++++----
 source/gcore/camera.h                         | 114 ++--
 source/gcore/creatortextures.h                |   6 +-
 source/gcore/loader_static.cpp                | 259 ++++-----
 source/gcore/loader_static.h                  | 103 ++--
 source/gcore/shader.cpp                       |  99 ++--
 source/gcore/shader.h                         |  15 +-
 source/gcore/sky.cpp                          | 450 +++++++--------
 source/gcore/sky.h                            | 152 ++---
 source/gcore/sxgcore.cpp                      | 198 ++++---
 source/gcore/sxgcore.h                        | 458 ++++++++-------
 source/gcore/sxgcore_dll.cpp                  |   7 +-
 source/gdefines.h                             |  32 +-
 source/geom/green.cpp                         | 175 +++---
 source/geom/green.h                           |  27 +-
 source/geom/static_geom.cpp                   | 285 +++++-----
 source/geom/static_geom.h                     |  27 +-
 source/geom/sxgeom.cpp                        |  16 +-
 source/geom/sxgeom.h                          |  10 +-
 source/geom/sxgeom_dll.cpp                    |   7 +-
 source/input/input.cpp                        |  11 +-
 source/input/input.h                          |   9 +-
 source/input/sxinput.cpp                      |  12 +-
 source/input/sxinput.h                        |   6 +-
 source/input/sxinput_dll.cpp                  |   6 +-
 source/level/AmbientSounds.cpp                |   5 +
 source/level/AmbientSounds.h                  |   5 +
 source/level/Weather.h                        |  13 +-
 source/level/level.cpp                        |  17 +-
 source/level/level.h                          |   6 +-
 source/level/sxlevel.cpp                      |  11 +-
 source/level/sxlevel.h                        |   6 +-
 source/level/sxlevel_dll.cpp                  |   6 +-
 source/level/weather.cpp                      |  19 +-
 source/mtllight/light.cpp                     |  25 +-
 source/mtllight/light.h                       |  16 +-
 source/mtllight/material.cpp                  |  43 +-
 source/mtllight/material.h                    |  17 +-
 source/mtllight/ml_data.cpp                   |   7 +-
 source/mtllight/ml_data.h                     |   7 +-
 source/mtllight/reflection.cpp                |  13 +-
 source/mtllight/reflection.h                  |  11 +-
 source/mtllight/shadow.cpp                    |  42 +-
 source/mtllight/shadow.h                      |   5 +
 source/mtllight/sxmtllight.cpp                |  12 +-
 source/mtllight/sxmtllight.h                  |   8 +-
 source/mtllight/sxmtllight_dll.cpp            |   6 +-
 source/particles/PESet.cpp                    |   5 +
 source/particles/PESet.h                      |   9 +-
 source/particles/effect.cpp                   |  29 +-
 source/particles/effect.h                     |  27 +-
 source/particles/emitter.cpp                  |  13 +-
 source/particles/emitter.h                    |  12 +-
 source/particles/sxparticles.cpp              |  15 +-
 source/particles/sxparticles.h                |  10 +-
 source/particles/sxparticles_dll.cpp          |   6 +-
 source/physics/PhyWorld.cpp                   |   8 +-
 source/physics/PhyWorld.h                     |  12 +-
 source/physics/sxphysics.h                    |   6 +-
 source/physics/sxphysics_dll.cpp              |  14 +-
 source/pp/sxpp.cpp                            |  20 +-
 source/pp/sxpp.h                              |   8 +-
 source/pp/sxpp_dll.cpp                        |   7 +-
 source/render/camera_update.cpp               |  19 +-
 source/render/camera_update.h                 |  10 +-
 source/render/editor/axes_static.cpp          |   5 +
 source/render/editor/axes_static.h            |   5 +
 source/render/editor/grid.cpp                 |   5 +
 source/render/editor/grid.h                   |   5 +
 source/render/gdata.cpp                       |   5 +
 source/render/gdata.h                         |   6 +-
 source/render/model_sim.cpp                   |  63 +-
 source/render/model_sim.h                     |   6 +-
 source/render/render_func.cpp                 |  31 +-
 source/render/render_func.h                   |   8 +-
 source/render/sxrender.cpp                    |  13 +-
 source/render/sxrender.h                      |   6 +-
 source/score/CallBackOgg.cpp                  |   5 +
 source/score/sound.cpp                        |  41 +-
 source/score/sound.h                          |   9 +-
 source/score/sxscore.cpp                      |  12 +-
 source/score/sxscore.h                        |   6 +-
 source/score/sxscore_dll.cpp                  |   7 +-
 source/skyxengine.cpp                         |  57 +-
 source/sxae/Camera.cpp                        |   6 +
 source/sxae/Camera.h                          |  10 +-
 source/sxae/EMessages.h                       |  10 +-
 source/sxae/Editor.cpp                        |   6 +
 source/sxae/Editor.h                          |  10 +-
 source/sxae/EditorTab.cpp                     |   5 +
 source/sxae/EditorTab.h                       |  10 +-
 source/sxae/TabActivities.cpp                 |   6 +
 source/sxae/TabActivities.h                   |  10 +-
 source/sxae/TabAnimation.cpp                  |   6 +
 source/sxae/TabAnimation.h                    |  10 +-
 source/sxae/TabAttachments.cpp                |   6 +
 source/sxae/TabAttachments.h                  |  10 +-
 source/sxae/TabControllers.cpp                |   6 +
 source/sxae/TabControllers.h                  |  10 +-
 source/sxae/TabFiles.cpp                      |   6 +
 source/sxae/TabFiles.h                        |  10 +-
 source/sxae/TabHitboxes.cpp                   |   6 +
 source/sxae/TabHitboxes.h                     |  10 +-
 source/sxae/TabManager.cpp                    |   6 +
 source/sxae/TabManager.h                      |  10 +-
 source/sxae/TabSkins.cpp                      |   6 +
 source/sxae/TabSkins.h                        |  10 +-
 source/sxae/Tools.cpp                         |   6 +
 source/sxae/Tools.h                           |  10 +-
 source/sxae/main.cpp                          |   5 +
 source/sxae/ui.cpp                            |   6 +
 source/sxconsole/ColorPrint.cpp               |   6 +
 source/sxconsole/ColorPrint.h                 |  10 +-
 source/sxconsole/sxconsole.cpp                |   6 +
 252 files changed, 3357 insertions(+), 2356 deletions(-)
 create mode 100644 proj/sxrender/vs2013/sxrender_d.dll

diff --git a/proj/SkyXEngine/vs2013/SkyXEngine.sln b/proj/SkyXEngine/vs2013/SkyXEngine.sln
index aba385228..6f0809bc6 100644
--- a/proj/SkyXEngine/vs2013/SkyXEngine.sln
+++ b/proj/SkyXEngine/vs2013/SkyXEngine.sln
@@ -17,6 +17,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SkyXEngine", "SkyXEngine.vc
 		{0C7E3DB7-005F-41E9-A570-868BCF959E91} = {0C7E3DB7-005F-41E9-A570-868BCF959E91}
 		{120D29B8-D2D9-4B4E-8AC6-D951973B7398} = {120D29B8-D2D9-4B4E-8AC6-D951973B7398}
 		{BA779DCC-93C8-4FB7-BBB9-A7D2F76C35DE} = {BA779DCC-93C8-4FB7-BBB9-A7D2F76C35DE}
+		{7F0ACED1-6E16-4DD3-800E-0C50150897C2} = {7F0ACED1-6E16-4DD3-800E-0C50150897C2}
 		{AEECC2DB-C7C7-4089-9262-A69794DF834D} = {AEECC2DB-C7C7-4089-9262-A69794DF834D}
 		{56A8D7F7-B73C-4206-8038-83D8A169AA2F} = {56A8D7F7-B73C-4206-8038-83D8A169AA2F}
 	EndProjectSection
@@ -93,7 +94,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Bullet3OpenCL_clew", "..\..
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sxphysics", "..\..\sxphysics\vs2013\sxphysics.vcxproj", "{7C0C8205-BDD3-44A3-AA3A-7855C7EFC88E}"
 	ProjectSection(ProjectDependencies) = postProject
-		{C1C1F046-C839-4602-AF70-923CDD237C1B} = {C1C1F046-C839-4602-AF70-923CDD237C1B}
 		{46A17C83-2972-4C41-B67F-224640089085} = {46A17C83-2972-4C41-B67F-224640089085}
 		{2B3BA583-D5EC-4DC2-91CF-42B1C7ADFD9D} = {2B3BA583-D5EC-4DC2-91CF-42B1C7ADFD9D}
 		{F2DD3789-7BC9-D241-8C8D-2179933B30DD} = {F2DD3789-7BC9-D241-8C8D-2179933B30DD}
@@ -110,6 +110,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LinearMath", "..\..\..\sdks
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sxparticles", "..\..\sxparticles\vs2013\sxparticles.vcxproj", "{56A8D7F7-B73C-4206-8038-83D8A169AA2F}"
 	ProjectSection(ProjectDependencies) = postProject
+		{2B3BA583-D5EC-4DC2-91CF-42B1C7ADFD9D} = {2B3BA583-D5EC-4DC2-91CF-42B1C7ADFD9D}
 		{AEECC2DB-C7C7-4089-9262-A69794DF834D} = {AEECC2DB-C7C7-4089-9262-A69794DF834D}
 	EndProjectSection
 EndProject
@@ -133,9 +134,11 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sxgame", "..\..\sxgame\vs20
 	ProjectSection(ProjectDependencies) = postProject
 		{7C0C8205-BDD3-44A3-AA3A-7855C7EFC88E} = {7C0C8205-BDD3-44A3-AA3A-7855C7EFC88E}
 		{B9656841-7734-4D0B-8619-1BED5E2ED7AE} = {B9656841-7734-4D0B-8619-1BED5E2ED7AE}
-		{C1C1F046-C839-4602-AF70-923CDD237C1B} = {C1C1F046-C839-4602-AF70-923CDD237C1B}
 		{709D8A7A-D3E0-4070-A493-EFDF7A8E9D73} = {709D8A7A-D3E0-4070-A493-EFDF7A8E9D73}
-		{AEECC2DB-C7C7-4089-9262-A69794DF834D} = {AEECC2DB-C7C7-4089-9262-A69794DF834D}
+		{6A402480-C09B-4CBF-A6BD-115CE4BFF2D8} = {6A402480-C09B-4CBF-A6BD-115CE4BFF2D8}
+		{2B3BA583-D5EC-4DC2-91CF-42B1C7ADFD9D} = {2B3BA583-D5EC-4DC2-91CF-42B1C7ADFD9D}
+		{3A5449A3-DCE7-4557-9C9F-DEEAFBAAC763} = {3A5449A3-DCE7-4557-9C9F-DEEAFBAAC763}
+		{120D29B8-D2D9-4B4E-8AC6-D951973B7398} = {120D29B8-D2D9-4B4E-8AC6-D951973B7398}
 		{56A8D7F7-B73C-4206-8038-83D8A169AA2F} = {56A8D7F7-B73C-4206-8038-83D8A169AA2F}
 	EndProjectSection
 EndProject
@@ -167,6 +170,13 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sxlevel", "..\..\sxlevel\vs
 	EndProjectSection
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sxrender", "..\..\sxrender\vs2013\sxrender.vcxproj", "{7F0ACED1-6E16-4DD3-800E-0C50150897C2}"
+	ProjectSection(ProjectDependencies) = postProject
+		{B9656841-7734-4D0B-8619-1BED5E2ED7AE} = {B9656841-7734-4D0B-8619-1BED5E2ED7AE}
+		{2B3BA583-D5EC-4DC2-91CF-42B1C7ADFD9D} = {2B3BA583-D5EC-4DC2-91CF-42B1C7ADFD9D}
+		{0C7E3DB7-005F-41E9-A570-868BCF959E91} = {0C7E3DB7-005F-41E9-A570-868BCF959E91}
+		{BA779DCC-93C8-4FB7-BBB9-A7D2F76C35DE} = {BA779DCC-93C8-4FB7-BBB9-A7D2F76C35DE}
+		{56A8D7F7-B73C-4206-8038-83D8A169AA2F} = {56A8D7F7-B73C-4206-8038-83D8A169AA2F}
+	EndProjectSection
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
diff --git a/proj/SkyXEngine/vs2013/SkyXEngine.vcxproj b/proj/SkyXEngine/vs2013/SkyXEngine.vcxproj
index 4c2971439..ef9a54c1b 100644
--- a/proj/SkyXEngine/vs2013/SkyXEngine.vcxproj
+++ b/proj/SkyXEngine/vs2013/SkyXEngine.vcxproj
@@ -40,7 +40,7 @@
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <LinkIncremental>false</LinkIncremental>
+    <LinkIncremental>true</LinkIncremental>
     <OutDir>../../../build/</OutDir>
     <TargetName>$(ProjectName)_d</TargetName>
     <IncludePath>../../../source;../../../sdks/bullet3/src;$(VC_IncludePath);$(WindowsSDK_IncludePath);../../../sdks/dx9sdk/Include;../../../sdks/ogg/libvorbis/include/;../../../sdks/ogg/libogg/include/;</IncludePath>
@@ -60,7 +60,7 @@
       </PrecompiledHeader>
       <WarningLevel>Level3</WarningLevel>
       <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;SX_GAME;SX_EXE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;SX_GAME;SX_EXE;%(PreprocessorDefinitions);SX_LIB_NAME="ENGINE"</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
     </ClCompile>
@@ -81,7 +81,7 @@
       <Optimization>MaxSpeed</Optimization>
       <FunctionLevelLinking>true</FunctionLevelLinking>
       <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;SX_GAME;SX_EXE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;SX_GAME;SX_EXE;%(PreprocessorDefinitions);SX_LIB_NAME="ENGINE"</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
     </ClCompile>
     <Link>
diff --git a/proj/sxae/vs2013/sxae.vcxproj b/proj/sxae/vs2013/sxae.vcxproj
index 07e39ec9c..b2c4dab61 100644
--- a/proj/sxae/vs2013/sxae.vcxproj
+++ b/proj/sxae/vs2013/sxae.vcxproj
@@ -57,7 +57,7 @@
       </PrecompiledHeader>
       <WarningLevel>Level3</WarningLevel>
       <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN32;SX_EXE;_CRT_SECURE_NO_WARNINGS;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>WIN32;SX_EXE;_CRT_SECURE_NO_WARNINGS;_DEBUG;_WINDOWS;%(PreprocessorDefinitions);SX_LIB_NAME="AEd"</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
     </ClCompile>
@@ -78,17 +78,18 @@
       <Optimization>MaxSpeed</Optimization>
       <FunctionLevelLinking>true</FunctionLevelLinking>
       <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>WIN32;SX_EXE;_CRT_SECURE_NO_WARNINGS;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>WIN32;SX_EXE;_CRT_SECURE_NO_WARNINGS;NDEBUG;_WINDOWS;%(PreprocessorDefinitions);SX_LIB_NAME="AEd"</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
     </ClCompile>
     <Link>
       <SubSystem>Windows</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <GenerateDebugInformation>false</GenerateDebugInformation>
       <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <OptimizeReferences>true</OptimizeReferences>
       <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <IgnoreSpecificDefaultLibraries>
       </IgnoreSpecificDefaultLibraries>
+      <ProgramDatabaseFile>$(ProjectDir)$(TargetName).pdb</ProgramDatabaseFile>
     </Link>
   </ItemDefinitionGroup>
   <ItemGroup>
diff --git a/proj/sxaigrid/vs2013/sxaigrid.vcxproj b/proj/sxaigrid/vs2013/sxaigrid.vcxproj
index 35254926e..5ef8eddc7 100644
--- a/proj/sxaigrid/vs2013/sxaigrid.vcxproj
+++ b/proj/sxaigrid/vs2013/sxaigrid.vcxproj
@@ -40,7 +40,7 @@
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <LinkIncremental>false</LinkIncremental>
+    <LinkIncremental>true</LinkIncremental>
     <OutDir>../../../build/</OutDir>
     <TargetName>$(ProjectName)_d</TargetName>
     <IncludePath>../../../source;$(VC_IncludePath);$(WindowsSDK_IncludePath);../../../sdks/dx9sdk/Include</IncludePath>
@@ -60,7 +60,7 @@
       </PrecompiledHeader>
       <WarningLevel>Level3</WarningLevel>
       <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;SXAIGRID_EXPORTS;SX_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;SXAIGRID_EXPORTS;SX_DLL;SX_LIB_NAME="AIGRID";%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
     </ClCompile>
@@ -80,7 +80,7 @@
       <Optimization>MaxSpeed</Optimization>
       <FunctionLevelLinking>true</FunctionLevelLinking>
       <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;SXAIGRID_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;SXAIGRID_EXPORTS;SX_LIB_NAME="AIGRID";%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
     </ClCompile>
     <Link>
diff --git a/proj/sxanim/vs2013/sxanim.vcxproj b/proj/sxanim/vs2013/sxanim.vcxproj
index b9c5cf2a6..87d4e7a17 100644
--- a/proj/sxanim/vs2013/sxanim.vcxproj
+++ b/proj/sxanim/vs2013/sxanim.vcxproj
@@ -41,7 +41,7 @@
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <LinkIncremental>false</LinkIncremental>
+    <LinkIncremental>true</LinkIncremental>
     <OutDir>../../../build/</OutDir>
     <TargetName>$(ProjectName)_d</TargetName>
     <IncludePath>$(IncludePath);$(WindowsSdk_71A_IncludePath);../../../source;../../../sdks/dx9sdk/Include;</IncludePath>
@@ -61,7 +61,7 @@
       </PrecompiledHeader>
       <WarningLevel>Level3</WarningLevel>
       <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN32;_CRT_SECURE_NO_WARNINGS;_DEBUG;_WINDOWS;_USRDLL;SXANIM_EXPORTS;SX_DLL%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>WIN32;_CRT_SECURE_NO_WARNINGS;_DEBUG;_WINDOWS;_USRDLL;SXANIM_EXPORTS;SX_LIB_NAME="ANIM";%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
     </ClCompile>
@@ -81,7 +81,7 @@
       <Optimization>MaxSpeed</Optimization>
       <FunctionLevelLinking>true</FunctionLevelLinking>
       <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>WIN32;_CRT_SECURE_NO_WARNINGS;NDEBUG;_WINDOWS;_USRDLL;SXANIM_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>WIN32;_CRT_SECURE_NO_WARNINGS;NDEBUG;_WINDOWS;_USRDLL;SXANIM_EXPORTS;SX_LIB_NAME="ANIM";%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
     </ClCompile>
     <Link>
diff --git a/proj/sxconsole/vs2013/sxconsole.vcxproj b/proj/sxconsole/vs2013/sxconsole.vcxproj
index 6ca9ed445..482210120 100644
--- a/proj/sxconsole/vs2013/sxconsole.vcxproj
+++ b/proj/sxconsole/vs2013/sxconsole.vcxproj
@@ -79,9 +79,10 @@
     </ClCompile>
     <Link>
       <SubSystem>Console</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <GenerateDebugInformation>false</GenerateDebugInformation>
       <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <OptimizeReferences>true</OptimizeReferences>
+      <ProgramDatabaseFile>$(ProjectDir)$(TargetName).pdb</ProgramDatabaseFile>
     </Link>
   </ItemDefinitionGroup>
   <ItemGroup>
diff --git a/proj/sxcore/vs2013/sxcore.vcxproj b/proj/sxcore/vs2013/sxcore.vcxproj
index fd0266995..34244c1dc 100644
--- a/proj/sxcore/vs2013/sxcore.vcxproj
+++ b/proj/sxcore/vs2013/sxcore.vcxproj
@@ -75,7 +75,7 @@
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <LinkIncremental>false</LinkIncremental>
+    <LinkIncremental>true</LinkIncremental>
     <TargetName>$(ProjectName)_d</TargetName>
     <IncludePath>../../../source;$(VC_IncludePath);$(WindowsSDK_IncludePath);../../../sdks/dx9sdk/Include</IncludePath>
     <LibraryPath>../../../libs;$(LibraryPath);$(WindowsSDK_LibraryPath_x86);../../../sdks/dx9sdk/Lib</LibraryPath>
@@ -95,7 +95,7 @@
       </PrecompiledHeader>
       <WarningLevel>Level3</WarningLevel>
       <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_DEBUG;_WINDOWS;_USRDLL;SXCORE_EXPORTS;SX_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_DEBUG;_WINDOWS;_USRDLL;SXCORE_EXPORTS;SX_DLL;SX_LIB_NAME="CORE";%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
     </ClCompile>
@@ -115,7 +115,7 @@
       <Optimization>MaxSpeed</Optimization>
       <FunctionLevelLinking>true</FunctionLevelLinking>
       <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;SXCORE_EXPORTS;SX_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;SXCORE_EXPORTS;SX_DLL;SX_LIB_NAME="CORE";%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
     </ClCompile>
     <Link>
diff --git a/proj/sxdecals/vs2013/sxdecals.vcxproj b/proj/sxdecals/vs2013/sxdecals.vcxproj
index b1a178959..b4bd6708b 100644
--- a/proj/sxdecals/vs2013/sxdecals.vcxproj
+++ b/proj/sxdecals/vs2013/sxdecals.vcxproj
@@ -48,7 +48,7 @@
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <LinkIncremental>false</LinkIncremental>
+    <LinkIncremental>true</LinkIncremental>
     <OutDir>../../../build/</OutDir>
     <IncludePath>../../../source;../../../sdks/bullet3/src;$(VC_IncludePath);$(WindowsSdk_71A_IncludePath);../../../sdks/dx9sdk/Include;</IncludePath>
     <LibraryPath>../../../sdks/dx9sdk/Lib;../../../sdks/bullet3/bin;../../../libs;$(VC_LibraryPath_x86);$(WindowsSdk_71A_LibraryPath_x86);</LibraryPath>
@@ -66,7 +66,7 @@
       </PrecompiledHeader>
       <WarningLevel>Level3</WarningLevel>
       <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN32;_CRT_SECURE_NO_WARNINGS;_DEBUG;_WINDOWS;_USRDLL;SXDECALS_EXPORTS;SX_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>WIN32;_CRT_SECURE_NO_WARNINGS;_DEBUG;_WINDOWS;_USRDLL;SXDECALS_EXPORTS;SX_DLL;SX_LIB_NAME="DECALS";%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
     </ClCompile>
@@ -86,15 +86,16 @@
       <Optimization>MaxSpeed</Optimization>
       <FunctionLevelLinking>true</FunctionLevelLinking>
       <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>SX_DLL;WIN32;_CRT_SECURE_NO_WARNINGS;NDEBUG;_WINDOWS;_USRDLL;SXDECALS_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>SX_DLL;WIN32;_CRT_SECURE_NO_WARNINGS;NDEBUG;_WINDOWS;_USRDLL;SXDECALS_EXPORTS;SX_LIB_NAME="DECALS";%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
     </ClCompile>
     <Link>
       <SubSystem>Windows</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <GenerateDebugInformation>false</GenerateDebugInformation>
       <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <OptimizeReferences>true</OptimizeReferences>
       <ImportLibrary>../../../libs/$(TargetName).lib</ImportLibrary>
+      <ProgramDatabaseFile>$(ProjectDir)$(TargetName).pdb</ProgramDatabaseFile>
     </Link>
   </ItemDefinitionGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
diff --git a/proj/sxgame/vs2013/sxgame.vcxproj b/proj/sxgame/vs2013/sxgame.vcxproj
index 49968e552..5d98a16f4 100644
--- a/proj/sxgame/vs2013/sxgame.vcxproj
+++ b/proj/sxgame/vs2013/sxgame.vcxproj
@@ -40,7 +40,7 @@
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <LinkIncremental>false</LinkIncremental>
+    <LinkIncremental>true</LinkIncremental>
     <OutDir>../../../build/</OutDir>
     <IncludePath>../../../source;../../../sdks/bullet3/src;$(VC_IncludePath);$(WindowsSdk_71A_IncludePath);;../../../sdks/dx9sdk/Include;</IncludePath>
     <LibraryPath>../../../libs;$(VC_LibraryPath_x86);$(WindowsSdk_71A_LibraryPath_x86);;../../../sdks/dx9sdk/Lib;</LibraryPath>
@@ -58,7 +58,7 @@
       </PrecompiledHeader>
       <WarningLevel>Level3</WarningLevel>
       <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>SXGAME_EXPORT=_declspec(dllexport);SX_DLL;WIN32;_CRT_SECURE_NO_WARNINGS;_DEBUG;_WINDOWS;_USRDLL;SXGAME_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>SXGAME_EXPORT=_declspec(dllexport);SX_DLL;WIN32;_CRT_SECURE_NO_WARNINGS;_DEBUG;_WINDOWS;_USRDLL;SXGAME_EXPORTS;SX_LIB_NAME="GAME";%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
     </ClCompile>
@@ -78,15 +78,16 @@
       <Optimization>MaxSpeed</Optimization>
       <FunctionLevelLinking>true</FunctionLevelLinking>
       <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>SXGAME_EXPORT=_declspec(dllexport);SX_DLL;WIN32;_CRT_SECURE_NO_WARNINGS;NDEBUG;_WINDOWS;_USRDLL;SXGAME_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>SXGAME_EXPORT=_declspec(dllexport);SX_DLL;WIN32;_CRT_SECURE_NO_WARNINGS;NDEBUG;_WINDOWS;_USRDLL;SXGAME_EXPORTS;SX_LIB_NAME="GAME";%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
     </ClCompile>
     <Link>
       <SubSystem>Windows</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <GenerateDebugInformation>false</GenerateDebugInformation>
       <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <OptimizeReferences>true</OptimizeReferences>
       <ImportLibrary>../../../libs/$(TargetName).lib</ImportLibrary>
+      <ProgramDatabaseFile>$(ProjectDir)$(TargetName).pdb</ProgramDatabaseFile>
     </Link>
   </ItemDefinitionGroup>
   <ItemGroup>
diff --git a/proj/sxgcore/vs2013/sxgcore.vcxproj b/proj/sxgcore/vs2013/sxgcore.vcxproj
index 3fc121bae..d5e0ae703 100644
--- a/proj/sxgcore/vs2013/sxgcore.vcxproj
+++ b/proj/sxgcore/vs2013/sxgcore.vcxproj
@@ -41,7 +41,7 @@
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <LinkIncremental>false</LinkIncremental>
+    <LinkIncremental>true</LinkIncremental>
     <OutDir>../../../build/</OutDir>
     <TargetName>$(ProjectName)_d</TargetName>
     <IncludePath>$(IncludePath);$(WindowsSdk_71A_IncludePath);../../../source;../../../sdks/dx9sdk/Include;</IncludePath>
@@ -61,7 +61,7 @@
       </PrecompiledHeader>
       <WarningLevel>Level1</WarningLevel>
       <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;SGCORE_EXPORTS;SX_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;SGCORE_EXPORTS;SX_DLL;SX_LIB_NAME="GCORE";%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
     </ClCompile>
@@ -81,7 +81,7 @@
       <Optimization>MaxSpeed</Optimization>
       <FunctionLevelLinking>true</FunctionLevelLinking>
       <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;SGCORE_EXPORTS;SX_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;SGCORE_EXPORTS;SX_DLL;SX_LIB_NAME="GCORE";%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
     </ClCompile>
     <Link>
diff --git a/proj/sxgeom/vs2013/sxgeom.vcxproj b/proj/sxgeom/vs2013/sxgeom.vcxproj
index c49173779..95af52972 100644
--- a/proj/sxgeom/vs2013/sxgeom.vcxproj
+++ b/proj/sxgeom/vs2013/sxgeom.vcxproj
@@ -62,7 +62,7 @@
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <LinkIncremental>false</LinkIncremental>
+    <LinkIncremental>true</LinkIncremental>
     <OutDir>../../../build/</OutDir>
     <TargetName>$(ProjectName)_d</TargetName>
     <IncludePath>../../../source;$(VC_IncludePath);$(WindowsSDK_IncludePath);../../../sdks/dx9sdk/Include</IncludePath>
@@ -82,7 +82,7 @@
       </PrecompiledHeader>
       <WarningLevel>Level3</WarningLevel>
       <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;SXGEOM_EXPORTS;SX_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;SXGEOM_EXPORTS;SX_DLL;SX_LIB_NAME="GEOM";%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
     </ClCompile>
@@ -102,7 +102,7 @@
       <Optimization>MaxSpeed</Optimization>
       <FunctionLevelLinking>true</FunctionLevelLinking>
       <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;SXGEOM_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;SXGEOM_EXPORTS;SX_LIB_NAME="GEOM";%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
     </ClCompile>
     <Link>
diff --git a/proj/sxguiwinapi/vs2013/sxguiwinapi.vcxproj b/proj/sxguiwinapi/vs2013/sxguiwinapi.vcxproj
index 8561c371f..81dba1f16 100644
--- a/proj/sxguiwinapi/vs2013/sxguiwinapi.vcxproj
+++ b/proj/sxguiwinapi/vs2013/sxguiwinapi.vcxproj
@@ -145,7 +145,7 @@
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <LinkIncremental>false</LinkIncremental>
+    <LinkIncremental>true</LinkIncremental>
     <OutDir>../../../build/</OutDir>
     <TargetName>$(ProjectName)_d</TargetName>
     <IncludePath>../../../source;$(IncludePath)</IncludePath>
@@ -195,6 +195,7 @@
       <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <OptimizeReferences>true</OptimizeReferences>
       <ImportLibrary>../../../libs/$(TargetName).lib</ImportLibrary>
+      <ProgramDatabaseFile>$(ProjectDir)$(TargetName).pdb</ProgramDatabaseFile>
     </Link>
   </ItemDefinitionGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
diff --git a/proj/sxinput/vs2013/sxinput.vcxproj b/proj/sxinput/vs2013/sxinput.vcxproj
index 900a09aab..e6adf7499 100644
--- a/proj/sxinput/vs2013/sxinput.vcxproj
+++ b/proj/sxinput/vs2013/sxinput.vcxproj
@@ -40,7 +40,7 @@
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <LinkIncremental>false</LinkIncremental>
+    <LinkIncremental>true</LinkIncremental>
     <OutDir>../../../build/</OutDir>
     <TargetName>$(ProjectName)_d</TargetName>
     <IncludePath>../../../source;$(VC_IncludePath);$(WindowsSDK_IncludePath);../../../sdks/dx9sdk/Include</IncludePath>
@@ -60,7 +60,7 @@
       </PrecompiledHeader>
       <WarningLevel>Level3</WarningLevel>
       <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;SXINPUT_EXPORTS;SX_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;SXINPUT_EXPORTS;SX_DLL;SX_LIB_NAME="INPUT";%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
     </ClCompile>
@@ -80,7 +80,7 @@
       <Optimization>MaxSpeed</Optimization>
       <FunctionLevelLinking>true</FunctionLevelLinking>
       <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;SXINPUT_EXPORTS;SX_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;SXINPUT_EXPORTS;SX_DLL;SX_LIB_NAME="INPUT";%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
     </ClCompile>
     <Link>
diff --git a/proj/sxlevel/vs2013/sxlevel.vcxproj b/proj/sxlevel/vs2013/sxlevel.vcxproj
index dbf9e8d07..334d962fe 100644
--- a/proj/sxlevel/vs2013/sxlevel.vcxproj
+++ b/proj/sxlevel/vs2013/sxlevel.vcxproj
@@ -60,7 +60,7 @@
       </PrecompiledHeader>
       <WarningLevel>Level3</WarningLevel>
       <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;SXLEVEL_EXPORTS;SX_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;SXLEVEL_EXPORTS;SX_DLL;%(PreprocessorDefinitions);SX_LIB_NAME="LEVEL"</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
     </ClCompile>
@@ -79,7 +79,7 @@
       <Optimization>MaxSpeed</Optimization>
       <FunctionLevelLinking>true</FunctionLevelLinking>
       <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;SXLEVEL_EXPORTS;SX_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;SXLEVEL_EXPORTS;SX_DLL;%(PreprocessorDefinitions);SX_LIB_NAME="LEVEL"</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
     </ClCompile>
     <Link>
diff --git a/proj/sxleveleditor/vs2013/sxleveleditor.vcxproj b/proj/sxleveleditor/vs2013/sxleveleditor.vcxproj
index 41fedee70..e5d12dfd4 100644
--- a/proj/sxleveleditor/vs2013/sxleveleditor.vcxproj
+++ b/proj/sxleveleditor/vs2013/sxleveleditor.vcxproj
@@ -40,7 +40,7 @@
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <LinkIncremental>false</LinkIncremental>
+    <LinkIncremental>true</LinkIncremental>
     <TargetName>$(ProjectName)_d</TargetName>
     <IncludePath>../../../sdks/bullet3/src;$(VC_IncludePath);$(WindowsSDK_IncludePath);../../../source;../../../sdks/dx9sdk/Include;</IncludePath>
     <LibraryPath>$(VC_LibraryPath_x86);$(WindowsSDK_LibraryPath_x86);../../../libs;../../../sdks/dx9sdk/lib;</LibraryPath>
@@ -60,7 +60,7 @@
       </PrecompiledHeader>
       <WarningLevel>TurnOffAllWarnings</WarningLevel>
       <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;SX_LEVEL_EDITOR;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;SX_LEVEL_EDITOR;%(PreprocessorDefinitions);SX_LIB_NAME="LEd"</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
     </ClCompile>
     <Link>
@@ -78,7 +78,7 @@
       <Optimization>MaxSpeed</Optimization>
       <FunctionLevelLinking>true</FunctionLevelLinking>
       <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;SX_LEVEL_EDITOR;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;SX_LEVEL_EDITOR;%(PreprocessorDefinitions);SX_LIB_NAME="LEd"</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
     </ClCompile>
     <Link>
diff --git a/proj/sxmaterialeditor/vs2013/sxmaterialeditor.vcxproj b/proj/sxmaterialeditor/vs2013/sxmaterialeditor.vcxproj
index bbf500d70..90a9a462f 100644
--- a/proj/sxmaterialeditor/vs2013/sxmaterialeditor.vcxproj
+++ b/proj/sxmaterialeditor/vs2013/sxmaterialeditor.vcxproj
@@ -60,7 +60,7 @@
       </PrecompiledHeader>
       <WarningLevel>TurnOffAllWarnings</WarningLevel>
       <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;SX_MATERIAL_EDITOR;SX_EXE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;SX_MATERIAL_EDITOR;SX_EXE;%(PreprocessorDefinitions);SX_LIB_NAME="MEd"</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
     </ClCompile>
     <Link>
@@ -78,7 +78,7 @@
       <Optimization>MaxSpeed</Optimization>
       <FunctionLevelLinking>true</FunctionLevelLinking>
       <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;SX_MATERIAL_EDITOR;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;SX_MATERIAL_EDITOR;%(PreprocessorDefinitions);SX_LIB_NAME="MEd"</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
     </ClCompile>
     <Link>
diff --git a/proj/sxmtllight/vs2013/sxmtllight.vcxproj b/proj/sxmtllight/vs2013/sxmtllight.vcxproj
index 862a03a0d..f32c0d568 100644
--- a/proj/sxmtllight/vs2013/sxmtllight.vcxproj
+++ b/proj/sxmtllight/vs2013/sxmtllight.vcxproj
@@ -40,7 +40,7 @@
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <LinkIncremental>false</LinkIncremental>
+    <LinkIncremental>true</LinkIncremental>
     <OutDir>../../../build/</OutDir>
     <TargetName>$(ProjectName)_d</TargetName>
     <IncludePath>../../../source;$(VC_IncludePath);$(WindowsSDK_IncludePath);../../../sdks/dx9sdk/Include</IncludePath>
@@ -60,7 +60,7 @@
       </PrecompiledHeader>
       <WarningLevel>Level3</WarningLevel>
       <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;SXMTLLIGHT_EXPORTS;SX_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;SXMTLLIGHT_EXPORTS;SX_DLL;%(PreprocessorDefinitions);SX_LIB_NAME="MTLLIGHT"</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
     </ClCompile>
@@ -80,7 +80,7 @@
       <Optimization>MaxSpeed</Optimization>
       <FunctionLevelLinking>true</FunctionLevelLinking>
       <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;SXMTLLIGHT_EXPORTS;SX_EXE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;SXMTLLIGHT_EXPORTS;SX_EXE;%(PreprocessorDefinitions);SX_LIB_NAME="MTLLIGHT"</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
     </ClCompile>
     <Link>
diff --git a/proj/sxparticles/vs2013/sxparticles.vcxproj b/proj/sxparticles/vs2013/sxparticles.vcxproj
index 838965423..08adde773 100644
--- a/proj/sxparticles/vs2013/sxparticles.vcxproj
+++ b/proj/sxparticles/vs2013/sxparticles.vcxproj
@@ -40,7 +40,7 @@
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <LinkIncremental>false</LinkIncremental>
+    <LinkIncremental>true</LinkIncremental>
     <IncludePath>../../../source;$(VC_IncludePath);$(WindowsSDK_IncludePath);../../../sdks/dx9sdk/Include</IncludePath>
     <LibraryPath>../../../libs;$(LibraryPath);$(WindowsSDK_LibraryPath_x86);../../../sdks/dx9sdk/Lib</LibraryPath>
     <SourcePath>../../../source;$(VC_LibraryPath_x86);$(WindowsSDK_LibraryPath_x86);../../../sdks/dx9sdk/Include</SourcePath>
@@ -60,7 +60,7 @@
       </PrecompiledHeader>
       <WarningLevel>Level3</WarningLevel>
       <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;SXPARTICLES_EXPORTS;SX_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;SXPARTICLES_EXPORTS;SX_DLL;%(PreprocessorDefinitions);SX_LIB_NAME="PARTICLES"</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
     </ClCompile>
@@ -80,7 +80,7 @@
       <Optimization>MaxSpeed</Optimization>
       <FunctionLevelLinking>true</FunctionLevelLinking>
       <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;SXPARTICLES_EXPORTS;SX_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;SXPARTICLES_EXPORTS;SX_DLL;%(PreprocessorDefinitions);SX_LIB_NAME="PARTICLES"</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
     </ClCompile>
     <Link>
diff --git a/proj/sxparticleseditor/vs2013/sxparticleseditor.vcxproj b/proj/sxparticleseditor/vs2013/sxparticleseditor.vcxproj
index 40e92ff7a..4061dcb57 100644
--- a/proj/sxparticleseditor/vs2013/sxparticleseditor.vcxproj
+++ b/proj/sxparticleseditor/vs2013/sxparticleseditor.vcxproj
@@ -60,7 +60,7 @@
       </PrecompiledHeader>
       <WarningLevel>Level1</WarningLevel>
       <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;SX_PARTICLES_EDITOR;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;SX_PARTICLES_EDITOR;%(PreprocessorDefinitions);SX_LIB_NAME="PEd"</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
     </ClCompile>
     <Link>
@@ -78,7 +78,7 @@
       <Optimization>MaxSpeed</Optimization>
       <FunctionLevelLinking>true</FunctionLevelLinking>
       <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;SX_PARTICLES_EDITOR;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;SX_PARTICLES_EDITOR;%(PreprocessorDefinitions);SX_LIB_NAME="PEd"</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
     </ClCompile>
     <Link>
diff --git a/proj/sxphysics/vs2013/sxphysics.vcxproj b/proj/sxphysics/vs2013/sxphysics.vcxproj
index 3abf267a1..334ac37c2 100644
--- a/proj/sxphysics/vs2013/sxphysics.vcxproj
+++ b/proj/sxphysics/vs2013/sxphysics.vcxproj
@@ -40,7 +40,7 @@
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <LinkIncremental>false</LinkIncremental>
+    <LinkIncremental>true</LinkIncremental>
     <OutDir>../../../build/</OutDir>
     <IncludePath>../../../source;../../../sdks/bullet3/src;$(VC_IncludePath);$(WindowsSdk_71A_IncludePath);../../../sdks/dx9sdk/Include;</IncludePath>
     <LibraryPath>../../../sdks/dx9sdk/Lib;../../../sdks/bullet3/bin;../../../libs;$(VC_LibraryPath_x86);$(WindowsSdk_71A_LibraryPath_x86);</LibraryPath>
@@ -58,7 +58,7 @@
       </PrecompiledHeader>
       <WarningLevel>Level3</WarningLevel>
       <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>BULLET_EXPORTS=_declspec(dllexport);SX_DLL;WIN32;_CRT_SECURE_NO_WARNINGS;_DEBUG;_WINDOWS;_USRDLL;SXPHYSICS_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>BULLET_EXPORTS=_declspec(dllexport);SX_DLL;WIN32;_CRT_SECURE_NO_WARNINGS;_DEBUG;_WINDOWS;_USRDLL;SXPHYSICS_EXPORTS;%(PreprocessorDefinitions);SX_LIB_NAME="PHYSICS"</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
     </ClCompile>
@@ -78,7 +78,7 @@
       <Optimization>MaxSpeed</Optimization>
       <FunctionLevelLinking>true</FunctionLevelLinking>
       <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>BULLET_EXPORTS=_declspec(dllexport);SX_DLL;WIN32;_CRT_SECURE_NO_WARNINGS;NDEBUG;_WINDOWS;_USRDLL;SXPHYSICS_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>BULLET_EXPORTS=_declspec(dllexport);SX_DLL;WIN32;_CRT_SECURE_NO_WARNINGS;NDEBUG;_WINDOWS;_USRDLL;SXPHYSICS_EXPORTS;%(PreprocessorDefinitions);SX_LIB_NAME="PHYSICS"</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
     </ClCompile>
     <Link>
@@ -87,6 +87,7 @@
       <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <OptimizeReferences>true</OptimizeReferences>
       <ImportLibrary>../../../libs/$(TargetName).lib</ImportLibrary>
+      <ProgramDatabaseFile>$(ProjectDir)$(TargetName).pdb</ProgramDatabaseFile>
     </Link>
   </ItemDefinitionGroup>
   <ItemGroup>
diff --git a/proj/sxpp/vs2013/sxpp.vcxproj b/proj/sxpp/vs2013/sxpp.vcxproj
index 77c5ed4e2..2279d7f2c 100644
--- a/proj/sxpp/vs2013/sxpp.vcxproj
+++ b/proj/sxpp/vs2013/sxpp.vcxproj
@@ -40,7 +40,7 @@
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <LinkIncremental>false</LinkIncremental>
+    <LinkIncremental>true</LinkIncremental>
     <IncludePath>../../../source;$(VC_IncludePath);$(WindowsSDK_IncludePath);../../../sdks/dx9sdk/Include</IncludePath>
     <LibraryPath>../../../libs;$(LibraryPath);$(WindowsSDK_LibraryPath_x86);../../../sdks/dx9sdk/Lib</LibraryPath>
     <SourcePath>../../../source;$(VC_LibraryPath_x86);$(WindowsSDK_LibraryPath_x86);../../../sdks/dx9sdk/Include</SourcePath>
@@ -61,7 +61,7 @@
       </PrecompiledHeader>
       <WarningLevel>Level3</WarningLevel>
       <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;SXPP_EXPORTS;SX_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;SXPP_EXPORTS;SX_DLL;%(PreprocessorDefinitions);SX_LIB_NAME="PP"</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
     </ClCompile>
@@ -81,7 +81,7 @@
       <Optimization>MaxSpeed</Optimization>
       <FunctionLevelLinking>true</FunctionLevelLinking>
       <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;SXPP_EXPORTS;SX_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;SXPP_EXPORTS;SX_DLL;%(PreprocessorDefinitions);SX_LIB_NAME="PP"</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
     </ClCompile>
     <Link>
diff --git a/proj/sxrender/vs2013/sxrender.vcxproj b/proj/sxrender/vs2013/sxrender.vcxproj
index 2d6dd9190..04f059f16 100644
--- a/proj/sxrender/vs2013/sxrender.vcxproj
+++ b/proj/sxrender/vs2013/sxrender.vcxproj
@@ -60,7 +60,7 @@
       </PrecompiledHeader>
       <WarningLevel>Level3</WarningLevel>
       <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN32;_CRT_SECURE_NO_WARNINGS;_DEBUG;_WINDOWS;_USRDLL;SXRENDER_EXPORTS;SX_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>WIN32;_CRT_SECURE_NO_WARNINGS;_DEBUG;_WINDOWS;_USRDLL;SXRENDER_EXPORTS;SX_DLL;%(PreprocessorDefinitions);SX_LIB_NAME="RENDER"</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
     </ClCompile>
@@ -69,6 +69,7 @@
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <ImportLibrary>../../../libs/$(TargetName).lib</ImportLibrary>
       <ProgramDatabaseFile>$(ProjectDir)$(TargetName).pdb</ProgramDatabaseFile>
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
     </Link>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -79,7 +80,7 @@
       <Optimization>MaxSpeed</Optimization>
       <FunctionLevelLinking>true</FunctionLevelLinking>
       <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>WIN32;_CRT_SECURE_NO_WARNINGS;NDEBUG;_WINDOWS;_USRDLL;SXRENDER_EXPORTS;SX_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>WIN32;_CRT_SECURE_NO_WARNINGS;NDEBUG;_WINDOWS;_USRDLL;SXRENDER_EXPORTS;SX_DLL;%(PreprocessorDefinitions);SX_LIB_NAME="RENDER"</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
     </ClCompile>
     <Link>
diff --git a/proj/sxrender/vs2013/sxrender_d.dll b/proj/sxrender/vs2013/sxrender_d.dll
new file mode 100644
index 0000000000000000000000000000000000000000..ab76cdcbadac486d17b0ff8b14a292ac44fa3f46
GIT binary patch
literal 733696
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%0A71u?*5U#%b(eE4fY
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%0A&gxScU%uR2Lr901puU;NR}VX6gE+SQ$JB
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

literal 0
HcmV?d00001

diff --git a/proj/sxscore/vs2013/sxscore.vcxproj b/proj/sxscore/vs2013/sxscore.vcxproj
index 2bc613f0a..fdc0b888f 100644
--- a/proj/sxscore/vs2013/sxscore.vcxproj
+++ b/proj/sxscore/vs2013/sxscore.vcxproj
@@ -50,7 +50,7 @@
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <LinkIncremental>false</LinkIncremental>
+    <LinkIncremental>true</LinkIncremental>
     <OutDir>../../../build/</OutDir>
     <TargetName>$(ProjectName)_d</TargetName>
     <IncludePath>../../../sdks/ogg/libogg/include/;../../../sdks/ogg/libvorbis/include/;../../../source;$(VC_IncludePath);$(WindowsSDK_IncludePath);../../../sdks/dx9sdk/Include</IncludePath>
@@ -70,7 +70,7 @@
       </PrecompiledHeader>
       <WarningLevel>Level3</WarningLevel>
       <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN32;_CRT_SECURE_NO_WARNINGS;_DEBUG;_WINDOWS;_USRDLL;SXSCORE_EXPORTS;SX_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>WIN32;_CRT_SECURE_NO_WARNINGS;_DEBUG;_WINDOWS;_USRDLL;SXSCORE_EXPORTS;SX_DLL;%(PreprocessorDefinitions);SX_LIB_NAME="SCORE"</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
     </ClCompile>
@@ -90,7 +90,7 @@
       <Optimization>MaxSpeed</Optimization>
       <FunctionLevelLinking>true</FunctionLevelLinking>
       <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>WIN32;_CRT_SECURE_NO_WARNINGS;NDEBUG;_WINDOWS;_USRDLL;SXSCORE_EXPORTS;SX_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>WIN32;_CRT_SECURE_NO_WARNINGS;NDEBUG;_WINDOWS;_USRDLL;SXSCORE_EXPORTS;SX_DLL;%(PreprocessorDefinitions);SX_LIB_NAME="SCORE"</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
     </ClCompile>
     <Link>
diff --git a/source/GRegisterIndex.h b/source/GRegisterIndex.h
index 48d69639f..2f6cff81b 100644
--- a/source/GRegisterIndex.h
+++ b/source/GRegisterIndex.h
@@ -1,16 +1,16 @@
 
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 /*! 
 \file 
  Зарезервированные (именованые) номера регистров 
 */
 
-#ifndef __G_RI
-#define __G_RI
+#ifndef __G_RI_H
+#define __G_RI_H
 
 /*! \name float4x4 register 
 @{*/
diff --git a/source/SkyXEngine.h b/source/SkyXEngine.h
index 0aea06100..36810e6f9 100644
--- a/source/SkyXEngine.h
+++ b/source/SkyXEngine.h
@@ -1,8 +1,8 @@
 
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 /*! 
 \file
diff --git a/source/SkyXEngine_Build/SkyXEngine_Build.cpp b/source/SkyXEngine_Build/SkyXEngine_Build.cpp
index 50232fab6..af579d6be 100644
--- a/source/SkyXEngine_Build/SkyXEngine_Build.cpp
+++ b/source/SkyXEngine_Build/SkyXEngine_Build.cpp
@@ -1,8 +1,8 @@
 
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 #define _CRT_SECURE_NO_WARNINGS
 
diff --git a/source/aigrid/aigrid.cpp b/source/aigrid/aigrid.cpp
index 16acec3c1..afc23a97b 100644
--- a/source/aigrid/aigrid.cpp
+++ b/source/aigrid/aigrid.cpp
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "aigrid.h"
 
 void AIGrid::CorrectPosXZ(float3* pos)
@@ -61,13 +66,13 @@ void AIGrid::GridSave(const char* path)
 {
 	if (ArrQuads.size() <= 0)
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_WARNING, "sxaigrid: AI grid not found\n");
+		LibReport(REPORT_MSG_LEVEL_WARNING, "AI grid not found\n");
 		return;
 	}
 
 	if (CountSplits <= 0)
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_WARNING, "sxaigrid: can not find path, because AI grid is not validate splits\n");
+		LibReport(REPORT_MSG_LEVEL_WARNING, "can not find path, because AI grid is not validate splits\n");
 		return;
 	}
 
@@ -189,7 +194,7 @@ void AIGrid::GridLoad(const char* path)
 	fclose(file);
 	ReCreateBuffs();
 
-	g_fnReportf(REPORT_MSG_LEVEL_NOTICE, "sxaigrid: AI grid is loaded, count quads %d, count graph points %d\n", ArrQuads.size(), ArrGraphPointsIDs.size());
+	LibReport(REPORT_MSG_LEVEL_NOTICE, "AI grid is loaded, count quads %d, count graph points %d\n", ArrQuads.size(), ArrGraphPointsIDs.size());
 
 	GridTestValidation();
 }
@@ -273,7 +278,7 @@ void AIGrid::BBCreate(const float3* center, const float3* param)
 {
 	if (ArrBound.size() > 1)
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_WARNING, "sxaigrid: bound box already splitting, unresolved create");
+		LibReport(REPORT_MSG_LEVEL_WARNING, "bound box already splitting, unresolved create");
 		return;
 	}
 
@@ -305,13 +310,13 @@ void AIGrid::BBSetDimensions(const float3* dim)
 {
 	if (ArrBound.size() <= 0)
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_WARNING, "sxaigrid: bound box is not created");
+		LibReport(REPORT_MSG_LEVEL_WARNING, "bound box is not created");
 		return;
 	}
 
 	if (ArrBound.size() > 1)
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_WARNING, "sxaigrid: bound box already splitting, unresolved set dimensions");
+		LibReport(REPORT_MSG_LEVEL_WARNING, "bound box already splitting, unresolved set dimensions");
 		return;
 	}
 
@@ -347,7 +352,7 @@ void AIGrid::BBGetDimensions(float3* dim) const
 {
 	if (ArrBound.size() <= 0)
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_WARNING, "sxaigrid: bound box is not created");
+		LibReport(REPORT_MSG_LEVEL_WARNING, "bound box is not created");
 		return;
 	}
 
@@ -363,13 +368,13 @@ void AIGrid::BBSetPos(const float3* pos)
 {
 	if (ArrBound.size() <= 0)
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_WARNING, "sxaigrid: bound box is not created");
+		LibReport(REPORT_MSG_LEVEL_WARNING, "bound box is not created");
 		return;
 	}
 
 	if(ArrBound.size() > 1)
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_WARNING, "sxaigrid: bound box already splitting, unresolved set position");
+		LibReport(REPORT_MSG_LEVEL_WARNING, "bound box already splitting, unresolved set position");
 		return;
 	}
 
@@ -399,7 +404,7 @@ void AIGrid::BBGetPos(float3* pos) const
 {
 	if (ArrBound.size() <= 0)
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_WARNING, "sxaigrid: bound box is not created");
+		LibReport(REPORT_MSG_LEVEL_WARNING, "bound box is not created");
 		return;
 	}
 
@@ -932,7 +937,7 @@ void AIGrid::GraphicsInit()
 
 	if (!DXDevice)
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_ERROR, "sxaigrid: %s - dx device is not init", GEN_MSG_LOCATION);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - dx device is not init", GEN_MSG_LOCATION);
 	}
 
 	D3DVERTEXELEMENT9 InstanceAIQuad[] =
@@ -949,7 +954,7 @@ void AIGrid::GraphicsInit()
 
 	DXDevice->CreateVertexDeclaration(InstanceAIQuad, &AIQuadDecl);
 
-	Tex_AIGrid = SGCore_LoadTexAddName("decal_aigrid1.dds", LoadTexType::ltt_const);
+	Tex_AIGrid = SGCore_LoadTexAddName("decal_aigrid1.dds", LOAD_TEXTURE_TYPE_CONST);
 
 	IDVS = SGCore_ShaderLoad(SHADER_TYPE_VERTEX, "aigrid_quad.vs", "aigrid_quad.vs", SHADER_CHECKDOUBLE_PATH);
 	IDPS = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "aigrid_quad.ps", "aigrid_quad.ps", SHADER_CHECKDOUBLE_PATH);
@@ -1106,7 +1111,7 @@ void AIGrid::GridGenerate()
 {
 	if (ArrQuads.size() <= 0)
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_WARNING, "sxaigrid: it is necessary one quad in AI grid");
+		LibReport(REPORT_MSG_LEVEL_WARNING, "it is necessary one quad in AI grid");
 		return;
 	}
 
@@ -1147,7 +1152,7 @@ void AIGrid::GridGenerate()
 		ArrQuadsCheck.clear();
 	}
 
-	g_fnReportf(REPORT_MSG_LEVEL_NOTICE, "sxaigrid: AI grid generated, all count = %d, gen count = %d, count time = %d mlsec\n", ArrQuads.size(), ArrQuads.size() - oldsizegrid, GetTickCount() - ttime);
+	LibReport(REPORT_MSG_LEVEL_NOTICE, "AI grid generated, all count = %d, gen count = %d, count time = %d mlsec\n", ArrQuads.size(), ArrQuads.size() - oldsizegrid, GetTickCount() - ttime);
 	
 	CountSplits = 0;
 	ReCreateBuffs();
@@ -1157,7 +1162,7 @@ void AIGrid::GraphPointGenerate()
 {
 	if (ArrQuads.size() <= 1)
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_WARNING, "sxaigrid: AI grid not found\n");
+		LibReport(REPORT_MSG_LEVEL_WARNING, "AI grid not found\n");
 		return;
 	}
 
@@ -1189,7 +1194,7 @@ void AIGrid::GraphPointGenerate()
 	if (ArrGraphPointsIDs.size() > 0)
 	{
 		memset(&(ArrCostGPIDs[0]), -1, ArrCostGPIDs.size() * sizeof(int32_t));
-		g_fnReportf(REPORT_MSG_LEVEL_NOTICE, "sxaigrid: graph points is generated, count %d\n", ArrGraphPointsIDs.size());
+		LibReport(REPORT_MSG_LEVEL_NOTICE, "graph points is generated, count %d\n", ArrGraphPointsIDs.size());
 	}
 }
 
@@ -2104,7 +2109,7 @@ void AIGrid::GridTestValidation()
 {
 	if (ArrQuads.size() <= 1 || ArrBound.size() <= 1)
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_WARNING, "sxaigrid: AI grid is not created, unresolved validation\n");
+		LibReport(REPORT_MSG_LEVEL_WARNING, "AI grid is not created, unresolved validation\n");
 		return;
 	}
 
@@ -2173,7 +2178,7 @@ void AIGrid::GridTestValidation()
 	}
 	//}
 
-	g_fnReportf(REPORT_MSG_LEVEL_NOTICE, "sxaigrid: AI grid is validation, deleted quads %d, count splits %d\n", oldcountquads - ArrQuads.size(), CountSplits);
+	LibReport(REPORT_MSG_LEVEL_NOTICE, "AI grid is validation, deleted quads %d, count splits %d\n", oldcountquads - ArrQuads.size(), CountSplits);
 }
 
 UINT AIGrid::GridGetCountSplits()
@@ -2224,7 +2229,7 @@ void AIGrid::RenderQuads(const ISXFrustum * frustum, const float3 * viewpos, flo
 			bound = ArrBound[i];
 			center = (bound->min + bound->max) * 0.5f;
 			radius = SMVector3Length(center - bound->max);
-			if (frustum->SphereInFrustum(&center, radius))
+			if (frustum->sphereInFrustum(&center, radius))
 			{
 				for (int k = 0, kl = bound->ArrIdsQuads.size(); k < kl; ++k)
 				{
@@ -2637,7 +2642,7 @@ ID AIGrid::GraphPointGetNear(ID beginq, ID endq)
 {
 	if (ArrQuads.size() <= 1)
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_WARNING, "sxaigrid: AI grid not found\n");
+		LibReport(REPORT_MSG_LEVEL_WARNING, "AI grid not found\n");
 		return -1;
 	}
 
@@ -2646,25 +2651,25 @@ ID AIGrid::GraphPointGetNear(ID beginq, ID endq)
 
 	if (CountSplits == 0)
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_WARNING, "sxaigrid: can not find path, because AI grid is not validate splits\n");
+		LibReport(REPORT_MSG_LEVEL_WARNING, "can not find path, because AI grid is not validate splits\n");
 		return -1;
 	}
 
 	if (ArrQuads[beginq]->IdSplit != ArrQuads[endq]->IdSplit)
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_WARNING, "sxaigrid: quads in different splits, path not found\n");
+		LibReport(REPORT_MSG_LEVEL_WARNING, "quads in different splits, path not found\n");
 		return -1;
 	}
 
 	if (beginq == endq)
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_WARNING, "sxaigrid: beginq == endq, path not found\n");
+		LibReport(REPORT_MSG_LEVEL_WARNING, "beginq == endq, path not found\n");
 		return -1;
 	}
 
 	if (ArrGraphPointsIDs.size() == 0)
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_WARNING, "sxaigrid: graph points not found\n");
+		LibReport(REPORT_MSG_LEVEL_WARNING, "graph points not found\n");
 		return -1;
 	}
 	
@@ -2717,7 +2722,7 @@ bool AIGrid::GridFindPath(ID beginq, ID endq)
 {
 	if (ArrQuads.size() <= 1)
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_WARNING, "sxaigrid: AI grid not found\n");
+		LibReport(REPORT_MSG_LEVEL_WARNING, "AI grid not found\n");
 		return false;
 	}
 
@@ -2726,19 +2731,19 @@ bool AIGrid::GridFindPath(ID beginq, ID endq)
 
 	if (CountSplits == 0)
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_WARNING, "sxaigrid: can not find path, because AI grid is not validate splits\n");
+		LibReport(REPORT_MSG_LEVEL_WARNING, "can not find path, because AI grid is not validate splits\n");
 		return false;
 	}
 
 	if (ArrQuads[beginq]->IdSplit != ArrQuads[endq]->IdSplit)
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_WARNING, "sxaigrid: quads in different splits, path not found\n");
+		LibReport(REPORT_MSG_LEVEL_WARNING, "quads in different splits, path not found\n");
 		return false;
 	}
 
 	if (beginq == endq)
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_WARNING, "sxaigrid: beginq == endq, path not found\n");
+		LibReport(REPORT_MSG_LEVEL_WARNING, "beginq == endq, path not found\n");
 		return false;
 	}
 
diff --git a/source/aigrid/aigrid.h b/source/aigrid/aigrid.h
index d9d92275e..9193ec82f 100644
--- a/source/aigrid/aigrid.h
+++ b/source/aigrid/aigrid.h
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #ifndef __AIGRID_H
 #define __AIGRID_H
 
@@ -7,13 +12,12 @@
 #include <common/memalloc.h>
 
 #define SM_D3D_CONVERSIONS
-#include <common\SXMath.h>
+#include <common/SXMath.h>
 #include "sxaigrid.h"
 
-extern report_func g_fnReportf;
 extern g_aiquad_phy_navigate AIQuadPhyNavigate;
 
-#define AIGRID_QUAD_PRECOND(id,retval)  if (id < 0 || ArrQuads.size() <= id) {g_fnReportf(REPORT_MSG_LEVEL_ERROR, " %s - unresolved index '%d' of quad, sxaigrid", GEN_MSG_LOCATION, id); return retval;}
+#define AIGRID_QUAD_PRECOND(id,retval)  if (id < 0 || ArrQuads.size() <= id) {LibReport(REPORT_MSG_LEVEL_ERROR, " %s - unresolved index '%d' of quad, sxaigrid", GEN_MSG_LOCATION, id); return retval;}
 
 #define toint100(fnum) (int32_t)((fnum + 0.0001f) * 100)
 
diff --git a/source/aigrid/sxaigrid.cpp b/source/aigrid/sxaigrid.cpp
index 9d262c9e5..ae2e1834e 100644
--- a/source/aigrid/sxaigrid.cpp
+++ b/source/aigrid/sxaigrid.cpp
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "sxaigrid.h"
 #include "aigrid.h"
 
@@ -18,7 +23,7 @@ g_aiquad_phy_navigate AIQuadPhyNavigate = QuadPhyNavigate;
 
 AIGrid* ObjAIGrid = 0;
 
-#define AIG_PRECOND(retval) if(!ObjAIGrid){g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s - sxaigrid is not init", GEN_MSG_LOCATION); return retval;}
+#define AIG_PRECOND(retval) if(!ObjAIGrid){LibReport(REPORT_MSG_LEVEL_ERROR, "%s - sxaigrid is not init", GEN_MSG_LOCATION); return retval;}
 
 //##########################################################################
 
@@ -42,7 +47,7 @@ SX_LIB_API void SAIG_0Create(const char* name, bool use_graphics, bool is_unic)
 			if (GetLastError() == ERROR_ALREADY_EXISTS)
 			{
 				CloseHandle(hMutex);
-				g_fnReportf(-1, "%s - none unic name, sxaigrid", GEN_MSG_LOCATION);
+				LibReport(REPORT_MSG_LEVEL_ERROR, "%s - none unic name", GEN_MSG_LOCATION);
 			}
 			else
 			{
@@ -59,7 +64,7 @@ SX_LIB_API void SAIG_0Create(const char* name, bool use_graphics, bool is_unic)
 		}
 	}
 	else
-		g_fnReportf(-1, "%s - not init argument [name], sxaigrid", GEN_MSG_LOCATION);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - not init argument [name]", GEN_MSG_LOCATION);
 }
 
 SX_LIB_API void SAIG_AKill()
diff --git a/source/aigrid/sxaigrid.h b/source/aigrid/sxaigrid.h
index 7a8bf662e..f1c2dec5e 100644
--- a/source/aigrid/sxaigrid.h
+++ b/source/aigrid/sxaigrid.h
@@ -1,8 +1,8 @@
 
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 /*!
 \file
diff --git a/source/aigrid/sxaigrid_dll.cpp b/source/aigrid/sxaigrid_dll.cpp
index 40901c2f9..a34ff74f6 100644
--- a/source/aigrid/sxaigrid_dll.cpp
+++ b/source/aigrid/sxaigrid_dll.cpp
@@ -1,10 +1,9 @@
 
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
-#pragma once
 #include <windows.h>
 
 BOOL APIENTRY DllMain(HMODULE hModule,
diff --git a/source/anim/ModelFile.h b/source/anim/ModelFile.h
index 9d87deb40..20f6645a7 100644
--- a/source/anim/ModelFile.h
+++ b/source/anim/ModelFile.h
@@ -1,8 +1,8 @@
 
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 /*!
 \file
@@ -14,8 +14,8 @@ See the license in LICENSE
 @{
 */
 
-#ifndef _ModelFileAnim_H_
-#define _ModelFileAnim_H_
+#ifndef __MODELFILE_H
+#define __MODELFILE_H
 
 #include <common/sxtypes.h>
 #include <common/SXMath.h>
diff --git a/source/anim/animated.cpp b/source/anim/animated.cpp
index c7de1b11a..47b08aa5b 100644
--- a/source/anim/animated.cpp
+++ b/source/anim/animated.cpp
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "animated.h"
 #include <cstdlib>
 #include <cstdio>
@@ -49,14 +54,14 @@ void ModelFile::Load(const char * name)
 	FILE * fp = fopen(name, "rb");
 	if(!fp)
 	{
-		reportf(REPORT_MSG_LEVEL_ERROR, "Unable to open \"%s\"\n", name);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "Unable to open \"%s\"\n", name);
 	}
 
 	fread(&m_hdr, sizeof(ModelHeader), 1, fp);
 
 	if(m_hdr.Magick != SX_MODEL_MAGICK)
 	{
-		reportf(REPORT_MSG_LEVEL_ERROR, "Corrupt model \"%s\"\n", name);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "Corrupt model \"%s\"\n", name);
 		fclose(fp);
 		return;
 	}
@@ -69,7 +74,7 @@ void ModelFile::Load(const char * name)
 			fclose(fp);
 			return;
 		}
-		reportf(REPORT_MSG_LEVEL_ERROR, "Invalid version %d file \"%s\"\n", m_hdr.iVersion, name);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "Invalid version %d file \"%s\"\n", m_hdr.iVersion, name);
 		fclose(fp);
 		return;
 	}
@@ -225,21 +230,21 @@ void ModelFile::Load6(const char * name)
 	FILE * fp = fopen(name, "rb");
 	if(!fp)
 	{
-		reportf(REPORT_MSG_LEVEL_ERROR, "Unable to open \"%s\"\n", name);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "Unable to open \"%s\"\n", name);
 	}
 
 	fread(&m_hdr, sizeof(ModelHeader), 1, fp);
 
 	if(m_hdr.Magick != SX_MODEL_MAGICK)
 	{
-		reportf(REPORT_MSG_LEVEL_ERROR, "Corrupt model \"%s\"\n", name);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "Corrupt model \"%s\"\n", name);
 		fclose(fp);
 		return;
 	}
 
 	if(m_hdr.iVersion != SX_MODEL_VERSION_OLD)
 	{
-		reportf(REPORT_MSG_LEVEL_ERROR, "Invalid version %d file \"%s\"\n", m_hdr.iVersion, name);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "Invalid version %d file \"%s\"\n", m_hdr.iVersion, name);
 		fclose(fp);
 		return;
 	}
@@ -821,7 +826,7 @@ void ModelFile::BuildMeshBuffers()
 
 		if(j == 0)
 		{
-			m_pBoundBox->CalcBound(m_ppVertexBuffer[0], iStartVertex, vsize);
+			m_pBoundBox->calcBound(m_ppVertexBuffer[0], iStartVertex, vsize);
 		}
 	}
 
@@ -1647,12 +1652,12 @@ void Animation::play(const char * name, UINT iFadeTime, UINT slot, bool bReplace
 	}
 	if(slot >= BLEND_MAX)
 	{
-		reportf(REPORT_MSG_LEVEL_WARNING, "Unable to play animation \"%s\" Invalid slot %d, max valid slot is %d\n", name, slot, BLEND_MAX - 1);
+		LibReport(REPORT_MSG_LEVEL_WARNING, "Unable to play animation \"%s\" Invalid slot %d, max valid slot is %d\n", name, slot, BLEND_MAX - 1);
 		return;
 	}
 	if(!m_mSeqIds.KeyExists(name))
 	{
-		reportf(REPORT_MSG_LEVEL_WARNING, "Unable to play animation \"%s\"\n", name);
+		LibReport(REPORT_MSG_LEVEL_WARNING, "Unable to play animation \"%s\"\n", name);
 		return;
 	}
 	UINT sid = m_mSeqIds[name];
@@ -1999,7 +2004,7 @@ void Animation::assembly()
 				++sCur;
 				--i;
 				//report error
-				reportf(REPORT_MSG_LEVEL_WARNING, "Skeleton hierarchy incompatible");
+				LibReport(REPORT_MSG_LEVEL_WARNING, "Skeleton hierarchy incompatible");
 				break;
 			}
 		}
@@ -2440,7 +2445,7 @@ void AnimationManager::setVertexDeclaration(MODEL_VERTEX_TYPE nDecl)
 {
 	if(nDecl >= MVT_SIZE)
 	{
-		reportf(REPORT_MSG_LEVEL_ERROR, "Unknown vertex declaration %d in AnimationManager::setVertexDeclaration()\n", nDecl);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "Unknown vertex declaration %d in AnimationManager::setVertexDeclaration()\n", nDecl);
 		return;
 	}
 	m_pd3dDevice->SetVertexDeclaration(pVertexDeclaration[nDecl]);
@@ -2473,7 +2478,7 @@ void AnimationManager::update(int thread)
 {
 	if(thread >= m_iThreadNum)
 	{
-		reportf(REPORT_MSG_LEVEL_WARNING, "Requested thread %d but only %d threads allowed\n", thread, m_iThreadNum);
+		LibReport(REPORT_MSG_LEVEL_WARNING, "Requested thread %d but only %d threads allowed\n", thread, m_iThreadNum);
 		return;
 	}
 	for(uint32_t i = thread, l = m_pAnimatedList.size(); i < l; i += m_iThreadNum)
@@ -2508,7 +2513,7 @@ void AnimationManager::computeVis(const ISXFrustum * frustum, const float3 * vie
 	for(uint32_t i = 0, l = m_pAnimatedList.size(); i < l; ++i)
 	{
 		pAnim = m_pAnimatedList[i];
-		pAnim->getBound()->GetSphere(&jcenter, &jradius.x);
+		pAnim->getBound()->getSphere(&jcenter, &jradius.x);
 
 		m = pAnim->getWorldTM();
 		m._11 = SMVector3Length(float3(m._11, m._21, m._31));
@@ -2519,7 +2524,7 @@ void AnimationManager::computeVis(const ISXFrustum * frustum, const float3 * vie
 		m._41 = m._42 = m._43 = 0.0f;
 		jradius = SMVector3Transform(jradius, m);
 		
-		pAnim->m_vIsVisibleFor[id_arr] = frustum->SphereInFrustum(&jcenter, jradius.x);
+		pAnim->m_vIsVisibleFor[id_arr] = frustum->sphereInFrustum(&jcenter, jradius.x);
 	}
 }
 
diff --git a/source/anim/animated.h b/source/anim/animated.h
index 16c0f3b78..22a50c8cf 100644
--- a/source/anim/animated.h
+++ b/source/anim/animated.h
@@ -1,5 +1,11 @@
-#ifndef _ANIMATED_H_
-#define _ANIMATED_H_
+
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
+#ifndef __ANIMATED_H
+#define __ANIMATED_H
 
 
 #include "ModelFile.h"
@@ -20,8 +26,6 @@
 
 #include "sxanim.h"
 
-extern report_func reportf;
-
 class Animation;
 class AnimationManager;
 class ISXBound;
diff --git a/source/anim/sxanim.h b/source/anim/sxanim.h
index 69a0422ab..ee094dae3 100644
--- a/source/anim/sxanim.h
+++ b/source/anim/sxanim.h
@@ -1,8 +1,8 @@
 
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 /*!
 \file
diff --git a/source/anim/sxanim_dll.cpp b/source/anim/sxanim_dll.cpp
index b519ba7ce..442acbabb 100644
--- a/source/anim/sxanim_dll.cpp
+++ b/source/anim/sxanim_dll.cpp
@@ -1,8 +1,8 @@
 
-/******************************************************
-Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 #define WIN32_LEAN_AND_MEAN
 #include <windows.h>
@@ -13,10 +13,10 @@ See the license in LICENSE
 
 #if !defined(DEF_STD_REPORT)
 #define DEF_STD_REPORT
-report_func reportf = DefReport;
+report_func g_fnReportf = DefReport;
 #endif
 
-#define SA_PRECOND(ret) if(!g_mgr){reportf(REPORT_MSG_LEVEL_ERROR, "%s - sxanim is not init", GEN_MSG_LOCATION);return ret;}
+#define SA_PRECOND(ret) if(!g_mgr){LibReport(REPORT_MSG_LEVEL_ERROR, "%s - sxanim is not init", GEN_MSG_LOCATION);return ret;}
 
 BOOL APIENTRY DllMain(HMODULE hModule,
 	DWORD  ul_reason_for_call,
@@ -40,7 +40,7 @@ SX_LIB_API void SXAnim_0Create()
 {
 	if(g_mgr)
 	{
-		reportf(-1, "%s - sxanim double init", GEN_MSG_LOCATION);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - sxanim double init", GEN_MSG_LOCATION);
 		return;
 	}
 	g_mgr = new AnimationManager(SGCore_GetDXDevice());
@@ -102,5 +102,5 @@ SX_LIB_API void SXAnim_ModelsDelArrForCom(ID id_arr)
 
 SX_LIB_API void SXAnim_Dbg_Set(report_func rf)
 {
-	reportf = rf;
+	g_fnReportf = rf;
 }
diff --git a/source/core/Config.cpp b/source/core/Config.cpp
index 876016798..be2502a13 100644
--- a/source/core/Config.cpp
+++ b/source/core/Config.cpp
@@ -1,6 +1,11 @@
 
-#include <common\\AssotiativeArray.h>
-#include <common\\String.cpp>
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
+#include <common/AssotiativeArray.h>
+#include <common/String.cpp>
 #include "Config.h"
 
 /*
diff --git a/source/core/Config.h b/source/core/Config.h
index ad830a91d..c9af4da1c 100644
--- a/source/core/Config.h
+++ b/source/core/Config.h
@@ -1,6 +1,12 @@
 
-#ifndef LOADER_CONFIG_H
-#define LOADER_CONFIG_H
+
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
+#ifndef __LOADER_CONFIG_H
+#define __LOADER_CONFIG_H
 
 #include "sxcore.h"
 #include <gdefines.h>
diff --git a/source/core/File.h b/source/core/File.h
index 5fcc73d98..40adcd7b9 100644
--- a/source/core/File.h
+++ b/source/core/File.h
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #ifndef __FILE_H
 #define __FILE_H
 
diff --git a/source/core/Task.cpp b/source/core/Task.cpp
index f61b8437d..3ae652736 100644
--- a/source/core/Task.cpp
+++ b/source/core/Task.cpp
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "task.h"
 
 CTask::CTask(THREAD_UPDATE_FUNCTION func,unsigned int flags) :m_iTaskFlags(flags)
diff --git a/source/core/Task.h b/source/core/Task.h
index 180ce2ab8..d9d8c2dc4 100644
--- a/source/core/Task.h
+++ b/source/core/Task.h
@@ -1,5 +1,11 @@
-#ifndef _CTask_H_
-#define _CTask_H_
+
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
+#ifndef __TASK_H
+#define __TASK_H
 
 #include "sxcore.h"
 #include <memory>
diff --git a/source/core/TaskManager.cpp b/source/core/TaskManager.cpp
index 24bfcbefc..a47b67198 100644
--- a/source/core/TaskManager.cpp
+++ b/source/core/TaskManager.cpp
@@ -1,4 +1,10 @@
-#include <core\taskManager.h>
+
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
+#include <core/taskManager.h>
 
 #if defined(_WINDOWS)
 void SetThreadName(DWORD dwThreadID, const char* threadName)
diff --git a/source/core/TaskManager.h b/source/core/TaskManager.h
index e573e618f..7b27a37b8 100644
--- a/source/core/TaskManager.h
+++ b/source/core/TaskManager.h
@@ -1,5 +1,11 @@
-#ifndef _SXTaskManager_H_
-#define _SXTaskManager_H_
+
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
+#ifndef __TASK_MANAGER_H
+#define __TASK_MANAGER_H
 
 #include <memory>
 #include <thread>
diff --git a/source/core/concmd.cpp b/source/core/concmd.cpp
index 061566999..0505613bf 100644
--- a/source/core/concmd.cpp
+++ b/source/core/concmd.cpp
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "concmd.h"
 
 //#define WIN32_LEAN_AND_MEAN
diff --git a/source/core/concmd.h b/source/core/concmd.h
index 845eaa90d..5d972ff64 100644
--- a/source/core/concmd.h
+++ b/source/core/concmd.h
@@ -1,6 +1,11 @@
 
-#ifndef SXCONCMD_H
-#define SXCONCMD_H
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
+#ifndef __CONCMD_H
+#define __CONCMD_H
 
 #include "sxcore.h"
 #include <common/AssotiativeArray.h>
diff --git a/source/core/cvars.cpp b/source/core/cvars.cpp
index 0a46bac5e..90f5185c1 100644
--- a/source/core/cvars.cpp
+++ b/source/core/cvars.cpp
@@ -1,16 +1,19 @@
 
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "cvars.h"
 
 AssotiativeArray<String, CVar> g_mCVars;
 AssotiativeArray<String, CVarPtr> g_mCVarPtrs;
 
-extern report_func g_fnReportf;
-
 SX_LIB_API void Core_0RegisterCVarString(const char * name, const char * value, const char * desc, int flags)
 {
 	if(g_mCVars.KeyExists(name))
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_WARNING, "CVar '%s' already registered. Skipping.\n", name);
+		LibReport(REPORT_MSG_LEVEL_WARNING, "CVar '%s' already registered. Skipping.\n", name);
 		return;
 	}
 
@@ -39,7 +42,7 @@ SX_LIB_API void Core_0RegisterCVarInt(const char * name, int value, const char *
 {
 	if(g_mCVars.KeyExists(name))
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_WARNING, "CVar '%s' already registered. Skipping.\n", name);
+		LibReport(REPORT_MSG_LEVEL_WARNING, "CVar '%s' already registered. Skipping.\n", name);
 		return;
 	}
 
@@ -65,7 +68,7 @@ SX_LIB_API void Core_0RegisterCVarFloat(const char * name, float value, const ch
 {
 	if(g_mCVars.KeyExists(name))
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_WARNING, "CVar '%s' already registered. Skipping.\n", name);
+		LibReport(REPORT_MSG_LEVEL_WARNING, "CVar '%s' already registered. Skipping.\n", name);
 		return;
 	}
 
@@ -90,7 +93,7 @@ SX_LIB_API void Core_0RegisterCVarBool(const char * name, bool value, const char
 {
 	if(g_mCVars.KeyExists(name))
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_WARNING, "CVar '%s' already registered. Skipping.\n", name);
+		LibReport(REPORT_MSG_LEVEL_WARNING, "CVar '%s' already registered. Skipping.\n", name);
 		return;
 	}
 
@@ -116,7 +119,7 @@ SX_LIB_API void Core_0RegisterCVarPointer(const char * name, UINT_PTR value)
 {
 	if(g_mCVarPtrs.KeyExists(name))
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_WARNING, "CVar '%s' already registered. Skipping.\n", name);
+		LibReport(REPORT_MSG_LEVEL_WARNING, "CVar '%s' already registered. Skipping.\n", name);
 		return;
 	}
 
diff --git a/source/core/cvars.h b/source/core/cvars.h
index 6e61d7576..4249d5d9c 100644
--- a/source/core/cvars.h
+++ b/source/core/cvars.h
@@ -1,6 +1,11 @@
 
-#ifndef SXCVARS_H
-#define SXCVARS_H
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
+#ifndef __CVARS_H
+#define __CVARS_H
 
 #include "sxcore.h"
 #include <common/AssotiativeArray.h>
diff --git a/source/core/file.cpp b/source/core/file.cpp
index 0d18ac4b4..6f17f64e6 100644
--- a/source/core/file.cpp
+++ b/source/core/file.cpp
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "File.h"
 
 CFile::CFile()
diff --git a/source/core/sxcore.cpp b/source/core/sxcore.cpp
index 06b81a614..81c9cdb7c 100644
--- a/source/core/sxcore.cpp
+++ b/source/core/sxcore.cpp
@@ -1,8 +1,8 @@
 
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 #define CORE_VERSION 1
 
@@ -33,7 +33,7 @@ report_func g_fnReportf = DefReport;
 
 CTaskManager* g_pTaskManager = 0;
 
-#define SXCORE_PRECOND(retval) if(!g_pTaskManager){g_fnReportf(REPORT_MSG_LEVEL_ERROR, "[SCORE]: %s - sxcore is not init", GEN_MSG_LOCATION); return retval;}
+#define SXCORE_PRECOND(retval) if(!g_pTaskManager){LibReport(REPORT_MSG_LEVEL_ERROR, "%s - sxcore is not init", GEN_MSG_LOCATION); return retval;}
 
 //**************************************************************************
 
@@ -47,12 +47,12 @@ String g_aGRegistersString[CORE_REGISTRY_SIZE];
 
 #define CORE_REGUSTRY_PRE_COND_ID(id,stdval) \
 if (!(id >= 0 && id < CORE_REGISTRY_SIZE))\
-{g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s: %s - unresolved index '%d' of access for registry", SX_LIB_NAME, GEN_MSG_LOCATION, id); return stdval; }
+{LibReport(REPORT_MSG_LEVEL_ERROR, "%s: %s - unresolved index '%d' of access for registry", SX_LIB_NAME, GEN_MSG_LOCATION, id); return stdval; }
 
 //**************************************************************************
 
 CTimeManager* g_pTimers = 0;
-#define CORE_TIME_PRECOND(retval) if(!g_pTimers){g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s: %s - sxcore is not init", SX_LIB_NAME, GEN_MSG_LOCATION); return retval;}
+#define CORE_TIME_PRECOND(retval) if(!g_pTimers){LibReport(REPORT_MSG_LEVEL_ERROR, "%s - sxcore is not init", GEN_MSG_LOCATION); return retval;}
 
 //##########################################################################
 
@@ -154,7 +154,7 @@ void Core_0Create(const char* name, bool is_unic)
 						if(GetLastError() == ERROR_ALREADY_EXISTS)
 						{
 							CloseHandle(hMutex);
-							g_fnReportf(REPORT_MSG_LEVEL_ERROR, "[SCORE]: %s - none unic name, score", GEN_MSG_LOCATION);
+							LibReport(REPORT_MSG_LEVEL_ERROR, "%s - none unic name", GEN_MSG_LOCATION);
 							return;
 						}
 				}
@@ -164,10 +164,10 @@ void Core_0Create(const char* name, bool is_unic)
 			g_pTaskManager = new CTaskManager();
 			g_pTimers = new CTimeManager();
 
-			//g_fnReportf(REPORT_MSG_LEVEL_NOTICE, "[SCORE]: is init\n");
+			//LibReport(REPORT_MSG_LEVEL_NOTICE, "is init\n");
 		}
 		else
-			g_fnReportf(REPORT_MSG_LEVEL_ERROR, "[SCORE]: %s - not init argument [name], score", GEN_MSG_LOCATION);
+			LibReport(REPORT_MSG_LEVEL_ERROR, "%s - not init argument [name]", GEN_MSG_LOCATION);
 }
 
 void Core_AKill()
@@ -186,7 +186,7 @@ void Core_AGetName(char* name)
 	if(name)
 		strcpy(name, g_szCoreName);
 	else
-		g_fnReportf(REPORT_MSG_LEVEL_ERROR, "[SCORE]: %s - invalid argument", GEN_MSG_LOCATION);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - invalid argument", GEN_MSG_LOCATION);
 }
 
 //##########################################################################
diff --git a/source/core/sxcore.h b/source/core/sxcore.h
index 058632084..07400a220 100644
--- a/source/core/sxcore.h
+++ b/source/core/sxcore.h
@@ -1,8 +1,8 @@
 
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 /*!
 \file 
@@ -19,9 +19,6 @@ See the license in LICENSE
 #include <fstream>
 #include <gdefines.h>
 
-//! имя библиотеки
-#define SX_LIB_NAME COLOR_BG_WHITE COLOR_GREEN "CORE" COLOR_RESET
-
 #undef SX_LIB_API
 #define SX_LIB_API extern "C" __declspec (dllexport)
 
@@ -30,7 +27,7 @@ See the license in LICENSE
 #include <tlhelp32.h>
 
 #define SM_D3D_CONVERSIONS
-#include <common\sxmath.h>
+#include <common/sxmath.h>
 
 //! тип функции для обработки в менеджере задач
 typedef void(*THREAD_UPDATE_FUNCTION)();
diff --git a/source/core/sxcore_dll.cpp b/source/core/sxcore_dll.cpp
index 3083cfd69..5a6ed8653 100644
--- a/source/core/sxcore_dll.cpp
+++ b/source/core/sxcore_dll.cpp
@@ -1,8 +1,8 @@
 
-/******************************************************
-Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 #define WIN32_LEAN_AND_MEAN
 #include <windows.h>
diff --git a/source/core/time.cpp b/source/core/time.cpp
index e9662a7a7..46ab60e2a 100644
--- a/source/core/time.cpp
+++ b/source/core/time.cpp
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "Time.h"
 
 CTimeManager::CTimeManager()
diff --git a/source/core/time.h b/source/core/time.h
index 613bb4ee1..f91bc1fd2 100644
--- a/source/core/time.h
+++ b/source/core/time.h
@@ -1,9 +1,13 @@
 
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #ifndef __TIME_H
 #define __TIME_H
 
 #include <gdefines.h>
-extern report_func g_fnReportf;
 
 #include <common/Array.h>
 
@@ -14,7 +18,7 @@ typedef std::chrono::system_clock::time_point time_point;
 
 #define TIMEMANAGER_PRECOND_ID(id,stdval) \
 if (!(id >= 0 && id < m_aTimes.size()))\
-{g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s: %s - time manager: unresolved index of access '%d'", SX_LIB_NAME, GEN_MSG_LOCATION, id); return stdval; }
+{LibReport(REPORT_MSG_LEVEL_ERROR, "%s - time manager: unresolved index of access '%d'", GEN_MSG_LOCATION, id); return stdval; }
 
 class CTimeManager
 {
diff --git a/source/decals/DecalManager.cpp b/source/decals/DecalManager.cpp
index 6d9c91b04..d5e3833bc 100644
--- a/source/decals/DecalManager.cpp
+++ b/source/decals/DecalManager.cpp
@@ -1,11 +1,15 @@
+
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include <core/sxcore.h>
 #include <gcore/sxgcore.h>
 #include <physics/sxphysics.h>
 
 #include "DecalManager.h"
 
-extern report_func reportf;
-
 // Array<float3_t> g_dbgDraw;
 // float4 spherePos;
 
@@ -35,12 +39,12 @@ DecalManager::DecalManager():
 		{
 			if(id < 0 || id >= DECAL_TYPE_LAST)
 			{
-				reportf(REPORT_MSG_LEVEL_WARNING, "Incorrect decal type id '%s'\n", sect);
+				LibReport(REPORT_MSG_LEVEL_WARNING, "Incorrect decal type id '%s'\n", sect);
 			}
 		}
 		else
 		{
-			reportf(REPORT_MSG_LEVEL_WARNING, "Unable to read decal id '%s'\n", sect);
+			LibReport(REPORT_MSG_LEVEL_WARNING, "Unable to read decal id '%s'\n", sect);
 			continue;
 		}
 		const char * tex;
@@ -50,14 +54,14 @@ DecalManager::DecalManager():
 		}
 		else
 		{
-			reportf(REPORT_MSG_LEVEL_WARNING, "Unable to read decal tex '%s'\n", sect);
+			LibReport(REPORT_MSG_LEVEL_WARNING, "Unable to read decal tex '%s'\n", sect);
 			continue;
 		}
 		if(config->keyExists(sect, "base_scale"))
 		{
 			if(!sscanf(config->getKey(sect, "base_scale"), "%f", &m_DecalTypes[id].m_fBaseScale))
 			{
-				reportf(REPORT_MSG_LEVEL_WARNING, "Unable to read decal base_scale '%s'\n", sect);
+				LibReport(REPORT_MSG_LEVEL_WARNING, "Unable to read decal base_scale '%s'\n", sect);
 				m_DecalTypes[id].m_fBaseScale = 1.0f;
 			}
 		}
diff --git a/source/decals/DecalManager.h b/source/decals/DecalManager.h
index 3944f24be..f150cc1da 100644
--- a/source/decals/DecalManager.h
+++ b/source/decals/DecalManager.h
@@ -1,5 +1,11 @@
-#ifndef _DecalManager_H_
-#define _DecalManager_H_
+
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
+#ifndef __DECAL_MANAGER_H
+#define __DECAL_MANAGER_H
 
 #include <gdefines.h>
 #include <common/SXMath.h>
diff --git a/source/decals/sxdecals.h b/source/decals/sxdecals.h
index bd7529eba..a2690ff35 100644
--- a/source/decals/sxdecals.h
+++ b/source/decals/sxdecals.h
@@ -1,8 +1,8 @@
 
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 /*!
 \file
@@ -28,7 +28,7 @@ See the license in LICENSE
 
 #undef SX_LIB_API
 #define SX_LIB_API extern "C" __declspec (dllimport)
-#include <mtllight\\sxmtllight.h>
+#include <mtllight/sxmtllight.h>
 
 #ifdef SX_DLL
 #undef SX_LIB_API
diff --git a/source/decals/sxdecals_dll.cpp b/source/decals/sxdecals_dll.cpp
index 2b077d2f2..e5df4a408 100644
--- a/source/decals/sxdecals_dll.cpp
+++ b/source/decals/sxdecals_dll.cpp
@@ -1,8 +1,8 @@
 
-/******************************************************
-Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 #define WIN32_LEAN_AND_MEAN
 #include <windows.h>
@@ -24,12 +24,12 @@ See the license in LICENSE
 
 #if !defined(DEF_STD_REPORT)
 #define DEF_STD_REPORT
-report_func reportf = DefReport;
+report_func g_fnReportf = DefReport;
 #endif
 
 DecalManager * g_pMgr = NULL;
 
-#define SP_PRECOND(ret) if(!g_pMgr){reportf(-1, "%s - sxdecals is not init", GEN_MSG_LOCATION);return ret;}
+#define SP_PRECOND(ret) if(!g_pMgr){LibReport(REPORT_MSG_LEVEL_ERROR, "%s - sxdecals is not init", GEN_MSG_LOCATION);return ret;}
 
 BOOL APIENTRY DllMain(HMODULE hModule,
 	DWORD  ul_reason_for_call,
@@ -51,7 +51,7 @@ SX_LIB_API void SXDecals_0Create()
 {
 	if(g_pMgr)
 	{
-		reportf(-1, "%s - sxdecals double init", GEN_MSG_LOCATION);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - sxdecals double init", GEN_MSG_LOCATION);
 		return;
 	}
 	Core_SetOutPtr();
@@ -78,7 +78,7 @@ SX_LIB_API void SXDecals_Sync()
 
 SX_LIB_API void SXDecals_Dbg_Set(report_func rf)
 {
-	reportf = rf;
+	g_fnReportf = rf;
 }
 
 SX_LIB_API void SXDecals_Render()
@@ -92,7 +92,7 @@ SX_LIB_API void SXDecals_ShootDecal(DECAL_TYPE type, const float3 & fWorldPos, c
 	SP_PRECOND(_VOID);
 	if(type == DECAL_TYPE_CUSTOM)
 	{
-		reportf(REPORT_MSG_LEVEL_WARNING, "Unable to use DECAL_TYPE_CUSTOM with SXDecals_ShootDecal\n");
+		LibReport(REPORT_MSG_LEVEL_WARNING, "Unable to use DECAL_TYPE_CUSTOM with SXDecals_ShootDecal\n");
 		return;
 	}
 	g_pMgr->shootDecal(type, fWorldPos, 0, 0, 0, 1.0f, 0, &normal);
diff --git a/source/editors_utils/axes_helper.cpp b/source/editors_utils/axes_helper.cpp
index 6618e6035..30b3f1069 100644
--- a/source/editors_utils/axes_helper.cpp
+++ b/source/editors_utils/axes_helper.cpp
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "axes_helper.h"
 
 AxesHelper::AxesHelper()
diff --git a/source/editors_utils/axes_helper.h b/source/editors_utils/axes_helper.h
index 7521b323b..561d46735 100644
--- a/source/editors_utils/axes_helper.h
+++ b/source/editors_utils/axes_helper.h
@@ -1,6 +1,11 @@
 
-#ifndef axes_helper_h
-#define axes_helper_h
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
+#ifndef __AXES_HELPER_H
+#define __AXES_HELPER_H
 
 #include <windows.h>
 #include <common/sxtypes.h>
diff --git a/source/game/BaseAmmo.cpp b/source/game/BaseAmmo.cpp
index 49de3f3b7..aaa93334c 100644
--- a/source/game/BaseAmmo.cpp
+++ b/source/game/BaseAmmo.cpp
@@ -1,3 +1,9 @@
+
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "BaseAmmo.h"
 
 /*! \skydocent base_ammo
diff --git a/source/game/BaseAmmo.h b/source/game/BaseAmmo.h
index 1ffa8be98..cb706c3bb 100644
--- a/source/game/BaseAmmo.h
+++ b/source/game/BaseAmmo.h
@@ -1,15 +1,16 @@
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 /*!
 \file
 Патроны
 */
 
-#ifndef _CBaseAmmo_H_
-#define _CBaseAmmo_H_
+#ifndef __BASE_AMMO_H
+#define __BASE_AMMO_H
 
 #include "BaseSupply.h"
 
diff --git a/source/game/BaseAmmoBox.cpp b/source/game/BaseAmmoBox.cpp
index 5be0609c3..fd883bf2d 100644
--- a/source/game/BaseAmmoBox.cpp
+++ b/source/game/BaseAmmoBox.cpp
@@ -1,3 +1,9 @@
+
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "BaseAmmoBox.h"
 
 /*! \skydocent base_ammobox
diff --git a/source/game/BaseAmmoBox.h b/source/game/BaseAmmoBox.h
index db3f28fd6..c0420d883 100644
--- a/source/game/BaseAmmoBox.h
+++ b/source/game/BaseAmmoBox.h
@@ -1,15 +1,16 @@
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 /*!
 \file
 Аммобокс
 */
 
-#ifndef _CBaseAmmoBox_H_
-#define _CBaseAmmoBox_H_
+#ifndef __BASE_AMMO_BOX_H
+#define __BASE_AMMO_BOX_H
 
 #include "BaseItem.h"
 
diff --git a/source/game/BaseAnimating.cpp b/source/game/BaseAnimating.cpp
index 84c15d366..2b4c0ec1e 100644
--- a/source/game/BaseAnimating.cpp
+++ b/source/game/BaseAnimating.cpp
@@ -1,3 +1,9 @@
+
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "BaseAnimating.h"
 #include "gcore/sxgcore.h"
 
@@ -37,7 +43,7 @@ void CBaseAnimating::getMinMax(float3 * min, float3 * max)
 	if (m_pAnimPlayer)
 	{
 		const ISXBound * bound = m_pAnimPlayer->getBound();
-		bound->GetMinMax(min, max);
+		bound->getMinMax(min, max);
 	}
 }
 
@@ -46,7 +52,7 @@ void CBaseAnimating::getSphere(float3 * center, float * radius)
 	if(m_pAnimPlayer)
 	{
 		const ISXBound * bound = m_pAnimPlayer->getBound();
-		bound->GetSphere(center, radius);
+		bound->getSphere(center, radius);
 	}
 }
 
diff --git a/source/game/BaseAnimating.h b/source/game/BaseAnimating.h
index 58f339125..289d4e76e 100644
--- a/source/game/BaseAnimating.h
+++ b/source/game/BaseAnimating.h
@@ -1,8 +1,8 @@
 
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 /*!
 \file
@@ -14,8 +14,8 @@ See the license in LICENSE
 @{
 */
 
-#ifndef _CBaseAnimating_H_
-#define _CBaseAnimating_H_
+#ifndef __BASE_ANIMATING_H
+#define __BASE_ANIMATING_H
 
 #include "BaseEntity.h"
 #include <anim/sxanim.h>
diff --git a/source/game/BaseCharacter.cpp b/source/game/BaseCharacter.cpp
index 0ee51d3d0..3508cbb84 100644
--- a/source/game/BaseCharacter.cpp
+++ b/source/game/BaseCharacter.cpp
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "BaseCharacter.h"
 #include "GameData.h"
 #include "BaseTool.h"
diff --git a/source/game/BaseCharacter.h b/source/game/BaseCharacter.h
index 51609b515..75009b222 100644
--- a/source/game/BaseCharacter.h
+++ b/source/game/BaseCharacter.h
@@ -1,8 +1,8 @@
 
-/******************************************************
-Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 /*!
 \file
@@ -13,8 +13,8 @@ See the license in LICENSE
 @{
 */
 
-#ifndef _CBaseCharacter_H_
-#define _CBaseCharacter_H_
+#ifndef __BASE_CHARACTER_H
+#define __BASE_CHARACTER_H
 
 #include "BaseAnimating.h"
 #include "LightDirectional.h"
diff --git a/source/game/BaseEntity.cpp b/source/game/BaseEntity.cpp
index a8f3613c1..40ddce8f2 100644
--- a/source/game/BaseEntity.cpp
+++ b/source/game/BaseEntity.cpp
@@ -1,3 +1,9 @@
+
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include <stdio.h>
 
 #include "BaseEntity.h"
diff --git a/source/game/BaseEntity.h b/source/game/BaseEntity.h
index d926c8b9e..30a24e916 100644
--- a/source/game/BaseEntity.h
+++ b/source/game/BaseEntity.h
@@ -1,8 +1,8 @@
 
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 /*!
 \file
@@ -15,8 +15,8 @@ See the license in LICENSE
 @{
 */
 
-#ifndef _CBaseEntity_H_
-#define _CBaseEntity_H_
+#ifndef __BASE_ENTITY_H
+#define __BASE_ENTITY_H
 
 #include <gdefines.h>
 #include <common/SXMath.h>
diff --git a/source/game/BaseHandle.cpp b/source/game/BaseHandle.cpp
index efb909328..ab4abe1a7 100644
--- a/source/game/BaseHandle.cpp
+++ b/source/game/BaseHandle.cpp
@@ -1,3 +1,9 @@
+
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "BaseHandle.h"
 
 /*! \skydocent base_handle
diff --git a/source/game/BaseHandle.h b/source/game/BaseHandle.h
index c9a074a56..398a5ebb3 100644
--- a/source/game/BaseHandle.h
+++ b/source/game/BaseHandle.h
@@ -1,15 +1,16 @@
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 /*!
 \file
 Ручки
 */
 
-#ifndef _BaseHandle_H_
-#define _BaseHandle_H_
+#ifndef __BASE_HANDLE_H
+#define __BASE_HANDLE_H
 
 #include "BaseWeaponAddon.h"
 
diff --git a/source/game/BaseItem.cpp b/source/game/BaseItem.cpp
index 513e651f9..572fc8414 100644
--- a/source/game/BaseItem.cpp
+++ b/source/game/BaseItem.cpp
@@ -1,3 +1,9 @@
+
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "BaseItem.h"
 
 /*! \skydocent base_item
diff --git a/source/game/BaseItem.h b/source/game/BaseItem.h
index dbe03a4d1..41578c679 100644
--- a/source/game/BaseItem.h
+++ b/source/game/BaseItem.h
@@ -1,7 +1,8 @@
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 /*!
 \file
@@ -13,8 +14,8 @@ See the license in LICENSE
 @{
 */
 
-#ifndef _CBaseItem_H_
-#define _CBaseItem_H_
+#ifndef __BASE_ITEM_H
+#define __BASE_ITEM_H
 
 #include "BaseAnimating.h"
 
diff --git a/source/game/BaseMag.cpp b/source/game/BaseMag.cpp
index b39261340..89a969c8f 100644
--- a/source/game/BaseMag.cpp
+++ b/source/game/BaseMag.cpp
@@ -1,3 +1,9 @@
+
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "BaseMag.h"
 
 /*! \skydocent base_mag
diff --git a/source/game/BaseMag.h b/source/game/BaseMag.h
index b252f743d..aae2f46e1 100644
--- a/source/game/BaseMag.h
+++ b/source/game/BaseMag.h
@@ -1,15 +1,16 @@
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 /*!
 \file
 Магазины
 */
 
-#ifndef _BaseMag_H_
-#define _BaseMag_H_
+#ifndef __BASE_MAG_H
+#define __BASE_MAG_H
 
 #include "BaseWeaponAddon.h"
 
diff --git a/source/game/BasePistol.h b/source/game/BasePistol.h
index 4cb5683d6..e8f0c76ca 100644
--- a/source/game/BasePistol.h
+++ b/source/game/BasePistol.h
@@ -1,15 +1,16 @@
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 /*!
 \file
 Пистолеты
 */
 
-#ifndef _CBasePistol_H_
-#define _CBasePistol_H_
+#ifndef __BASE_PISTOL_H
+#define __BASE_PISTOL_H
 
 /*! Пистолеты
 \ingroup cbaseitem
diff --git a/source/game/BaseRiffle.cpp b/source/game/BaseRiffle.cpp
index 7a60a011d..5ed27da46 100644
--- a/source/game/BaseRiffle.cpp
+++ b/source/game/BaseRiffle.cpp
@@ -1,3 +1,9 @@
+
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "BaseRiffle.h"
 
 /*! \skydocent base_riffle
diff --git a/source/game/BaseRiffle.h b/source/game/BaseRiffle.h
index 8be69ac53..dc9d1bbcb 100644
--- a/source/game/BaseRiffle.h
+++ b/source/game/BaseRiffle.h
@@ -1,15 +1,16 @@
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 /*!
 \file
 Винтовки
 */
 
-#ifndef _CBaseRiffle_H_
-#define _CBaseRiffle_H_
+#ifndef __BASE_RIFFLE_H
+#define __BASE_RIFFLE_H
 
 #include "BaseWeapon.h"
 
diff --git a/source/game/BaseScope.cpp b/source/game/BaseScope.cpp
index 26e8b012e..05539b6b2 100644
--- a/source/game/BaseScope.cpp
+++ b/source/game/BaseScope.cpp
@@ -1,3 +1,9 @@
+
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "BaseScope.h"
 
 /*! \skydocent base_scope
diff --git a/source/game/BaseScope.h b/source/game/BaseScope.h
index f581e5da9..5981a58cb 100644
--- a/source/game/BaseScope.h
+++ b/source/game/BaseScope.h
@@ -1,15 +1,16 @@
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 /*!
 \file
 Прицелы
 */
 
-#ifndef _BaseScope_H_
-#define _BaseScope_H_
+#ifndef __BASE_SCOPE_H
+#define __BASE_SCOPE_H
 
 #include "BaseWeaponAddon.h"
 
diff --git a/source/game/BaseSilencer.cpp b/source/game/BaseSilencer.cpp
index e73175def..946fb6590 100644
--- a/source/game/BaseSilencer.cpp
+++ b/source/game/BaseSilencer.cpp
@@ -1,3 +1,9 @@
+
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "BaseSilencer.h"
 
 /*! \skydocent base_silencer
diff --git a/source/game/BaseSilencer.h b/source/game/BaseSilencer.h
index 3eeb73e44..a57cb8ac2 100644
--- a/source/game/BaseSilencer.h
+++ b/source/game/BaseSilencer.h
@@ -1,15 +1,16 @@
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 /*!
 \file
 Глушители
 */
 
-#ifndef _BaseSilencer_H_
-#define _BaseSilencer_H_
+#ifndef __BASE_SILENCER_H
+#define __BASE_SILENCER_H
 
 #include "BaseWeaponAddon.h"
 
diff --git a/source/game/BaseSupply.cpp b/source/game/BaseSupply.cpp
index e205da0e0..9583ea598 100644
--- a/source/game/BaseSupply.cpp
+++ b/source/game/BaseSupply.cpp
@@ -1,3 +1,9 @@
+
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "BaseSupply.h"
 
 /*! \skydocent base_supply
diff --git a/source/game/BaseSupply.h b/source/game/BaseSupply.h
index 7b25b940b..e95af1a0a 100644
--- a/source/game/BaseSupply.h
+++ b/source/game/BaseSupply.h
@@ -1,15 +1,16 @@
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 /*!
 \file
 Базовый класс припаса
 */
 
-#ifndef _CBaseSupply_H_
-#define _CBaseSupply_H_
+#ifndef __BASE_SUPPLY_H
+#define __BASE_SUPPLY_H
 
 #include "BaseItem.h"
 
diff --git a/source/game/BaseTool.cpp b/source/game/BaseTool.cpp
index f319ab176..13eab5f92 100644
--- a/source/game/BaseTool.cpp
+++ b/source/game/BaseTool.cpp
@@ -1,3 +1,9 @@
+
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "BaseTool.h"
 
 #include <particles/sxparticles.h>
@@ -265,7 +271,7 @@ void CBaseTool::_rezoom()
 	m_qSlotRotResult = SMquaternionSlerp(m_qSlotRot, m_qSlotRotAim, m_fZoomProgress);
 	if(m_pOwner)
 	{
-		((CPlayer*)m_pOwner)->getCamera()->getCamera()->SetFOV(SMToRadian(vlerp(*r_default_fov, *r_default_fov - 10.0f, m_fZoomProgress)));
+		((CPlayer*)m_pOwner)->getCamera()->getCamera()->setFOV(SMToRadian(vlerp(*r_default_fov, *r_default_fov - 10.0f, m_fZoomProgress)));
 	}
 }
 
diff --git a/source/game/BaseTool.h b/source/game/BaseTool.h
index b443fe1a8..18b2e0cf6 100644
--- a/source/game/BaseTool.h
+++ b/source/game/BaseTool.h
@@ -1,15 +1,16 @@
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 /*!
 \file
 Базовый класс инструмента
 */
 
-#ifndef _CBaseTool_H_
-#define _CBaseTool_H_
+#ifndef __BASE_TOOL_H
+#define __BASE_TOOL_H
 
 #include "BaseItem.h"
 #include <score/sxscore.h>
diff --git a/source/game/BaseTrigger.cpp b/source/game/BaseTrigger.cpp
index 7b7d8a894..b73b78ddb 100644
--- a/source/game/BaseTrigger.cpp
+++ b/source/game/BaseTrigger.cpp
@@ -1,3 +1,9 @@
+
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include <gcore/sxgcore.h>
 
 #include "BaseTrigger.h"
diff --git a/source/game/BaseTrigger.h b/source/game/BaseTrigger.h
index be7e9c5d5..722df46cf 100644
--- a/source/game/BaseTrigger.h
+++ b/source/game/BaseTrigger.h
@@ -1,8 +1,8 @@
 
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 /*!
 \file
@@ -14,8 +14,8 @@ See the license in LICENSE
 @{
 */
 
-#ifndef _BaseTrigger_H_
-#define _BaseTrigger_H_
+#ifndef __BASE_TRIGGER_H
+#define __BASE_TRIGGER_H
 
 #include "BaseAnimating.h"
 
diff --git a/source/game/BaseWeapon.cpp b/source/game/BaseWeapon.cpp
index c69fa94b8..9dc7dd01e 100644
--- a/source/game/BaseWeapon.cpp
+++ b/source/game/BaseWeapon.cpp
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include <particles/sxparticles.h>
 #include "BaseWeapon.h"
 #include "Player.h"
diff --git a/source/game/BaseWeapon.h b/source/game/BaseWeapon.h
index 91ae59b8b..0092c51a2 100644
--- a/source/game/BaseWeapon.h
+++ b/source/game/BaseWeapon.h
@@ -1,15 +1,16 @@
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 /*!
 \file
 Базовый класс оружия
 */
 
-#ifndef _CBaseWeapon_H_
-#define _CBaseWeapon_H_
+#ifndef __BASE_WEAPON_H
+#define __BASE_WEAPON_H
 
 #include "BaseTool.h"
 
diff --git a/source/game/BaseWeaponAddon.cpp b/source/game/BaseWeaponAddon.cpp
index 26fe086f9..03e94db9f 100644
--- a/source/game/BaseWeaponAddon.cpp
+++ b/source/game/BaseWeaponAddon.cpp
@@ -1,3 +1,9 @@
+
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "BaseWeaponAddon.h"
 
 /*! \skydocent base_wpn_addon
diff --git a/source/game/BaseWeaponAddon.h b/source/game/BaseWeaponAddon.h
index 6521d8abc..5d3922b21 100644
--- a/source/game/BaseWeaponAddon.h
+++ b/source/game/BaseWeaponAddon.h
@@ -1,15 +1,16 @@
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 /*!
 \file
 Навесы
 */
 
-#ifndef _BaseWeaponAddon_H_
-#define _BaseWeaponAddon_H_
+#ifndef __BASE_WEAPON_ADDON_H
+#define __BASE_WEAPON_ADDON_H
 
 #include "BaseItem.h"
 
diff --git a/source/game/CrosshairManager.cpp b/source/game/CrosshairManager.cpp
index 3275b81a1..8f7c5d774 100644
--- a/source/game/CrosshairManager.cpp
+++ b/source/game/CrosshairManager.cpp
@@ -1,11 +1,14 @@
 
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "CrosshairManager.h"
 
 AssotiativeArray<AAString, ID> CCrosshairManager::m_mIndex;
 Array<CCrosshairManager::CrosshairDesc> CCrosshairManager::m_vCrosshairList;
 
-extern report_func reportf;
-
 void CCrosshairManager::loadCrosshair(ID id, CCrosshair * pCCrosshair)
 {
 	if(id < 0 || id >= (ID)m_vCrosshairList.size())
@@ -79,7 +82,7 @@ void CCrosshairManager::loadConfig(const char * szFile)
 		}
 		else
 		{
-			reportf(REPORT_MSG_LEVEL_WARNING, "Unknown CCrosshair style '%s' for '%s'\n", str, sect);
+			LibReport(REPORT_MSG_LEVEL_WARNING, "Unknown CCrosshair style '%s' for '%s'\n", str, sect);
 			continue;
 		}
 
@@ -87,11 +90,11 @@ void CCrosshairManager::loadConfig(const char * szFile)
 		if(config->keyExists(sect, "tex"))
 		{
 			tex = config->getKey(sect, "tex");
-			cd.idTexture = SGCore_LoadTexAddName(tex, ltt_const);
+			cd.idTexture = SGCore_LoadTexAddName(tex, LOAD_TEXTURE_TYPE_CONST);
 		}
 		else
 		{
-			reportf(REPORT_MSG_LEVEL_WARNING, "Unable to read CCrosshair tex '%s'\n", sect);
+			LibReport(REPORT_MSG_LEVEL_WARNING, "Unable to read CCrosshair tex '%s'\n", sect);
 			continue;
 		}
 		int x, y;
@@ -101,7 +104,7 @@ void CCrosshairManager::loadConfig(const char * szFile)
 		}
 		else
 		{
-			reportf(REPORT_MSG_LEVEL_WARNING, "Unable to read CCrosshair tex_offset '%s'. Expected format: '[x,y]'\n", sect);
+			LibReport(REPORT_MSG_LEVEL_WARNING, "Unable to read CCrosshair tex_offset '%s'. Expected format: '[x,y]'\n", sect);
 			continue;
 		}
 		if(config->keyExists(sect, "tex_size") && sscanf(config->getKey(sect, "tex_size"), "[%d,%d]", &x, &y) == 2)
@@ -110,7 +113,7 @@ void CCrosshairManager::loadConfig(const char * szFile)
 		}
 		else
 		{
-			reportf(REPORT_MSG_LEVEL_WARNING, "Unable to read CCrosshair tex_size '%s'. Expected format: '[x,y]'\n", sect);
+			LibReport(REPORT_MSG_LEVEL_WARNING, "Unable to read CCrosshair tex_size '%s'. Expected format: '[x,y]'\n", sect);
 			continue;
 		}
 		AAString aas;
diff --git a/source/game/CrosshairManager.h b/source/game/CrosshairManager.h
index 62a775e0c..dfa6f6a54 100644
--- a/source/game/CrosshairManager.h
+++ b/source/game/CrosshairManager.h
@@ -1,5 +1,11 @@
-#ifndef _CROSSHAIRMANAGER_H
-#define _CROSSHAIRMANAGER_H
+
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
+#ifndef __CROSSHAIRMANAGER_H
+#define __CROSSHAIRMANAGER_H
 
 #include "sxgame.h"
 #include <common/AssotiativeArray.h>
diff --git a/source/game/EntityFactory.cpp b/source/game/EntityFactory.cpp
index c0be706e3..c0310ad3b 100644
--- a/source/game/EntityFactory.cpp
+++ b/source/game/EntityFactory.cpp
@@ -1,3 +1,9 @@
+
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "EntityFactory.h"
 #include "BaseEntity.h"
 
diff --git a/source/game/EntityFactory.h b/source/game/EntityFactory.h
index 2ba5cd228..b0b4352cf 100644
--- a/source/game/EntityFactory.h
+++ b/source/game/EntityFactory.h
@@ -1,5 +1,11 @@
-#ifndef _CEntityFactory_H_
-#define _CEntityFactory_H_
+
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
+#ifndef __ENTITY_FACTORY_H
+#define __ENTITY_FACTORY_H
 
 #include <gdefines.h>
 #include <common/AssotiativeArray.h>
diff --git a/source/game/EntityManager.cpp b/source/game/EntityManager.cpp
index dd55b14b9..a69774623 100644
--- a/source/game/EntityManager.cpp
+++ b/source/game/EntityManager.cpp
@@ -1,3 +1,9 @@
+
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "EntityManager.h"
 
 #include "BaseEntity.h"
diff --git a/source/game/EntityManager.h b/source/game/EntityManager.h
index 34671f774..5cf8ef147 100644
--- a/source/game/EntityManager.h
+++ b/source/game/EntityManager.h
@@ -1,5 +1,11 @@
-#ifndef _ENTITY_MANAGER_H_
-#define _ENTITY_MANAGER_H_
+
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
+#ifndef __ENTITY_MANAGER_H
+#define __ENTITY_MANAGER_H
 
 /*! \file */
 
diff --git a/source/game/FuncTrain.cpp b/source/game/FuncTrain.cpp
index 4b238b016..3672ead80 100644
--- a/source/game/FuncTrain.cpp
+++ b/source/game/FuncTrain.cpp
@@ -1,3 +1,9 @@
+
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "FuncTrain.h"
 #include "PathCorner.h"
 
diff --git a/source/game/FuncTrain.h b/source/game/FuncTrain.h
index 57d1b32ce..da64b30dc 100644
--- a/source/game/FuncTrain.h
+++ b/source/game/FuncTrain.h
@@ -1,14 +1,15 @@
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 /*!
 \file
 Поезда класс
 */
-#ifndef _CFuncTrain_H_
-#define _CFuncTrain_H_
+#ifndef __FUNC_TRAIN_H
+#define __FUNC_TRAIN_H
 
 #include "PointEntity.h"
 
diff --git a/source/game/GameData.cpp b/source/game/GameData.cpp
index 14237499e..7e8544891 100644
--- a/source/game/GameData.cpp
+++ b/source/game/GameData.cpp
@@ -1,3 +1,9 @@
+
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "GameData.h"
 #include "CrosshairManager.h"
 
diff --git a/source/game/GameData.h b/source/game/GameData.h
index 4f557c624..49c6f46a4 100644
--- a/source/game/GameData.h
+++ b/source/game/GameData.h
@@ -1,5 +1,11 @@
-#ifndef _GameData_H_
-#define _GameData_H_
+
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
+#ifndef __GAME_DATA_H
+#define __GAME_DATA_H
 
 
 #include "Player.h"
diff --git a/source/game/LightDirectional.cpp b/source/game/LightDirectional.cpp
index 3bc2bfe14..4905d416a 100644
--- a/source/game/LightDirectional.cpp
+++ b/source/game/LightDirectional.cpp
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "LightDirectional.h"
 
 #include <mtllight/sxmtllight.h>
diff --git a/source/game/LightDirectional.h b/source/game/LightDirectional.h
index a40201e11..67be62334 100644
--- a/source/game/LightDirectional.h
+++ b/source/game/LightDirectional.h
@@ -1,8 +1,8 @@
 
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 /*!
 \file
diff --git a/source/game/LightPoint.cpp b/source/game/LightPoint.cpp
index 6bd55bbaa..28af8acca 100644
--- a/source/game/LightPoint.cpp
+++ b/source/game/LightPoint.cpp
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "LightPoint.h"
 
 #include <mtllight/sxmtllight.h>
diff --git a/source/game/LightPoint.h b/source/game/LightPoint.h
index ed7ecd223..c740e151b 100644
--- a/source/game/LightPoint.h
+++ b/source/game/LightPoint.h
@@ -1,8 +1,8 @@
 
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 /*!
 \file
diff --git a/source/game/NPCBase.cpp b/source/game/NPCBase.cpp
index c2c35a64c..52090fdbe 100644
--- a/source/game/NPCBase.cpp
+++ b/source/game/NPCBase.cpp
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "NPCBase.h"
 
 /*! \skydocent npc_base
diff --git a/source/game/NPCBase.h b/source/game/NPCBase.h
index 5697f8d50..965376810 100644
--- a/source/game/NPCBase.h
+++ b/source/game/NPCBase.h
@@ -1,7 +1,8 @@
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 /*!
 \file
@@ -12,8 +13,8 @@ See the license in LICENSE
 @{
 */
 
-#ifndef __NPCBASE_H_
-#define __NPCBASE_H_
+#ifndef __NPCBASE_H
+#define __NPCBASE_H
 
 #include "BaseAnimating.h"
 #include <aigrid/sxaigrid.h>
diff --git a/source/game/NPCZombie.cpp b/source/game/NPCZombie.cpp
index 8cbd269b7..d4ccd413c 100644
--- a/source/game/NPCZombie.cpp
+++ b/source/game/NPCZombie.cpp
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "NPCZombie.h"
 #include "score/sxscore.h"
 
diff --git a/source/game/NPCZombie.h b/source/game/NPCZombie.h
index 6e2fda4a6..853f9d758 100644
--- a/source/game/NPCZombie.h
+++ b/source/game/NPCZombie.h
@@ -1,7 +1,8 @@
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 /*!
 \file
@@ -12,8 +13,8 @@ See the license in LICENSE
 @{
 */
 
-#ifndef _NPCZombie_H_
-#define _NPCZombie_H_
+#ifndef __NPCZOMBIE_H
+#define __NPCZOMBIE_H
 
 #include "NPCBase.h"
 
diff --git a/source/game/PathCorner.cpp b/source/game/PathCorner.cpp
index 04127ad6c..6330ef102 100644
--- a/source/game/PathCorner.cpp
+++ b/source/game/PathCorner.cpp
@@ -1,3 +1,9 @@
+
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "PathCorner.h"
 
 /*! \skydocent path_corner
diff --git a/source/game/PathCorner.h b/source/game/PathCorner.h
index 4841a8624..12339fac9 100644
--- a/source/game/PathCorner.h
+++ b/source/game/PathCorner.h
@@ -1,8 +1,8 @@
 
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 /*!
 \file
@@ -13,8 +13,8 @@ See the license in LICENSE
 @{
 */
 
-#ifndef _CPathCorner_H_
-#define _CPathCorner_H_
+#ifndef __PATH_CORNER_H
+#define __PATH_CORNER_H
 
 #include "PointEntity.h"
 
diff --git a/source/game/Player.cpp b/source/game/Player.cpp
index 295d999ff..f34cf7be3 100644
--- a/source/game/Player.cpp
+++ b/source/game/Player.cpp
@@ -1,3 +1,9 @@
+
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include <input/sxinput.h>
 #include <mtllight/sxmtllight.h>
 #include "Player.h"
diff --git a/source/game/Player.h b/source/game/Player.h
index 4491cb904..cdb7b0789 100644
--- a/source/game/Player.h
+++ b/source/game/Player.h
@@ -1,8 +1,8 @@
 
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 /*!
 \file
@@ -13,8 +13,8 @@ See the license in LICENSE
 @{
 */
 
-#ifndef _CPlayer_H_
-#define _CPlayer_H_
+#ifndef __PLAYER_H
+#define __PLAYER_H
 
 #include "BaseCharacter.h"
 #include "PointCamera.h"
diff --git a/source/game/PlayerSpawn.cpp b/source/game/PlayerSpawn.cpp
index 088b72a8a..fccc1d26d 100644
--- a/source/game/PlayerSpawn.cpp
+++ b/source/game/PlayerSpawn.cpp
@@ -1,3 +1,9 @@
+
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "PlayerSpawn.h"
 
 /*! \skydocent info_player_spawn
diff --git a/source/game/PlayerSpawn.h b/source/game/PlayerSpawn.h
index 1f8c48438..987fe93d5 100644
--- a/source/game/PlayerSpawn.h
+++ b/source/game/PlayerSpawn.h
@@ -1,8 +1,8 @@
 
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 /*!
 \file
@@ -13,8 +13,8 @@ See the license in LICENSE
 @{
 */
 
-#ifndef _CPlayerSpawn_H_
-#define _CPlayerSpawn_H_
+#ifndef __PLAYER_SPAWN_H
+#define __PLAYER_SPAWN_H
 
 #include "PointEntity.h"
 
diff --git a/source/game/PointCamera.cpp b/source/game/PointCamera.cpp
index 46a5c8418..8aa714eae 100644
--- a/source/game/PointCamera.cpp
+++ b/source/game/PointCamera.cpp
@@ -1,3 +1,9 @@
+
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "PointCamera.h"
 
 /*! \skydocent point_camera
@@ -15,7 +21,7 @@ CPointCamera::CPointCamera(CEntityManager * pMgr):
 {
 	const float * r_default_fov = GET_PCVAR_FLOAT("r_default_fov");
 	m_pSXC = SGCore_CrCamera();
-	m_pSXC->SetFOV(SMToRadian(*r_default_fov));
+	m_pSXC->setFOV(SMToRadian(*r_default_fov));
 }
 
 CPointCamera::~CPointCamera()
@@ -32,6 +38,6 @@ void CPointCamera::onSync()
 {
 	BaseClass::onSync();
 
-	m_pSXC->SetPosition(&(float3)m_vPosition);
-	m_pSXC->SetOrientation(m_vOrientation);
+	m_pSXC->setPosition(&(float3)m_vPosition);
+	m_pSXC->setOrientation(&m_vOrientation);
 }
diff --git a/source/game/PointCamera.h b/source/game/PointCamera.h
index c699dcf13..f8682e810 100644
--- a/source/game/PointCamera.h
+++ b/source/game/PointCamera.h
@@ -1,8 +1,8 @@
 
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 /*!
 \file
@@ -13,8 +13,8 @@ See the license in LICENSE
 @{
 */
 
-#ifndef _CPointCamera_H_
-#define _CPointCamera_H_
+#ifndef __POINT_CAMERA_H
+#define __POINT_CAMERA_H
 
 #include <gcore/sxgcore.h>
 
diff --git a/source/game/PointEntity.cpp b/source/game/PointEntity.cpp
index 59b384966..91583ea83 100644
--- a/source/game/PointEntity.cpp
+++ b/source/game/PointEntity.cpp
@@ -1,3 +1,9 @@
+
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "PointEntity.h"
 
 /*! \skydocent base_point
diff --git a/source/game/PointEntity.h b/source/game/PointEntity.h
index 685e375bd..34829fe79 100644
--- a/source/game/PointEntity.h
+++ b/source/game/PointEntity.h
@@ -1,8 +1,8 @@
 
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 /*!
 \file
@@ -16,8 +16,8 @@ See the license in LICENSE
 
 //! \defgroup clight Свет
 
-#ifndef _CPointEntity_H_
-#define _CPointEntity_H_
+#ifndef __POINT_ENTITY_H
+#define __POINT_ENTITY_H
 
 #include "BaseEntity.h"
 
diff --git a/source/game/Ragdoll.cpp b/source/game/Ragdoll.cpp
index e192f0280..a93eff945 100644
--- a/source/game/Ragdoll.cpp
+++ b/source/game/Ragdoll.cpp
@@ -1,3 +1,9 @@
+
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "Ragdoll.h"
 
 CRagdoll::CRagdoll(IAnimPlayer *pAnimPlayer)
diff --git a/source/game/Ragdoll.h b/source/game/Ragdoll.h
index ccccae7e1..ee9893df6 100644
--- a/source/game/Ragdoll.h
+++ b/source/game/Ragdoll.h
@@ -1,5 +1,11 @@
-#ifndef _Ragdoll_H_
-#define _Ragdoll_H_
+
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
+#ifndef __RAGDOLL_H
+#define __RAGDOLL_H
 
 #include "sxgame.h"
 #include <anim/sxanim.h>
diff --git a/source/game/SXbaseSnipe.h b/source/game/SXbaseSnipe.h
index e7c983d51..2a766ce68 100644
--- a/source/game/SXbaseSnipe.h
+++ b/source/game/SXbaseSnipe.h
@@ -1,15 +1,16 @@
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 /*!
 \file
 Снайперские
 */
 
-#ifndef _SXbaseSnipe_H_
-#define _SXbaseSnipe_H_
+#ifndef __BASE_SNIPE_H
+#define __BASE_SNIPE_H
 
 #include "BaseWeapon.h"
 
diff --git a/source/game/crosshair.cpp b/source/game/crosshair.cpp
index 645773dfc..1d1308c98 100644
--- a/source/game/crosshair.cpp
+++ b/source/game/crosshair.cpp
@@ -1,4 +1,8 @@
 
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
 
 #include "crosshair.h"
 #include <common/SXMath.h>
diff --git a/source/game/crosshair.h b/source/game/crosshair.h
index baf95f337..60a7ba3dd 100644
--- a/source/game/crosshair.h
+++ b/source/game/crosshair.h
@@ -1,5 +1,11 @@
-#ifndef _crosshair_H_
-#define _crosshair_H_
+
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
+#ifndef __CROSSHAIR_H
+#define __CROSSHAIR_H
 
 //#include <gdefines.h>
 #include "sxgame.h"
diff --git a/source/game/proptable.cpp b/source/game/proptable.cpp
index 72461ca83..f7dae97f8 100644
--- a/source/game/proptable.cpp
+++ b/source/game/proptable.cpp
@@ -1,3 +1,9 @@
+
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include <cstdarg>
 #include <memory>
 
diff --git a/source/game/proptable.h b/source/game/proptable.h
index d1d409e58..d6f015920 100644
--- a/source/game/proptable.h
+++ b/source/game/proptable.h
@@ -1,5 +1,11 @@
-#ifndef _PROPTABLE_H_
-#define _PROPTABLE_H_
+
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
+#ifndef __PROPTABLE_H
+#define __PROPTABLE_H
 
 #include <common/SXmath.h>
 
diff --git a/source/game/sxgame.h b/source/game/sxgame.h
index 78270cb20..e8104bdb4 100644
--- a/source/game/sxgame.h
+++ b/source/game/sxgame.h
@@ -1,8 +1,8 @@
 
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 /*!
 \file
@@ -149,8 +149,8 @@ See the license in LICENSE
 @{
 */
 
-#ifndef _SXGAME_H_
-#define _SXGAME_H_
+#ifndef __SXGAME_H
+#define __SXGAME_H
 
 #ifndef SXGAME_EXPORT
 #define SXGAME_EXPORT _declspec(dllimport)
diff --git a/source/game/sxgame_dll.cpp b/source/game/sxgame_dll.cpp
index e71fa4d6b..637fd1bc5 100644
--- a/source/game/sxgame_dll.cpp
+++ b/source/game/sxgame_dll.cpp
@@ -1,8 +1,8 @@
 
-/******************************************************
-Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 #define WIN32_LEAN_AND_MEAN
 #include <windows.h>
@@ -27,7 +27,7 @@ See the license in LICENSE
 #	pragma comment(lib, "sxanim_d.lib")
 #	pragma comment(lib, "sxparticles_d.lib")
 #	pragma comment(lib, "sxscore_d.lib")
-#	pragma comment(lib, "sxpp_d.lib")
+//#	pragma comment(lib, "sxpp_d.lib")
 #	pragma comment(lib, "sxaigrid_d.lib")
 #else
 #	pragma comment(lib, "sxcore.lib")
@@ -38,20 +38,20 @@ See the license in LICENSE
 #	pragma comment(lib, "sxanim.lib")
 #	pragma comment(lib, "sxparticles.lib")
 #	pragma comment(lib, "sxscore.lib")
-#	pragma comment(lib, "sxpp.lib")
+//#	pragma comment(lib, "sxpp.lib")
 #	pragma comment(lib, "sxaigrid.lib")
 #endif
 
 #if !defined(DEF_STD_REPORT)
 #define DEF_STD_REPORT
-report_func reportf = DefReport;
+report_func g_fnReportf = DefReport;
 #endif
 
 
 GameData * g_pGameData = NULL;
 ID3DXMesh* g_pFigureBox = 0;
 
-#define SG_PRECOND(ret) if(!g_pGameData){reportf(-1, "%s - sxgame is not init", GEN_MSG_LOCATION);return ret;}
+#define SG_PRECOND(ret) if(!g_pGameData){LibReport(REPORT_MSG_LEVEL_ERROR, "%s - sxgame is not init", GEN_MSG_LOCATION);return ret;}
 
 BOOL APIENTRY DllMain(HMODULE hModule,
 	DWORD  ul_reason_for_call,
@@ -106,7 +106,7 @@ SX_LIB_API void SXGame_0Create()
 {
 	if(g_pGameData)
 	{
-		reportf(-1, "%s - sxgame double init", GEN_MSG_LOCATION);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - sxgame double init", GEN_MSG_LOCATION);
 		return;
 	}
 	Core_SetOutPtr();
@@ -160,7 +160,7 @@ SX_LIB_API void SXGame_RenderHUD()
 
 SX_LIB_API void SXGame_Dbg_Set(report_func rf)
 {
-	reportf = rf;
+	g_fnReportf = rf;
 }
 
 SX_LIB_API void SXGame_LoadEnts(const char * file)
diff --git a/source/gcore/CreatorTextures.cpp b/source/gcore/CreatorTextures.cpp
index 392236f6a..ca354ad88 100644
--- a/source/gcore/CreatorTextures.cpp
+++ b/source/gcore/CreatorTextures.cpp
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "creatortextures.h"
 
 CreatorTextures::CreatorTextures()
@@ -54,89 +59,89 @@ ID CreatorTextures::Add(UINT width, UINT height, UINT levels, DWORD usage, D3DFO
 		}
 
 		/*if(!isadd)
-			g_fnReportf(REPORT_MSG_LEVEL_NOTICE, "sgcore: render target[%s] is created, id = %d\n", name, id);*/
+			LibReport(REPORT_MSG_LEVEL_NOTICE, "render target[%s] is created, id = %d\n", name, id);*/
 
 		if (isadd)
-			g_fnReportf(REPORT_MSG_LEVEL_NOTICE, "[SGCORE]: render target[%s] is not created\n", name);
+			LibReport(REPORT_MSG_LEVEL_NOTICE, "render target[%s] is not created\n", name);
 
 	return id;
 }
 
 void CreatorTextures::Delete(const char* text)
 {
-		for(int i=0;i<Arr.size();i++)
+	for (int i = 0; i<Arr.size(); i++)
+	{
+		if (strcmp(text, Arr[i]->Name) == 0)
 		{
-				if(strcmp(text,Arr[i]->Name) == 0)
-				{
-					Arr[i]->Texture->Release();
-					Arr[i]->Texture = 0;
-					sprintf(Arr[i]->Name,"%s","");
-				}
+			Arr[i]->Texture->Release();
+			Arr[i]->Texture = 0;
+			sprintf(Arr[i]->Name, "%s", "");
 		}
+	}
 }
 
 void CreatorTextures::Delete(ID num)
 {
-		if(num < Arr.size())
-		{
-			Arr[num]->Texture->Release();
-			Arr[num]->Texture = 0;
-			sprintf(Arr[num]->Name,"%s","");
-		}
+	if (num < Arr.size())
+	{
+		Arr[num]->Texture->Release();
+		Arr[num]->Texture = 0;
+		sprintf(Arr[num]->Name, "%s", "");
+	}
 }
 
 ID CreatorTextures::GetNum(const char* text)
 {
-		for(DWORD i=0;i<Arr.size();i++)
+	for (DWORD i = 0; i<Arr.size(); i++)
+	{
+		if (strcmp(text, Arr[i]->Name) == 0)
 		{
-				if(strcmp(text,Arr[i]->Name) == 0)
-				{
-					return i;
-				}
+			return i;
 		}
-		return(-1);
+	}
+	return(-1);
 }
 
 void CreatorTextures::OnLostDevice()
 {
-	g_fnReportf(REPORT_MSG_LEVEL_WARNING, "sgcore: release render targets ...\n");
-		for(DWORD i=0;i<Arr.size();i++)
+	LibReport(REPORT_MSG_LEVEL_WARNING, "release render targets ...\n");
+	for(DWORD i=0;i<Arr.size();i++)
+	{
+		CreatedTexture* tmpct = Arr[i];
+		if(Arr[i] /*&& Arr[i]->Name[0] != 0*/)
 		{
-			CreatedTexture* tmpct = Arr[i];
-				if(Arr[i] /*&& Arr[i]->Name[0] != 0*/)
-				{
-					mem_release_del(Arr[i]->Texture);
-				}
+			mem_release_del(Arr[i]->Texture);
 		}
-	g_fnReportf(REPORT_MSG_LEVEL_NOTICE, "sgcore: release render targets success\n");
+	}
+	LibReport(REPORT_MSG_LEVEL_NOTICE, "release render targets success\n");
 }
 
 void CreatorTextures::OnResetDevice()
 {
-	g_fnReportf(REPORT_MSG_LEVEL_WARNING, "sgcore: reset render targets ...\n");
-		for(int i=0;i<Arr.size();i++)
+	LibReport(REPORT_MSG_LEVEL_WARNING, "reset render targets ...\n");
+	for(int i=0;i<Arr.size();i++)
+	{
+		if(Arr[i]/*->Name[0] != 0*/)
 		{
-				if(Arr[i]/*->Name[0] != 0*/)
-				{
-						if(Arr[i]->CoefFullScreen > 0.001f)
-							g_pDXDevice->CreateTexture(g_oD3DAPP.BackBufferWidth * Arr[i]->CoefFullScreen, g_oD3DAPP.BackBufferHeight * Arr[i]->CoefFullScreen, Arr[i]->Level, Arr[i]->Desc.Usage, Arr[i]->Desc.Format, Arr[i]->Desc.Pool, &(Arr[i]->Texture), NULL);
-						else
-							g_pDXDevice->CreateTexture(Arr[i]->Desc.Width, Arr[i]->Desc.Height, Arr[i]->Level, Arr[i]->Desc.Usage, Arr[i]->Desc.Format, Arr[i]->Desc.Pool, &(Arr[i]->Texture), NULL);
-				}
+			if(Arr[i]->CoefFullScreen > 0.001f)
+				g_pDXDevice->CreateTexture(g_oD3DAPP.BackBufferWidth * Arr[i]->CoefFullScreen, g_oD3DAPP.BackBufferHeight * Arr[i]->CoefFullScreen, Arr[i]->Level, Arr[i]->Desc.Usage, Arr[i]->Desc.Format, Arr[i]->Desc.Pool, &(Arr[i]->Texture), NULL);
+			else
+				g_pDXDevice->CreateTexture(Arr[i]->Desc.Width, Arr[i]->Desc.Height, Arr[i]->Level, Arr[i]->Desc.Usage, Arr[i]->Desc.Format, Arr[i]->Desc.Pool, &(Arr[i]->Texture), NULL);
 		}
-	g_fnReportf(REPORT_MSG_LEVEL_NOTICE, "sgcore: reset render targets success\n");
+	}
+	LibReport(REPORT_MSG_LEVEL_NOTICE, "reset render targets success\n");
 }
 
 IDirect3DTexture9* CreatorTextures::GetTexture(const char* text)
 {
-		for(int i=0;i<Arr.size();i++)
+	for(int i=0;i<Arr.size();i++)
+	{
+		if(strcmp(text,Arr[i]->Name) == 0)
 		{
-				if(strcmp(text,Arr[i]->Name) == 0)
-				{
-					return Arr[i]->Texture;
-				}
+			return Arr[i]->Texture;
 		}
-		return(NULL);
+	}
+	return(NULL);
 }
 
 IDirect3DTexture9* CreatorTextures::GetTexture(ID num)
diff --git a/source/gcore/GeomOptimize.cpp b/source/gcore/GeomOptimize.cpp
index 489fbba95..799844a3b 100644
--- a/source/gcore/GeomOptimize.cpp
+++ b/source/gcore/GeomOptimize.cpp
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "GeomOptimize.h"
 
 void OptimizeIndecesInSubsetUint16(uint16_t* ib, uint16_t numFaces, uint16_t numVerts)
diff --git a/source/gcore/GeomOptimize.h b/source/gcore/GeomOptimize.h
index 231783707..6f00153b4 100644
--- a/source/gcore/GeomOptimize.h
+++ b/source/gcore/GeomOptimize.h
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #ifndef __GEOM_OPTIMIZE_H
 #define __GEOM_OPTIMIZE_H
 
diff --git a/source/gcore/LoaderTextures.cpp b/source/gcore/LoaderTextures.cpp
index e725a720a..9af887772 100644
--- a/source/gcore/LoaderTextures.cpp
+++ b/source/gcore/LoaderTextures.cpp
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "LoaderTextures.h"
 
 LoaderTextures::LoaderTextures()
@@ -43,7 +48,7 @@ bool LoaderTextures::FileExists(const char* name)
 
 	if (!IsTruePath)
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s: %s - wrong texture name [%s]!!!", SX_LIB_NAME, GEN_MSG_LOCATION, name);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - wrong texture name [%s]!!!", GEN_MSG_LOCATION, name);
 		return false;
 	}
 
@@ -58,7 +63,7 @@ void LoaderTextures::ClearLoaded()
 	{
 		for (int k = 0; k < Arr[i]->ArrTex.size(); ++k)
 		{
-			if (Arr[i]->ArrTex[k]->type == LoadTexType::ltt_load)
+			if (Arr[i]->ArrTex[k]->type == LOAD_TEXTURE_TYPE_LOAD)
 			{
 				mem_release_del(ArrTextures[Arr[i]->ArrTex[k]->id]->tex);
 				++tmpcountdel;
@@ -101,7 +106,7 @@ void LoaderTextures::Delete(ID id)
 	}
 }
 
-ID LoaderTextures::AddName(const char* name, LoadTexType 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];//���� ��� ������� � �����������
@@ -122,7 +127,7 @@ ID LoaderTextures::AddName(const char* name, LoadTexType type, ID* iddir, ID* id
 
 		if(!IsTruePath)
 		{
-			g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s: %s - wrong texture name [%s]!!!", SX_LIB_NAME, GEN_MSG_LOCATION, name);
+			LibReport(REPORT_MSG_LEVEL_ERROR, "%s - wrong texture name [%s]!!!", GEN_MSG_LOCATION, name);
 		}
 
 	int tmpkey = -1;	//���������� � ������� ������ ���� �� ������� � ������� ����������
@@ -192,8 +197,8 @@ ID LoaderTextures::AddName(const char* name, LoadTexType type, ID* iddir, ID* id
 			}
 
 			//���� ��� �������� ���������������
-			if (type == LoadTexType::ltt_self)
-				type = LoadTexType::ltt_load;
+			if (type == LOAD_TEXTURE_TYPE_SELF)
+				type = LOAD_TEXTURE_TYPE_LOAD;
 
 			Arr[tmpkey]->ArrTex.push_back(new TLPath::TLTex(id, tmp_name, type));
 
@@ -203,7 +208,7 @@ ID LoaderTextures::AddName(const char* name, LoadTexType type, ID* iddir, ID* id
 			ArrTextures[id]->name = name;
 			ArrTextures[id]->IDDir = tmpkey;
 			
-			if (type != LoadTexType::ltt_custom)
+			if (type != LOAD_TEXTURE_TYPE_CUSTOM)
 				ArrIDsLoad.push_back(id);
 		}
 
@@ -257,7 +262,7 @@ void LoaderTextures::GetName(ID id, char* name)
 ID LoaderTextures::Create(const char* name, IDirect3DTexture9* tex)
 {
 	ID tmpkey, tmpKeyName;
-	ID id = this->AddName(name, LoadTexType::ltt_custom, &tmpkey, &tmpKeyName);
+	ID id = this->AddName(name, LOAD_TEXTURE_TYPE_CUSTOM, &tmpkey, &tmpKeyName);
 	ArrTextures[id]->tex = tex;
 	return id;
 }
@@ -266,16 +271,16 @@ void LoaderTextures::Update(ID id)
 {
 	if(id < ArrTextures.size())
 	{
-		Update(ArrTextures[id]->name.c_str(), LoadTexType::ltt_self);
+		Update(ArrTextures[id]->name.c_str(), LOAD_TEXTURE_TYPE_SELF);
 	}
 }
 
-ID LoaderTextures::Update(const char* name, LoadTexType type)
+ID LoaderTextures::Update(const char* name, LOAD_TEXTURE_TYPE type)
 {
 	ID tmpkey, tmpKeyName;
 	ID id = AddName(name, type, &tmpkey, &tmpKeyName);
 
-	//g_fnReportf(0,"update texture [%s] ...",name);
+	//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());
@@ -295,12 +300,12 @@ ID LoaderTextures::Update(const char* name, LoadTexType type)
 			)
 		)
 		{
-			g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s: %s - not found texture [%s]", SX_LIB_NAME, GEN_MSG_LOCATION, tmpPath);
+			LibReport(REPORT_MSG_LEVEL_ERROR, "%s - not found texture [%s]", GEN_MSG_LOCATION, tmpPath);
 		}
 		else
 		{
 			ArrTextures[Arr[tmpkey]->ArrTex[tmpKeyName]->id]->tex = tex;
-			//g_fnReportf(0, "is ok\n");
+			//LibReport(0, "is ok\n");
 		}
 	
 	return id;
@@ -310,7 +315,7 @@ void LoaderTextures::LoadTextures()
 {
 	if (ArrIDsLoad.size() <= 0)
 		return;
-	g_fnReportf(REPORT_MSG_LEVEL_NOTICE, "%s: load textures ...\n", SX_LIB_NAME);
+	LibReport(REPORT_MSG_LEVEL_NOTICE, "load textures ...\n");
 
 	char tmpPath[SXGC_LOADTEX_MAX_SIZE_FULLPATH];
 	ID tmpiddir;
@@ -336,18 +341,18 @@ void LoaderTextures::LoadTextures()
 			)))
 		{
 			ArrTextures[ArrIDsLoad[i]]->tex = 0;
-			g_fnReportf(REPORT_MSG_LEVEL_WARNING, "%s: - not found [%s]\n", SX_LIB_NAME, ArrTextures[ArrIDsLoad[i]]->name.c_str());
+			LibReport(REPORT_MSG_LEVEL_WARNING, "  not found [%s]\n", ArrTextures[ArrIDsLoad[i]]->name.c_str());
 		}
 		else
 		{
 			ArrTextures[ArrIDsLoad[i]]->tex = tex;
-			g_fnReportf(REPORT_MSG_LEVEL_NOTICE, "  texture id [%d], [%s]\n", ArrIDsLoad[i], ArrTextures[ArrIDsLoad[i]]->name.c_str());
+			LibReport(REPORT_MSG_LEVEL_NOTICE, "  texture id [%d], [%s]\n", ArrIDsLoad[i], ArrTextures[ArrIDsLoad[i]]->name.c_str());
 			++iCountLoaded;
 		}
 	}
 
 	ArrIDsLoad.clear();
-	g_fnReportf(REPORT_MSG_LEVEL_NOTICE, "%s: all loaded textures [%d]\n", SX_LIB_NAME, ArrTextures.size());
+	LibReport(REPORT_MSG_LEVEL_NOTICE, "all loaded textures [%d]\n", ArrTextures.size());
 }
 
 IDirect3DTexture9* LoaderTextures::GetTexture(ID id)
diff --git a/source/gcore/LoaderTextures.h b/source/gcore/LoaderTextures.h
index 63f6050d5..a33cef978 100644
--- a/source/gcore/LoaderTextures.h
+++ b/source/gcore/LoaderTextures.h
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #ifndef __LOADERTEXTURES_H
 #define __LOADERTEXTURES_H
 
@@ -8,7 +13,7 @@
 #include <common/String.h>
 #include "sxgcore.h"
 
-extern report_func g_fnReportf;
+void LibReport(int iLevel, const char *szFormat, ...);
 extern IDirect3DDevice9 *g_pDXDevice;
 extern D3DPRESENT_PARAMETERS g_oD3DAPP;
 
@@ -24,12 +29,12 @@ public:
 
 	void Delete(ID id);	//������� �������� id
 
-	ID AddName(const char* name, LoadTexType type, ID* iddir = 0, ID* idname = 0);	//��������� ��� ��������, ������ �������� �� ��� 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 Create(const char* name, IDirect3DTexture9* tex);	//������� ����� ��� �������� tex
-	ID Update(const char* name, LoadTexType type);			//������������� �������� name
+	ID Update(const char* name, LOAD_TEXTURE_TYPE type);			//������������� �������� name
 	void Update(ID id);
 
 	void LoadTextures();	//�������� ���� ������� ������������ � �������
@@ -54,12 +59,12 @@ private:
 
 		struct TLTex
 		{
-			TLTex(){ id = -1; type = LoadTexType::ltt_load; }
-			TLTex(ID _id, const char* _name, LoadTexType _type){ id = _id; name = _name; type = _type; }
+			TLTex(){ id = -1; type = LOAD_TEXTURE_TYPE_LOAD; }
+			TLTex(ID _id, const char* _name, LOAD_TEXTURE_TYPE _type){ id = _id; name = _name; type = _type; }
 			
 			ID id;
 			String name;
-			LoadTexType type;
+			LOAD_TEXTURE_TYPE type;
 		};
 		
 		Array<TLTex*> ArrTex;
diff --git a/source/gcore/ModelFile.h b/source/gcore/ModelFile.h
index b9540a03c..c0f6b5afd 100644
--- a/source/gcore/ModelFile.h
+++ b/source/gcore/ModelFile.h
@@ -1,8 +1,8 @@
 
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 /*!
 \file
@@ -14,8 +14,8 @@ See the license in LICENSE
 @{
 */
 
-#ifndef _ModelFile_H_
-#define _ModelFile_H_
+#ifndef __MODEL_FILE_H
+#define __MODEL_FILE_H
 
 #define SX_MODEL_VERSION_OLD 6 /*!< Старая версия файла модели (для совместимости) */
 #define SX_MODEL_VERSION 7     /*!< Актуальная версия файла модели */
diff --git a/source/gcore/bound.cpp b/source/gcore/bound.cpp
index 409839ae9..751bf1c43 100644
--- a/source/gcore/bound.cpp
+++ b/source/gcore/bound.cpp
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "Bound.h"
 
 void CreateCone(float fTopRadius, float fBottomRadius, float fHeight, ID3DXMesh ** ppMesh, IDirect3DDevice9 * pDevice,UINT iSideCount)
@@ -80,6 +85,8 @@ void CreateCone(float fTopRadius, float fBottomRadius, float fHeight, ID3DXMesh
 	mem_delete(pVertices);
 }
 
+//##########################################################################
+
 void ComputeBoundingBox(IDirect3DVertexBuffer9* vertex_buffer,ISXBound** bound,DWORD count_vert,DWORD bytepervert)
 {
 	float3_t *V = 0;
@@ -119,7 +126,7 @@ void ComputeBoundingBox(IDirect3DVertexBuffer9* vertex_buffer,ISXBound** bound,D
 			vertex_buffer->Unlock();
 		}
 
-	(*bound)->SetMinMax(&float3(Min),&float3(Max));
+	(*bound)->setMinMax(&float3(Min),&float3(Max));
 }
 
 void ComputeBoundingBox2(IDirect3DVertexBuffer9* vertex_buffer,ISXBound* bound,DWORD count_vert,DWORD bytepervert)
@@ -169,148 +176,15 @@ void ComputeBoundingBox2(IDirect3DVertexBuffer9* vertex_buffer,ISXBound* bound,D
 	Max.y /= 100.f;
 	Max.z /= 100.f;
 
-	bound->SetMinMax(&float3(Min),&float3(Max));
-}
-
-
-//////////////////////////////////
-
-bool InPosition2D(float3* min,float3* max,float3* pos)
-{
-		if((max->x >= pos->x && min->x <= pos->x) && (max->z >= pos->z && min->z <= pos->z))
-			return true;
-		else if(
-				(long(max->x * 1000) >= long(pos->x * 1000) && long(min->x * 1000) <= long(pos->x * 1000))
-				&& 
-				(long(max->z * 1000) >= long(pos->z * 1000) && long(min->z * 1000) <= long(pos->z * 1000))
-				)
-			return true;
-		else 
-			return false;
-}
-
-bool InPositionAbs2D(float3* min,float3* max,float3* pos)
-{
-		if((max->x > pos->x && min->x < pos->x) && (max->z > pos->z && min->z < pos->z))
-			return true;
-		else
-			return false;
-}
-
-
-int CountPositionPoints2D(float3* min,float3* max,float3* p1,float3* p2,float3* p3)
-{
-	int Count = 0;
-
-		if(InPosition2D(min,max,p1))
-			Count++;
-		if(InPosition2D(min,max,p2))
-			Count++;
-		if(InPosition2D(min,max,p3))
-			Count++;
-
-	return Count;
-}
-
-int CountPositionPointsAbs2D(float3* min,float3* max,float3* p1,float3* p2,float3* p3)
-{
-	int Count = 0;
-
-		if(InPositionAbs2D(min,max,p1))
-			Count++;
-		if(InPositionAbs2D(min,max,p2))
-			Count++;
-		if(InPositionAbs2D(min,max,p3))
-			Count++;
-
-	return Count;
+	bound->setMinMax(&float3(Min),&float3(Max));
 }
 
-
-bool InPositionPoints2D(float3* min,float3* max,float3* p1,float3* p2,float3* p3)
+void ComputeBoundingBoxArr8(ISXBound* bound, ISXBound** bound_arr)
 {
-		if(CountPositionPointsAbs2D(min,max,p1,p2,p3) >= 1)	
-			return true;
-		else if(CountPositionPoints2D(min,max,p1,p2,p3) >= 2)	
-			return true;
-		else
-			return false;
-}
-
-///////////////////////////////////
-
-bool InPosition3D(float3* min,float3* max,float3* pos)
-{
-		if((max->x >= pos->x && min->x <= pos->x) && (max->y >= pos->y && min->y <= pos->y) && (max->z >= pos->z && min->z <= pos->z))
-			return true;
-		else if(
-				(long(max->x * 1000) >= long(pos->x * 1000) && long(min->x * 1000) <= long(pos->x * 1000))
-				&& 
-				(long(max->y * 1000) >= long(pos->y * 1000) && long(min->y * 1000) <= long(pos->y * 1000))
-				&&
-				(long(max->z * 1000) >= long(pos->z * 1000) && long(min->z * 1000) <= long(pos->z * 1000))
-				)
-			return true;
-		else 
-			return false;
-}
-
-bool InPositionAbs3D(float3* min,float3* max,float3* pos)
-{
-		if((max->x > pos->x && min->x < pos->x) && (max->y > pos->y && min->y < pos->y) && (max->z > pos->z && min->z < pos->z))
-			return true;
-		else
-			return false;
-}
-
-
-int CountPositionPoints3D(float3* min,float3* max,float3* p1,float3* p2,float3* p3)
-{
-	int Count = 0;
-
-		if(InPosition3D(min,max,p1))
-			Count++;
-		if(InPosition3D(min,max,p2))
-			Count++;
-		if(InPosition3D(min,max,p3))
-			Count++;
-
-	return Count;
-}
-
-int CountPositionPointsAbs3D(float3* min,float3* max,float3* p1,float3* p2,float3* p3)
-{
-	int Count = 0;
-
-		if(InPositionAbs3D(min,max,p1))
-			Count++;
-		if(InPositionAbs3D(min,max,p2))
-			Count++;
-		if(InPositionAbs3D(min,max,p3))
-			Count++;
-
-	return Count;
-}
-
-
-bool InPositionPoints3D(float3* min,float3* max,float3* p1,float3* p2,float3* p3)
-{
-		if(CountPositionPointsAbs3D(min,max,p1,p2,p3) >= 1)	
-			return true;
-		else if(CountPositionPoints3D(min,max,p1,p2,p3) >= 2)	
-			return true;
-		else
-			return false;
-}
-
-////////////////////
-
-void ComputeBoundingBoxArr8(ISXBound* bound,ISXBound** bound_arr)
-{
-	float3 tmpMin2,tmpMax2;
-	float3 tmpMin,tmpMax;
-	bound->GetMinMax(&tmpMin2,&tmpMax2);
-	bound->GetMinMax(&tmpMin,&tmpMax);
+	float3 tmpMin2, tmpMax2;
+	float3 tmpMin, tmpMax;
+	bound->getMinMax(&tmpMin2, &tmpMax2);
+	bound->getMinMax(&tmpMin, &tmpMax);
 
 	float x = (tmpMax.x + tmpMin.x) * 0.5;
 	float y = (tmpMax.y + tmpMin.y) * 0.5;
@@ -329,13 +203,13 @@ void ComputeBoundingBoxArr8(ISXBound* bound,ISXBound** bound_arr)
 	tmpMax2.y = dist_y;
 	tmpMax2.z = dist_z;
 
-	tmpMin2 += float3(x,y,z);
-	tmpMin2 += float3(dist_x,dist_y,dist_z);
+	tmpMin2 += float3(x, y, z);
+	tmpMin2 += float3(dist_x, dist_y, dist_z);
 
-	tmpMax2 += float3(x,y,z);
-	tmpMax2 += float3(dist_x,dist_y,dist_z);
+	tmpMax2 += float3(x, y, z);
+	tmpMax2 += float3(dist_x, dist_y, dist_z);
 
-	(bound_arr[0])->SetMinMax(&tmpMin2,&tmpMax2);
+	(bound_arr[0])->setMinMax(&tmpMin2, &tmpMax2);
 
 
 	tmpMin2.x = -dist_x;
@@ -346,13 +220,13 @@ void ComputeBoundingBoxArr8(ISXBound* bound,ISXBound** bound_arr)
 	tmpMax2.y = dist_y;
 	tmpMax2.z = dist_z;
 
-	tmpMin2 += float3(x,y,z);
-	tmpMin2 += float3(-dist_x,dist_y,dist_z);
+	tmpMin2 += float3(x, y, z);
+	tmpMin2 += float3(-dist_x, dist_y, dist_z);
 
-	tmpMax2 += float3(x,y,z);
-	tmpMax2 += float3(-dist_x,dist_y,dist_z);
+	tmpMax2 += float3(x, y, z);
+	tmpMax2 += float3(-dist_x, dist_y, dist_z);
 
-	(bound_arr[1])->SetMinMax(&tmpMin2, &tmpMax2);
+	(bound_arr[1])->setMinMax(&tmpMin2, &tmpMax2);
 
 
 	tmpMin2.x = -dist_x;
@@ -364,13 +238,13 @@ void ComputeBoundingBoxArr8(ISXBound* bound,ISXBound** bound_arr)
 	tmpMax2.z = dist_z;
 	//bound->GetMinMax(&tmpMin2,&tmpMax2);
 
-	tmpMin2 += float3(x,y,z);
-	tmpMin2 += float3(dist_x,dist_y,-dist_z);
+	tmpMin2 += float3(x, y, z);
+	tmpMin2 += float3(dist_x, dist_y, -dist_z);
 
-	tmpMax2 += float3(x,y,z);
-	tmpMax2 += float3(dist_x,dist_y,-dist_z);
+	tmpMax2 += float3(x, y, z);
+	tmpMax2 += float3(dist_x, dist_y, -dist_z);
 
-	(bound_arr[2])->SetMinMax(&tmpMin2, &tmpMax2);
+	(bound_arr[2])->setMinMax(&tmpMin2, &tmpMax2);
 
 
 	tmpMin2.x = -dist_x;
@@ -382,16 +256,16 @@ void ComputeBoundingBoxArr8(ISXBound* bound,ISXBound** bound_arr)
 	tmpMax2.z = dist_z;
 	//bound->GetMinMax(&tmpMin2,&tmpMax2);
 
-	tmpMin2 += float3(x,y,z);
-	tmpMin2 += float3(-dist_x,dist_y,-dist_z);
+	tmpMin2 += float3(x, y, z);
+	tmpMin2 += float3(-dist_x, dist_y, -dist_z);
 
-	tmpMax2 += float3(x,y,z);
-	tmpMax2 += float3(-dist_x,dist_y,-dist_z);
+	tmpMax2 += float3(x, y, z);
+	tmpMax2 += float3(-dist_x, dist_y, -dist_z);
+
+	(bound_arr[3])->setMinMax(&tmpMin2, &tmpMax2);
 
-	(bound_arr[3])->SetMinMax(&tmpMin2, &tmpMax2);
 
 
-	
 	tmpMin2.x = -dist_x;
 	tmpMin2.y = -dist_y;
 	tmpMin2.z = -dist_z;
@@ -400,13 +274,13 @@ void ComputeBoundingBoxArr8(ISXBound* bound,ISXBound** bound_arr)
 	tmpMax2.y = dist_y;
 	tmpMax2.z = dist_z;
 
-	tmpMin2 += float3(x,y,z);
-	tmpMin2 += float3(dist_x,-dist_y,dist_z);
+	tmpMin2 += float3(x, y, z);
+	tmpMin2 += float3(dist_x, -dist_y, dist_z);
 
-	tmpMax2 += float3(x,y,z);
-	tmpMax2 += float3(dist_x,-dist_y,dist_z);
+	tmpMax2 += float3(x, y, z);
+	tmpMax2 += float3(dist_x, -dist_y, dist_z);
 
-	(bound_arr[4])->SetMinMax(&tmpMin2, &tmpMax2);
+	(bound_arr[4])->setMinMax(&tmpMin2, &tmpMax2);
 
 
 	tmpMin2.x = -dist_x;
@@ -417,13 +291,13 @@ void ComputeBoundingBoxArr8(ISXBound* bound,ISXBound** bound_arr)
 	tmpMax2.y = dist_y;
 	tmpMax2.z = dist_z;
 
-	tmpMin2 += float3(x,y,z);
-	tmpMin2 += float3(-dist_x,-dist_y,dist_z);
+	tmpMin2 += float3(x, y, z);
+	tmpMin2 += float3(-dist_x, -dist_y, dist_z);
 
-	tmpMax2 += float3(x,y,z);
-	tmpMax2 += float3(-dist_x,-dist_y,dist_z);
+	tmpMax2 += float3(x, y, z);
+	tmpMax2 += float3(-dist_x, -dist_y, dist_z);
 
-	(bound_arr[5])->SetMinMax(&tmpMin2, &tmpMax2);
+	(bound_arr[5])->setMinMax(&tmpMin2, &tmpMax2);
 
 
 	tmpMin2.x = -dist_x;
@@ -435,13 +309,13 @@ void ComputeBoundingBoxArr8(ISXBound* bound,ISXBound** bound_arr)
 	tmpMax2.z = dist_z;
 	//bound->GetMinMax(&tmpMin2,&tmpMax2);
 
-	tmpMin2 += float3(x,y,z);
-	tmpMin2 += float3(dist_x,-dist_y,-dist_z);
+	tmpMin2 += float3(x, y, z);
+	tmpMin2 += float3(dist_x, -dist_y, -dist_z);
 
-	tmpMax2 += float3(x,y,z);
-	tmpMax2 += float3(dist_x,-dist_y,-dist_z);
+	tmpMax2 += float3(x, y, z);
+	tmpMax2 += float3(dist_x, -dist_y, -dist_z);
 
-	(bound_arr[6])->SetMinMax(&tmpMin2, &tmpMax2);
+	(bound_arr[6])->setMinMax(&tmpMin2, &tmpMax2);
 
 
 	tmpMin2.x = -dist_x;
@@ -453,21 +327,21 @@ void ComputeBoundingBoxArr8(ISXBound* bound,ISXBound** bound_arr)
 	tmpMax2.z = dist_z;
 	//bound->GetMinMax(&tmpMin2,&tmpMax2);
 
-	tmpMin2 += float3(x,y,z);
-	tmpMin2 += float3(-dist_x,-dist_y,-dist_z);
+	tmpMin2 += float3(x, y, z);
+	tmpMin2 += float3(-dist_x, -dist_y, -dist_z);
 
-	tmpMax2 += float3(x,y,z);
-	tmpMax2 += float3(-dist_x,-dist_y,-dist_z);
+	tmpMax2 += float3(x, y, z);
+	tmpMax2 += float3(-dist_x, -dist_y, -dist_z);
 
-	(bound_arr[7])->SetMinMax(&tmpMin2, &tmpMax2);
+	(bound_arr[7])->setMinMax(&tmpMin2, &tmpMax2);
 }
 
-void ComputeBoundingBoxArr4(ISXBound* bound,ISXBound** bound_arr)
+void ComputeBoundingBoxArr4(ISXBound* bound, ISXBound** bound_arr)
 {
-	float3 tmpMin2,tmpMax2;
-	float3 tmpMin,tmpMax;
-	bound->GetMinMax(&tmpMin2,&tmpMax2);
-	bound->GetMinMax(&tmpMin,&tmpMax);
+	float3 tmpMin2, tmpMax2;
+	float3 tmpMin, tmpMax;
+	bound->getMinMax(&tmpMin2, &tmpMax2);
+	bound->getMinMax(&tmpMin, &tmpMax);
 
 	float x = (tmpMax.x + tmpMin.x) * 0.5;
 	float y = (tmpMax.y + tmpMin.y) * 0.5;
@@ -486,13 +360,13 @@ void ComputeBoundingBoxArr4(ISXBound* bound,ISXBound** bound_arr)
 	tmpMax2.y = dist_y;
 	tmpMax2.z = dist_z;
 
-	tmpMin2 += float3(x,y,z);
-	tmpMin2 += float3(dist_x,0,dist_z);
+	tmpMin2 += float3(x, y, z);
+	tmpMin2 += float3(dist_x, 0, dist_z);
 
-	tmpMax2 += float3(x,y,z);
-	tmpMax2 += float3(dist_x,0,dist_z);
+	tmpMax2 += float3(x, y, z);
+	tmpMax2 += float3(dist_x, 0, dist_z);
 
-	(bound_arr[0])->SetMinMax(&tmpMin2,&tmpMax2);
+	(bound_arr[0])->setMinMax(&tmpMin2, &tmpMax2);
 
 
 	tmpMin2.x = -dist_x;
@@ -503,13 +377,13 @@ void ComputeBoundingBoxArr4(ISXBound* bound,ISXBound** bound_arr)
 	tmpMax2.y = dist_y;
 	tmpMax2.z = dist_z;
 
-	tmpMin2 += float3(x,y,z);
-	tmpMin2 += float3(-dist_x,0,dist_z);
+	tmpMin2 += float3(x, y, z);
+	tmpMin2 += float3(-dist_x, 0, dist_z);
 
-	tmpMax2 += float3(x,y,z);
-	tmpMax2 += float3(-dist_x,0,dist_z);
+	tmpMax2 += float3(x, y, z);
+	tmpMax2 += float3(-dist_x, 0, dist_z);
 
-	(bound_arr[1])->SetMinMax(&tmpMin2, &tmpMax2);
+	(bound_arr[1])->setMinMax(&tmpMin2, &tmpMax2);
 
 
 	tmpMin2.x = -dist_x;
@@ -521,13 +395,13 @@ void ComputeBoundingBoxArr4(ISXBound* bound,ISXBound** bound_arr)
 	tmpMax2.z = dist_z;
 	//bound->GetMinMax(&tmpMin2,&tmpMax2);
 
-	tmpMin2 += float3(x,y,z);
-	tmpMin2 += float3(dist_x,0,-dist_z);
+	tmpMin2 += float3(x, y, z);
+	tmpMin2 += float3(dist_x, 0, -dist_z);
 
-	tmpMax2 += float3(x,y,z);
-	tmpMax2 += float3(dist_x,0,-dist_z);
+	tmpMax2 += float3(x, y, z);
+	tmpMax2 += float3(dist_x, 0, -dist_z);
 
-	(bound_arr[2])->SetMinMax(&tmpMin2, &tmpMax2);
+	(bound_arr[2])->setMinMax(&tmpMin2, &tmpMax2);
 
 
 	tmpMin2.x = -dist_x;
@@ -539,17 +413,146 @@ void ComputeBoundingBoxArr4(ISXBound* bound,ISXBound** bound_arr)
 	tmpMax2.z = dist_z;
 	//bound->GetMinMax(&tmpMin2,&tmpMax2);
 
-	tmpMin2 += float3(x,y,z);
-	tmpMin2 += float3(-dist_x,0,-dist_z);
+	tmpMin2 += float3(x, y, z);
+	tmpMin2 += float3(-dist_x, 0, -dist_z);
+
+	tmpMax2 += float3(x, y, z);
+	tmpMax2 += float3(-dist_x, 0, -dist_z);
+
+	(bound_arr[3])->setMinMax(&tmpMin2, &tmpMax2);
+}
+
+//##########################################################################
+
+bool InPosition2D(float3* min,float3* max,float3* pos)
+{
+		if((max->x >= pos->x && min->x <= pos->x) && (max->z >= pos->z && min->z <= pos->z))
+			return true;
+		else if(
+				(long(max->x * 1000) >= long(pos->x * 1000) && long(min->x * 1000) <= long(pos->x * 1000))
+				&& 
+				(long(max->z * 1000) >= long(pos->z * 1000) && long(min->z * 1000) <= long(pos->z * 1000))
+				)
+			return true;
+		else 
+			return false;
+}
+
+bool InPositionAbs2D(float3* min,float3* max,float3* pos)
+{
+		if((max->x > pos->x && min->x < pos->x) && (max->z > pos->z && min->z < pos->z))
+			return true;
+		else
+			return false;
+}
+
+
+int CountPositionPoints2D(float3* min,float3* max,float3* p1,float3* p2,float3* p3)
+{
+	int Count = 0;
+
+		if(InPosition2D(min,max,p1))
+			Count++;
+		if(InPosition2D(min,max,p2))
+			Count++;
+		if(InPosition2D(min,max,p3))
+			Count++;
+
+	return Count;
+}
+
+int CountPositionPointsAbs2D(float3* min,float3* max,float3* p1,float3* p2,float3* p3)
+{
+	int Count = 0;
+
+		if(InPositionAbs2D(min,max,p1))
+			Count++;
+		if(InPositionAbs2D(min,max,p2))
+			Count++;
+		if(InPositionAbs2D(min,max,p3))
+			Count++;
+
+	return Count;
+}
 
-	tmpMax2 += float3(x,y,z);
-	tmpMax2 += float3(-dist_x,0,-dist_z);
 
-	(bound_arr[3])->SetMinMax(&tmpMin2, &tmpMax2);
+bool InPositionPoints2D(float3* min,float3* max,float3* p1,float3* p2,float3* p3)
+{
+		if(CountPositionPointsAbs2D(min,max,p1,p2,p3) >= 1)	
+			return true;
+		else if(CountPositionPoints2D(min,max,p1,p2,p3) >= 2)	
+			return true;
+		else
+			return false;
 }
 
-////////////////////
+//**************************************************************************
 
+bool InPosition3D(float3* min,float3* max,float3* pos)
+{
+		if((max->x >= pos->x && min->x <= pos->x) && (max->y >= pos->y && min->y <= pos->y) && (max->z >= pos->z && min->z <= pos->z))
+			return true;
+		else if(
+				(long(max->x * 1000) >= long(pos->x * 1000) && long(min->x * 1000) <= long(pos->x * 1000))
+				&& 
+				(long(max->y * 1000) >= long(pos->y * 1000) && long(min->y * 1000) <= long(pos->y * 1000))
+				&&
+				(long(max->z * 1000) >= long(pos->z * 1000) && long(min->z * 1000) <= long(pos->z * 1000))
+				)
+			return true;
+		else 
+			return false;
+}
+
+bool InPositionAbs3D(float3* min,float3* max,float3* pos)
+{
+		if((max->x > pos->x && min->x < pos->x) && (max->y > pos->y && min->y < pos->y) && (max->z > pos->z && min->z < pos->z))
+			return true;
+		else
+			return false;
+}
+
+
+int CountPositionPoints3D(float3* min,float3* max,float3* p1,float3* p2,float3* p3)
+{
+	int Count = 0;
+
+		if(InPosition3D(min,max,p1))
+			Count++;
+		if(InPosition3D(min,max,p2))
+			Count++;
+		if(InPosition3D(min,max,p3))
+			Count++;
+
+	return Count;
+}
+
+int CountPositionPointsAbs3D(float3* min,float3* max,float3* p1,float3* p2,float3* p3)
+{
+	int Count = 0;
+
+		if(InPositionAbs3D(min,max,p1))
+			Count++;
+		if(InPositionAbs3D(min,max,p2))
+			Count++;
+		if(InPositionAbs3D(min,max,p3))
+			Count++;
+
+	return Count;
+}
+
+
+bool InPositionPoints3D(float3* min,float3* max,float3* p1,float3* p2,float3* p3)
+{
+		if(CountPositionPointsAbs3D(min,max,p1,p2,p3) >= 1)	
+			return true;
+		else if(CountPositionPoints3D(min,max,p1,p2,p3) >= 2)	
+			return true;
+		else
+			return false;
+}
+
+//##########################################################################
 
 void CreateBoundingBoxMesh(float3* min, float3* max, ID3DXMesh** bbmesh, IDirect3DDevice9* device)
 {
@@ -581,76 +584,75 @@ void CreateBoundingBoxMesh(float3* min, float3* max, ID3DXMesh** bbmesh, IDirect
 	(*bbmesh)->UnlockVertexBuffer();
 }
 
+//##########################################################################
 
-
-
-float4x4* SXTransObject::CalcWorld()
+float4x4* CSXTransObject::calcWorld()
 {
-	World = SMMatrixScaling(Scale) * /*Rotation.GetMatrix()*/SMMatrixRotationX(Rotation.x) * SMMatrixRotationY(Rotation.y) * SMMatrixRotationZ(Rotation.z) * SMMatrixTranslation(Position);
-	return &World;
+	m_mWorld = SMMatrixScaling(m_vScale) * /*Rotation.GetMatrix()*/SMMatrixRotationX(m_vRotation.x) * SMMatrixRotationY(m_vRotation.y) * SMMatrixRotationZ(m_vRotation.z) * SMMatrixTranslation(m_vPosition);
+	return &m_mWorld;
 }
 
-////
+//##########################################################################
 
-void SXBound::CalcBound(IDirect3DVertexBuffer9* vertex_buffer, DWORD count_vert, DWORD bytepervert)
+void CSXBound::calcBound(IDirect3DVertexBuffer9* vertex_buffer, DWORD count_vert, DWORD bytepervert)
 {
 	BYTE *V = 0;
 	HRESULT hr = 0;
 	
-		if (vertex_buffer && SUCCEEDED(vertex_buffer->Lock(0, 0, (void **)&V, 0)))
-		{
-			float3_t tmppos = *(float3_t*)((char*)(V) + bytepervert * 0);
-			Max = tmppos;
-			Min = tmppos;
+	if (vertex_buffer && SUCCEEDED(vertex_buffer->Lock(0, 0, (void **)&V, 0)))
+	{
+		float3_t tmppos = *(float3_t*)((char*)(V)+bytepervert * 0);
+		m_vMax = tmppos;
+		m_vMin = tmppos;
 
-				for(DWORD i=0;i<count_vert;i++)
-				{
-					float3_t pos = *(float3_t*)((char*)(V) + bytepervert * i);
+		for (DWORD i = 0; i<count_vert; i++)
+		{
+			float3_t pos = *(float3_t*)((char*)(V)+bytepervert * i);
 
-						if(pos.x > Max.x)
-							Max.x = pos.x;
+			if (pos.x > m_vMax.x)
+				m_vMax.x = pos.x;
 
-						if(pos.y > Max.y)
-							Max.y = pos.y;
+			if (pos.y > m_vMax.y)
+				m_vMax.y = pos.y;
 
-						if(pos.z > Max.z)
-							Max.z = pos.z;
+			if (pos.z > m_vMax.z)
+				m_vMax.z = pos.z;
 
 
-						if(pos.x < Min.x)
-							Min.x = pos.x;
+			if (pos.x < m_vMin.x)
+				m_vMin.x = pos.x;
 
-						if(pos.y < Min.y)
-							Min.y = pos.y;
+			if (pos.y < m_vMin.y)
+				m_vMin.y = pos.y;
 
-						if(pos.z < Min.z)
-							Min.z = pos.z;
-				}
-			vertex_buffer->Unlock();
+			if (pos.z < m_vMin.z)
+				m_vMin.z = pos.z;
 		}
+		vertex_buffer->Unlock();
+	}
 
-	Center = (Min + Max) * 0.5f;
-	Radius = SMVector3Length(Center-Max);
+	m_vCenter = (m_vMin + m_vMax) * 0.5f;
+	m_fRadius = SMVector3Length(m_vCenter - m_vMax);
 }
 
-float4x4* SXBound::CalcWorldAndTrans()
+float4x4* CSXBound::calcWorldAndTrans()
 {
-	CalcWorld();
+	calcWorld();
 
-	Max = SMVector3Transform(Max, World);
-	Min = SMVector3Transform(Min, World);
+	m_vMax = SMVector3Transform(m_vMax, m_mWorld);
+	m_vMin = SMVector3Transform(m_vMin, m_mWorld);
 
-	Center = (Min + Max) * 0.5f;
+	m_vCenter = (m_vMin + m_vMax) * 0.5f;
 
-	Radius = SMVector3Length(Center - Max);
-	return &World;
+	m_fRadius = SMVector3Length(m_vCenter - m_vMax);
+	return &m_mWorld;
 }
 
-void SXBound::GetPosBBScreen(SXPosBBScreen *res, float3* campos, float3* sizemapdepth, float4x4* mat)
+void CSXBound::getPosBBScreen(SXPosBBScreen *res, float3* campos, float3* sizemapdepth, float4x4* mat)
 {
 	float3 max,min;
-	max = Max;
-	min = Min;
+	max = m_vMax;
+	min = m_vMin;
 
 	float2 mins,maxs,minmaxdepth;
 
@@ -827,50 +829,50 @@ void SXBound::GetPosBBScreen(SXPosBBScreen *res, float3* campos, float3* sizemap
 			res->IsIn = true;*/
 }
 
-void SXBound::SetMinMax(float3* min, float3* max)
+void CSXBound::setMinMax(const float3* min, const float3* max)
 {
-	Min = *min;
-	Max = *max;
+	m_vMin = *min;
+	m_vMax = *max;
 
 	/*float3 vec = (Max - Min) * 0.5f;
 	Radius = sqrt(vec.x * vec.x + vec.y * vec.y + vec.x * vec.z);*/
 
-	Center = (Min + Max) * 0.5f;
-	Radius = SMVector3Length(Center - Max);
+	m_vCenter = (m_vMin + m_vMax) * 0.5f;
+	m_fRadius = SMVector3Length(m_vCenter - m_vMax);
 };
 
-void SXBound::GetMinMax(float3* min, float3* max) const
+void CSXBound::getMinMax(float3* min, float3* max) const
 {
-	*min = Min; *max = Max;
+	*min = m_vMin; *max = m_vMax;
 };
 
-void SXBound::SetSphere(float3* center, float* radius)
+void CSXBound::setSphere(const float3* center, float radius)
 {
-	Center = *center;
-	Radius = *radius;
+	m_vCenter = *center;
+	m_fRadius = radius;
 
-	Min = Center - float3(Radius, Radius, Radius);
-	Max = Center + float3(Radius, Radius, Radius);
+	m_vMin = m_vCenter - float3(m_fRadius, m_fRadius, m_fRadius);
+	m_vMax = m_vCenter + float3(m_fRadius, m_fRadius, m_fRadius);
 };
 
-void SXBound::GetSphere(float3* center, float* radius) const
+void CSXBound::getSphere(float3* center, float* radius) const
 {
-	*center = Center;
-	*radius = Radius;
+	*center = m_vCenter;
+	*radius = m_fRadius;
 };
 
-bool SXBound::IsPointInSphere(float3* point) const
+bool CSXBound::isPointInSphere(const float3* point) const
 {
-	float distsqr = SMVector3Dot(Center - *point);
-	if (distsqr <= Radius*Radius)
+	float distsqr = SMVector3Dot(m_vCenter - *point);
+	if (distsqr <= m_fRadius*m_fRadius)
 		return true;
 	else
 		return false;
 }
 
-bool SXBound::IsPointInBox(float3* point) const
+bool CSXBound::isPointInBox(const float3* point) const
 {
-	if (point->x >= Min.x && point->y >= Min.y && point->z >= Min.z && point->x <= Max.x && point->y <= Max.y && point->z <= Max.z)
+	if (point->x >= m_vMin.x && point->y >= m_vMin.y && point->z >= m_vMin.z && point->x <= m_vMax.x && point->y <= m_vMax.y && point->z <= m_vMax.z)
 		return true;
 	else
 		return false;
diff --git a/source/gcore/bound.h b/source/gcore/bound.h
index 527ae1aed..7cd66b7d1 100644
--- a/source/gcore/bound.h
+++ b/source/gcore/bound.h
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #ifndef __BOUND_H
 #define __BOUND_H
 
@@ -32,16 +37,16 @@ void CreateBoundingBoxMesh(float3* min, float3* max, ID3DXMesh** bbmesh, IDirect
 
 //������� ������ � ����������� ���������
 //��� ����������� ������������� ���������� ������� ���������� �������/�������/������� ����� ���� CalculateWorld
-struct SXTransObject : public virtual ISXTransObject
+struct CSXTransObject : public virtual ISXTransObject
 {
-	SXTransObject(){};
-	~SXTransObject(){};
+	CSXTransObject(){};
+	~CSXTransObject(){};
 
 	void Release(){ mem_del(this); };
 
 	SX_ALIGNED_OP_MEM
 
-	float4x4* CalcWorld();
+	float4x4* calcWorld();
 };
 
 #define TRANSFORM_COORD_SCREEN2(point,sizemapdepth)\
@@ -57,31 +62,38 @@ struct SXTransObject : public virtual ISXTransObject
 //��� �������� �������� � ��������� ���������� ������� CalculateBound
 //SetMinMax, GetMinMax �� ������ CalculateWorldAndTrans ���������� �������������������� ������
 //�������� ������ ���������� Bound � Object �������� CalculateWorldAndTrans
-class SXBound : public SXTransObject, public virtual ISXBound
+class CSXBound : public CSXTransObject, public virtual ISXBound
 {
 public:
-	SXBound(){};
-	~SXBound(){};
+	CSXBound(){};
+	~CSXBound(){};
 
 	void Release(){ mem_del(this); };
 
 	SX_ALIGNED_OP_MEM
 
-	void CalcBound(IDirect3DVertexBuffer9* vertex_buffer, DWORD count_vert, DWORD bytepervert);
+	void calcBound(IDirect3DVertexBuffer9* vertex_buffer, DWORD count_vert, DWORD bytepervert);
 
 	//������� �������� ������� ������� � ������������� �������� � ���������
-	float4x4* CalcWorldAndTrans();
+	float4x4* calcWorldAndTrans();
+
+	void getPosBBScreen(SXPosBBScreen *res, float3* campos, float3* sizemapdepth, float4x4* mat);
+
+	void setMinMax(const float3* min, const float3* max);
+	void getMinMax(float3* min, float3* max) const;
 
-	void GetPosBBScreen(SXPosBBScreen *res, float3* campos, float3* sizemapdepth, float4x4* mat);
+	void setSphere(const float3* center, float radius);
+	void getSphere(float3* center, float* radius) const;
 
-	void SetMinMax(float3* min, float3* max);
-	void GetMinMax(float3* min, float3* max) const;
+	bool isPointInSphere(const float3* point) const;
+	bool isPointInBox(const float3* point) const;
 
-	void SetSphere(float3* center, float* radius);
-	void GetSphere(float3* center, float* radius) const;
+protected:
+	float3 m_vMin;
+	float3 m_vMax;
 
-	bool IsPointInSphere(float3* point) const;
-	bool IsPointInBox(float3* point) const;
+	float3 m_vCenter;
+	float m_fRadius;
 };
 
 #endif
\ No newline at end of file
diff --git a/source/gcore/camera.cpp b/source/gcore/camera.cpp
index 02a921ebb..e2e4fc50c 100644
--- a/source/gcore/camera.cpp
+++ b/source/gcore/camera.cpp
@@ -1,60 +1,74 @@
 
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "camera.h"
 
-Frustum::Frustum()
+CFrustum::CFrustum()
 {
-	
+	m_aPoints[0] = float3(0, 0, 0);
+	m_aPoints[1] = float3(0, 0, 0);
+	m_aPoints[2] = float3(0, 0, 0);
+	m_aPoints[3] = float3(0, 0, 0);
+	m_aPoints[4] = float3(0, 0, 0);
+	m_aPoints[5] = float3(0, 0, 0);
+	m_aPoints[6] = float3(0, 0, 0);
+	m_aPoints[7] = float3(0, 0, 0);
+
+	m_vCenter = float3(0, 0, 0);
 }
 
-Frustum::~Frustum()
+CFrustum::~CFrustum()
 {
 
 }
 
-void Frustum::Update(const float4x4* view,const float4x4* proj)
+void CFrustum::update(const float4x4* view,const float4x4* proj)
 {
 	float4x4 matComb = SMMatrixMultiply(*view, *proj);
 	
-	ArrFrustumPlane[0].Normal.x = matComb._14 - matComb._11; 
-	ArrFrustumPlane[0].Normal.y = matComb._24 - matComb._21; 
-	ArrFrustumPlane[0].Normal.z = matComb._34 - matComb._31; 
-	ArrFrustumPlane[0].Distance = matComb._44 - matComb._41;
+	m_aFrustumPlanes[0].m_vNormal.x = matComb._14 - matComb._11; 
+	m_aFrustumPlanes[0].m_vNormal.y = matComb._24 - matComb._21; 
+	m_aFrustumPlanes[0].m_vNormal.z = matComb._34 - matComb._31; 
+	m_aFrustumPlanes[0].m_fDistance = matComb._44 - matComb._41;
 	
-	ArrFrustumPlane[1].Normal.x = matComb._14 + matComb._11; 
-	ArrFrustumPlane[1].Normal.y = matComb._24 + matComb._21; 
-	ArrFrustumPlane[1].Normal.z = matComb._34 + matComb._31; 
-	ArrFrustumPlane[1].Distance = matComb._44 + matComb._41;
-
-	ArrFrustumPlane[2].Normal.x = matComb._14 + matComb._12; 
-	ArrFrustumPlane[2].Normal.y = matComb._24 + matComb._22; 
-	ArrFrustumPlane[2].Normal.z = matComb._34 + matComb._32; 
-	ArrFrustumPlane[2].Distance = matComb._44 + matComb._42;
-
-	ArrFrustumPlane[3].Normal.x = matComb._14 - matComb._12; 
-	ArrFrustumPlane[3].Normal.y = matComb._24 - matComb._22; 
-	ArrFrustumPlane[3].Normal.z = matComb._34 - matComb._32; 
-	ArrFrustumPlane[3].Distance = matComb._44 - matComb._42;
-
-	ArrFrustumPlane[4].Normal.x = matComb._14 - matComb._13; 
-	ArrFrustumPlane[4].Normal.y = matComb._24 - matComb._23; 
-	ArrFrustumPlane[4].Normal.z = matComb._34 - matComb._33; 
-	ArrFrustumPlane[4].Distance = matComb._44 - matComb._43;
-
-	ArrFrustumPlane[5].Normal.x = matComb._14 + matComb._13; 
-	ArrFrustumPlane[5].Normal.y = matComb._24 + matComb._23; 
-	ArrFrustumPlane[5].Normal.z = matComb._34 + matComb._33; 
-	ArrFrustumPlane[5].Distance = matComb._44 + matComb._43;
+	m_aFrustumPlanes[1].m_vNormal.x = matComb._14 + matComb._11; 
+	m_aFrustumPlanes[1].m_vNormal.y = matComb._24 + matComb._21; 
+	m_aFrustumPlanes[1].m_vNormal.z = matComb._34 + matComb._31; 
+	m_aFrustumPlanes[1].m_fDistance = matComb._44 + matComb._41;
+
+	m_aFrustumPlanes[2].m_vNormal.x = matComb._14 + matComb._12; 
+	m_aFrustumPlanes[2].m_vNormal.y = matComb._24 + matComb._22; 
+	m_aFrustumPlanes[2].m_vNormal.z = matComb._34 + matComb._32; 
+	m_aFrustumPlanes[2].m_fDistance = matComb._44 + matComb._42;
+
+	m_aFrustumPlanes[3].m_vNormal.x = matComb._14 - matComb._12; 
+	m_aFrustumPlanes[3].m_vNormal.y = matComb._24 - matComb._22; 
+	m_aFrustumPlanes[3].m_vNormal.z = matComb._34 - matComb._32; 
+	m_aFrustumPlanes[3].m_fDistance = matComb._44 - matComb._42;
+
+	m_aFrustumPlanes[4].m_vNormal.x = matComb._14 - matComb._13; 
+	m_aFrustumPlanes[4].m_vNormal.y = matComb._24 - matComb._23; 
+	m_aFrustumPlanes[4].m_vNormal.z = matComb._34 - matComb._33; 
+	m_aFrustumPlanes[4].m_fDistance = matComb._44 - matComb._43;
+
+	m_aFrustumPlanes[5].m_vNormal.x = matComb._14 + matComb._13; 
+	m_aFrustumPlanes[5].m_vNormal.y = matComb._24 + matComb._23; 
+	m_aFrustumPlanes[5].m_vNormal.z = matComb._34 + matComb._33; 
+	m_aFrustumPlanes[5].m_fDistance = matComb._44 + matComb._43;
 
 		//������������ ����������
 		for (int i = 0; i < 6; ++i)
-			ArrFrustumPlane[i].Normalize();
+			m_aFrustumPlanes[i].normalize();
 }
 
-bool Frustum::PointInFrustum(const float3 *point)
+bool CFrustum::pointInFrustum(const float3 *point) const
 {
 		for (int i=0; i<6; i++)
 		{
-			float tmp = ArrFrustumPlane[i].Normal.x*(point->x) + ArrFrustumPlane[i].Normal.y*(point->y) +  ArrFrustumPlane[i].Normal.z*(point->z) + ArrFrustumPlane[i].Distance;
+			float tmp = m_aFrustumPlanes[i].m_vNormal.x*(point->x) + m_aFrustumPlanes[i].m_vNormal.y*(point->y) +  m_aFrustumPlanes[i].m_vNormal.z*(point->z) + m_aFrustumPlanes[i].m_fDistance;
 				if(long(tmp * 1000.0f) <= long(0 * 1000.0f))
 				{
 					return false;
@@ -63,99 +77,124 @@ bool Frustum::PointInFrustum(const float3 *point)
     return true;
 }
 
-bool Frustum::PolyInFrustum(const float3* p1,const float3* p2,const float3* p3)
+bool CFrustum::polyInFrustum(const float3* p1, const float3* p2, const float3* p3) const
 {
-		if(PointInFrustum(p1) || PointInFrustum(p2) || PointInFrustum(p3))
+		if(pointInFrustum(p1) || pointInFrustum(p2) || pointInFrustum(p3))
 			return true;
 
 	return false;
 }
 
-bool Frustum::PolyInFrustumAbs(const float3* p1,const float3* p2,const float3* p3)
+bool CFrustum::polyInFrustumAbs(const float3* p1, const float3* p2, const float3* p3) const
 {
-		if(PointInFrustum(p1) && PointInFrustum(p2) && PointInFrustum(p3))
+		if(pointInFrustum(p1) && pointInFrustum(p2) && pointInFrustum(p3))
 			return true;
 
 	return false;
 }
 			
-bool Frustum::SphereInFrustum(const float3 *point, float radius) const
+bool CFrustum::sphereInFrustum(const float3 *point, float radius) const
 {
 		for (int i=0; i<6; ++i)
 		{
-				if (ArrFrustumPlane[i].Normal.x*point->x + ArrFrustumPlane[i].Normal.y*point->y + ArrFrustumPlane[i].Normal.z*point->z + ArrFrustumPlane[i].Distance <= -radius)
+				if (m_aFrustumPlanes[i].m_vNormal.x*point->x + m_aFrustumPlanes[i].m_vNormal.y*point->y + m_aFrustumPlanes[i].m_vNormal.z*point->z + m_aFrustumPlanes[i].m_fDistance <= -radius)
 					return false;
 		}
 	return true;
 }
 
-bool Frustum::SphereInFrustumAbs(const float3 *point, float radius)
+bool CFrustum::sphereInFrustumAbs(const float3 *point, float radius) const
 {
 		for (int i=0; i<6; i++)
 		{
-				if (ArrFrustumPlane[i].Normal.x*point->x + ArrFrustumPlane[i].Normal.y*point->y + ArrFrustumPlane[i].Normal.z*point->z + ArrFrustumPlane[i].Distance > -radius)
+				if (m_aFrustumPlanes[i].m_vNormal.x*point->x + m_aFrustumPlanes[i].m_vNormal.y*point->y + m_aFrustumPlanes[i].m_vNormal.z*point->z + m_aFrustumPlanes[i].m_fDistance > -radius)
 					return false;
 		}
 	return true;
 }
 
-bool Frustum::BoxInFrustum(float3* min,float3* max)
+bool CFrustum::boxInFrustum(float3* min, float3* max) const
 {
 		for ( register int p = 0; p < 6; p++ )
 		{
-			if( ArrFrustumPlane[p].Normal.x * (min->x) + ArrFrustumPlane[p].Normal.y * (min->y) + ArrFrustumPlane[p].Normal.z * (min->z) + ArrFrustumPlane[p].Distance > 0 ) continue;
-
-			if( ArrFrustumPlane[p].Normal.x * (min->x) + ArrFrustumPlane[p].Normal.y * (min->y) + ArrFrustumPlane[p].Normal.z * (max->z) + ArrFrustumPlane[p].Distance > 0 ) continue;
-			if( ArrFrustumPlane[p].Normal.x * (min->x) + ArrFrustumPlane[p].Normal.y * (max->y) + ArrFrustumPlane[p].Normal.z * (max->z) + ArrFrustumPlane[p].Distance > 0 ) continue;
-			if( ArrFrustumPlane[p].Normal.x * (max->x) + ArrFrustumPlane[p].Normal.y * (max->y) + ArrFrustumPlane[p].Normal.z * (max->z) + ArrFrustumPlane[p].Distance > 0 ) continue;
-			if( ArrFrustumPlane[p].Normal.x * (max->x) + ArrFrustumPlane[p].Normal.y * (min->y) + ArrFrustumPlane[p].Normal.z * (min->z) + ArrFrustumPlane[p].Distance > 0 ) continue;
-			if( ArrFrustumPlane[p].Normal.x * (max->x) + ArrFrustumPlane[p].Normal.y * (max->y) + ArrFrustumPlane[p].Normal.z * (min->z) + ArrFrustumPlane[p].Distance > 0 ) continue;
-			if( ArrFrustumPlane[p].Normal.x * (max->x) + ArrFrustumPlane[p].Normal.y * (min->y) + ArrFrustumPlane[p].Normal.z * (max->z) + ArrFrustumPlane[p].Distance > 0 ) continue;
-			if( ArrFrustumPlane[p].Normal.x * (min->x) + ArrFrustumPlane[p].Normal.y * (max->y) + ArrFrustumPlane[p].Normal.z * (min->z) + ArrFrustumPlane[p].Distance > 0 ) continue;
+			if( m_aFrustumPlanes[p].m_vNormal.x * (min->x) + m_aFrustumPlanes[p].m_vNormal.y * (min->y) + m_aFrustumPlanes[p].m_vNormal.z * (min->z) + m_aFrustumPlanes[p].m_fDistance > 0 ) continue;
+
+			if( m_aFrustumPlanes[p].m_vNormal.x * (min->x) + m_aFrustumPlanes[p].m_vNormal.y * (min->y) + m_aFrustumPlanes[p].m_vNormal.z * (max->z) + m_aFrustumPlanes[p].m_fDistance > 0 ) continue;
+			if( m_aFrustumPlanes[p].m_vNormal.x * (min->x) + m_aFrustumPlanes[p].m_vNormal.y * (max->y) + m_aFrustumPlanes[p].m_vNormal.z * (max->z) + m_aFrustumPlanes[p].m_fDistance > 0 ) continue;
+			if( m_aFrustumPlanes[p].m_vNormal.x * (max->x) + m_aFrustumPlanes[p].m_vNormal.y * (max->y) + m_aFrustumPlanes[p].m_vNormal.z * (max->z) + m_aFrustumPlanes[p].m_fDistance > 0 ) continue;
+			if( m_aFrustumPlanes[p].m_vNormal.x * (max->x) + m_aFrustumPlanes[p].m_vNormal.y * (min->y) + m_aFrustumPlanes[p].m_vNormal.z * (min->z) + m_aFrustumPlanes[p].m_fDistance > 0 ) continue;
+			if( m_aFrustumPlanes[p].m_vNormal.x * (max->x) + m_aFrustumPlanes[p].m_vNormal.y * (max->y) + m_aFrustumPlanes[p].m_vNormal.z * (min->z) + m_aFrustumPlanes[p].m_fDistance > 0 ) continue;
+			if( m_aFrustumPlanes[p].m_vNormal.x * (max->x) + m_aFrustumPlanes[p].m_vNormal.y * (min->y) + m_aFrustumPlanes[p].m_vNormal.z * (max->z) + m_aFrustumPlanes[p].m_fDistance > 0 ) continue;
+			if( m_aFrustumPlanes[p].m_vNormal.x * (min->x) + m_aFrustumPlanes[p].m_vNormal.y * (max->y) + m_aFrustumPlanes[p].m_vNormal.z * (min->z) + m_aFrustumPlanes[p].m_fDistance > 0 ) continue;
 			return false;
 		}
 
 	return true;
 }
 
-/////////////////////////
 
-Camera::Camera()
+float3 CFrustum::getPoint(int iNumPoint) const
+{
+	if (iNumPoint >= 0 && iNumPoint < 8)
+		return m_aPoints[iNumPoint];
+
+	return float3(0, 0, 0);
+}
+
+float3 CFrustum::getCenter() const
+{
+	return m_vCenter;
+}
+
+void CFrustum::setPoint(int iNumPoint, const float3 *pPoint)
+{
+	if (iNumPoint >= 0 && iNumPoint < 8)
+		m_aPoints[iNumPoint] = *pPoint;
+}
+
+void CFrustum::setCenter(const float3 *pCenter)
+{
+	m_vCenter = *pCenter;
+}
+
+//##########################################################################
+
+CCamera::CCamera()
 {
-	Position = float3(0.0f, 0.0f, 0.0f);
-	Right = float3(1.0f, 0.0f, 0.0f);
-	Up = float3(0.0f, 1.0f, 0.0f);
-	Look = float3(0.0f, 0.0f, 1.0f);
+	m_vPosition = float3(0.0f, 0.0f, 0.0f);
+	m_vRight = float3(1.0f, 0.0f, 0.0f);
+	m_vUp = float3(0.0f, 1.0f, 0.0f);
+	m_vLook = float3(0.0f, 0.0f, 1.0f);
 
-	ObjFrustum = new Frustum();
+	m_oFrustum = CFrustum();
 
 	m_vPitchYawRoll = float3_t(0, 0, 0);
 }
 
-Camera::~Camera	()
+CCamera::~CCamera	()
 {
-	mem_delete(ObjFrustum);
+	
 }
 
-inline void Camera::PosLeftRight(float units)
+void CCamera::posLeftRight(float units)
 {
-	Position += float3(Right.x, 0.0f, Right.z) * units;
-	LastVal.x = units;
+	m_vPosition += float3(m_vRight.x, 0.0f, m_vRight.z) * units;
+	//LastVal.x = units;
 }
 
-inline void Camera::PosUpDown(float units)
+void CCamera::posUpDown(float units)
 {
-	Position.y += Up.y * units;
+	m_vPosition.y += m_vUp.y * units;
 }
 
-inline void Camera::PosFrontBack(float units)
+void CCamera::posFrontBack(float units)
 {
-	Position += float3(Look.x, 0.0f, Look.z) * units;
-	LastVal.z = units;
+	m_vPosition += float3(m_vLook.x, 0.0f, m_vLook.z) * units;
+	//LastVal.z = units;
 }
 
 			
-inline void Camera::RotUpDown(float angle)
+void CCamera::rotUpDown(float angle)
 {
 	m_vPitchYawRoll.x -= angle;
 	if(m_vPitchYawRoll.x > SM_PIDIV2)
@@ -167,10 +206,10 @@ inline void Camera::RotUpDown(float angle)
 		m_vPitchYawRoll.x = -SM_PIDIV2;
 	}
 
-	UpdateView();
+	updateView();
 }
 
-inline void Camera::RotRightLeft(float angle)
+void CCamera::rotRightLeft(float angle)
 {
 	m_vPitchYawRoll.y -= angle;
 	while(m_vPitchYawRoll.y < 0.0f)
@@ -182,105 +221,116 @@ inline void Camera::RotRightLeft(float angle)
 		m_vPitchYawRoll.y -= SM_2PI;
 	}
 
-	UpdateView();
+	updateView();
 }
 
-inline void Camera::Roll(float angle)
+void CCamera::roll(float angle)
 {
 	m_vPitchYawRoll.z -= angle;
-	UpdateView();
+	updateView();
 }
 
-inline void Camera::UpdateView()
+void CCamera::updateView()
 {
 	SMQuaternion q = SMQuaternion(m_vPitchYawRoll.x, 'x')
 		* SMQuaternion(m_vPitchYawRoll.y, 'y')
 		* SMQuaternion(m_vPitchYawRoll.z, 'z');
 
-	Right = q * float3(1.0f, 0.0f, 0.0f);
-	Up = q * float3(0.0f, 1.0f, 0.0f);
-	Look = q * float3(0.0f, 0.0f, 1.0f);
+	m_vRight = q * float3(1.0f, 0.0f, 0.0f);
+	m_vUp = q * float3(0.0f, 1.0f, 0.0f);
+	m_vLook = q * float3(0.0f, 0.0f, 1.0f);
 }
 
-inline void Camera::SetOrientation(const SMQuaternion & q)
+void CCamera::setOrientation(const SMQuaternion *q)
 {
-	m_vPitchYawRoll = SMMatrixToEuler(q.GetMatrix());
+	m_vPitchYawRoll = SMMatrixToEuler(q->GetMatrix());
 
-	Right = q * float3(1.0f, 0.0f, 0.0f);
-	Up = q * float3(0.0f, 1.0f, 0.0f);
-	Look = q * float3(0.0f, 0.0f, 1.0f);
+	m_vRight = (*q) * float3(1.0f, 0.0f, 0.0f);
+	m_vUp = (*q) * float3(0.0f, 1.0f, 0.0f);
+	m_vLook = (*q) * float3(0.0f, 0.0f, 1.0f);
 }
 
 
-inline void Camera::GetViewMatrix(float4x4* view_matrix)
+void CCamera::getViewMatrix(float4x4* view_matrix)
 {
-	*view_matrix = SMMatrixLookToLH(Position, Look, Up);
+	m_mView = SMMatrixLookToLH(m_vPosition, m_vLook, m_vUp);
+	*view_matrix = m_mView;// SMMatrixLookToLH(m_vPosition, m_vLook, m_vUp);
 }
 
 			
-inline void Camera::GetPosition(float3* pos)
+void CCamera::getPosition(float3* pos) const
 {
-	*pos = Position;
+	*pos = m_vPosition;
 }
 
-inline void Camera::SetPosition(float3* pos)
+void CCamera::setPosition(const float3* pos)
 {
-	Position = *pos;
+	m_vPosition = *pos;
 }
 
 
-inline void Camera::GetDirection(float3* dir)
+void CCamera::getDirection(float3* dir) const
 {
-
+	*dir = m_vLook;
 }
 
-inline void Camera::SetDirection(float3* dir)
+/*void CCamera::setDirection(const float3* dir)
 {
-
-}
+	m_vLook = *dir;
+}*/
 
 			
-inline void Camera::GetRight(float3* right)
+void CCamera::getRight(float3* right) const
 {
-	*right = Right;
+	*right = m_vRight;
 }
 
-inline void Camera::GetUp(float3* up)
+void CCamera::getUp(float3* up) const
 {
-	*up = Up;
+	*up = m_vUp;
 }
 
-inline void Camera::GetLook(float3* look)
+void CCamera::getLook(float3* look) const
 {
-	*look = Look;
+	*look = m_vLook;
 }
 
-inline void Camera::GetRotation(float3* rot)
+void CCamera::getRotation(float3* rot) const
 {
 	*rot = m_vPitchYawRoll;
 }
 
-inline float Camera::GetRotationX()
+float CCamera::getRotationX() const
 {
 	return m_vPitchYawRoll.x;
 }
 
-inline float Camera::GetRotationY()
+float CCamera::getRotationY() const
 {
 	return m_vPitchYawRoll.y;
 }
 
-inline float Camera::GetRotationZ()
+float CCamera::getRotationZ() const
 {
 	return m_vPitchYawRoll.z;
 }
 
-inline void Camera::SetFOV(float fov)
+void CCamera::setFOV(float fov)
 {
 	m_fFOV = fov;
 }
 
-inline float Camera::GetFOV()
+float CCamera::getFOV() const
 {
 	return(m_fFOV);
 }
+
+void CCamera::updateFrustum(const float4x4 *pProjection)
+{
+	m_oFrustum.update(&m_mView, pProjection);
+}
+
+const ISXFrustum* CCamera::getFrustum()
+{
+	return &m_oFrustum;
+}
\ No newline at end of file
diff --git a/source/gcore/camera.h b/source/gcore/camera.h
index 173ae37c5..be7842ec5 100644
--- a/source/gcore/camera.h
+++ b/source/gcore/camera.h
@@ -1,69 +1,107 @@
-#ifndef _CAMERA_H_
-#define _CAMERA_H_
+
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
+#ifndef __CAMERA_H
+#define __CAMERA_H
 
 #include "sxgcore.h"
 
 //����� ����������� �������
-class Frustum : public virtual ISXFrustum
+class CFrustum : public virtual ISXFrustum
 {
 public:
-	Frustum();
-	~Frustum();
+	CFrustum();
+	~CFrustum();
 	void Release(){ mem_del(this); }
 	SX_ALIGNED_OP_MEM
 
-	void Update(const float4x4* view,const float4x4* proj);
+	void update(const float4x4 *pView,const float4x4 *pProj);
 
-	bool PointInFrustum(const float3 *point);
-	bool PolyInFrustum(const float3* p1,const float3* p2,const float3* p3);
-	bool PolyInFrustumAbs(const float3* p1,const float3* p2,const float3* p3);
+	bool pointInFrustum(const float3 *pPoint) const;
+	bool polyInFrustum(const float3 *pPount1, const float3 *pPount2, const float3 *pPount3) const;
+	bool polyInFrustumAbs(const float3 *pPount1, const float3 *pPount2, const float3 *pPount3) const;
 	
-	bool SphereInFrustum(const float3 *point, float radius) const;
+	bool sphereInFrustum(const float3 *pPount, float fRadius) const;
+
+	bool sphereInFrustumAbs(const float3 *pPount, float fRadius) const;
+	bool boxInFrustum(float3 *pMin, float3 *pMax) const;
+
 
-	bool SphereInFrustumAbs(const float3 *point, float radius);
-	bool BoxInFrustum(float3* min,float3* max);
+	float3 getPoint(int iNumPoint) const;
+	float3 getCenter() const;
 
+	void setPoint(int iNumPoint, const float3 *pPoint);
+	void setCenter(const float3 *pCenter);
+
+private:
+
+	CSXFrustumPlane m_aFrustumPlanes[6];
+
+	float3 m_aPoints[8];
+	float3 m_vCenter;
 };
 
-/////////////////////
-class Camera : public virtual ISXCamera
+//**************************************************************************
+
+class CCamera : public virtual ISXCamera
 {
 public:
-	Camera	();
-	~Camera	();
+	CCamera	();
+	~CCamera	();
 	void Release(){ mem_del(this); }
 	SX_ALIGNED_OP_MEM
 
-	void PosLeftRight(float units);	//�����/������
-	void PosUpDown(float units);	//�����/����
-	void PosFrontBack(float units);	//������/�����
+	void posLeftRight(float fUnits);//�����/������
+	void posUpDown(float fUnits);	//�����/����
+	void posFrontBack(float fUnits);//������/�����
 	
-	void RotUpDown(float angle);	//�������� �����/����
-	void RotRightLeft(float angle);	//�������� ������/�����
-	void Roll(float angle);	//����
-	void SetOrientation(const SMQuaternion & q);
+	void rotUpDown(float fAngle);	//�������� �����/����
+	void rotRightLeft(float fAngle);//�������� ������/�����
+	void roll(float fAngle);		//����
+	void setOrientation(const SMQuaternion *pQuaternion);
 
-	void GetViewMatrix(float4x4* view_matrix);//�������� ������� ����
+	void getViewMatrix(float4x4 *pMatrix);//�������� ������� ����
 	
-	void GetPosition(float3* pos);
-	void SetPosition(float3* pos);
+	void getPosition(float3 *pPos) const;
+	void setPosition(const float3 *pPos);
 
-	void GetDirection(float3* dir);
-	void SetDirection(float3* dir);
+	void getDirection(float3 *pDir) const;
+	//void setDirection(const float3 *pDir);
 	
-	void GetRight(float3* right);
-	void GetUp(float3* up);
-	void GetLook(float3* look);
-	void GetRotation(float3* rot);
+	void getRight(float3 *pRight) const;
+	void getUp(float3 *pUp) const;
+	void getLook(float3 *pLook) const;
+	void getRotation(float3 *pRot) const;
+
+	float getRotationX() const;
+	float getRotationY() const;
+	float getRotationZ() const;
+
+	void setFOV(float fFOV);
+	float getFOV() const;
+
+	void updateView();
+
+	void updateFrustum(const float4x4 *pmProjection);
+	const ISXFrustum* getFrustum();
+
+protected:
+	CFrustum m_oFrustum;	//!< ������� ���� ������
+
+	float3 m_vRight;
+	float3 m_vUp;
+	float3 m_vLook;
+
+	float3 m_vPosition;
 
-	float GetRotationX();
-	float GetRotationY();
-	float GetRotationZ();
+	float3_t m_vPitchYawRoll;
 
-	void SetFOV(float fov);
-	float GetFOV();
+	float4x4 m_mView;
 
-	void UpdateView();
+	float m_fFOV;
 };
 
 #endif
diff --git a/source/gcore/creatortextures.h b/source/gcore/creatortextures.h
index 0a6e947eb..9a3934639 100644
--- a/source/gcore/creatortextures.h
+++ b/source/gcore/creatortextures.h
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #ifndef __CREATORTEXTURES_H
 #define __CREATORTEXTURES_H
 
@@ -7,7 +12,6 @@
 #include <d3d9.h>
 #include <common/array.h>
 
-extern report_func g_fnReportf;
 extern IDirect3DDevice9 *g_pDXDevice;
 extern D3DPRESENT_PARAMETERS g_oD3DAPP;
 
diff --git a/source/gcore/loader_static.cpp b/source/gcore/loader_static.cpp
index ad5ea9521..7764729b0 100644
--- a/source/gcore/loader_static.cpp
+++ b/source/gcore/loader_static.cpp
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "loader_static.h"
 
 ISXDataStaticModel* SGCore_StaticModelCr()
@@ -15,7 +20,7 @@ void SGCore_StaticModelLoad(const char * file, ISXDataStaticModel** data)
 {
 	if (!data)
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s: %s - �an not initialize a null pointer 'data', load model '%s'\n", SX_LIB_NAME, GEN_MSG_LOCATION, file);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - �an not initialize a null pointer 'data', load model '%s'\n", GEN_MSG_LOCATION, file);
 		return;
 	}
 
@@ -23,7 +28,7 @@ void SGCore_StaticModelLoad(const char * file, ISXDataStaticModel** data)
 	FILE * pf = fopen(file, "rb");
 	if (!pf)
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s: %s - unable to open model file '%s'\n", SX_LIB_NAME, GEN_MSG_LOCATION, file);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - unable to open model file '%s'\n", GEN_MSG_LOCATION, file);
 		return;
 	}
 
@@ -33,26 +38,26 @@ void SGCore_StaticModelLoad(const char * file, ISXDataStaticModel** data)
 
 	if (header.Magick != SX_MODEL_MAGICK)
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s: %s - unsupported file type '%s'\n", SX_LIB_NAME, GEN_MSG_LOCATION, file);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - unsupported file type '%s'\n", GEN_MSG_LOCATION, file);
 		fclose(pf);
 		return;
 	}
 
 	if (!(header.iVersion == SX_MODEL_VERSION_OLD || header.iVersion == SX_MODEL_VERSION))
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s: %s - unsupported file '%s' version %d'\n", SX_LIB_NAME, GEN_MSG_LOCATION, header.iVersion, file);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - unsupported file '%s' version %d'\n", GEN_MSG_LOCATION, header.iVersion, file);
 		fclose(pf);
 		return;
 	}
 
 	if (header.iVersion == SX_MODEL_VERSION_OLD)
 	{
-		(*data)->ArrTextures = NULL;
+		(*data)->m_ppTextures = NULL;
 		Array<String> tex;
 		if (header.iMaterialsOffset)
 		{
 			fseek(pf, header.iMaterialsOffset, SEEK_SET);
-			(*data)->ArrTextures = new char*[header.iMaterialCount];
+			(*data)->m_ppTextures = new char*[header.iMaterialCount];
 			for (int i = 0; i < header.iMaterialCount; i++)
 			{
 				char c;
@@ -72,11 +77,11 @@ void SGCore_StaticModelLoad(const char * file, ISXDataStaticModel** data)
 
 			fread(&lh.iSubMeshCount, sizeof(int), 1, pf);
 			lh.pSubLODmeshes = new ModelLoDSubset[lh.iSubMeshCount];
-			(*data)->SubsetCount = lh.iSubMeshCount;
-			(*data)->StartIndex = new UINT[lh.iSubMeshCount];
-			(*data)->IndexCount = new UINT[lh.iSubMeshCount];
-			(*data)->StartVertex = new UINT[lh.iSubMeshCount];
-			(*data)->VertexCount = new UINT[lh.iSubMeshCount];
+			(*data)->m_uiSubsetCount = lh.iSubMeshCount;
+			(*data)->m_pStartIndex = new UINT[lh.iSubMeshCount];
+			(*data)->m_pIndexCount = new UINT[lh.iSubMeshCount];
+			(*data)->m_pStartVertex = new UINT[lh.iSubMeshCount];
+			(*data)->m_pVertexCount = new UINT[lh.iSubMeshCount];
 			int iVC = 0;
 			for (int i = 0; i < lh.iSubMeshCount; i++)
 			{
@@ -90,8 +95,8 @@ void SGCore_StaticModelLoad(const char * file, ISXDataStaticModel** data)
 
 				iVC += lh.pSubLODmeshes[i].iVectexCount;
 
-				(*data)->ArrTextures[i] = new char[tex[lh.pSubLODmeshes[i].iMaterialID].length() + 1];
-				memcpy((*data)->ArrTextures[i], tex[lh.pSubLODmeshes[i].iMaterialID].c_str(), (tex[lh.pSubLODmeshes[i].iMaterialID].length() + 1) * sizeof(char));
+				(*data)->m_ppTextures[i] = new char[tex[lh.pSubLODmeshes[i].iMaterialID].length() + 1];
+				memcpy((*data)->m_ppTextures[i], tex[lh.pSubLODmeshes[i].iMaterialID].c_str(), (tex[lh.pSubLODmeshes[i].iMaterialID].length() + 1) * sizeof(char));
 			}
 
 			UINT iStartIndex = 0;
@@ -99,10 +104,10 @@ void SGCore_StaticModelLoad(const char * file, ISXDataStaticModel** data)
 
 			for (int i = 0; i < lh.iSubMeshCount; i++)
 			{
-				(*data)->StartIndex[i] = iStartIndex;
-				(*data)->StartVertex[i] = iStartVertex;
-				(*data)->IndexCount[i] = lh.pSubLODmeshes[i].iIndexCount;
-				(*data)->VertexCount[i] = lh.pSubLODmeshes[i].iVectexCount;
+				(*data)->m_pStartIndex[i] = iStartIndex;
+				(*data)->m_pStartVertex[i] = iStartVertex;
+				(*data)->m_pIndexCount[i] = lh.pSubLODmeshes[i].iIndexCount;
+				(*data)->m_pVertexCount[i] = lh.pSubLODmeshes[i].iVectexCount;
 				lh.pSubLODmeshes[i].iStartIndex = iStartIndex;
 				lh.pSubLODmeshes[i].iStartVertex = iStartVertex;
 
@@ -126,11 +131,11 @@ void SGCore_StaticModelLoad(const char * file, ISXDataStaticModel** data)
 				memcpy(pVertices + lh.pSubLODmeshes[i].iStartVertex, lh.pSubLODmeshes[i].pVertices, sizeof(vertex_animated_ex)* lh.pSubLODmeshes[i].iVectexCount);
 			}
 
-			(*data)->AllVertexCount = iStartVertex;
-			g_pDXDevice->CreateVertexBuffer(sizeof(vertex_static)* iStartVertex, NULL, NULL, D3DPOOL_MANAGED, &(*data)->VertexBuffer, 0);
+			(*data)->m_uiAllVertexCount = iStartVertex;
+			g_pDXDevice->CreateVertexBuffer(sizeof(vertex_static)* iStartVertex, NULL, NULL, D3DPOOL_MANAGED, &(*data)->m_pVertexBuffer, 0);
 			//(*data)->ArrVertBuf = new vertex_static[iStartVertex];
 			vertex_static * pData;
-			if (!FAILED((*data)->VertexBuffer->Lock(0, sizeof(vertex_static)* iStartVertex, (void**)&pData, 0)))
+			if (!FAILED((*data)->m_pVertexBuffer->Lock(0, sizeof(vertex_static)* iStartVertex, (void**)&pData, 0)))
 			{
 				for (DWORD i = 0; i < lh.iSubMeshCount; i++)
 				{
@@ -140,18 +145,18 @@ void SGCore_StaticModelLoad(const char * file, ISXDataStaticModel** data)
 						//memcpy((*data)->ArrVertBuf + lh.pSubLODmeshes[i].iStartVertex + k, pVertices + lh.pSubLODmeshes[i].iStartVertex + k, sizeof(vertex_static));
 					}
 				}
-				(*data)->VertexBuffer->Unlock();
+				(*data)->m_pVertexBuffer->Unlock();
 			}
 
-			(*data)->AllIndexCount = iStartIndex;
+			(*data)->m_uiAllIndexCount = iStartIndex;
 			DWORD tmpCountIndecex = 0;
-			g_pDXDevice->CreateIndexBuffer(sizeof(UINT)* iStartIndex, NULL, D3DFMT_INDEX32, D3DPOOL_MANAGED, &(*data)->IndexBuffer, 0);
+			g_pDXDevice->CreateIndexBuffer(sizeof(UINT)* iStartIndex, NULL, D3DFMT_INDEX32, D3DPOOL_MANAGED, &(*data)->m_pIndexBuffer, 0);
 			//(*data)->ArrIndBuf = new UINT[iStartIndex];
-			if (!FAILED((*data)->IndexBuffer->Lock(0, sizeof(UINT)* iStartIndex, (void**)&pData, 0)))
+			if (!FAILED((*data)->m_pIndexBuffer->Lock(0, sizeof(UINT)* iStartIndex, (void**)&pData, 0)))
 			{
 				memcpy(pData, pIndices, sizeof(UINT)* iStartIndex);
 				//memcpy((*data)->ArrIndBuf, pIndices, sizeof(UINT)* iStartIndex);
-				(*data)->IndexBuffer->Unlock();
+				(*data)->m_pIndexBuffer->Unlock();
 			}
 
 			for (int i = 0; i < lh.iSubMeshCount; i++)
@@ -167,12 +172,12 @@ void SGCore_StaticModelLoad(const char * file, ISXDataStaticModel** data)
 	}
 	else if (header.iVersion == SX_MODEL_VERSION)
 	{
-		(*data)->ArrTextures = NULL;
+		(*data)->m_ppTextures = NULL;
 		Array<String> tex;
 		if (header.iMaterialsOffset)
 		{
 			fseek(pf, header.iMaterialsOffset, SEEK_SET);
-			(*data)->ArrTextures = new char*[header.iMaterialCount];
+			(*data)->m_ppTextures = new char*[header.iMaterialCount];
 			for (int i = 0; i < header.iMaterialCount; i++)
 			{
 				char c[MODEL_MAX_NAME];
@@ -212,11 +217,11 @@ void SGCore_StaticModelLoad(const char * file, ISXDataStaticModel** data)
 			}
 		}
 
-		(*data)->SubsetCount = m_pLods[0].iSubMeshCount;
-		(*data)->StartIndex = new UINT[m_pLods[0].iSubMeshCount];
-		(*data)->IndexCount = new UINT[m_pLods[0].iSubMeshCount];
-		(*data)->StartVertex = new UINT[m_pLods[0].iSubMeshCount];
-		(*data)->VertexCount = new UINT[m_pLods[0].iSubMeshCount];
+		(*data)->m_uiSubsetCount = m_pLods[0].iSubMeshCount;
+		(*data)->m_pStartIndex = new UINT[m_pLods[0].iSubMeshCount];
+		(*data)->m_pIndexCount = new UINT[m_pLods[0].iSubMeshCount];
+		(*data)->m_pStartVertex = new UINT[m_pLods[0].iSubMeshCount];
+		(*data)->m_pVertexCount = new UINT[m_pLods[0].iSubMeshCount];
 
 		UINT iStartIndex = 0;
 		UINT iStartVertex = 0;
@@ -224,10 +229,10 @@ void SGCore_StaticModelLoad(const char * file, ISXDataStaticModel** data)
 
 		for (int i = 0; i < lh.iSubMeshCount; i++)
 		{
-			(*data)->StartIndex[i] = iStartIndex;
-			(*data)->StartVertex[i] = iStartVertex;
-			(*data)->IndexCount[i] = lh.pSubLODmeshes[i].iIndexCount;
-			(*data)->VertexCount[i] = lh.pSubLODmeshes[i].iVectexCount;
+			(*data)->m_pStartIndex[i] = iStartIndex;
+			(*data)->m_pStartVertex[i] = iStartVertex;
+			(*data)->m_pIndexCount[i] = lh.pSubLODmeshes[i].iIndexCount;
+			(*data)->m_pVertexCount[i] = lh.pSubLODmeshes[i].iVectexCount;
 			lh.pSubLODmeshes[i].iStartIndex = iStartIndex;
 			lh.pSubLODmeshes[i].iStartVertex = iStartVertex;
 
@@ -239,8 +244,8 @@ void SGCore_StaticModelLoad(const char * file, ISXDataStaticModel** data)
 			iStartIndex += lh.pSubLODmeshes[i].iIndexCount;
 			iStartVertex += lh.pSubLODmeshes[i].iVectexCount;
 
-			(*data)->ArrTextures[i] = new char[tex[lh.pSubLODmeshes[i].iMaterialID].length() + 1];
-			memcpy((*data)->ArrTextures[i], tex[lh.pSubLODmeshes[i].iMaterialID].c_str(), (tex[lh.pSubLODmeshes[i].iMaterialID].length() + 1) * sizeof(char));
+			(*data)->m_ppTextures[i] = new char[tex[lh.pSubLODmeshes[i].iMaterialID].length() + 1];
+			memcpy((*data)->m_ppTextures[i], tex[lh.pSubLODmeshes[i].iMaterialID].c_str(), (tex[lh.pSubLODmeshes[i].iMaterialID].length() + 1) * sizeof(char));
 		}
 
 		UINT * pIndices = new UINT[iStartIndex];
@@ -252,26 +257,26 @@ void SGCore_StaticModelLoad(const char * file, ISXDataStaticModel** data)
 			memcpy(pVertices + lh.pSubLODmeshes[i].iStartVertex, lh.pSubLODmeshes[i].pVertices, sizeof(vertex_static)* lh.pSubLODmeshes[i].iVectexCount);
 		}
 
-		(*data)->AllVertexCount = iStartVertex;
-		g_pDXDevice->CreateVertexBuffer(sizeof(vertex_static)* iStartVertex, NULL, NULL, D3DPOOL_MANAGED, &(*data)->VertexBuffer, 0);
+		(*data)->m_uiAllVertexCount = iStartVertex;
+		g_pDXDevice->CreateVertexBuffer(sizeof(vertex_static)* iStartVertex, NULL, NULL, D3DPOOL_MANAGED, &(*data)->m_pVertexBuffer, 0);
 		//(*data)->ArrVertBuf = new vertex_static[iStartVertex];
 		vertex_static * pData;
-		if (!FAILED((*data)->VertexBuffer->Lock(0, sizeof(vertex_static)* iStartVertex, (void**)&pData, 0)))
+		if (!FAILED((*data)->m_pVertexBuffer->Lock(0, sizeof(vertex_static)* iStartVertex, (void**)&pData, 0)))
 		{
 			memcpy(pData, pVertices, sizeof(vertex_static)* iStartVertex);
 			//memcpy((*data)->ArrVertBuf, pVertices, sizeof(vertex_static)* iStartVertex);
 
-			(*data)->VertexBuffer->Unlock();
+			(*data)->m_pVertexBuffer->Unlock();
 		}
 
-		(*data)->AllIndexCount = iStartIndex;
-		g_pDXDevice->CreateIndexBuffer(sizeof(UINT)* iStartIndex, NULL, D3DFMT_INDEX32, D3DPOOL_MANAGED, &(*data)->IndexBuffer, 0);
+		(*data)->m_uiAllIndexCount = iStartIndex;
+		g_pDXDevice->CreateIndexBuffer(sizeof(UINT)* iStartIndex, NULL, D3DFMT_INDEX32, D3DPOOL_MANAGED, &(*data)->m_pIndexBuffer, 0);
 		//(*data)->ArrIndBuf = new UINT[iStartIndex];
-		if (!FAILED((*data)->IndexBuffer->Lock(0, sizeof(UINT)* iStartIndex, (void**)&pData, 0)))
+		if (!FAILED((*data)->m_pIndexBuffer->Lock(0, sizeof(UINT)* iStartIndex, (void**)&pData, 0)))
 		{
 			memcpy(pData, pIndices, sizeof(UINT)* iStartIndex);
 			//memcpy((*data)->ArrIndBuf, pIndices, sizeof(UINT)* iStartIndex);
-			(*data)->IndexBuffer->Unlock();
+			(*data)->m_pIndexBuffer->Unlock();
 		}
 
 
@@ -295,17 +300,17 @@ void SGCore_StaticModelLoad(const char * file, ISXDataStaticModel** data)
 	//���������� ��������
 	//{{
 	DataStaticModel* tmpmodel = new DataStaticModel();
-	tmpmodel->SubsetCount = 0;
-	tmpmodel->ArrTextures = new char*[(*data)->SubsetCount];
-	memset(tmpmodel->ArrTextures, 0, (*data)->SubsetCount * sizeof(char));
+	tmpmodel->m_uiSubsetCount = 0;
+	tmpmodel->m_ppTextures = new char*[(*data)->m_uiSubsetCount];
+	memset(tmpmodel->m_ppTextures, 0, (*data)->m_uiSubsetCount * sizeof(char));
 
-	vertex_static* ArrVertBuf = new vertex_static[(*data)->AllVertexCount];
-	UINT* ArrIndBuf = new UINT[(*data)->AllIndexCount];
+	vertex_static* ArrVertBuf = new vertex_static[(*data)->m_uiAllVertexCount];
+	UINT* ArrIndBuf = new UINT[(*data)->m_uiAllIndexCount];
 
-	tmpmodel->StartIndex = new UINT[(*data)->SubsetCount];
-	tmpmodel->StartVertex = new UINT[(*data)->SubsetCount];
-	tmpmodel->IndexCount = new UINT[(*data)->SubsetCount];
-	tmpmodel->VertexCount = new UINT[(*data)->SubsetCount];
+	tmpmodel->m_pStartIndex = new UINT[(*data)->m_uiSubsetCount];
+	tmpmodel->m_pStartVertex = new UINT[(*data)->m_uiSubsetCount];
+	tmpmodel->m_pIndexCount = new UINT[(*data)->m_uiSubsetCount];
+	tmpmodel->m_pVertexCount = new UINT[(*data)->m_uiSubsetCount];
 
 	long startindex = 0;
 	long startvertex = 0;
@@ -316,117 +321,117 @@ void SGCore_StaticModelLoad(const char * file, ISXDataStaticModel** data)
 	vertex_static* pVert;
 	UINT* pInd;
 
-	(*data)->VertexBuffer->Lock(0, 0, (void**)&pVert, 0);
+	(*data)->m_pVertexBuffer->Lock(0, 0, (void**)&pVert, 0);
 
-	(*data)->IndexBuffer->Lock(0, 0, (void**)&pInd, 0);
+	(*data)->m_pIndexBuffer->Lock(0, 0, (void**)&pInd, 0);
 
-	for (long i = 0; i < (*data)->SubsetCount; ++i)
+	for (long i = 0; i < (*data)->m_uiSubsetCount; ++i)
 	{
-		if ((*data)->ArrTextures[i][0] == 0)
+		if ((*data)->m_ppTextures[i][0] == 0)
 			continue;
 
-		tmpmodel->ArrTextures[tmpmodel->SubsetCount] = new char[strlen((*data)->ArrTextures[i]) + 1];
-		strcpy(tmpmodel->ArrTextures[tmpmodel->SubsetCount], (*data)->ArrTextures[i]);
+		tmpmodel->m_ppTextures[tmpmodel->m_uiSubsetCount] = new char[strlen((*data)->m_ppTextures[i]) + 1];
+		strcpy(tmpmodel->m_ppTextures[tmpmodel->m_uiSubsetCount], (*data)->m_ppTextures[i]);
 
 		startvertex = countvertex;
 		startindex = countindex;
 
-		tmpmodel->StartIndex[tmpmodel->SubsetCount] = startindex;
-		tmpmodel->StartVertex[tmpmodel->SubsetCount] = startvertex;
+		tmpmodel->m_pStartIndex[tmpmodel->m_uiSubsetCount] = startindex;
+		tmpmodel->m_pStartVertex[tmpmodel->m_uiSubsetCount] = startvertex;
 
-		memcpy(ArrVertBuf + startvertex, pVert + (*data)->StartVertex[i], sizeof(vertex_static)* (*data)->VertexCount[i]);
-		memcpy(ArrIndBuf + startindex, pInd + (*data)->StartIndex[i], sizeof(UINT)* (*data)->IndexCount[i]);
+		memcpy(ArrVertBuf + startvertex, pVert + (*data)->m_pStartVertex[i], sizeof(vertex_static)* (*data)->m_pVertexCount[i]);
+		memcpy(ArrIndBuf + startindex, pInd + (*data)->m_pStartIndex[i], sizeof(UINT)* (*data)->m_pIndexCount[i]);
 
-		for (long j = 0; j < (*data)->IndexCount[i]; ++j)
+		for (long j = 0; j < (*data)->m_pIndexCount[i]; ++j)
 		{
-			ArrIndBuf[countindex + j] = countvertex + (pInd[(*data)->StartIndex[i] + j] - (*data)->StartVertex[i]);
+			ArrIndBuf[countindex + j] = countvertex + (pInd[(*data)->m_pStartIndex[i] + j] - (*data)->m_pStartVertex[i]);
 		}
 
-		countvertex += (*data)->VertexCount[i];
-		countindex += (*data)->IndexCount[i];
+		countvertex += (*data)->m_pVertexCount[i];
+		countindex += (*data)->m_pIndexCount[i];
 
-		for (long k = i + 1; k < (*data)->SubsetCount; ++k)
+		for (long k = i + 1; k < (*data)->m_uiSubsetCount; ++k)
 		{
-			if (strcmp((*data)->ArrTextures[i], (*data)->ArrTextures[k]) == 0)
+			if (strcmp((*data)->m_ppTextures[i], (*data)->m_ppTextures[k]) == 0)
 			{
-				(*data)->ArrTextures[k][0] = 0;
-				memcpy(ArrVertBuf + countvertex, pVert + (*data)->StartVertex[k], sizeof(vertex_static)* (*data)->VertexCount[k]);
+				(*data)->m_ppTextures[k][0] = 0;
+				memcpy(ArrVertBuf + countvertex, pVert + (*data)->m_pStartVertex[k], sizeof(vertex_static)* (*data)->m_pVertexCount[k]);
 
-				memcpy(ArrIndBuf + countindex, pInd + (*data)->StartIndex[k], sizeof(UINT)* (*data)->IndexCount[k]);
+				memcpy(ArrIndBuf + countindex, pInd + (*data)->m_pStartIndex[k], sizeof(UINT)* (*data)->m_pIndexCount[k]);
 
-				for (long j = 0; j < (*data)->IndexCount[k]; ++j)
+				for (long j = 0; j < (*data)->m_pIndexCount[k]; ++j)
 				{
-					ArrIndBuf[countindex + j] = countvertex + (pInd[(*data)->StartIndex[k] + j] - (*data)->StartVertex[k]);
+					ArrIndBuf[countindex + j] = countvertex + (pInd[(*data)->m_pStartIndex[k] + j] - (*data)->m_pStartVertex[k]);
 				}
 
-				countvertex += (*data)->VertexCount[k];
-				countindex += (*data)->IndexCount[k];
+				countvertex += (*data)->m_pVertexCount[k];
+				countindex += (*data)->m_pIndexCount[k];
 			}
 		}
 
-		tmpmodel->VertexCount[tmpmodel->SubsetCount] = countvertex - startvertex;
-		tmpmodel->IndexCount[tmpmodel->SubsetCount] = countindex - startindex;
+		tmpmodel->m_pVertexCount[tmpmodel->m_uiSubsetCount] = countvertex - startvertex;
+		tmpmodel->m_pIndexCount[tmpmodel->m_uiSubsetCount] = countindex - startindex;
 
-		++tmpmodel->SubsetCount;
+		++tmpmodel->m_uiSubsetCount;
 	}
 
-	(*data)->VertexBuffer->Unlock();
-	(*data)->IndexBuffer->Unlock();
+	(*data)->m_pVertexBuffer->Unlock();
+	(*data)->m_pIndexBuffer->Unlock();
 
-	tmpmodel->AllIndexCount = countindex;
-	tmpmodel->AllVertexCount = countvertex;
+	tmpmodel->m_uiAllIndexCount = countindex;
+	tmpmodel->m_uiAllVertexCount = countvertex;
 
-	g_pDXDevice->CreateVertexBuffer(sizeof(vertex_static)* countvertex, NULL, NULL, D3DPOOL_MANAGED, &tmpmodel->VertexBuffer, 0);
+	g_pDXDevice->CreateVertexBuffer(sizeof(vertex_static)* countvertex, NULL, NULL, D3DPOOL_MANAGED, &tmpmodel->m_pVertexBuffer, 0);
 
 	vertex_static * pData;
-	if (!FAILED(tmpmodel->VertexBuffer->Lock(0, sizeof(vertex_static)* countvertex, (void**)&pData, 0)))
+	if (!FAILED(tmpmodel->m_pVertexBuffer->Lock(0, sizeof(vertex_static)* countvertex, (void**)&pData, 0)))
 	{
 		memcpy(pData, ArrVertBuf, sizeof(vertex_static)* countvertex);
 
 		float3_t tmppos = pData[0].Pos;
-		tmpmodel->BBMax = tmppos;
-		tmpmodel->BBMin = tmppos;
+		tmpmodel->m_vBBMax = tmppos;
+		tmpmodel->m_vBBMin = tmppos;
 		float3_t pos;
 
 		for (long i = 0; i<countvertex; i++)
 		{
 			pos = pData[i].Pos;
 
-			if (pos.x > tmpmodel->BBMax.x)
-				tmpmodel->BBMax.x = pos.x;
+			if (pos.x > tmpmodel->m_vBBMax.x)
+				tmpmodel->m_vBBMax.x = pos.x;
 
-			if (pos.y > tmpmodel->BBMax.y)
-				tmpmodel->BBMax.y = pos.y;
+			if (pos.y > tmpmodel->m_vBBMax.y)
+				tmpmodel->m_vBBMax.y = pos.y;
 
-			if (pos.z > tmpmodel->BBMax.z)
-				tmpmodel->BBMax.z = pos.z;
+			if (pos.z > tmpmodel->m_vBBMax.z)
+				tmpmodel->m_vBBMax.z = pos.z;
 
 
-			if (pos.x < tmpmodel->BBMin.x)
-				tmpmodel->BBMin.x = pos.x;
+			if (pos.x < tmpmodel->m_vBBMin.x)
+				tmpmodel->m_vBBMin.x = pos.x;
 
-			if (pos.y < tmpmodel->BBMin.y)
-				tmpmodel->BBMin.y = pos.y;
+			if (pos.y < tmpmodel->m_vBBMin.y)
+				tmpmodel->m_vBBMin.y = pos.y;
 
-			if (pos.z < tmpmodel->BBMin.z)
-				tmpmodel->BBMin.z = pos.z;
+			if (pos.z < tmpmodel->m_vBBMin.z)
+				tmpmodel->m_vBBMin.z = pos.z;
 		}
 
-		float3 Center = (tmpmodel->BBMin + tmpmodel->BBMax) * 0.5f;
-		tmpmodel->BSphere.x = Center.x;
-		tmpmodel->BSphere.y = Center.y;
-		tmpmodel->BSphere.z = Center.z;
-		tmpmodel->BSphere.w = SMVector3Length(Center - tmpmodel->BBMax);
+		float3 Center = (tmpmodel->m_vBBMin + tmpmodel->m_vBBMax) * 0.5f;
+		tmpmodel->m_vBSphere.x = Center.x;
+		tmpmodel->m_vBSphere.y = Center.y;
+		tmpmodel->m_vBSphere.z = Center.z;
+		tmpmodel->m_vBSphere.w = SMVector3Length(Center - tmpmodel->m_vBBMax);
 
-		tmpmodel->VertexBuffer->Unlock();
+		tmpmodel->m_pVertexBuffer->Unlock();
 	}
 
-	g_pDXDevice->CreateIndexBuffer(sizeof(UINT)* countindex, NULL, D3DFMT_INDEX32, D3DPOOL_MANAGED, &tmpmodel->IndexBuffer, 0);
+	g_pDXDevice->CreateIndexBuffer(sizeof(UINT)* countindex, NULL, D3DFMT_INDEX32, D3DPOOL_MANAGED, &tmpmodel->m_pIndexBuffer, 0);
 
-	if (!FAILED(tmpmodel->IndexBuffer->Lock(0, sizeof(UINT)* countindex, (void**)&pData, 0)))
+	if (!FAILED(tmpmodel->m_pIndexBuffer->Lock(0, sizeof(UINT)* countindex, (void**)&pData, 0)))
 	{
 		memcpy(pData, ArrIndBuf, sizeof(UINT)* countindex);
-		tmpmodel->IndexBuffer->Unlock();
+		tmpmodel->m_pIndexBuffer->Unlock();
 	}
 
 	mem_release_del((*data));
@@ -448,7 +453,7 @@ void SGCore_StaticModelSave(const char * file, DataStaticModel** data)
 
 	if (!pF)
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_ERROR, "unable to open model file '%s'\n", file);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "unable to open model file '%s'\n", file);
 		return;
 	}
 
@@ -456,7 +461,7 @@ void SGCore_StaticModelSave(const char * file, DataStaticModel** data)
 	hdr.iBoneCount = 1;
 	hdr.iFlags = MODEL_FLAG_COMPILED | MODEL_FLAG_STATIC;
 
-	hdr.iMaterialCount = (*data)->SubsetCount;
+	hdr.iMaterialCount = (*data)->m_uiSubsetCount;
 	hdr.iSkinCount = 1;
 	hdr.iVersion = SX_MODEL_VERSION_OLD;
 
@@ -465,7 +470,7 @@ void SGCore_StaticModelSave(const char * file, DataStaticModel** data)
 	UINT iMaterialsSize = 0;
 	for (UINT i = 0; i < hdr.iMaterialCount; i++)
 	{
-		iMaterialsSize += strlen((*data)->ArrTextures[i]) + 1;
+		iMaterialsSize += strlen((*data)->m_ppTextures[i]) + 1;
 	}
 
 	hdr.iBonesOffset = 0;
@@ -476,8 +481,8 @@ void SGCore_StaticModelSave(const char * file, DataStaticModel** data)
 	iLodSize += sizeof(int);
 	for (int i = 0; i < hdr.iMaterialCount; i++)
 	{
-		iLodSize += sizeof(vertex_animated_ex)* (*data)->VertexCount[i];
-		iLodSize += sizeof(UINT)* (*data)->IndexCount[i];
+		iLodSize += sizeof(vertex_animated_ex)* (*data)->m_pVertexCount[i];
+		iLodSize += sizeof(UINT)* (*data)->m_pIndexCount[i];
 		iLodSize += sizeof(int)* 3;
 	}
 
@@ -487,29 +492,29 @@ void SGCore_StaticModelSave(const char * file, DataStaticModel** data)
 	fwrite(&hdr, sizeof(hdr), 1, pF);
 	for (UINT i = 0; i < hdr.iMaterialCount; i++)
 	{
-		fwrite((*data)->ArrTextures[i], 1, strlen((*data)->ArrTextures[i]) + 1, pF);
+		fwrite((*data)->m_ppTextures[i], 1, strlen((*data)->m_ppTextures[i]) + 1, pF);
 	}
 	int smc = hdr.iMaterialCount;
 	fwrite(&smc, sizeof(int), 1, pF);
 	vertex_animated_ex * pVB;
 	UINT * pIB;
-	(*data)->VertexBuffer->Lock(0, 0, (void**)&pVB, 0);
-	(*data)->IndexBuffer->Lock(0, 0, (void**)&pIB, 0);
+	(*data)->m_pVertexBuffer->Lock(0, 0, (void**)&pVB, 0);
+	(*data)->m_pIndexBuffer->Lock(0, 0, (void**)&pIB, 0);
 	UINT iVC = 0;
 	UINT iIC = 0;
 	for (int i = 0; i < hdr.iMaterialCount; i++)
 	{
 		fwrite(&i, sizeof(int), 1, pF);
-		fwrite(&(*data)->VertexCount[i], sizeof(int), 1, pF);
-		fwrite(&(*data)->IndexCount[i], sizeof(int), 1, pF);
+		fwrite(&(*data)->m_pVertexCount[i], sizeof(int), 1, pF);
+		fwrite(&(*data)->m_pIndexCount[i], sizeof(int), 1, pF);
 
-		fwrite(pVB + iVC, sizeof(vertex_animated_ex), (*data)->VertexCount[i], pF);
-		fwrite(pIB + iIC, sizeof(UINT), (*data)->IndexCount[i], pF);
-		iVC += (*data)->VertexCount[i];
-		iIC += (*data)->IndexCount[i];
+		fwrite(pVB + iVC, sizeof(vertex_animated_ex), (*data)->m_pVertexCount[i], pF);
+		fwrite(pIB + iIC, sizeof(UINT), (*data)->m_pIndexCount[i], pF);
+		iVC += (*data)->m_pVertexCount[i];
+		iIC += (*data)->m_pIndexCount[i];
 	}
-	(*data)->VertexBuffer->Unlock();
-	(*data)->IndexBuffer->Unlock();
+	(*data)->m_pVertexBuffer->Unlock();
+	(*data)->m_pIndexBuffer->Unlock();
 	fclose(pF);
 }
 
@@ -530,7 +535,7 @@ void SGCore_StaticModelSave(const char * file, DataStaticModel** data)
 		&Mesh))
 		)
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_ERROR, "failed loaded X mesh '%s'\n", pathx);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "failed loaded X mesh '%s'\n", pathx);
 		return;
 	}
 
diff --git a/source/gcore/loader_static.h b/source/gcore/loader_static.h
index a38f155b3..3bbbeecdf 100644
--- a/source/gcore/loader_static.h
+++ b/source/gcore/loader_static.h
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #ifndef __LOADER_STATIC_H
 #define __LOADER_STATIC_H
 
@@ -9,7 +14,6 @@
 #include <common/Array.h>
 #include "sxgcore.h"
 
-extern report_func g_fnReportf;
 extern IDirect3DDevice9 *g_pDXDevice;
 extern D3DPRESENT_PARAMETERS D3DAPP;
 extern IDirect3DVertexDeclaration9 *g_pStaticVertexDecl;
@@ -18,101 +22,96 @@ struct DataStaticModel : public ISXDataStaticModel
 {
 	DataStaticModel()
 	{
-		VertexBuffer = 0;
-		IndexBuffer = 0;
+		m_pVertexBuffer = 0;
+		m_pIndexBuffer = 0;
 		//ArrVertBuf = 0;
 		//ArrIndBuf = 0;
 
-		SubsetCount = 0;
-		ArrTextures = 0;
-		StartIndex = 0;
-		IndexCount = 0;
-		StartVertex = 0;
-		VertexCount = 0;
-		AllIndexCount = 0;
-		AllVertexCount = 0;
+		m_uiSubsetCount = 0;
+		m_ppTextures = 0;
+		m_pStartIndex = 0;
+		m_pIndexCount = 0;
+		m_pStartVertex = 0;
+		m_pVertexCount = 0;
+		m_uiAllIndexCount = 0;
+		m_uiAllVertexCount = 0;
 	}
 
 	void Release(){ mem_del(this); }
 
-	ISXDataStaticModel* GetCopy()
+	ISXDataStaticModel* getCopy()
 	{
 		ISXDataStaticModel* nm = new DataStaticModel();
-		nm->ArrTextures = new char*[SubsetCount];
-		for (DWORD i = 0; i < SubsetCount; i++)
+		nm->m_ppTextures = new char*[m_uiSubsetCount];
+		for (DWORD i = 0; i < m_uiSubsetCount; i++)
 		{
-			nm->ArrTextures[i] = new char[strlen(ArrTextures[i]) + 1];
-			sprintf(nm->ArrTextures[i], "%s", ArrTextures[i]);
+			nm->m_ppTextures[i] = new char[strlen(m_ppTextures[i]) + 1];
+			sprintf(nm->m_ppTextures[i], "%s", m_ppTextures[i]);
 		}
-		nm->SubsetCount = SubsetCount;
-		nm->StartIndex = new UINT[SubsetCount];
-		memcpy(nm->StartIndex, StartIndex, sizeof(UINT)*SubsetCount);
-		nm->IndexCount = new UINT[SubsetCount];
-		memcpy(nm->IndexCount, IndexCount, sizeof(UINT)*SubsetCount);
-		nm->StartVertex = new UINT[SubsetCount];
-		memcpy(nm->StartVertex, StartVertex, sizeof(UINT)*SubsetCount);
-		nm->VertexCount = new UINT[SubsetCount];
-		memcpy(nm->VertexCount, VertexCount, sizeof(UINT)*SubsetCount);
+		nm->m_uiSubsetCount = m_uiSubsetCount;
+		nm->m_pStartIndex = new UINT[m_uiSubsetCount];
+		memcpy(nm->m_pStartIndex, m_pStartIndex, sizeof(UINT)*m_uiSubsetCount);
+		nm->m_pIndexCount = new UINT[m_uiSubsetCount];
+		memcpy(nm->m_pIndexCount, m_pIndexCount, sizeof(UINT)*m_uiSubsetCount);
+		nm->m_pStartVertex = new UINT[m_uiSubsetCount];
+		memcpy(nm->m_pStartVertex, m_pStartVertex, sizeof(UINT)*m_uiSubsetCount);
+		nm->m_pVertexCount = new UINT[m_uiSubsetCount];
+		memcpy(nm->m_pVertexCount, m_pVertexCount, sizeof(UINT)*m_uiSubsetCount);
 
 		DWORD tmpvert = 0;
 		DWORD tmpind = 0;
-		for (DWORD i = 0; i < SubsetCount; i++)
+		for (DWORD i = 0; i < m_uiSubsetCount; i++)
 		{
-			tmpvert += nm->VertexCount[i];
-			tmpind += nm->IndexCount[i];
+			tmpvert += nm->m_pVertexCount[i];
+			tmpind += nm->m_pIndexCount[i];
 		}
 
-		g_pDXDevice->CreateVertexBuffer(sizeof(vertex_static)* tmpvert, NULL, NULL, D3DPOOL_MANAGED, &nm->VertexBuffer, 0);
+		g_pDXDevice->CreateVertexBuffer(sizeof(vertex_static)* tmpvert, NULL, NULL, D3DPOOL_MANAGED, &nm->m_pVertexBuffer, 0);
 		//nm->ArrVertBuf = new vertex_static[tmpvert];
 		vertex_static * dstData, *srcData;
-		nm->VertexBuffer->Lock(0, 0, (void**)&dstData, 0);
-		VertexBuffer->Lock(0, 0, (void**)&srcData, 0);
+		nm->m_pVertexBuffer->Lock(0, 0, (void**)&dstData, 0);
+		m_pVertexBuffer->Lock(0, 0, (void**)&srcData, 0);
 
 		memcpy(dstData, srcData, sizeof(vertex_static)* tmpvert);
 		//memcpy(nm->ArrVertBuf, srcData, sizeof(vertex_static)* tmpvert);
 
-		nm->VertexBuffer->Unlock();
-		VertexBuffer->Unlock();
+		nm->m_pVertexBuffer->Unlock();
+		m_pVertexBuffer->Unlock();
 
 
-		g_pDXDevice->CreateIndexBuffer(sizeof(UINT)* tmpind, NULL, D3DFMT_INDEX32, D3DPOOL_MANAGED, &nm->IndexBuffer, 0);
+		g_pDXDevice->CreateIndexBuffer(sizeof(UINT)* tmpind, NULL, D3DFMT_INDEX32, D3DPOOL_MANAGED, &nm->m_pIndexBuffer, 0);
 		//nm->ArrIndBuf = new UINT[tmpind];
-		nm->IndexBuffer->Lock(0, 0, (void**)&dstData, 0);
-		IndexBuffer->Lock(0, 0, (void**)&srcData, 0);
+		nm->m_pIndexBuffer->Lock(0, 0, (void**)&dstData, 0);
+		m_pIndexBuffer->Lock(0, 0, (void**)&srcData, 0);
 
 		memcpy(dstData, srcData, sizeof(UINT)* tmpind);
 		//memcpy(nm->ArrIndBuf, srcData, sizeof(UINT)* tmpind);
 
-		nm->IndexBuffer->Unlock();
-		IndexBuffer->Unlock();
+		nm->m_pIndexBuffer->Unlock();
+		m_pIndexBuffer->Unlock();
 
 		return nm;
 	}
 
 	DataStaticModel::~DataStaticModel()
 	{
-		mem_release_del(VertexBuffer);
-		mem_release_del(IndexBuffer);
+		mem_release_del(m_pVertexBuffer);
+		mem_release_del(m_pIndexBuffer);
 
-		for (DWORD i = 0; i < SubsetCount; ++i)
+		for (DWORD i = 0; i < m_uiSubsetCount; ++i)
 		{
-			mem_delete_a(ArrTextures[i]);
+			mem_delete_a(m_ppTextures[i]);
 		}
 
 		//mem_delete_a(ArrVertBuf);
 		//mem_delete_a(ArrIndBuf);
 
-		mem_delete_a(ArrTextures);
-		mem_delete_a(StartIndex);
-		mem_delete_a(IndexCount);
-		mem_delete_a(StartVertex);
-		mem_delete_a(VertexCount);
+		mem_delete_a(m_ppTextures);
+		mem_delete_a(m_pStartIndex);
+		mem_delete_a(m_pIndexCount);
+		mem_delete_a(m_pStartVertex);
+		mem_delete_a(m_pVertexCount);
 	}
 };
 
-
-///////////
-
-
-
 #endif
\ No newline at end of file
diff --git a/source/gcore/shader.cpp b/source/gcore/shader.cpp
index 945f0c85a..e81b4e176 100644
--- a/source/gcore/shader.cpp
+++ b/source/gcore/shader.cpp
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "shader.h"
 
 CShaderFileCache* CreateShaderFileCacheFormShader(CShader *pShader)
@@ -219,7 +224,7 @@ void LoadVertexShader(const char *szPath, CShaderVS *pShader, D3DXMACRO *aMacro)
 			);
 		if (FAILED(hr))
 		{
-			g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s: %s - error creating vertex shader [%s]\n", SX_LIB_NAME, GEN_MSG_LOCATION, szPath);
+			LibReport(REPORT_MSG_LEVEL_ERROR, "%s - error creating vertex shader [%s]\n", GEN_MSG_LOCATION, szPath);
 			return;
 		}
 
@@ -248,14 +253,14 @@ void LoadVertexShader(const char *szPath, CShaderVS *pShader, D3DXMACRO *aMacro)
 
 		if (pBufError && pBufShader == 0)
 		{
-			g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s: %s - failed to load vertex shader [%s], msg: %s\n", SX_LIB_NAME, GEN_MSG_LOCATION, szPath, (char*)pBufError->GetBufferPointer());
+			LibReport(REPORT_MSG_LEVEL_ERROR, "%s - failed to load vertex shader [%s], msg: %s\n", GEN_MSG_LOCATION, szPath, (char*)pBufError->GetBufferPointer());
 			return;
 		}
 
 		//!!!����������������
 		if (FAILED(hr))
 		{
-			g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s: %s - download function vertex shader fails, path [%s]\n", SX_LIB_NAME, GEN_MSG_LOCATION, szPath);
+			LibReport(REPORT_MSG_LEVEL_ERROR, "%s - download function vertex shader fails, path [%s]\n", GEN_MSG_LOCATION, szPath);
 			return;
 		}
 
@@ -266,7 +271,7 @@ void LoadVertexShader(const char *szPath, CShaderVS *pShader, D3DXMACRO *aMacro)
 
 		if (FAILED(hr))
 		{
-			g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s: %s - error creating vertex shader [%s]\n", SX_LIB_NAME, GEN_MSG_LOCATION, szPath);
+			LibReport(REPORT_MSG_LEVEL_ERROR, "%s - error creating vertex shader [%s]\n", GEN_MSG_LOCATION, szPath);
 			return;
 		}
 
@@ -275,7 +280,7 @@ void LoadVertexShader(const char *szPath, CShaderVS *pShader, D3DXMACRO *aMacro)
 
 		if (desc.Constants > SXGC_SHADER_VAR_MAX_COUNT)
 		{
-			g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s: %s - error, count variable in vertex shader [%s] more standart [%d]\n", SX_LIB_NAME, GEN_MSG_LOCATION, szPath, SXGC_SHADER_VAR_MAX_COUNT);
+			LibReport(REPORT_MSG_LEVEL_ERROR, "%s - error, count variable in vertex shader [%s] more standart [%d]\n", GEN_MSG_LOCATION, szPath, SXGC_SHADER_VAR_MAX_COUNT);
 			return;
 		}
 
@@ -336,7 +341,7 @@ void LoadPixelShader(const char *szPath, CShaderPS *pShader,D3DXMACRO *aMacro)
 			);
 		if (FAILED(hr))
 		{
-			g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s: %s - error creating pixel shader [%s]", SX_LIB_NAME, GEN_MSG_LOCATION, szPath);
+			LibReport(REPORT_MSG_LEVEL_ERROR, "%s - error creating pixel shader [%s]", GEN_MSG_LOCATION, szPath);
 			return;
 		}
 
@@ -365,14 +370,14 @@ void LoadPixelShader(const char *szPath, CShaderPS *pShader,D3DXMACRO *aMacro)
 
 		if (pBufError && pBufShader == 0)
 		{
-			g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s: %s - failed to load pixel shader [%s], msg: %s\n", SX_LIB_NAME, GEN_MSG_LOCATION, szPath, (char*)pBufError->GetBufferPointer());
+			LibReport(REPORT_MSG_LEVEL_ERROR, "%s - failed to load pixel shader [%s], msg: %s\n", GEN_MSG_LOCATION, szPath, (char*)pBufError->GetBufferPointer());
 			return;
 		}
 
 		//!!!����������������
 		if (FAILED(hr))
 		{
-			g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s: %s - download function pixel shader fails, path [%s]\n", SX_LIB_NAME, GEN_MSG_LOCATION, szPath);
+			LibReport(REPORT_MSG_LEVEL_ERROR, "%s - download function pixel shader fails, path [%s]\n", GEN_MSG_LOCATION, szPath);
 			return;
 		}
 
@@ -383,7 +388,7 @@ void LoadPixelShader(const char *szPath, CShaderPS *pShader,D3DXMACRO *aMacro)
 
 		if (FAILED(hr))
 		{
-			g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s: %s - error creating pixel shader [%s]\n", SX_LIB_NAME, GEN_MSG_LOCATION, szPath);
+			LibReport(REPORT_MSG_LEVEL_ERROR, "%s - error creating pixel shader [%s]\n", GEN_MSG_LOCATION, szPath);
 			return;
 		}
 
@@ -392,7 +397,7 @@ void LoadPixelShader(const char *szPath, CShaderPS *pShader,D3DXMACRO *aMacro)
 
 		if (desc.Constants > SXGC_SHADER_VAR_MAX_COUNT)
 		{
-			g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s: %s - error, count variable in pixel shader [%s] more standart [%d]\n", SX_LIB_NAME, GEN_MSG_LOCATION, szPath, SXGC_SHADER_VAR_MAX_COUNT);
+			LibReport(REPORT_MSG_LEVEL_ERROR, "%s - error, count variable in pixel shader [%s] more standart [%d]\n", GEN_MSG_LOCATION, szPath, SXGC_SHADER_VAR_MAX_COUNT);
 			return;
 		}
 
@@ -444,25 +449,25 @@ CShaderManager::~CShaderManager()
 
 void CShaderManager::reloadAll()
 {
-	g_fnReportf(REPORT_MSG_LEVEL_NOTICE, "%s: reload shaders ...\n", SX_LIB_NAME);
+	LibReport(REPORT_MSG_LEVEL_NOTICE, "reload shaders ...\n");
 
 	for (int i = 0; i<m_aVS.size(); i++)
 	{
 		CShaderVS *pShader = m_aVS[i];
 		LoadVertexShader(pShader->m_szPath, pShader, pShader->m_aMacros);
-		g_fnReportf(REPORT_MSG_LEVEL_NOTICE, "  VS id [%d], file [%s], name [%s], \n", i, pShader->m_szPath, pShader->m_szName);
+		LibReport(REPORT_MSG_LEVEL_NOTICE, "  VS id [%d], file [%s], name [%s], \n", i, pShader->m_szPath, pShader->m_szName);
 	}
 
-	g_fnReportf(REPORT_MSG_LEVEL_NOTICE, "  -------\n");
+	LibReport(REPORT_MSG_LEVEL_NOTICE, "  -------\n");
 
 	for (int i = 0; i<m_aPS.size(); i++)
 	{
 		CShaderPS *pShader = m_aPS[i];
 		LoadPixelShader(m_aPS[i]->m_szPath, m_aPS[i], m_aPS[i]->m_aMacros);
-		g_fnReportf(REPORT_MSG_LEVEL_NOTICE, "  PS id [%d], file[%s], name[%s], \n", i, pShader->m_szPath, pShader->m_szName);
+		LibReport(REPORT_MSG_LEVEL_NOTICE, "  PS id [%d], file[%s], name[%s], \n", i, pShader->m_szPath, pShader->m_szName);
 	}
 
-	g_fnReportf(REPORT_MSG_LEVEL_NOTICE, "%s: all reloaded shaders\n", SX_LIB_NAME);
+	LibReport(REPORT_MSG_LEVEL_NOTICE, "all reloaded shaders\n");
 }
 
 ID CShaderManager::existsPath(SHADER_TYPE type, const char *szPath)
@@ -490,7 +495,7 @@ ID CShaderManager::existsName(SHADER_TYPE type_shader, const char *szName)
 {
 	if (!isValidateTypeName(type_shader, szName))
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s: %s - name of shader [%s] is invalid", SX_LIB_NAME, GEN_MSG_LOCATION, szName);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - name of shader [%s] is invalid", GEN_MSG_LOCATION, szName);
 		return -1;
 	}
 
@@ -542,7 +547,7 @@ ID CShaderManager::preLoad(SHADER_TYPE type, const char *szPath, const char *szN
 {
 	if (!isValidateTypeName(type, szName))
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s: %s - name of shader [%s] is invalid", SX_LIB_NAME, GEN_MSG_LOCATION, szName);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - name of shader [%s] is invalid", GEN_MSG_LOCATION, szName);
 		return -1;
 	}
 
@@ -611,37 +616,37 @@ void CShaderManager::allLoad()
 	if (m_aVS.size() == m_iLastAllLoadVS || m_aPS.size() == m_iLastAllLoadPS)
 		return;
 
-	g_fnReportf(REPORT_MSG_LEVEL_NOTICE, "%s: load shaders ...\n", SX_LIB_NAME);
+	LibReport(REPORT_MSG_LEVEL_NOTICE, "load shaders ...\n");
 	
 	for (int i = 0, il = m_aVS.size(); i < il; ++i)
 	{
 		CShaderVS *pShader = m_aVS[i];
 		LoadVertexShader(pShader->m_szPath, pShader, pShader->m_aMacros);
 
-		g_fnReportf(REPORT_MSG_LEVEL_NOTICE, "  VS id [%d], file [%s], name [%s], \n", i, pShader->m_szPath, pShader->m_szName);
+		LibReport(REPORT_MSG_LEVEL_NOTICE, "  VS id [%d], file [%s], name [%s], \n", i, pShader->m_szPath, pShader->m_szName);
 	}
 
-	g_fnReportf(REPORT_MSG_LEVEL_NOTICE, "  -------\n");
+	LibReport(REPORT_MSG_LEVEL_NOTICE, "  -------\n");
 
 	for (int i = 0, il = m_aPS.size(); i < il; ++i)
 	{
 		CShaderPS *pShader = m_aPS[i];
 		LoadPixelShader(pShader->m_szPath, pShader, pShader->m_aMacros);
 
-		g_fnReportf(REPORT_MSG_LEVEL_NOTICE, "  PS id [%d], file[%s], name[%s], \n", i, pShader->m_szPath, pShader->m_szName);
+		LibReport(REPORT_MSG_LEVEL_NOTICE, "  PS id [%d], file[%s], name[%s], \n", i, pShader->m_szPath, pShader->m_szName);
 	}
 
 	m_iLastAllLoadVS = m_aVS.size();
 	m_iLastAllLoadPS = m_aPS.size();
 
-	g_fnReportf(REPORT_MSG_LEVEL_NOTICE, "%s: all loaded shaders\n", SX_LIB_NAME);
+	LibReport(REPORT_MSG_LEVEL_NOTICE, "all loaded shaders\n");
 }
 
 void CShaderManager::update(SHADER_TYPE type_shader, const char *szName)
 {
 	if (!isValidateTypeName(type_shader, szName))
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s: %s - name of shader [%s] is invalid", SX_LIB_NAME, GEN_MSG_LOCATION, szName);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - name of shader [%s] is invalid", GEN_MSG_LOCATION, szName);
 		return;
 	}
 
@@ -674,9 +679,9 @@ void CShaderManager::update(SHADER_TYPE type_shader, const char *szName)
 	}
 
 	if (!isUpdate)
-		g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s: %s - shader [%s] is not detected", SX_LIB_NAME, GEN_MSG_LOCATION, szName);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - shader [%s] is not detected", GEN_MSG_LOCATION, szName);
 	/*else
-		g_fnReportf(REPORT_MSG_LEVEL_NOTICE, "%s: shader [%s] is update", SX_LIB_NAME, name);*/
+		LibReport(REPORT_MSG_LEVEL_NOTICE, "shader [%s] is update", name);*/
 }
 
 void CShaderManager::update(SHADER_TYPE type_shader, ID id)
@@ -704,16 +709,16 @@ void CShaderManager::update(SHADER_TYPE type_shader, ID id)
 	}
 
 	if (!isUpdate)
-		g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s: %s - shader_id [%s] is not detected", SX_LIB_NAME, GEN_MSG_LOCATION, id);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - shader_id [%s] is not detected", GEN_MSG_LOCATION, id);
 	/*else
-		g_fnReportf(REPORT_MSG_LEVEL_NOTICE, "%s: shader [%s] is update", SX_LIB_NAME, m_aPS[id]->m_szName);*/
+		LibReport(REPORT_MSG_LEVEL_NOTICE, "shader [%s] is update", m_aPS[id]->m_szName);*/
 }
 
 ID CShaderManager::getID(SHADER_TYPE type_shader, const char *szName)
 {
 	if (!isValidateTypeName(type_shader, szName))
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s: %s - name of shader [%s] is invalid", SX_LIB_NAME, GEN_MSG_LOCATION, szName);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - name of shader [%s] is invalid", GEN_MSG_LOCATION, szName);
 		return -1;
 	}
 
@@ -744,7 +749,7 @@ void CShaderManager::bind(SHADER_TYPE type_shader, const char *szName)
 {
 	if (!isValidateTypeName(type_shader, szName))
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s: %s - name of shader [%s] is invalid", SX_LIB_NAME, GEN_MSG_LOCATION, szName);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - name of shader [%s] is invalid", GEN_MSG_LOCATION, szName);
 		return;
 	}
 
@@ -775,7 +780,7 @@ void CShaderManager::bind(SHADER_TYPE type_shader, const char *szName)
 	}
 
 	if (!isbind)
-		g_fnReportf(REPORT_MSG_LEVEL_WARNING, "%s: shader not bind, type [%d], name [%s]\n", SX_LIB_NAME, type_shader, szName);
+		LibReport(REPORT_MSG_LEVEL_WARNING, "shader not bind, type [%d], name [%s]\n", type_shader, szName);
 }
 
 void CShaderManager::bind(SHADER_TYPE type_shader, ID idShader)
@@ -799,7 +804,7 @@ void CShaderManager::bind(SHADER_TYPE type_shader, ID idShader)
 	}
 
 	if (!isBind)
-		g_fnReportf(REPORT_MSG_LEVEL_WARNING, "%s: shader not bind, type [%d], id [%d]\n", SX_LIB_NAME, type_shader, idShader);
+		LibReport(REPORT_MSG_LEVEL_WARNING, "shader not bind, type [%d], id [%d]\n", type_shader, idShader);
 }
 
 void CShaderManager::unbind()
@@ -813,7 +818,7 @@ void CShaderManager::setValueRegisterF(SHADER_TYPE type_shader, const char *szNa
 {
 	if (!isValidateTypeName(type_shader, szNameShader))
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s: %s - name of shader [%s] is invalid", SX_LIB_NAME, GEN_MSG_LOCATION, szNameShader);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - name of shader [%s] is invalid", GEN_MSG_LOCATION, szNameShader);
 		return;
 	}
 
@@ -844,9 +849,9 @@ void CShaderManager::setValueRegisterF(SHADER_TYPE type_shader, const char *szNa
 		else
 		{
 			if (num_shader == -1)
-				g_fnReportf(REPORT_MSG_LEVEL_WARNING, "%s: set vertex shader constant [%s] is failed, shader not found, type [%d], id [%d]\n", SX_LIB_NAME, szNameVar, type_shader, szNameShader);
+				LibReport(REPORT_MSG_LEVEL_WARNING, "set vertex shader constant [%s] is failed, shader not found, type [%d], id [%d]\n", szNameVar, type_shader, szNameShader);
 			else if (num_var == -1)
-				g_fnReportf(REPORT_MSG_LEVEL_WARNING, "%s: set vertex shader constant [%s] is failed, constant not found, shader info: type [%d], id [%d], name [%s]\n", SX_LIB_NAME, szNameVar, type_shader, szNameShader);
+				LibReport(REPORT_MSG_LEVEL_WARNING, "set vertex shader constant [%s] is failed, constant not found, shader info: type [%d], id [%d], name [%s]\n", szNameVar, type_shader, szNameShader);
 		}
 	}
 	else if (type_shader == SHADER_TYPE_PIXEL)
@@ -876,9 +881,9 @@ void CShaderManager::setValueRegisterF(SHADER_TYPE type_shader, const char *szNa
 		else
 		{
 			if (num_shader == -1)
-				g_fnReportf(REPORT_MSG_LEVEL_WARNING, "%s: set pixel shader constant [%s] is failed, shader not found, type [%d], id [%d]\n", SX_LIB_NAME, szNameVar, type_shader, szNameShader);
+				LibReport(REPORT_MSG_LEVEL_WARNING, "set pixel shader constant [%s] is failed, shader not found, type [%d], id [%d]\n", szNameVar, type_shader, szNameShader);
 			else if (num_var == -1)
-				g_fnReportf(REPORT_MSG_LEVEL_WARNING, "%s: set pixel shader constant [%s] is failed, constant not found, shader info: type [%d], id [%d], name [%s]\n", SX_LIB_NAME, szNameVar, type_shader, szNameShader);
+				LibReport(REPORT_MSG_LEVEL_WARNING, "set pixel shader constant [%s] is failed, constant not found, shader info: type [%d], id [%d], name [%s]\n", szNameVar, type_shader, szNameShader);
 		}
 	}
 }
@@ -903,7 +908,7 @@ void CShaderManager::setValueRegisterF(SHADER_TYPE type_shader, ID idShader, con
 			if (idShader != -1 && num_var != -1)
 				g_pDXDevice->SetVertexShaderConstantF(m_aVS[idShader]->m_aVarDesc[num_var].RegisterIndex, (float*)pData, (iCountFloat4 == 0 ? m_aVS[idShader]->m_aVarDesc[num_var].RegisterCount : iCountFloat4));
 			else if (num_var == -1)
-				g_fnReportf(REPORT_MSG_LEVEL_WARNING, "%s: set vertex shader constant [%s] is failed, constant not found, type [%d], id [%d]\n", SX_LIB_NAME, szNameVar, type_shader, idShader);
+				LibReport(REPORT_MSG_LEVEL_WARNING, "set vertex shader constant [%s] is failed, constant not found, type [%d], id [%d]\n", szNameVar, type_shader, idShader);
 		}
 		else if (type_shader == SHADER_TYPE_PIXEL)
 		{
@@ -921,18 +926,18 @@ void CShaderManager::setValueRegisterF(SHADER_TYPE type_shader, ID idShader, con
 			if (idShader != -1 && num_var != -1)
 				g_pDXDevice->SetPixelShaderConstantF(m_aPS[idShader]->m_aVarDesc[num_var].RegisterIndex, (float*)pData, (iCountFloat4 == 0 ? m_aPS[idShader]->m_aVarDesc[num_var].RegisterCount : iCountFloat4));
 			else if (num_var == -1)
-				g_fnReportf(REPORT_MSG_LEVEL_WARNING, "%s: set pixel shader constant [%s] is failed, constant not found, type [%d], name [%s]\n", SX_LIB_NAME, szNameVar, type_shader, m_aPS[idShader]->m_szPath);
+				LibReport(REPORT_MSG_LEVEL_WARNING, "set pixel shader constant [%s] is failed, constant not found, type [%d], name [%s]\n", szNameVar, type_shader, m_aPS[idShader]->m_szPath);
 		}
 	}
 	else
-		g_fnReportf(REPORT_MSG_LEVEL_WARNING, "%s: set shader constant [%s] is failed, shader not validate, type [%d], id [%d]\n", SX_LIB_NAME, szNameVar, type_shader, idShader);
+		LibReport(REPORT_MSG_LEVEL_WARNING, "set shader constant [%s] is failed, shader not validate, type [%d], id [%d]\n", szNameVar, type_shader, idShader);
 }
 
 void CShaderManager::setValueRegisterI(SHADER_TYPE type_shader, const char *szNameShader, const char *szNameVar, void *pData, int iCountInt4)
 {
 	if (!isValidateTypeName(type_shader, szNameShader))
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s: %s - name of shader [%s] is invalid", SX_LIB_NAME, GEN_MSG_LOCATION, szNameShader);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - name of shader [%s] is invalid", GEN_MSG_LOCATION, szNameShader);
 		return;
 	}
 
@@ -963,9 +968,9 @@ void CShaderManager::setValueRegisterI(SHADER_TYPE type_shader, const char *szNa
 		else
 		{
 			if (num_shader == -1)
-				g_fnReportf(REPORT_MSG_LEVEL_WARNING, "%s: set vertex shader constant [%s] is failed, shader not found, type [%d], id [%d]\n", SX_LIB_NAME, szNameVar, type_shader, szNameShader);
+				LibReport(REPORT_MSG_LEVEL_WARNING, "set vertex shader constant [%s] is failed, shader not found, type [%d], id [%d]\n", szNameVar, type_shader, szNameShader);
 			else if (num_var == -1)
-				g_fnReportf(REPORT_MSG_LEVEL_WARNING, "%s: set vertex shader constant [%s] is failed, constant not found, shader info: type [%d], id [%d], name [%s]\n", SX_LIB_NAME, szNameVar, type_shader, szNameShader);
+				LibReport(REPORT_MSG_LEVEL_WARNING, "set vertex shader constant [%s] is failed, constant not found, shader info: type [%d], id [%d], name [%s]\n", szNameVar, type_shader, szNameShader);
 		}
 	}
 	else if (type_shader == SHADER_TYPE_PIXEL)
@@ -995,9 +1000,9 @@ void CShaderManager::setValueRegisterI(SHADER_TYPE type_shader, const char *szNa
 		else
 		{
 			if (num_shader == -1)
-				g_fnReportf(REPORT_MSG_LEVEL_WARNING, "%s: set pixel shader constant [%s] is failed, shader not found, type [%d], id [%d]\n", SX_LIB_NAME, szNameVar, type_shader, szNameShader);
+				LibReport(REPORT_MSG_LEVEL_WARNING, "set pixel shader constant [%s] is failed, shader not found, type [%d], id [%d]\n", szNameVar, type_shader, szNameShader);
 			else if (num_var == -1)
-				g_fnReportf(REPORT_MSG_LEVEL_WARNING, "%s: set pixel shader constant [%s] is failed, constant not found, shader info: type [%d], id [%d], name [%s]\n", SX_LIB_NAME, szNameVar, type_shader, szNameShader);
+				LibReport(REPORT_MSG_LEVEL_WARNING, "set pixel shader constant [%s] is failed, constant not found, shader info: type [%d], id [%d], name [%s]\n", szNameVar, type_shader, szNameShader);
 		}
 	}
 }
@@ -1022,7 +1027,7 @@ void CShaderManager::setValueRegisterI(SHADER_TYPE type_shader, ID idShader, con
 			if (idShader != -1 && num_var != -1)
 				g_pDXDevice->SetVertexShaderConstantI(m_aVS[idShader]->m_aVarDesc[num_var].RegisterIndex, (int*)pData, (iCountInt4 == 0 ? m_aVS[idShader]->m_aVarDesc[num_var].RegisterCount : iCountInt4));
 			else if (num_var == -1)
-				g_fnReportf(REPORT_MSG_LEVEL_WARNING, "%s: set vertex shader constant [%s] is failed, constant not found, type [%d], id [%d]\n", SX_LIB_NAME, szNameVar, type_shader, idShader);
+				LibReport(REPORT_MSG_LEVEL_WARNING, "set vertex shader constant [%s] is failed, constant not found, type [%d], id [%d]\n", szNameVar, type_shader, idShader);
 		}
 		else if (type_shader == SHADER_TYPE_PIXEL)
 		{
@@ -1040,11 +1045,11 @@ void CShaderManager::setValueRegisterI(SHADER_TYPE type_shader, ID idShader, con
 			if (idShader != -1 && num_var != -1)
 				g_pDXDevice->SetPixelShaderConstantI(m_aPS[idShader]->m_aVarDesc[num_var].RegisterIndex, (int*)pData, (iCountInt4 == 0 ? m_aPS[idShader]->m_aVarDesc[num_var].RegisterCount : iCountInt4));
 			else if (num_var == -1)
-				g_fnReportf(REPORT_MSG_LEVEL_WARNING, "%s: set pixel shader constant [%s] is failed, constant not found, type [%d], name [%s]\n", SX_LIB_NAME, szNameVar, type_shader, m_aPS[idShader]->m_szPath);
+				LibReport(REPORT_MSG_LEVEL_WARNING, "set pixel shader constant [%s] is failed, constant not found, type [%d], name [%s]\n", szNameVar, type_shader, m_aPS[idShader]->m_szPath);
 		}
 	}
 	else
-		g_fnReportf(REPORT_MSG_LEVEL_WARNING, "%s: set shader constant [%s] is failed, shader not validate, type [%d], id [%d]\n", SX_LIB_NAME, szNameVar, type_shader, idShader);
+		LibReport(REPORT_MSG_LEVEL_WARNING, "set shader constant [%s] is failed, shader not validate, type [%d], id [%d]\n", szNameVar, type_shader, idShader);
 }
 
 
diff --git a/source/gcore/shader.h b/source/gcore/shader.h
index bcc5c7390..b3f10bfe2 100644
--- a/source/gcore/shader.h
+++ b/source/gcore/shader.h
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #ifndef __SHADER_H
 #define __SHADER_H
 
@@ -13,7 +18,6 @@
 #include <common/String.h>
 #include "sxgcore.h"
 
-extern report_func g_fnReportf;
 extern IDirect3DDevice9 *g_pDXDevice;
 extern D3DPRESENT_PARAMETERS g_oD3DAPP;
 
@@ -208,11 +212,12 @@ public:
 	void getName(SHADER_TYPE type, ID idShader, char *szName);
 
 protected:
-	Array<CShaderVS*> m_aVS;
-	Array<CShaderPS*> m_aPS;
 
-	int m_iLastAllLoadVS;
-	int m_iLastAllLoadPS;
+	Array<CShaderVS*> m_aVS;	//!< ������� vs ��������
+	Array<CShaderPS*> m_aPS;	//!< ������� ps ��������
+
+	int m_iLastAllLoadVS;		//! ����� ���������� ����������� vs ��������, � �������� ����
+	int m_iLastAllLoadPS;		//! ����� ���������� ����������� ps ��������, � �������� ����
 };
 
 #endif
\ No newline at end of file
diff --git a/source/gcore/sky.cpp b/source/gcore/sky.cpp
index 22a120564..bf211490c 100644
--- a/source/gcore/sky.cpp
+++ b/source/gcore/sky.cpp
@@ -1,10 +1,15 @@
 
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "sky.h"
 
-SkyBox::SkyBox()
+CSkyBox::CSkyBox()
 {
-	TexActive[0] = 0;
-	TexSecond[0] = 0;
+	m_szTexActive[0] = 0;
+	m_szTexSecond[0] = 0;
 
 	D3DVERTEXELEMENT9 layoutskybox[] =
 	{
@@ -13,20 +18,20 @@ SkyBox::SkyBox()
 		D3DDECL_END()
 	};
 
-	g_pDXDevice->CreateVertexDeclaration(layoutskybox, &VertexDeclarationSkyBox);
+	g_pDXDevice->CreateVertexDeclaration(layoutskybox, &m_pVertexDeclarationSkyBox);
 
-	VS_RenderSkyBox = SGCore_ShaderLoad(SHADER_TYPE_VERTEX, "sky_box.vs", "sky_box.vs", SHADER_CHECKDOUBLE_NAME);
-	PS_RenderSkyBox = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "sky_box.ps", "sky_box.ps", SHADER_CHECKDOUBLE_NAME);
+	m_idVS = SGCore_ShaderLoad(SHADER_TYPE_VERTEX, "sky_box.vs", "sky_box.vs", SHADER_CHECKDOUBLE_NAME);
+	m_idPS = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "sky_box.ps", "sky_box.ps", SHADER_CHECKDOUBLE_NAME);
 
-	Color = float4(0,0,0,0);
-	RotaionY = 0.f;
-	MatRotation = SMMatrixIdentity();
+	m_vColor = float4(0, 0, 0, 0);
+	m_fRotaionY = 0.f;
+	m_mMatRotation = SMMatrixIdentity();
 	g_pDXDevice->CreateVertexBuffer(
-								8 * sizeof(SkyBoxVertex),
+								8 * sizeof(CSkyBoxVertex),
 								0,
 								0,
 								D3DPOOL_MANAGED,
-								&Vertices,
+								&m_pVertices,
 								0
 								);
 
@@ -35,7 +40,7 @@ SkyBox::SkyBox()
                0,
                D3DFMT_INDEX16,
                D3DPOOL_MANAGED,
-               &Indeces,
+			   &m_pIndeces,
                0);
 
 	float X = 1.0f * 200;
@@ -43,21 +48,21 @@ SkyBox::SkyBox()
 	float Z = 1.0f * 200;
 	float tmpy = 45;
 
-	SkyBoxVertex* tmpVertices;
-	Vertices->Lock(0, 0, (void**)&tmpVertices, 0);
+	CSkyBoxVertex* tmpVertices;
+	m_pVertices->Lock(0, 0, (void**)&tmpVertices, 0);
 
-	tmpVertices[0] = SkyBoxVertex( X,  Y-tmpy, Z, 1.0f, 1.0f, 1.0f);
-	tmpVertices[1] = SkyBoxVertex(-X,  Y-tmpy, Z,-1.0f, 1.0f, 1.0f);
-	tmpVertices[2] = SkyBoxVertex( X, -tmpy, Z, 1.0f,-1.0f, 1.0f);
+	tmpVertices[0] = CSkyBoxVertex( X,  Y-tmpy, Z, 1.0f, 1.0f, 1.0f);
+	tmpVertices[1] = CSkyBoxVertex(-X,  Y-tmpy, Z,-1.0f, 1.0f, 1.0f);
+	tmpVertices[2] = CSkyBoxVertex( X, -tmpy, Z, 1.0f,-1.0f, 1.0f);
 
-	tmpVertices[3] = SkyBoxVertex( X,  Y-tmpy,-Z, 1.0f, 1.0f,-1.0f);
-	tmpVertices[4] = SkyBoxVertex(-X, -tmpy, Z,-1.0f,-1.0f, 1.0f);
-	tmpVertices[5] = SkyBoxVertex( X, -tmpy,-Z, 1.0f,-1.0f,-1.0f);
+	tmpVertices[3] = CSkyBoxVertex( X,  Y-tmpy,-Z, 1.0f, 1.0f,-1.0f);
+	tmpVertices[4] = CSkyBoxVertex(-X, -tmpy, Z,-1.0f,-1.0f, 1.0f);
+	tmpVertices[5] = CSkyBoxVertex( X, -tmpy,-Z, 1.0f,-1.0f,-1.0f);
 
-	tmpVertices[6] = SkyBoxVertex(-X,  Y-tmpy,-Z,-1.0f, 1.0f,-1.0f);
-	tmpVertices[7] = SkyBoxVertex(-X, -tmpy,-Z,-1.0f,-1.0f,-1.0f);
+	tmpVertices[6] = CSkyBoxVertex(-X,  Y-tmpy,-Z,-1.0f, 1.0f,-1.0f);
+	tmpVertices[7] = CSkyBoxVertex(-X, -tmpy,-Z,-1.0f,-1.0f,-1.0f);
 
-	Vertices->Unlock();
+	m_pVertices->Unlock();
 
 
 	WORD indices_tmp[] =
@@ -82,110 +87,110 @@ SkyBox::SkyBox()
     };
 
 	WORD* indices = 0;
-	Indeces->Lock(0, 0, (void**)&indices, 0);
+	m_pIndeces->Lock(0, 0, (void**)&indices, 0);
 
 	memcpy(indices,indices_tmp,36 * sizeof(WORD));
 
-	Indeces->Unlock();
+	m_pIndeces->Unlock();
 
-	Tex = 0;
-	Tex2 = 0;
+	m_pTexture = 0;
+	m_pTexture2 = 0;
 
-	BFChange = false;
-	BFChangeMainTex = false;
-	FactorBlend = 0.0f;
+	m_isChange = false;
+	m_isChangeMainTex = false;
+	m_fFactorBlend = 0.0f;
 };
 
-SkyBox::~SkyBox()
+CSkyBox::~CSkyBox()
 {
-	mem_release_del(Vertices);
-	mem_release_del(Indeces);
+	mem_release_del(m_pVertices);
+	mem_release_del(m_pIndeces);
 
-	mem_release_del(Tex);
-	mem_release_del(Tex2);
+	mem_release_del(m_pTexture);
+	mem_release_del(m_pTexture2);
 
-	mem_release_del(VertexDeclarationSkyBox);
+	mem_release_del(m_pVertexDeclarationSkyBox);
 }
 
-void SkyBox::LoadTextures(const char *texture)
+void CSkyBox::loadTextures(const char *texture)
 {
-	mem_release_del(Tex);
+	mem_release_del(m_pTexture);
 	if (!texture)
 	{
-		mem_release_del(Tex2);
+		mem_release_del(m_pTexture2);
 
-		BFChange = false;
-		BFChangeMainTex = false;
-		FactorBlend = 0.0f;
+		m_isChange = 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, &Tex)))
+	if (FAILED(D3DXCreateCubeTextureFromFile(g_pDXDevice, tmppath, &m_pTexture)))
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s: %s - failed load cube texture '%s'", SX_LIB_NAME, GEN_MSG_LOCATION, tmppath);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - failed load cube texture '%s'", GEN_MSG_LOCATION, tmppath);
 	}
 }
 
-bool SkyBox::IsLoadTex()
+bool CSkyBox::isLoadTex()
 {
-	return (Tex != 0 || Tex2 != 0);
+	return (m_pTexture != 0 || m_pTexture2 != 0);
 }
 
-void SkyBox::ChangeTexture(const char *texture)
+void CSkyBox::changeTexture(const char *texture)
 {
-	mem_release_del((BFChangeMainTex ? Tex : Tex2));
+	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,(BFChangeMainTex ? &Tex : &Tex2))))
-			BFChange = true;
+	if (!FAILED(D3DXCreateCubeTextureFromFile(g_pDXDevice, tmpsb1, (m_isChangeMainTex ? &m_pTexture : &m_pTexture2))))
+			m_isChange = true;
 		else
 		{
-			g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s: %s - failed load cube texture '%s'", SX_LIB_NAME, GEN_MSG_LOCATION, tmpsb1);
+			LibReport(REPORT_MSG_LEVEL_ERROR, "%s - failed load cube texture '%s'", GEN_MSG_LOCATION, tmpsb1);
 		}
 }
 
-void SkyBox::GetActiveTexture(char *texture)
+void CSkyBox::getActiveTexture(char *texture)
 {
 	if (texture)
-		strcpy(texture, TexActive);
+		strcpy(texture, m_szTexActive);
 }
 
-void SkyBox::GetSecondTexture(char *texture)
+void CSkyBox::getSecondTexture(char *texture)
 {
 	if (texture)
-		strcpy(texture, TexSecond);
+		strcpy(texture, m_szTexSecond);
 }
 
-void SkyBox::SetRotation(float angle)
+void CSkyBox::setRotation(float angle)
 {
-	RotaionY = angle;
-	MatRotation = SMMatrixRotationY(RotaionY);
+	m_fRotaionY = angle;
+	m_mMatRotation = SMMatrixRotationY(m_fRotaionY);
 }
 
-float SkyBox::GetRotation()
+float CSkyBox::getRotation()
 {
-	return RotaionY;
+	return m_fRotaionY;
 }
 
-void SkyBox::SetColor(float4_t* color)
+void CSkyBox::setColor(const float4_t* color)
 {
-	Color = *color;
+	m_vColor = *color;
 }
 
-void SkyBox::GetColor(float4_t* color)
+void CSkyBox::getColor(float4_t* color)
 {
-	*color = Color;
+	*color = m_vColor;
 }
 
-void SkyBox::Render(float timeDelta,float3* pos,bool is_shadow)
+void CSkyBox::render(float timeDelta, const float3* pos,bool is_shadow)
 {
-		if(BFChange)
-			FactorBlend += timeDelta * 0.001f * 0.2f;
+	if (m_isChange)
+		m_fFactorBlend += timeDelta * 0.001f * 0.2f;
 
-	float4x4 World = MatRotation * SMMatrixTranslation(pos->x, pos->y, pos->z);
+	float4x4 World = m_mMatRotation * SMMatrixTranslation(pos->x, pos->y, pos->z);
 
 	//D3DXMATRIX tmpdxView, tmpdxProjection;
 	//g_pDXDevice->GetTransform(D3DTS_PROJECTION, &tmpdxProjection);
@@ -200,41 +205,41 @@ void SkyBox::Render(float timeDelta,float3* pos,bool is_shadow)
 
 	WVP = SMMatrixTranspose(WVP);
 
-		if(BFChange && FactorBlend >= 1.0)
-		{
-			FactorBlend = 0.0;
-			BFChangeMainTex = !BFChangeMainTex;
-			BFChange = false;
-		}
+	if (m_isChange && m_fFactorBlend >= 1.0)
+	{
+		m_fFactorBlend = 0.0;
+		m_isChangeMainTex = !m_isChangeMainTex;
+		m_isChange = false;
+	}
 
-		if(BFChangeMainTex)
-		{
-			g_pDXDevice->SetTexture(0,Tex2);
-			g_pDXDevice->SetTexture(1,Tex);
-		}
-		else
-		{
-			g_pDXDevice->SetTexture(0,Tex);
-			g_pDXDevice->SetTexture(1,Tex2);
-		}
+	if (m_isChangeMainTex)
+	{
+		g_pDXDevice->SetTexture(0, m_pTexture2);
+		g_pDXDevice->SetTexture(1, m_pTexture);
+	}
+	else
+	{
+		g_pDXDevice->SetTexture(0, m_pTexture);
+		g_pDXDevice->SetTexture(1, m_pTexture2);
+	}
 
-	SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, VS_RenderSkyBox, "WorldViewProjection", &WVP);
-	SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PS_RenderSkyBox, "Color", &Color);
-	SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PS_RenderSkyBox, "BlendFactor", &FactorBlend);
-	SGCore_ShaderBind(SHADER_TYPE_VERTEX, VS_RenderSkyBox);
-	SGCore_ShaderBind(SHADER_TYPE_PIXEL, PS_RenderSkyBox);
+	SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, m_idVS, "WorldViewProjection", &WVP);
+	SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, m_idPS, "Color", &m_vColor);
+	SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, m_idPS, "BlendFactor", &m_fFactorBlend);
+	SGCore_ShaderBind(SHADER_TYPE_VERTEX, m_idVS);
+	SGCore_ShaderBind(SHADER_TYPE_PIXEL, m_idPS);
 
-	g_pDXDevice->SetStreamSource(0, Vertices, 0, sizeof(SkyBoxVertex));
-	g_pDXDevice->SetIndices(Indeces);
-	g_pDXDevice->SetVertexDeclaration(VertexDeclarationSkyBox);
+	g_pDXDevice->SetStreamSource(0, m_pVertices, 0, sizeof(CSkyBoxVertex));
+	g_pDXDevice->SetIndices(m_pIndeces);
+	g_pDXDevice->SetVertexDeclaration(m_pVertexDeclarationSkyBox);
 	g_pDXDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 8, 0, 12);
 
 	SGCore_ShaderUnBind();
 };
 
-/////
+//##########################################################################
 
-SkyClouds::SkyClouds()
+CSkyClouds::CSkyClouds()
 {
 	D3DVERTEXELEMENT9 layoutclouds[] =
 	{
@@ -243,24 +248,24 @@ SkyClouds::SkyClouds()
 		D3DDECL_END()
 	};
 
-	g_pDXDevice->CreateVertexDeclaration(layoutclouds, &VertexDeclarationClouds);
+	g_pDXDevice->CreateVertexDeclaration(layoutclouds, &m_pVertexDeclarationClouds);
 
-	VS_RenderSkyClouds = SGCore_ShaderLoad(SHADER_TYPE_VERTEX, "sky_clouds.vs", "sky_clouds.vs", SHADER_CHECKDOUBLE_NAME);
-	PS_RenderSkyClouds = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "sky_clouds.ps", "sky_clouds.ps", SHADER_CHECKDOUBLE_NAME);
+	m_idVS = SGCore_ShaderLoad(SHADER_TYPE_VERTEX, "sky_clouds.vs", "sky_clouds.vs", SHADER_CHECKDOUBLE_NAME);
+	m_idPS = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "sky_clouds.ps", "sky_clouds.ps", SHADER_CHECKDOUBLE_NAME);
 
 	D3DXMACRO Defines_SHADOW[] = { { "SHADOW", "" }, { 0, 0 } };
-	PS_RenderSkyCloudsShadow = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "sky_clouds.ps", "sky_clouds_shadow.ps", SHADER_CHECKDOUBLE_NAME, Defines_SHADOW);
+	m_idPS_Shadow = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "sky_clouds.ps", "sky_clouds_shadow.ps", SHADER_CHECKDOUBLE_NAME, Defines_SHADOW);
 
-	RotaionY = 0;
-	Alpha = 1.f;
-	Color = float4_t(0,0,0,0);
-	MatRotation = SMMatrixIdentity();
+	m_fRotaionY = 0;
+	m_fAlpha = 1.f;
+	m_vColor = float4_t(0, 0, 0, 0);
+	m_mMatRotation = SMMatrixIdentity();
 	g_pDXDevice->CreateVertexBuffer(
-								4 * sizeof(SkyCloudsVertex),
+								4 * sizeof(CSkyCloudsVertex),
 								0,
 								0,
 								D3DPOOL_MANAGED,
-								&SkyCloudsVertices,
+								&m_pSkyCloudsVertices,
 								0
 								);
 
@@ -269,21 +274,21 @@ SkyClouds::SkyClouds()
                0,
                D3DFMT_INDEX16,
                D3DPOOL_MANAGED,
-               &SkyCloudsIndeces,
+			   &m_pSkyCloudsIndeces,
                0);
 
 	float X = 800;
 	float Y = 0;
 	float Z = 800;
 
-	SkyCloudsVertices->Lock(0, 0, (void**)&Vertices, 0);
+	m_pSkyCloudsVertices->Lock(0, 0, (void**)&m_pVertices, 0);
 
-	Vertices[3] = SkyCloudsVertex(-X,  Y, -Z, 0.0f, 2.0f);
-	Vertices[2] = SkyCloudsVertex(-X,  Y,  Z, 0.0f, 0.0f);
-	Vertices[1] = SkyCloudsVertex( X,  Y,  Z, 2.0f,0.0f);
-	Vertices[0] = SkyCloudsVertex( X,  Y, -Z, 2.0f, 2.0f);
+	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);
 
-	SkyCloudsVertices->Unlock();
+	m_pSkyCloudsVertices->Unlock();
 
 
 	WORD indices_tmp[] =
@@ -294,211 +299,206 @@ SkyClouds::SkyClouds()
 
 
 	WORD* indices = 0;
-	SkyCloudsIndeces->Lock(0, 0, (void**)&indices, 0);
+	m_pSkyCloudsIndeces->Lock(0, 0, (void**)&indices, 0);
 
 	memcpy(indices,indices_tmp,6 * sizeof(WORD));
 
-	SkyCloudsIndeces->Unlock();
+	m_pSkyCloudsIndeces->Unlock();
 
-	Bias = 0.f;
-	Speed = 0.01f;
+	m_fBias = 0.f;
+	m_fSpeed = 0.01f;
 
-	SkyCloudsTex = 0;
-	SkyCloudsTex2 = 0;
+	m_pSkyCloudsTex = 0;
+	m_pSkyCloudsTex2 = 0;
 
-	BFChange = false;
-	BFChangeMainTex = false;
-	FactorBlend = 0.0f;
+	m_isChange = false;
+	m_isChangeMainTex = false;
+	m_fFactorBlend = 0.0f;
 }
 
-SkyClouds::~SkyClouds()
+CSkyClouds::~CSkyClouds()
 {
-	mem_release_del(SkyCloudsTex);
-	mem_release_del(SkyCloudsTex2);
+	mem_release_del(m_pSkyCloudsTex);
+	mem_release_del(m_pSkyCloudsTex2);
 
-	mem_release_del(SkyCloudsVertices);
-	mem_release_del(SkyCloudsIndeces);
+	mem_release_del(m_pSkyCloudsVertices);
+	mem_release_del(m_pSkyCloudsIndeces);
 
-	mem_release_del(VertexDeclarationClouds);
+	mem_release_del(m_pVertexDeclarationClouds);
 }
 
-void SkyClouds::ChangeTexture(const char *texture)
+void CSkyClouds::changeTexture(const char *texture)
 {
-	mem_release_del((BFChangeMainTex ? SkyCloudsTex : SkyCloudsTex2));
+	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,(BFChangeMainTex ? &SkyCloudsTex : &SkyCloudsTex2))))
-			BFChange = true;
+	if (!FAILED(D3DXCreateTextureFromFile(g_pDXDevice, tmpsb1, (m_isChangeMainTex ? &m_pSkyCloudsTex : &m_pSkyCloudsTex2))))
+			m_isChange = true;
 		else
 		{
-			g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s: %s - failed load texture '%s'", SX_LIB_NAME, GEN_MSG_LOCATION, tmpsb1);
+			LibReport(REPORT_MSG_LEVEL_ERROR, "%s - failed load texture '%s'", GEN_MSG_LOCATION, tmpsb1);
 		}
 }
 
-void SkyClouds::SetWidthHeightPos(float width,float height,float3* pos)
+void CSkyClouds::setWidthHeightPos(float width,float height, const float3* pos)
 {
-	SkyCloudsVertices->Lock(0, 0, (void**)&Vertices, 0);
+	m_pSkyCloudsVertices->Lock(0, 0, (void**)&m_pVertices, 0);
 
 	float X = pos->x + (width*0.5f);
 	float Y = pos->y;
 	float Z = pos->z + (height*0.5f);
 
-	WidthHeight.x = width;
-	WidthHeight.y = height;
+	m_vWidthHeight.x = width;
+	m_vWidthHeight.y = height;
 
 	//float2_t tmpwh = float2_t(width*0.5f,height*0.5f);
 
-	Vertices[3] = SkyCloudsVertex(-X,  Y, -Z, 0.0f, 2.0f);
-	Vertices[2] = SkyCloudsVertex(-X,  Y,  Z, 0.0f, 0.0f);
-	Vertices[1] = SkyCloudsVertex( X,  Y,  Z, 2.0f,0.0f);
-	Vertices[0] = SkyCloudsVertex( X,  Y, -Z, 2.0f, 2.0f);
+	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);
 
-	SkyCloudsVertices->Unlock();
+	m_pSkyCloudsVertices->Unlock();
 }
 
-void SkyClouds::SetRotation(float angle)
+void CSkyClouds::setRotation(float angle)
 {
-	RotaionY = angle;
-	MatRotation = SMMatrixRotationY(RotaionY);
+	m_fRotaionY = angle;
+	m_mMatRotation = SMMatrixRotationY(m_fRotaionY);
 }
 
-float SkyClouds::GetRotation()
+float CSkyClouds::getRotation()
 {
-	return RotaionY;
+	return m_fRotaionY;
 }
 
-void SkyClouds::SetAlpha(float alpha)
+void CSkyClouds::setAlpha(float alpha)
 {
-	Alpha = alpha;
+	m_fAlpha = alpha;
 }
 
-float SkyClouds::GetAlpha()
+float CSkyClouds::getAlpha()
 {
-	return Alpha;
+	return m_fAlpha;
 }
 
-void SkyClouds::SetColor(float4_t* color)
+void CSkyClouds::setColor(const float4_t* color)
 {
-	Color = *color;
+	m_vColor = *color;
 }
 
-void SkyClouds::GetColor(float4_t* color)
+void CSkyClouds::getColor(float4_t* color)
 {
-	*color = Color;
+	*color = m_vColor;
 }
 
-void SkyClouds::SetSpeed(float speed)
+void CSkyClouds::setSpeed(float speed)
 {
-	Speed = speed;
+	m_fSpeed = speed;
 }
 
-float SkyClouds::GetSpeed()
+float CSkyClouds::getSpeed()
 {
-	return Speed;
+	return m_fSpeed;
 }
 
-void SkyClouds::LoadTextures(const char *texture)
+void CSkyClouds::loadTextures(const char *texture)
 {
-	mem_release_del(SkyCloudsTex);
+	mem_release_del(m_pSkyCloudsTex);
 	if (!texture)
 	{
-		mem_release_del(SkyCloudsTex2);
+		mem_release_del(m_pSkyCloudsTex2);
 
-		BFChange = false;
-		BFChangeMainTex = false;
-		FactorBlend = 0.0f;
+		m_isChange = 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, &SkyCloudsTex)))
+	if (FAILED(D3DXCreateTextureFromFile(g_pDXDevice, tmppath, &m_pSkyCloudsTex)))
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s: %s - failed load texture '%s'", SX_LIB_NAME, GEN_MSG_LOCATION, tmppath);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - failed load texture '%s'", GEN_MSG_LOCATION, tmppath);
 	}
 }
 
-bool SkyClouds::IsLoadTex()
+bool CSkyClouds::isLoadTex()
 {
-	return (SkyCloudsTex != 0 || SkyCloudsTex2 != 0);
+	return (m_pSkyCloudsTex != 0 || m_pSkyCloudsTex2 != 0);
 }
 
-void SkyClouds::Render(DWORD timeDelta,float3* pos,bool is_shadow)
+void CSkyClouds::render(DWORD timeDelta, const float3* pos,bool is_shadow)
 {
-		if(BFChange)
-			FactorBlend += timeDelta * 0.001f * 0.2f;
+	if (m_isChange)
+		m_fFactorBlend += timeDelta * 0.001f * 0.2f;
 
-	Bias += timeDelta * 0.001f * Speed;
+	m_fBias += timeDelta * 0.001f * m_fSpeed;
 
-		if(Bias >= 2.f)
-			Bias = 0.f;
+	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(BFChange && FactorBlend >= 1.0)
+	if (m_isChange && m_fFactorBlend >= 1.0)
 		{
-			FactorBlend = 0.0;
-			BFChangeMainTex = !BFChangeMainTex;
-			BFChange = false;
+		m_fFactorBlend = 0.0;
+			m_isChangeMainTex = !m_isChangeMainTex;
+			m_isChange = false;
 		}
 
-		if(BFChangeMainTex)
-		{
-			g_pDXDevice->SetTexture(0,SkyCloudsTex2);
-			g_pDXDevice->SetTexture(1,SkyCloudsTex);
-		}
-		else
-		{
-			g_pDXDevice->SetTexture(0,SkyCloudsTex);
-			g_pDXDevice->SetTexture(1,SkyCloudsTex2);
-		}
+	if (m_isChangeMainTex)
+	{
+		g_pDXDevice->SetTexture(0, m_pSkyCloudsTex2);
+		g_pDXDevice->SetTexture(1, m_pSkyCloudsTex);
+	}
+	else
+	{
+		g_pDXDevice->SetTexture(0, m_pSkyCloudsTex);
+		g_pDXDevice->SetTexture(1, m_pSkyCloudsTex2);
+	}
 
-		if(!is_shadow)
-		{
-			/*D3DXMATRIX tmpdxView, tmpdxProjection;
-			g_pDXDevice->GetTransform(D3DTS_PROJECTION, &tmpdxProjection);
-			g_pDXDevice->GetTransform(D3DTS_VIEW, &tmpdxView);*/
-			float4x4 View;// = float4x4(tmpdxView);
-			float4x4 Proj;// = float4x4(tmpdxProjection);
+	if(!is_shadow)
+	{
+		float4x4 View;// = float4x4(tmpdxView);
+		float4x4 Proj;// = float4x4(tmpdxProjection);
 
-			Core_RMatrixGet(G_RI_MATRIX_VIEW, &View);
-			Core_RMatrixGet(G_RI_MATRIX_PROJECTION, &Proj);
+		Core_RMatrixGet(G_RI_MATRIX_VIEW, &View);
+		Core_RMatrixGet(G_RI_MATRIX_PROJECTION, &Proj);
 
-			float4x4 WVP = (MatRotation * World) * View * Proj;
+		float4x4 WVP = (m_mMatRotation * World) * View * Proj;
 
-			WVP = SMMatrixTranspose(WVP);
+		WVP = SMMatrixTranspose(WVP);
 
-			SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, VS_RenderSkyClouds, "WorldViewProjection", &WVP);
-			SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PS_RenderSkyClouds, "BlendFactorBias", &float2(FactorBlend, Bias));
-			SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PS_RenderSkyClouds, "Color", &Color);
-			SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PS_RenderSkyClouds, "Alpha", &Alpha);
-			SGCore_ShaderBind(SHADER_TYPE_VERTEX, VS_RenderSkyClouds);
-			SGCore_ShaderBind(SHADER_TYPE_PIXEL, PS_RenderSkyClouds);
-		}
-		else
-		{
-			//D3DXMATRIX tmpdxViewProj;
-			//g_pDXDevice->GetTransform(D3DTS_WORLD1, &tmpdxViewProj);
-			float4x4 ViewProj;// = float4x4(tmpdxViewProj);
-			Core_RMatrixGet(G_RI_MATRIX_VIEWPROJ, &ViewProj);
-			float4x4 WVP = (MatRotation * World) * ViewProj;
-
-			WVP = SMMatrixTranspose(WVP);
-
-			SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, VS_RenderSkyClouds, "WorldViewProjection", &WVP);
-			SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PS_RenderSkyCloudsShadow, "BlendFactorBias", &float2(FactorBlend, Bias));
-			//SGCore_ShaderSetVRF(1, PS_RenderSkyCloudsShadow, "Color", &Color);
-			SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, PS_RenderSkyCloudsShadow, "Alpha", &Alpha);
-			SGCore_ShaderBind(SHADER_TYPE_VERTEX, VS_RenderSkyClouds);
-			SGCore_ShaderBind(SHADER_TYPE_PIXEL, PS_RenderSkyCloudsShadow);
-		}
+		SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, m_idVS, "WorldViewProjection", &WVP);
+		SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, m_idPS, "BlendFactorBias", &float2(m_fFactorBlend, m_fBias));
+		SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, m_idPS, "Color", &m_vColor);
+		SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, m_idPS, "Alpha", &m_fAlpha);
+		SGCore_ShaderBind(SHADER_TYPE_VERTEX, m_idVS);
+		SGCore_ShaderBind(SHADER_TYPE_PIXEL, m_idPS);
+	}
+	else
+	{
+		float4x4 ViewProj;// = float4x4(tmpdxViewProj);
+		Core_RMatrixGet(G_RI_MATRIX_VIEWPROJ, &ViewProj);
+		float4x4 WVP = (m_mMatRotation * World) * ViewProj;
+
+		WVP = SMMatrixTranspose(WVP);
+
+		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, SkyCloudsVertices, 0, sizeof(SkyCloudsVertex));
-	g_pDXDevice->SetIndices(this->SkyCloudsIndeces);
-	g_pDXDevice->SetVertexDeclaration(VertexDeclarationClouds);
+	g_pDXDevice->SetStreamSource(0, m_pSkyCloudsVertices, 0, sizeof(CSkyCloudsVertex));
+	g_pDXDevice->SetIndices(m_pSkyCloudsIndeces);
+	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 a2805c8a1..0f273680b 100644
--- a/source/gcore/sky.h
+++ b/source/gcore/sky.h
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #ifndef __SKY_H
 #define __SKY_H
 
@@ -8,13 +13,14 @@
 #include <common/String.h>
 #include "sxgcore.h"
 
-extern report_func g_fnReportf;
 extern IDirect3DDevice9 *g_pDXDevice;
 extern D3DPRESENT_PARAMETERS g_oD3DAPP;
 
-struct SkyBoxVertex
+//##########################################################################
+
+struct CSkyBoxVertex
 {
-	SkyBoxVertex(float x,float y,float z,float u,float v,float w)
+	CSkyBoxVertex(float x,float y,float z,float u,float v,float w)
 	{
 		_x  = x;  _y  = y;  _z  = z; _u = u; _v = v; _w = w;
 	}
@@ -22,52 +28,55 @@ struct SkyBoxVertex
 	float _u, _v, _w;
 };
 
-class SkyBox
+//**************************************************************************
+
+class CSkyBox
 {
 public:
-	SkyBox();
-	~SkyBox();
-	void LoadTextures(const char *texture);
-	bool IsLoadTex();
-	void ChangeTexture(const char *texture);
-	void GetActiveTexture(char *texture);
-	void GetSecondTexture(char *texture);
-	void SetRotation(float angle);
-	float GetRotation();
-	void SetColor(float4_t* color);
-	void GetColor(float4_t* color);
-	void Render(float timeDelta,float3* pos,bool is_shadow);
+	CSkyBox();
+	~CSkyBox();
+	void loadTextures(const char *szTexture);
+	bool isLoadTex();
+	void changeTexture(const char *szTexture);
+	void getActiveTexture(char *szTexture);
+	void getSecondTexture(char *szTexture);
+	void setRotation(float fAngle);
+	float getRotation();
+	void setColor(const float4_t *pColor);
+	void getColor(float4_t *pColor);
+	void render(float timeDelta, const float3 *pPos,bool isShadow);
 
 	
 	SX_ALIGNED_OP_MEM
 
 protected:
 
-	IDirect3DVertexDeclaration9* VertexDeclarationSkyBox;
+	IDirect3DVertexDeclaration9* m_pVertexDeclarationSkyBox;
 	
-	char TexActive[SXGC_LOADTEX_MAX_SIZE_DIRNAME];
-	char TexSecond[SXGC_LOADTEX_MAX_SIZE_DIRNAME];
-	float RotaionY;
-	float4x4 MatRotation;
-	float4_t Color;
-	float FactorBlend;
-
-	bool BFChange;
-	bool BFChangeMainTex;
-
-	IDirect3DCubeTexture9*	Tex;
-	IDirect3DCubeTexture9*	Tex2;
-	IDirect3DVertexBuffer9*	Vertices;
-	IDirect3DIndexBuffer9*  Indeces;
-
-	ID VS_RenderSkyBox;
-	ID PS_RenderSkyBox;
+	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;
+	IDirect3DVertexBuffer9 *m_pVertices;
+	IDirect3DIndexBuffer9  *m_pIndeces;
+
+	ID m_idVS;
+	ID m_idPS;
 };
 
+//##########################################################################
 
-struct SkyCloudsVertex
+struct CSkyCloudsVertex
 {
-	SkyCloudsVertex(float x,float y,float z,float u,float v)
+	CSkyCloudsVertex(float x,float y,float z,float u,float v)
 	{
 	_x  = x;  _y  = y;  _z  = z; _u = u; _v = v;
 	}
@@ -75,59 +84,60 @@ struct SkyCloudsVertex
 	float _u, _v;
 };
 
+//**************************************************************************
 
-class SkyClouds
+class CSkyClouds
 {
 public:
-	SkyClouds();
-	~SkyClouds();
+	CSkyClouds();
+	~CSkyClouds();
 
 	//���������� ��������� �������
 	//���� ������ ����������� ����, �� ���� ���� ������ ��������� ����� ���� �������
-	void SetWidthHeightPos(float width,float height,float3* pos);
-	void LoadTextures(const char *texture);
-	bool IsLoadTex();
-	void ChangeTexture(const char *texture);
+	void setWidthHeightPos(float iWidth,float iHeight, const float3 *pPos);
+	void loadTextures(const char *szTexture);
+	bool isLoadTex();
+	void changeTexture(const char *szTexture);
 
-	void SetRotation(float angle);
-	float GetRotation();
-	void SetAlpha(float alpha);
-	float GetAlpha();
-	void SetColor(float4_t* color);
-	void GetColor(float4_t* color);
+	void setRotation(float fAngle);
+	float getRotation();
+	void setAlpha(float fAngle);
+	float getAlpha();
+	void setColor(const float4_t *pColor);
+	void getColor(float4_t *pColor);
 
-	void SetSpeed(float speed);
-	float GetSpeed();
+	void setSpeed(float fSpeed);
+	float getSpeed();
 
-	void Render(DWORD timeDetlta,float3* pos,bool is_shadow);
+	void render(DWORD timeDetlta, const float3 *pPos,bool isShadow);
 
 	SX_ALIGNED_OP_MEM
 private:
 
-	IDirect3DVertexDeclaration9* VertexDeclarationClouds;
-	float Alpha;
-	float RotaionY;
-	float4x4 MatRotation;
-	float4_t Color;
+	IDirect3DVertexDeclaration9 *m_pVertexDeclarationClouds;
+	float m_fAlpha;
+	float m_fRotaionY;
+	float4x4 m_mMatRotation;
+	float4_t m_vColor;
 
-	float FactorBlend;
-	float2_t WidthHeight;
-	bool BFChange;
-	bool BFChangeMainTex;
+	float m_fFactorBlend;
+	float2_t m_vWidthHeight;
+	bool m_isChange;
+	bool m_isChangeMainTex;
 
-	float Speed;
-	float Bias;
-	SkyCloudsVertex* Vertices;
-	IDirect3DVertexBuffer9*	SkyCloudsVertices;
-	IDirect3DIndexBuffer9*  SkyCloudsIndeces;
+	float m_fSpeed;
+	float m_fBias;
+	CSkyCloudsVertex *m_pVertices;
+	IDirect3DVertexBuffer9 *m_pSkyCloudsVertices;
+	IDirect3DIndexBuffer9 *m_pSkyCloudsIndeces;
 
-	IDirect3DTexture9*	SkyCloudsTex;
-	IDirect3DTexture9*	SkyCloudsTex2;
+	IDirect3DTexture9 *m_pSkyCloudsTex;
+	IDirect3DTexture9 *m_pSkyCloudsTex2;
 
-	ID VS_RenderSkyClouds;
-	ID PS_RenderSkyClouds;
+	ID m_idVS;
+	ID m_idPS;
 
-	ID PS_RenderSkyCloudsShadow;
+	ID m_idPS_Shadow;
 };
 
 #endif
diff --git a/source/gcore/sxgcore.cpp b/source/gcore/sxgcore.cpp
index 6a7b66c7d..6905957b6 100644
--- a/source/gcore/sxgcore.cpp
+++ b/source/gcore/sxgcore.cpp
@@ -1,8 +1,8 @@
 
-/******************************************************
-Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 #include "sxgcore.h"
 
@@ -21,6 +21,16 @@ See the license in LICENSE
 report_func g_fnReportf = DefReport;
 #endif
 
+/*inline void LibReport(int iLevel, const char *szFormat, ...)
+{
+	static char szStr[REPORT_MSG_MAX_LEN];
+	szStr[0] = 0;
+	int iStrLen = sizeof(szStr);
+	format_str(szStr, szFormat);
+
+	g_fnReportf(iLevel, SX_LIB_NAME, szStr);
+}*/
+
 IDirect3DDevice9 *g_pDXDevice = 0;
 D3DPRESENT_PARAMETERS g_oD3DAPP;
 IDirect3D9 *g_pD3D9 = 0;
@@ -43,7 +53,7 @@ void StdMtlSet(ID id, float4x4* world)
 
 ID StdMtlLoad(const char* name, int mtl_type)
 {
-	return SGCore_LoadTexAddName(name, LoadTexType::ltt_load);
+	return SGCore_LoadTexAddName(name, LOAD_TEXTURE_TYPE_LOAD);
 }
 
 int StdMtlGetSort(ID id)
@@ -79,23 +89,23 @@ CShaderManager *g_pManagerShaders = 0;
 CreatorTextures *g_pManagerRenderTargets = 0;
 LoaderTextures *g_pManagerTextures = 0;
 ID3DXMesh *g_pScreenTexture = 0;
-SkyBox *g_pSkyBox = 0;
-SkyClouds *g_pSkyClouds = 0;
+CSkyBox *g_pSkyBox = 0;
+CSkyClouds *g_pSkyClouds = 0;
 
 
-#define SG_PRECOND(retval) if(!g_pDXDevice){ g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s: %s - sxgcore is not init", SX_LIB_NAME, GEN_MSG_LOCATION); return retval;}
-#define SG_PRECOND_SKY_BOX(retval) SG_PRECOND(retval _VOID); if(!g_pSkyBox){ g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s: %s - sky_box is not init", SX_LIB_NAME, GEN_MSG_LOCATION); return retval;}
-#define SG_PRECOND_SKY_CLOUDS(retval) SG_PRECOND(retval _VOID); if(!g_pSkyClouds){ g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s: %s - sky_clouds is not init", SX_LIB_NAME, GEN_MSG_LOCATION); return retval;}
+#define SG_PRECOND(retval) if(!g_pDXDevice){ LibReport(REPORT_MSG_LEVEL_ERROR, "%s - sxgcore is not init", GEN_MSG_LOCATION); return retval;}
+#define SG_PRECOND_SKY_BOX(retval) SG_PRECOND(retval _VOID); if(!g_pSkyBox){ LibReport(REPORT_MSG_LEVEL_ERROR, "%s - sky_box is not init", GEN_MSG_LOCATION); return retval;}
+#define SG_PRECOND_SKY_CLOUDS(retval) SG_PRECOND(retval _VOID); if(!g_pSkyClouds){ LibReport(REPORT_MSG_LEVEL_ERROR, "%s - sky_clouds is not init", GEN_MSG_LOCATION); return retval;}
 
 //##########################################################################
 
-void GCoreInit(HWND hwnd, int width, int heigth, bool windowed, DWORD create_device_flags)
+void GCoreInit(HWND hWnd, int iWidth, int iHeigth, bool isWindowed, DWORD dwFlags)
 {
 	g_pD3D9 = Direct3DCreate9(D3D_SDK_VERSION);
 
 	if (!g_pD3D9)
 	{
-		g_fnReportf(-1, "%s: %s - none detected d3d, sxgcore", SX_LIB_NAME, GEN_MSG_LOCATION);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - none detected d3d", GEN_MSG_LOCATION);
 		return;
 	}
 
@@ -103,24 +113,24 @@ void GCoreInit(HWND hwnd, int width, int heigth, bool windowed, DWORD create_dev
 	g_pD3D9->GetDeviceCaps(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &caps);
 
 	memset(&g_oD3DAPP, 0, sizeof(g_oD3DAPP));
-	g_oD3DAPP.BackBufferWidth = width;
-	g_oD3DAPP.BackBufferHeight = heigth;
+	g_oD3DAPP.BackBufferWidth = iWidth;
+	g_oD3DAPP.BackBufferHeight = iHeigth;
 	g_oD3DAPP.BackBufferFormat = D3DFMT_A8R8G8B8;
 	g_oD3DAPP.BackBufferCount = 1;
 	g_oD3DAPP.MultiSampleType = D3DMULTISAMPLE_NONE;
 	g_oD3DAPP.MultiSampleQuality = 0;
 	g_oD3DAPP.SwapEffect = D3DSWAPEFFECT_DISCARD;
-	g_oD3DAPP.hDeviceWindow = hwnd;
-	g_oD3DAPP.Windowed = windowed;
+	g_oD3DAPP.hDeviceWindow = hWnd;
+	g_oD3DAPP.Windowed = isWindowed;
 	g_oD3DAPP.EnableAutoDepthStencil = true;
 	g_oD3DAPP.AutoDepthStencilFormat = D3DFMT_D24S8;
-	g_oD3DAPP.Flags = D3DPRESENTFLAG_DISCARD_DEPTHSTENCIL | create_device_flags | D3DCREATE_MULTITHREADED;
+	g_oD3DAPP.Flags = D3DPRESENTFLAG_DISCARD_DEPTHSTENCIL | dwFlags | D3DCREATE_MULTITHREADED;
 	g_oD3DAPP.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
 	g_oD3DAPP.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
 
-	if (FAILED(g_pD3D9->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd, D3DCREATE_HARDWARE_VERTEXPROCESSING | create_device_flags | D3DCREATE_MULTITHREADED, &g_oD3DAPP, &g_pDXDevice)))
+	if (FAILED(g_pD3D9->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_HARDWARE_VERTEXPROCESSING | dwFlags | D3DCREATE_MULTITHREADED, &g_oD3DAPP, &g_pDXDevice)))
 	{
-		g_fnReportf(-1, "%s: %s - failed initialized d3d, sxgcore", SX_LIB_NAME, GEN_MSG_LOCATION);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - failed initialized d3d", GEN_MSG_LOCATION);
 		return;
 	}
 
@@ -232,24 +242,24 @@ SX_LIB_API void SGCore_Dbg_Set(report_func rf)
 	g_fnReportf = rf;
 }
 
-SX_LIB_API void SGCore_0Create(const char* name, HWND hwnd, int width, int heigth, bool windowed, DWORD create_device_flags, bool is_unic)
+SX_LIB_API void SGCore_0Create(const char *szName, HWND hWnd, int iWidth, int iHeigth, bool isWindowed, DWORD dwFlags, bool isUnic)
 {
-	if (name && strlen(name) > 1)
+	if (szName && strlen(szName) > 1)
 	{
-		if (is_unic)
+		if (isUnic)
 		{
-			HANDLE hMutex = CreateMutex(NULL, FALSE, name);
+			HANDLE hMutex = CreateMutex(NULL, FALSE, szName);
 			if (GetLastError() == ERROR_ALREADY_EXISTS)
 			{
 				CloseHandle(hMutex);
-				g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s: %s - none unic name, sxgcore", SX_LIB_NAME, GEN_MSG_LOCATION);
+				LibReport(REPORT_MSG_LEVEL_ERROR, "%s - none unic name", GEN_MSG_LOCATION);
 				return;
 			}
 		}
-		GCoreInit(hwnd, width, heigth, windowed, create_device_flags);
+		GCoreInit(hWnd, iWidth, iHeigth, isWindowed, dwFlags);
 	}
 	else
-		g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s: %s - not init argument [name], sxgcore", SX_LIB_NAME, GEN_MSG_LOCATION);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - not init argument [name], sxgcore", GEN_MSG_LOCATION);
 }
 
 SX_LIB_API const DEVMODE* SGCore_GetModes(int *iCount)
@@ -284,14 +294,14 @@ SX_LIB_API IDirect3DDevice9* SGCore_GetDXDevice()
 	return g_pDXDevice;
 }
 
-SX_LIB_API void SGCore_DbgMsg(const char* format, ...)
+SX_LIB_API void SGCore_DbgMsg(const char *szFormat, ...)
 {
 	SG_PRECOND(_VOID);
 	
 	va_list va;
 	char buf[SXGC_STR_SIZE_DBG_MSG];
-	va_start(va, format);
-	vsprintf_s(buf, SXGC_STR_SIZE_DBG_MSG, format, va);
+	va_start(va, szFormat);
+	vsprintf_s(buf, SXGC_STR_SIZE_DBG_MSG, szFormat, va);
 	va_end(va);
 
 	RECT rect;
@@ -363,22 +373,22 @@ SX_LIB_API void SGCore_ScreenQuadDraw()
 
 //##########################################################################
 
-SX_LIB_API void SGCore_DIP(UINT type_primitive, long base_vertexIndex, UINT min_vertex_index, UINT num_vertices, UINT start_index, UINT prim_count)
+SX_LIB_API void SGCore_DIP(UINT uiTypePrimitive, long lBaseVertexIndex, UINT uiMinVertexIndex, UINT uiNumVertices, UINT uiStartIndex, UINT uiPrimitiveCount)
 {
 	SG_PRECOND(_VOID);
-	FuncDIP(type_primitive, base_vertexIndex, min_vertex_index, num_vertices, start_index, prim_count);
+	FuncDIP(uiTypePrimitive, lBaseVertexIndex, uiMinVertexIndex, uiNumVertices, uiStartIndex, uiPrimitiveCount);
 }
 
-SX_LIB_API void SGCore_MtlSet(ID id, float4x4* world)
+SX_LIB_API void SGCore_MtlSet(ID id, float4x4 *pWorld)
 {
 	SG_PRECOND(_VOID);
-	FuncMtlSet(id, world);
+	FuncMtlSet(id, pWorld);
 }
 
-SX_LIB_API ID SGCore_MtlLoad(const char* name, int mtl_type)
+SX_LIB_API ID SGCore_MtlLoad(const char *szName, int iMtlType)
 {
 	SG_PRECOND(-1);
-	return FuncMtlLoad(name, mtl_type);
+	return FuncMtlLoad(szName, iMtlType);
 }
 
 SX_LIB_API int SGCore_MtlGetSort(ID id)
@@ -400,49 +410,49 @@ SX_LIB_API bool SGCore_MtlGroupRenderIsSingly(ID id)
 }
 
 
-SX_LIB_API void SGCore_SetFunc_DIP(g_func_dip func)
+SX_LIB_API void SGCore_SetFunc_DIP(g_func_dip fnFunc)
 {
 	SG_PRECOND(_VOID);
-	FuncDIP = func;
+	FuncDIP = fnFunc;
 }
 
-SX_LIB_API void SGCore_SetFunc_MtlSet(g_func_mtl_set func)
+SX_LIB_API void SGCore_SetFunc_MtlSet(g_func_mtl_set fnFunc)
 {
 	SG_PRECOND(_VOID);
-	FuncMtlSet = func;
+	FuncMtlSet = fnFunc;
 }
 
-SX_LIB_API void SGCore_SetFunc_MtlLoad(g_func_mtl_load func)
+SX_LIB_API void SGCore_SetFunc_MtlLoad(g_func_mtl_load fnFunc)
 {
 	SG_PRECOND(_VOID);
-	FuncMtlLoad = func;
+	FuncMtlLoad = fnFunc;
 }
 
-SX_LIB_API void SGCore_SetFunc_MtlGetSort(g_func_mtl_get_sort func)
+SX_LIB_API void SGCore_SetFunc_MtlGetSort(g_func_mtl_get_sort fnFunc)
 {
 	SG_PRECOND(_VOID);
-	FuncMtlGetSort = func;
+	FuncMtlGetSort = fnFunc;
 }
 
-SX_LIB_API void SGCore_SetFunc_MtlGetPhysicType(g_func_mtl_get_physic_type func)
+SX_LIB_API void SGCore_SetFunc_MtlGetPhysicType(g_func_mtl_get_physic_type fnFunc)
 {
 	SG_PRECOND(_VOID);
-	FuncMtlGetPhysicType = func;
+	FuncMtlGetPhysicType = fnFunc;
 }
 
-SX_LIB_API void SGCore_SetFunc_MtlGroupRenderIsSingly(g_func_mtl_group_render_is_singly func)
+SX_LIB_API void SGCore_SetFunc_MtlGroupRenderIsSingly(g_func_mtl_group_render_is_singly fnFunc)
 {
 	SG_PRECOND(_VOID);
-	FuncMtlGroupRenderIsSingly = func;
+	FuncMtlGroupRenderIsSingly = fnFunc;
 }
 
 //##########################################################################
 
-SX_LIB_API ID SGCore_ShaderLoad(SHADER_TYPE type_shader, const char* path, const char* name, SHADER_CHECKDOUBLE is_check_double, D3DXMACRO* macro)
+SX_LIB_API ID SGCore_ShaderLoad(SHADER_TYPE type_shader, const char *szPath, const char *szName, SHADER_CHECKDOUBLE check_double, D3DXMACRO *pMacro)
 {
 	SG_PRECOND(-1);
 
-	return g_pManagerShaders->preLoad(type_shader, path, name, is_check_double, macro);
+	return g_pManagerShaders->preLoad(type_shader, szPath, szName, check_double, pMacro);
 }
 
 SX_LIB_API void SGCore_ShaderAllLoad()
@@ -452,11 +462,11 @@ SX_LIB_API void SGCore_ShaderAllLoad()
 	return g_pManagerShaders->allLoad();
 }
 
-SX_LIB_API void SGCore_ShaderUpdateN(SHADER_TYPE type_shader, const char* name)
+SX_LIB_API void SGCore_ShaderUpdateN(SHADER_TYPE type_shader, const char *szName)
 {
 	SG_PRECOND(_VOID);
 
-	g_pManagerShaders->update(type_shader, name);
+	g_pManagerShaders->update(type_shader, szName);
 }
 
 SX_LIB_API void SGCore_ShaderUpdate(SHADER_TYPE type_shader, ID id)
@@ -473,25 +483,25 @@ SX_LIB_API void SGCore_ShaderReloadAll()
 	g_pManagerShaders->reloadAll();
 }
 
-SX_LIB_API ID SGCore_ShaderGetID(SHADER_TYPE type_shader, const char* shader)
+SX_LIB_API ID SGCore_ShaderGetID(SHADER_TYPE type_shader, const char *szNameShader)
 {
 	SG_PRECOND(-1);
 
-	return g_pManagerShaders->getID(type_shader, shader);
+	return g_pManagerShaders->getID(type_shader, szNameShader);
 }
 
-SX_LIB_API void SGCore_ShaderBindN(SHADER_TYPE type_shader, const char* shader)
+SX_LIB_API void SGCore_ShaderBindN(SHADER_TYPE type_shader, const char *szNameShader)
 {
 	SG_PRECOND(_VOID);
 
-	return g_pManagerShaders->bind(type_shader, shader);
+	return g_pManagerShaders->bind(type_shader, szNameShader);
 }
 
-SX_LIB_API void SGCore_ShaderBind(SHADER_TYPE type_shader, ID shader)
+SX_LIB_API void SGCore_ShaderBind(SHADER_TYPE type_shader, ID idShader)
 {
 	SG_PRECOND(_VOID);
 
-	return g_pManagerShaders->bind(type_shader, shader);
+	return g_pManagerShaders->bind(type_shader, idShader);
 }
 
 
@@ -596,7 +606,7 @@ SX_LIB_API void SGCore_LoadTexDelete(ID id)
 	g_pManagerTextures->Delete(id);
 }
 
-SX_LIB_API ID SGCore_LoadTexAddName(const char* name, LoadTexType type)
+SX_LIB_API ID SGCore_LoadTexAddName(const char* name, LOAD_TEXTURE_TYPE type)
 {
 	SG_PRECOND(-1);
 
@@ -624,7 +634,7 @@ SX_LIB_API ID SGCore_LoadTexCreate(const char* name, IDirect3DTexture9* tex)
 	return g_pManagerTextures->Create(name, tex);
 }
 
-SX_LIB_API ID SGCore_LoadTexUpdateN(const char* name, LoadTexType type)
+SX_LIB_API ID SGCore_LoadTexUpdateN(const char* name, LOAD_TEXTURE_TYPE type)
 {
 	SG_PRECOND(-1);
 
@@ -829,22 +839,22 @@ SX_LIB_API bool SGCore_0InretsectBox(const float3 * min1, const float3 * max1, c
 
 SX_LIB_API ISXFrustum* SGCore_CrFrustum()
 {
-	return new Frustum();
+	return new CFrustum();
 }
 
 SX_LIB_API ISXCamera* SGCore_CrCamera()
 {
-	return new Camera();
+	return new CCamera();
 }
 
 SX_LIB_API ISXTransObject* SGCore_CrTransObject()
 {
-	return new SXTransObject();
+	return new CSXTransObject();
 }
 
 SX_LIB_API ISXBound* SGCore_CrBound()
 {
-	return new SXBound();
+	return new CSXBound();
 }
 
 //##########################################################################
@@ -896,9 +906,9 @@ SX_LIB_API void SGCore_SkyBoxCr()
 	SG_PRECOND(_VOID);
 
 	if (g_pSkyBox)
-		g_fnReportf(REPORT_MSG_LEVEL_WARNING, "%s: sky_box is already init", SX_LIB_NAME);
+		LibReport(REPORT_MSG_LEVEL_WARNING, "sky_box is already init");
 	else
-		g_pSkyBox = new SkyBox();
+		g_pSkyBox = new CSkyBox();
 }
 
 SX_LIB_API bool SGCore_SkyBoxIsCr()
@@ -910,61 +920,61 @@ SX_LIB_API bool SGCore_SkyBoxIsCr()
 SX_LIB_API bool SGCore_SkyBoxIsLoadTex()
 {
 	SG_PRECOND_SKY_BOX(false);
-	return g_pSkyBox->IsLoadTex();
+	return g_pSkyBox->isLoadTex();
 }
 
 SX_LIB_API void SGCore_SkyBoxLoadTex(const char *texture)
 {
 	SG_PRECOND_SKY_BOX(_VOID);
-	g_pSkyBox->LoadTextures(texture);
+	g_pSkyBox->loadTextures(texture);
 }
 
 SX_LIB_API void SGCore_SkyBoxChangeTex(const char *texture)
 {
 	SG_PRECOND_SKY_BOX(_VOID);
-	g_pSkyBox->ChangeTexture(texture);
+	g_pSkyBox->changeTexture(texture);
 }
 
 SX_LIB_API void SGCore_SkyBoxGetActiveTex(char *texture)
 {
 	SG_PRECOND_SKY_BOX(_VOID);
-	g_pSkyBox->GetActiveTexture(texture);
+	g_pSkyBox->getActiveTexture(texture);
 }
 
 SX_LIB_API void SGCore_SkyBoxGetSecondTex(char *texture)
 {
 	SG_PRECOND_SKY_BOX(_VOID);
-	g_pSkyBox->GetSecondTexture(texture);
+	g_pSkyBox->getSecondTexture(texture);
 }
 
 SX_LIB_API void SGCore_SkyBoxSetRot(float angle)
 {
 	SG_PRECOND_SKY_BOX(_VOID);
-	g_pSkyBox->SetRotation(angle);
+	g_pSkyBox->setRotation(angle);
 }
 
 SX_LIB_API float SGCore_SkyBoxGetRot()
 {
 	SG_PRECOND_SKY_BOX(0);
-	return g_pSkyBox->GetRotation();
+	return g_pSkyBox->getRotation();
 }
 
-SX_LIB_API void SGCore_SkyBoxSetColor(float4_t* color)
+SX_LIB_API void SGCore_SkyBoxSetColor(const float4_t* color)
 {
 	SG_PRECOND_SKY_BOX(_VOID);
-	g_pSkyBox->SetColor(color);
+	g_pSkyBox->setColor(color);
 }
 
 SX_LIB_API void SGCore_SkyBoxGetColor(float4_t* color)
 {
 	SG_PRECOND_SKY_BOX(_VOID);
-	g_pSkyBox->GetColor(color);
+	g_pSkyBox->getColor(color);
 }
 
-SX_LIB_API void SGCore_SkyBoxRender(float timeDelta, float3* pos)
+SX_LIB_API void SGCore_SkyBoxRender(float timeDelta, const float3* pos)
 {
 	SG_PRECOND_SKY_BOX(_VOID);
-	g_pSkyBox->Render(timeDelta, pos, false);
+	g_pSkyBox->render(timeDelta, pos, false);
 }
 
 //**************************************************************************
@@ -974,9 +984,9 @@ SX_LIB_API void SGCore_SkyCloudsCr()
 	SG_PRECOND(_VOID);
 
 	if (g_pSkyClouds)
-		g_fnReportf(REPORT_MSG_LEVEL_WARNING, "%s: sky_clouds is already init", SX_LIB_NAME);
+		LibReport(REPORT_MSG_LEVEL_WARNING, "sky_clouds is already init");
 	else
-		g_pSkyClouds = new SkyClouds();
+		g_pSkyClouds = new CSkyClouds();
 }
 
 SX_LIB_API bool SGCore_SkyCloudsIsCr()
@@ -990,77 +1000,77 @@ SX_LIB_API bool SGCore_SkyCloudsIsLoadTex()
 {
 	SG_PRECOND_SKY_CLOUDS(false);
 
-	return g_pSkyClouds->IsLoadTex();
+	return g_pSkyClouds->isLoadTex();
 }
 
-SX_LIB_API void SGCore_SkyCloudsSetWidthHeightPos(float width, float height, float3* pos)
+SX_LIB_API void SGCore_SkyCloudsSetWidthHeightPos(float width, float height, const float3* pos)
 {
 	SG_PRECOND_SKY_CLOUDS(_VOID);
-	g_pSkyClouds->SetWidthHeightPos(width, height, pos);
+	g_pSkyClouds->setWidthHeightPos(width, height, pos);
 }
 
 SX_LIB_API void SGCore_SkyCloudsLoadTex(const char *texture)
 {
 	SG_PRECOND_SKY_CLOUDS(_VOID);
-	g_pSkyClouds->LoadTextures(texture);
+	g_pSkyClouds->loadTextures(texture);
 }
 
 SX_LIB_API void SGCore_SkyCloudsChangeTex(const char *texture)
 {
 	SG_PRECOND_SKY_CLOUDS(_VOID);
-	g_pSkyClouds->ChangeTexture(texture);
+	g_pSkyClouds->changeTexture(texture);
 }
 
 SX_LIB_API void SGCore_SkyCloudsSetRot(float angle)
 {
 	SG_PRECOND_SKY_CLOUDS(_VOID);
-	g_pSkyClouds->SetRotation(angle);
+	g_pSkyClouds->setRotation(angle);
 }
 
 SX_LIB_API float SGCore_SkyCloudsGetRot()
 {
 	SG_PRECOND_SKY_CLOUDS(0);
-	return g_pSkyClouds->GetRotation();
+	return g_pSkyClouds->getRotation();
 }
 
 SX_LIB_API void SGCore_SkyCloudsSetAlpha(float alpha)
 {
 	SG_PRECOND_SKY_CLOUDS(_VOID);
-	g_pSkyClouds->SetAlpha(alpha);
+	g_pSkyClouds->setAlpha(alpha);
 }
 
 SX_LIB_API float SGCore_SkyCloudsGetAlpha()
 {
 	SG_PRECOND_SKY_CLOUDS(0);
-	return g_pSkyClouds->GetAlpha();
+	return g_pSkyClouds->getAlpha();
 }
 
 SX_LIB_API void SGCore_SkyCloudsSetSpeed(float speed)
 {
 	SG_PRECOND_SKY_CLOUDS(_VOID);
-	g_pSkyClouds->SetSpeed(speed);
+	g_pSkyClouds->setSpeed(speed);
 }
 
 SX_LIB_API float SGCore_SkyCloudsGetSpeed()
 {
 	SG_PRECOND_SKY_CLOUDS(0);
-	return g_pSkyClouds->GetSpeed();
+	return g_pSkyClouds->getSpeed();
 }
 
-SX_LIB_API void SGCore_SkyCloudsSetColor(float4_t* color)
+SX_LIB_API void SGCore_SkyCloudsSetColor(const float4_t* color)
 {
 	SG_PRECOND_SKY_CLOUDS(_VOID);
-	g_pSkyClouds->SetColor(color);
+	g_pSkyClouds->setColor(color);
 }
 
 SX_LIB_API void SGCore_SkyCloudsGetColor(float4_t* color)
 {
 	SG_PRECOND_SKY_CLOUDS(_VOID);
-	g_pSkyClouds->GetColor(color);
+	g_pSkyClouds->getColor(color);
 }
 
-SX_LIB_API void SGCore_SkyCloudsRender(DWORD timeDetlta, float3* pos, bool is_shadow)
+SX_LIB_API void SGCore_SkyCloudsRender(DWORD timeDetlta, const float3* pos, bool is_shadow)
 {
 	SG_PRECOND_SKY_CLOUDS(_VOID);
-	g_pSkyClouds->Render(timeDetlta, pos, is_shadow);
+	g_pSkyClouds->render(timeDetlta, pos, is_shadow);
 }
diff --git a/source/gcore/sxgcore.h b/source/gcore/sxgcore.h
index bc8a39471..882e36ed3 100644
--- a/source/gcore/sxgcore.h
+++ b/source/gcore/sxgcore.h
@@ -1,8 +1,8 @@
 
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 /*!
 \file
@@ -31,9 +31,6 @@ See the license in LICENSE
 #define SX_LIB_API extern "C" __declspec (dllimport)
 #include <core/sxcore.h>
 
-//! имя библиотеки
-#define SX_LIB_NAME COLOR_GREEN "CORE" COLOR_RESET
-
 #ifdef SX_DLL
 #undef SX_LIB_API
 #define SX_LIB_API extern "C" __declspec (dllexport)
@@ -69,7 +66,7 @@ See the license in LICENSE
 SX_LIB_API long SGCore_0GetVersion();			
 
 //! установка функции вывода сообщений
-SX_LIB_API void SGCore_Dbg_Set(report_func rf);	
+SX_LIB_API void SGCore_Dbg_Set(report_func fnReport);	
 
 //! инициализация подсистемы
 SX_LIB_API void SGCore_0Create(
@@ -88,7 +85,7 @@ SX_LIB_API void SGCore_AKill();
 //! возвращает dx устройство
 SX_LIB_API IDirect3DDevice9* SGCore_GetDXDevice();	
 
-//! возвращает массив всех доступных разрешений монитора
+//! возвращает массив всех доступных разрешений монитора, в iCount записывает размер массива
 SX_LIB_API const DEVMODE* SGCore_GetModes(int *iCount);
 
 //!@}
@@ -120,9 +117,9 @@ SX_LIB_API void SGCore_OnLostDevice();
 
 //! вызывать при попытке сброса устройства
 SX_LIB_API bool SGCore_OnDeviceReset(
-	int width,		//!< новая ширина окна
-	int heigth,		//!< новая выоста окна
-	bool windewed	//!< true - оконный режим, false - полноэкранный
+	int iWwidth,		//!< новая ширина окна
+	int iHeigth,		//!< новая выоста окна
+	bool isWindewed		//!< true - оконный режим, false - полноэкранный
 	);	
 
 //! вызывать при сбросе устроства
@@ -141,17 +138,17 @@ value - для Filter D3DTEXTUREFILTERTYPE, для Address D3DTEXTUREADDRESS
 @{*/
 
 //! установка фильтрации для конкретного слота
-SX_LIB_API void SGCore_SetSamplerFilter(DWORD id, DWORD value);	
+SX_LIB_API void SGCore_SetSamplerFilter(DWORD dwNum, DWORD dwValue);	
 
 //! установка фильтрации для набора слотов от begin_id до end_id
-SX_LIB_API void SGCore_SetSamplerFilter2(DWORD begin_id, DWORD end_id, DWORD value);	
+SX_LIB_API void SGCore_SetSamplerFilter2(DWORD dwNumStart, DWORD dwCount, DWORD dwValue);
 
 
 //! установка адресации для конкретного слота
-SX_LIB_API void SGCore_SetSamplerAddress(DWORD id, DWORD value);	
+SX_LIB_API void SGCore_SetSamplerAddress(DWORD dwNum, DWORD dwValue);
 
 //! установка адресации для набора слотов от begin_id до end_id
-SX_LIB_API void SGCore_SetSamplerAddress2(DWORD begin_id, DWORD end_id, DWORD value);	
+SX_LIB_API void SGCore_SetSamplerAddress2(DWORD dwNumStart, DWORD dwCount, DWORD dwValue);
 
 //!@}
 
@@ -171,19 +168,19 @@ SX_LIB_API void SGCore_SetSamplerAddress2(DWORD begin_id, DWORD end_id, DWORD va
 /*! draw indexed primitive, команда отрисовки.
 Аналогична DrawIndexedPrimitive, в дополнение к DIP инкрементирует счетчик DIPов в int регистрах по индексу #G_RI_INT_COUNT_DIP, обнуление данных только на стороне приложения
 */
-typedef void(*g_func_dip) (UINT type_primitive, long base_vertexIndex, UINT min_vertex_index, UINT num_vertices, UINT start_index, UINT prim_count);
+typedef void(*g_func_dip) (UINT uiTypePrimitive, long lBaseVertexIndex, UINT uiMinVertexIndex, UINT uiNumVertices, UINT uiStartIndex, UINT uiPrimitiveCount);
 
 /*! установка материала id, world - мировая матрица.
 По умолчанию установка текстуры в нулевой текстурный слот, id – идентификатор материала (по умолчанию - текстуры), world – матрица трансформации модели
 */
-typedef void(*g_func_mtl_set) (ID id, float4x4* world);
+typedef void(*g_func_mtl_set) (ID id, float4x4 *pWorld);
 
-/*! загрузка материала, name - имя текстуры с расширением, mtl_type - тип материала на случай провала загрузки.
-Загрузка материала (по умолчанию – текстуры) с именем name, mtl_type – типа материала, 
+/*! загрузка материала, szName - имя текстуры с расширением, iMtlType - тип материала на случай провала загрузки.
+Загрузка материала (по умолчанию – текстуры) с именем name, iMtlType – типа материала, 
 будет задействован только в случае провала определения типа материала (по умолчанию не используется) - 
-тип стандартного материала будет определен на основании mtl_type, может принимать одно из значений MTL_TYPE_
+тип стандартного материала будет определен на основании iMtlType, может принимать одно из значений MTL_TYPE_
 */
-typedef ID(*g_func_mtl_load) (const char* name,	int mtl_type);
+typedef ID(*g_func_mtl_load) (const char *szName,	int iMtlType);
 
 //! получить сорт материала, по дефолту 0
 typedef int(*g_func_mtl_get_sort) (ID id);
@@ -200,13 +197,13 @@ typedef bool(*g_func_mtl_group_render_is_singly) (ID id);
 !@{*/
 
 //! \copydoc g_func_dip
-SX_LIB_API void SGCore_DIP(UINT type_primitive, long base_vertexIndex, UINT min_vertex_index, UINT num_vertices, UINT start_index, UINT prim_count);
+SX_LIB_API void SGCore_DIP(UINT uiTypePrimitive, long lBaseVertexIndex, UINT uiMinVertexIndex, UINT uiNumVertices, UINT uiStartIndex, UINT uiPrimitiveCount);
 
 //! \copydoc g_func_mtl_set
-SX_LIB_API void SGCore_MtlSet(ID id, float4x4* world);
+SX_LIB_API void SGCore_MtlSet(ID id, float4x4 *pWorld);
 
 //! \copydoc g_func_mtl_load
-SX_LIB_API ID SGCore_MtlLoad(const char* name, int mtl_type);
+SX_LIB_API ID SGCore_MtlLoad(const char *szName, int iMtlType);
 
 //! \copydoc g_func_mtl_get_sort
 SX_LIB_API int SGCore_MtlGetSort(ID id);
@@ -225,22 +222,22 @@ SX_LIB_API bool SGCore_MtlGroupRenderIsSingly(ID id);
 !@{*/
 
 //! переназначение g_func_dip
-SX_LIB_API void SGCore_SetFunc_DIP(g_func_dip func);
+SX_LIB_API void SGCore_SetFunc_DIP(g_func_dip fnFunc);
 
 //! переназначение g_func_mtl_set
-SX_LIB_API void SGCore_SetFunc_MtlSet(g_func_mtl_set func);
+SX_LIB_API void SGCore_SetFunc_MtlSet(g_func_mtl_set fnFunc);
 
 //! переназначение g_func_mtl_load
-SX_LIB_API void SGCore_SetFunc_MtlLoad(g_func_mtl_load func);
+SX_LIB_API void SGCore_SetFunc_MtlLoad(g_func_mtl_load fnFunc);
 
 //! переназначение g_func_mtl_get_sort
-SX_LIB_API void SGCore_SetFunc_MtlGetSort(g_func_mtl_get_sort func);
+SX_LIB_API void SGCore_SetFunc_MtlGetSort(g_func_mtl_get_sort fnFunc);
 
 //! переназначение g_func_mtl_get_physic_type
-SX_LIB_API void SGCore_SetFunc_MtlGetPhysicType(g_func_mtl_get_physic_type func);
+SX_LIB_API void SGCore_SetFunc_MtlGetPhysicType(g_func_mtl_get_physic_type fnFunc);
 
 //! переназначение g_func_mtl_group_render_is_singly
-SX_LIB_API void SGCore_SetFunc_MtlGroupRenderIsSingly(g_func_mtl_group_render_is_singly func);
+SX_LIB_API void SGCore_SetFunc_MtlGroupRenderIsSingly(g_func_mtl_group_render_is_singly fnFunc);
 
 //!@}
 
@@ -312,50 +309,50 @@ SX_LIB_API void SGCore_ShaderAllLoad();
 
 //! поставить шейдер в очередь загрузки
 SX_LIB_API ID SGCore_ShaderLoad(
-	SHADER_TYPE type_shader,	//!< тип шейдера
-	const char* path,			//!< имя файла шейдера с расширением
-	const char* name,			//!< имя шейдера которое присвоится при загрузке
-	SHADER_CHECKDOUBLE is_check_double,	//!< проверять ли на уникальность
-	D3DXMACRO* macro = 0		//!< макросы
+	SHADER_TYPE type_shader,		//!< тип шейдера
+	const char *szPath,				//!< имя файла шейдера с расширением
+	const char *szName,				//!< имя шейдера которое присвоится при загрузке
+	SHADER_CHECKDOUBLE check_double,//!< проверять ли на уникальность
+	D3DXMACRO *pMacro = 0			//!< макросы
 	);
 
 //! существует ли файл name в папке с шейдерами
-SX_LIB_API bool SGCore_ShaderFileExists(const char* name);	
+SX_LIB_API bool SGCore_ShaderFileExists(const char *szName);
 
 //! записывает пользовательское имя шейдера в name
-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);
 
 //! записывает имя шейдер с расширением в path
-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);
 
 //! существует ли шейдер с пользовательским именем name, если да то возвращает id
-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);
 
 //! существует ли шейдер с именем файла и расширением name, если да то возвращает id
-SX_LIB_API ID SGCore_ShaderExistsPath(SHADER_TYPE type_shader, const char* path);	
+SX_LIB_API ID SGCore_ShaderExistsPath(SHADER_TYPE type_shader, const char *szPath);
 
 //! загружен ли шейдер с данным id
-SX_LIB_API bool SGCore_ShaderIsValidated(SHADER_TYPE type_shader, ID id);				
+SX_LIB_API bool SGCore_ShaderIsValidated(SHADER_TYPE type_shader, ID idShader);
 
 
 //! обновление шейдера по имени
-SX_LIB_API void SGCore_ShaderUpdateN(SHADER_TYPE type_shader, const char* name);	
+SX_LIB_API void SGCore_ShaderUpdateN(SHADER_TYPE type_shader, const char *szName);
 
 //! обновление шейдера по id
-SX_LIB_API void SGCore_ShaderUpdate(SHADER_TYPE type_shader, ID id);	
+SX_LIB_API void SGCore_ShaderUpdate(SHADER_TYPE type_shader, ID idShader);
 
 //! перезагрузить все шейдеры, с учетом макросов
 SX_LIB_API void SGCore_ShaderReloadAll();	
 
 
 //! получить идентификатор шейдера по имени
-SX_LIB_API ID SGCore_ShaderGetID(SHADER_TYPE type_shader, const char* name);	
+SX_LIB_API ID SGCore_ShaderGetID(SHADER_TYPE type_shader, const char *szName);
 
 //! бинд шейдера по имени
-SX_LIB_API void SGCore_ShaderBindN(SHADER_TYPE type_shader, const char* name);	
+SX_LIB_API void SGCore_ShaderBindN(SHADER_TYPE type_shader, const char *szName);
 
 //! бинд шейдера по id
-SX_LIB_API void SGCore_ShaderBind(SHADER_TYPE type_shader, ID id);	
+SX_LIB_API void SGCore_ShaderBind(SHADER_TYPE type_shader, ID idShader);
 
 
 //! обнуление биндов шейдеров
@@ -369,37 +366,37 @@ SX_LIB_API void SGCore_ShaderUnBind();
 //! передача float значений в шейдер по имени
 SX_LIB_API void SGCore_ShaderSetVRFN(
 	SHADER_TYPE type_shader,	//!< тип шейдера из #SHADER_TYPE
-	const char* name_shader,//!< пользовательское имя шейдера
-	const char* name_var,	//!< имя переменной которой присваивается значение
-	void* data,				//!< указатель на массив данных
-	int count_float4 = 0	//!< количество float4 значений в передаваемом массиве, если меньше одного значит количество будет взято из шейдера
+	const char *szNameShader,	//!< пользовательское имя шейдера
+	const char *szNameVar,		//!< имя переменной которой присваивается значение
+	void *pData,				//!< указатель на массив данных
+	int iCountFloat4 = 0		//!< количество float4 значений в передаваемом массиве, если меньше одного значит количество будет взято из шейдера
 	);
 
 //! передача float значений в шейдер по ID
 SX_LIB_API void SGCore_ShaderSetVRF(
-	SHADER_TYPE type_shader, //!< тип шейдера из #SHADER_TYPE
-	ID id,					//!< идентификатор шейдера
-	const char* name_var,	//!< имя переменной которой присваивается значение
-	void* data,				//!< указатель на массив данных
-	int count_float4 = 0	//!< количество float4 значений в передаваемом массиве, если меньше одного значит количество будет взято из шейдера
+	SHADER_TYPE type_shader,	//!< тип шейдера из #SHADER_TYPE
+	ID idShader,				//!< идентификатор шейдера
+	const char *szNameVar,		//!< имя переменной которой присваивается значение
+	void *pData,				//!< указатель на массив данных
+	int iCountFloat4 = 0		//!< количество float4 значений в передаваемом массиве, если меньше одного значит количество будет взято из шейдера
 	);
 
 //! передача int значений в шейдер по имени
 SX_LIB_API void SGCore_ShaderSetVRIN(
 	SHADER_TYPE type_shader,	//!< тип шейдера из #SHADER_TYPE
-	const char* name_shader,//!< пользовательское имя шейдера
-	const char* name_var,	//!< имя переменной которой присваивается значение
-	void* data,				//!< указатель на массив данных
-	int count_int4 = 0		//!< количество int4 значений в передаваемом массиве, если меньше одного значит количество будет взято из шейдера
+	const char *szNameShader,	//!< пользовательское имя шейдера
+	const char *szNameVar,		//!< имя переменной которой присваивается значение
+	void *pData,				//!< указатель на массив данных
+	int iCountInt4 = 0			//!< количество int4 значений в передаваемом массиве, если меньше одного значит количество будет взято из шейдера
 	);
 
 //! передача int значений в шейдер по ID
 SX_LIB_API void SGCore_ShaderSetVRI(
-	SHADER_TYPE type_shader, //!< тип шейдера из #SHADER_TYPE
-	ID id,					//!< идентификатор шейдера
-	const char* name_var,	//!< имя переменной которой присваивается значение
-	void* data,				//!< указатель на массив данных
-	int count_int4 = 0		//!< количество int4 значений в передаваемом массиве, если меньше одного значит количество будет взято из шейдера
+	SHADER_TYPE type_shader,	//!< тип шейдера из #SHADER_TYPE
+	ID idShader,				//!< идентификатор шейдера
+	const char *szNameVar,		//!< имя переменной которой присваивается значение
+	void *pData,				//!< указатель на массив данных
+	int iCountInt4 = 0			//!< количество int4 значений в передаваемом массиве, если меньше одного значит количество будет взято из шейдера
 	);
 
 //!@}
@@ -457,56 +454,56 @@ SX_LIB_API void SGCore_ShaderSetVRI(
 //!@}
 
 //! типы текстур
-enum LoadTexType
+enum LOAD_TEXTURE_TYPE
 {
-	ltt_load,	//!< загружаемая
-	ltt_const,	//!< неудаляемая загружаемая
-	ltt_custom,	//!< созданная пользователем
+	LOAD_TEXTURE_TYPE_LOAD,		//!< загружаемая
+	LOAD_TEXTURE_TYPE_CONST,	//!< неудаляемая загружаемая
+	LOAD_TEXTURE_TYPE_CUSTOM,	//!< созданная пользователем
 
 	/*! самоопределение типа, на тот случай когда обновляем текстуру которая точно есть.
 	Если определить этот тип, а внутри у текстуры на самом деле нет типа (скорее всего нет текстуры)
-	то будет определен ltt_load
+	то будет определен LOAD_TEXTURE_TYPE_LOAD
 	*/
-	ltt_self,	
+	LOAD_TEXTURE_TYPE_SELF,
 };
 
 //**************************************************************************
 
 //! существует ил файл name в папке с текстурами
-SX_LIB_API bool SGCore_LoadTexFileExists(const char* name);	
+SX_LIB_API bool SGCore_LoadTexFileExists(const char *szName);	
 
 //! очистить список загружаемых текстур
 SX_LIB_API void SGCore_LoadTexClearLoaded();				
 
 //! удалить тектуру по id (независимо от типа)
-SX_LIB_API void SGCore_LoadTexDelete(ID id);				
+SX_LIB_API void SGCore_LoadTexDelete(ID idTexture);				
 
 //! добавляем имя текстуры, взамен получаем на нее ID (поставить в очередь)
-SX_LIB_API ID SGCore_LoadTexAddName(const char* name, LoadTexType type);
+SX_LIB_API ID SGCore_LoadTexAddName(const char *szName, LOAD_TEXTURE_TYPE type);
 
 //! получить id по имени
-SX_LIB_API ID SGCore_LoadTexGetID(const char* name);	
+SX_LIB_API ID SGCore_LoadTexGetID(const char *szName);
 
 //! получить имя по id
-SX_LIB_API void SGCore_LoadTexGetName(ID id, char* name);
+SX_LIB_API void SGCore_LoadTexGetName(ID idTexture, char *szName);
 
 
 /*! создать место для текстуры tex и присвоить ей имя name, возвращает id
  \warning создавать текстур необходимо в managed pool (D3DPOOL_MANAGED) ибо обработка потери и восстановления устройства сюда не приходит
 */
-SX_LIB_API ID SGCore_LoadTexCreate(const char* name, IDirect3DTexture9* tex);
+SX_LIB_API ID SGCore_LoadTexCreate(const char *szName, IDirect3DTexture9 *pTexture);
 
 /*! обновить/перезагрузить текстуру name, если текстуры не было в списке то добавляет.
 Если текстуру надо обновить, но тип у нее заранее не известен, но она точно уже загружена  
-то можно использовать тип самоопределения ltt_self, тогда тип текстуры не изменится
+то можно использовать тип самоопределения LOAD_TEXTURE_TYPE_SELF, тогда тип текстуры не изменится
 */
-SX_LIB_API ID SGCore_LoadTexUpdateN(const char* name, LoadTexType type);
+SX_LIB_API ID SGCore_LoadTexUpdateN(const char *szName, LOAD_TEXTURE_TYPE type);
 
 //! обновить/перезагрузить текстуру
-SX_LIB_API void SGCore_LoadTexUpdate(ID id);
+SX_LIB_API void SGCore_LoadTexUpdate(ID idTexture);
 
 //! возвращает текстуру по id
-SX_LIB_API IDirect3DTexture9* SGCore_LoadTexGetTex(ID id);	
+SX_LIB_API IDirect3DTexture9* SGCore_LoadTexGetTex(ID idTexture);
 
 //! загрузка всех текстур поставленных в очередь, если есть очередь
 SX_LIB_API void SGCore_LoadTexAllLoad();	
@@ -522,31 +519,31 @@ SX_LIB_API void SGCore_LoadTexAllLoad();
 
 //! добавить новый render target
 SX_LIB_API ID SGCore_RTAdd(
-	UINT width,				//!< ширина
-	UINT height,			//!< высота
-	UINT levels,			//!< количество mip-map уровней
-	DWORD usage,			//!< признак применения, возможные значения из D3DUSAGE_
+	UINT iWidth,			//!< ширина
+	UINT iHeight,			//!< высота
+	UINT iLevels,			//!< количество mip-map уровней
+	DWORD dwUsage,			//!< признак применения, возможные значения из D3DUSAGE_
 	D3DFORMAT format,		//!< формат из D3DFORMAT
 	D3DPOOL pool,			//!< где будет размещена текстура, из D3DPOOL
-	const char* name,		//!< имя rt
+	const char *szName,		//!< имя rt
 	/*! коэфициент размеров rt относительно области рендера 
 	(если rt и размер области одинаковы то 1, если rt меньша на 0.5 то 0.5) 
 	если указаны фиксированные значения то ставить 0, это нужно для устновления размеров при восстановлении устройства
 	*/
-	float coeffullscreen
+	float fCoefFullScreen
 	);
 
 //! удалить rt по имени
-SX_LIB_API void SGCore_RTDeleteN(const char* name);	
+SX_LIB_API void SGCore_RTDeleteN(const char *szName);	
 
 //! удалить rt по id
 SX_LIB_API void SGCore_RTDelete(ID id);				
 
 //! возвращает id по имени
-SX_LIB_API ID SGCore_RTGetNum(const char* name); 
+SX_LIB_API ID SGCore_RTGetNum(const char *szName);
 
 //! возвращает текстуру по имени
-SX_LIB_API IDirect3DTexture9* SGCore_RTGetTextureN(const char* name);	
+SX_LIB_API IDirect3DTexture9* SGCore_RTGetTextureN(const char *szName);
 
 //! возвращает текстуру по id
 SX_LIB_API IDirect3DTexture9* SGCore_RTGetTexture(ID id);				
@@ -566,32 +563,32 @@ struct ISXDataStaticModel : public IBaseObject
 {
 	virtual ~ISXDataStaticModel(){};
 
-	virtual ISXDataStaticModel* GetCopy()=0;	//!< получить абсолютную копию модели
+	virtual ISXDataStaticModel* getCopy()=0;//!< получить абсолютную копию модели
 	
-	IDirect3DVertexBuffer9* VertexBuffer;	//!< вершиный буфер
-	IDirect3DIndexBuffer9* IndexBuffer;		//!< индексный буфер
-
-	UINT SubsetCount;	//!< количество подгрупп
-	char** ArrTextures;	//!< массив имен текстур без расширения
-	UINT* StartIndex;	//!< массив стартовых позиций индексов для каждой подгруппы
-	UINT* IndexCount;	//!< массив количества индексов для каждой подгруппы
-	UINT* StartVertex;	//!< массив стартовых позиций вершин для каждой подгруппы
-	UINT* VertexCount;	//!< массив количества вершин для каждой подгруппы
-	UINT AllIndexCount;	//!< общее количество индексов
-	UINT AllVertexCount;//!< общее количество вершин
-
-	float4_t BSphere;
-	float3_t BBMax, BBMin;
+	IDirect3DVertexBuffer9 *m_pVertexBuffer;//!< вершиный буфер
+	IDirect3DIndexBuffer9 *m_pIndexBuffer;	//!< индексный буфер
+
+	UINT m_uiSubsetCount;		//!< количество подгрупп
+	char **m_ppTextures;		//!< массив имен текстур без расширения
+	UINT *m_pStartIndex;		//!< массив стартовых позиций индексов для каждой подгруппы
+	UINT *m_pIndexCount;		//!< массив количества индексов для каждой подгруппы
+	UINT *m_pStartVertex;		//!< массив стартовых позиций вершин для каждой подгруппы
+	UINT *m_pVertexCount;		//!< массив количества вершин для каждой подгруппы
+	UINT m_uiAllIndexCount;		//!< общее количество индексов
+	UINT m_uiAllVertexCount;	//!< общее количество вершин
+
+	float4_t m_vBSphere;
+	float3_t m_vBBMax, m_vBBMin;
 };
 
 //! создать статическую модель
 SX_LIB_API ISXDataStaticModel* SGCore_StaticModelCr();	
 
 //! загрузить статическую модель, data инициализируется внутри
-SX_LIB_API void SGCore_StaticModelLoad(const char* file, ISXDataStaticModel** data);	
+SX_LIB_API void SGCore_StaticModelLoad(const char *szFile, ISXDataStaticModel **ppData);	
 
 //! сохранить статическую модель
-SX_LIB_API void SGCore_StaticModelSave(const char* file, ISXDataStaticModel** data);	
+SX_LIB_API void SGCore_StaticModelSave(const char *szFile, ISXDataStaticModel **pData);
 
 //! возвращает декларацию вершин статической модели
 SX_LIB_API IDirect3DVertexDeclaration9* SGCore_StaticModelGetDecl();	
@@ -613,12 +610,13 @@ struct ISXTransObject : public IBaseObject
 
 	SX_ALIGNED_OP_MEM
 
-	virtual inline float4x4* CalcWorld() = 0;	//!< просчет мировой матрицы трансформации на основе поворотов масштабирования и позиции
+	//! просчет мировой матрицы трансформации на основе поворотов масштабирования и позиции
+	virtual inline float4x4* calcWorld() = 0;	
 
-	float3 Position;	//!< позиция
-	float3 Rotation;	//!< повороты
-	float3 Scale;		//!< масштабирование
-	float4x4 World;		//!< мировая матрица на основе поворотов масштабирования и позиции
+	float3 m_vPosition;	//!< позиция
+	float3 m_vRotation;	//!< повороты
+	float3 m_vScale;	//!< масштабирование
+	float4x4 m_mWorld;	//!< мировая матрица на основе поворотов масштабирования и позиции
 };
 
 //! создать ISXTransObject
@@ -648,38 +646,42 @@ public:
 	SX_ALIGNED_OP_MEM
 
 	/*! Просчет ограничивающего объема по вершинному буферу*/
-	virtual void CalcBound(
-		IDirect3DVertexBuffer9* vertex_buffer, //!< вершинный буфер (незаблокированный), в вершинах которого первым элементом идет позиция float3_t вектор  
-		DWORD count_vert,	//!< количество вершин
-		DWORD bytepervert	//!< количество байт в вершине
+	virtual void calcBound(
+		IDirect3DVertexBuffer9 *pVertexBuffer, //!< вершинный буфер (незаблокированный), в вершинах которого первым элементом идет позиция float3_t вектор  
+		DWORD dwCountVertex,	//!< количество вершин
+		DWORD dwBytePerVertex	//!< количество байт в вершине
 		) = 0;
 
 	//! функция просчета мировой матрицы и трансформации минимума и максимума
-	virtual float4x4* CalcWorldAndTrans() = 0;
+	virtual float4x4*  calcWorldAndTrans() = 0;
 
 	//! просчет структуры SXPosBBScreen 
-	virtual void GetPosBBScreen(
+	virtual void getPosBBScreen(
 		SXPosBBScreen *res,		//!< инициализированная стркутура #SXPosBBScreen для записи
 		float3* campos,			//!< позиция наблюдателя
 		float3* sizemapdepth,	//!< размер карты глубины глябины для просчета float3(ширина, высота, максильная глубина)
 		float4x4* mat			//!< произведение видовой и проекционной матриц
 		) = 0;
 
-	virtual void SetMinMax(float3* min, float3* max) = 0;	//!< установить экстремум, также просчитает и сферу
-	virtual void GetMinMax(float3* min, float3* max) const = 0;	//!< запишет в min и max точки экстремума
+	//! установить экстремум, также просчитает и сферу
+	virtual void setMinMax(const float3 *pMin, const float3 *pMax) = 0;	
+
+	//! запишет в min и max точки экстремума
+	virtual void getMinMax(float3 *pMin, float3 *pMax) const = 0;			
+
 
-	virtual void SetSphere(float3* center, float* radius) = 0;	//!< установить сферу, просчитает также и параллелепипед
-	virtual void GetSphere(float3* center, float* radius) const = 0;	//!< запишет в center центр сферы, в radius радиус сферы
+	//! установить сферу, просчитает также и параллелепипед
+	virtual void setSphere(const float3 *pCenter, float fRadius) = 0;	
 
-	virtual bool IsPointInSphere(float3* point) const = 0;	//!< находится ли точка point в пределах сферы
-	virtual bool IsPointInBox(float3* point) const = 0;		//!< находится ли точка point в пределах параллелепипеда
+	//! запишет в center центр сферы, в radius радиус сферы
+	virtual void getSphere(float3 *pCenter, float *pRadius) const = 0;	
 
-protected:
-	float3 Min;
-	float3 Max;
 
-	float3 Center;
-	float Radius;
+	//! находится ли точка point в пределах сферы
+	virtual bool isPointInSphere(const float3 *pPoint) const = 0;	
+
+	//! находится ли точка point в пределах параллелепипеда
+	virtual bool isPointInBox(const float3 *pPoint) const = 0;		
 };
 
 //! создать ISXBound
@@ -833,20 +835,20 @@ struct SXTriangle
 */
 
 //! структура описание плоскости
-struct SXFrustumPlane
+struct CSXFrustumPlane
 {
-	float3_t Normal;
-	float Distance;
+	float3_t m_vNormal;
+	float m_fDistance;
 
 	SX_ALIGNED_OP_MEM
 
-	void Normalize()
+	void normalize()
 	{
-			float denom = sqrt((Normal.x*Normal.x) + (Normal.y*Normal.y) + (Normal.z*Normal.z));
-			Normal.x = Normal.x / denom;
-			Normal.y = Normal.y / denom;
-			Normal.z = Normal.z / denom;
-			Distance = Distance / denom;
+		float fDenom = sqrt((m_vNormal.x*m_vNormal.x) + (m_vNormal.y*m_vNormal.y) + (m_vNormal.z*m_vNormal.z));
+		m_vNormal.x = m_vNormal.x / fDenom;
+		m_vNormal.y = m_vNormal.y / fDenom;
+		m_vNormal.z = m_vNormal.z / fDenom;
+		m_fDistance = m_fDistance / fDenom;
 	}
 };
 
@@ -859,25 +861,42 @@ public:
 	SX_ALIGNED_OP_MEM
 
 	//! обновление фрустума, на вход матрицы по которым необходимо построить фрустум
-	virtual void Update(
-		const float4x4* view,	//<! видовая матрица
-		const float4x4* proj	//<! проекционная матрица
+	virtual void update(
+		const float4x4 *pView,	//<! видовая матрица
+		const float4x4 *pProj	//<! проекционная матрица
 		) = 0;
 
-	virtual bool PointInFrustum(const float3 *point) = 0;	//!< находится ли точка во фрустуме
-	virtual bool PolyInFrustum(const float3* p1, const float3* p2, const float3* p3) = 0;		//!< находится ли треугольник во фрутстуме
-	virtual bool PolyInFrustumAbs(const float3* p1, const float3* p2, const float3* p3) = 0;	//!< находится ли полигон во фрустуме полностью
+	//! находится ли точка во фрустуме
+	virtual bool pointInFrustum(const float3 *pPoint) const = 0;	
+
+	//! находится ли треугольник во фрутстуме
+	virtual bool polyInFrustum(const float3 *pPoint1, const float3 *pPoint2, const float3 *pPoint3) const = 0;		
+
+	//! находится ли полигон во фрустуме полностью
+	virtual bool polyInFrustumAbs(const float3 *pPoint1, const float3 *pPoint2, const float3 *pPoint3) const = 0;	
+
 
-	virtual bool SphereInFrustum(const float3 *point, float radius) const = 0;	//!< находится ли полигон во фрустуме
+	//! находится ли полигон во фрустуме
+	virtual bool sphereInFrustum(const float3 *pPoint, float fRadius) const = 0;	
 
-	virtual bool SphereInFrustumAbs(const float3 *point, float radius) = 0;	//!< находится ли сфера во фрустуме полностью
-	virtual bool BoxInFrustum(float3* min, float3* max) = 0;				//!< находится ли параллелепипед (описанный точками экстремума) во фрустуме
+	//! находится ли сфера во фрустуме полностью
+	virtual bool sphereInFrustumAbs(const float3 *pPoint, float fRadius) const = 0;	
 
-//protected:
-	SXFrustumPlane ArrFrustumPlane[6];
+	//! находится ли параллелепипед (описанный точками экстремума) во фрустуме
+	virtual bool boxInFrustum(float3 *pMin, float3 *pMax) const = 0;				
 
-	float3	Point[8];
-	float3	Center;
+
+	//! возвращает координаты точки фрустума, iNumPoint = [0,7]
+	virtual float3 getPoint(int iNumPoint) const = 0;
+
+	//! возвращает координаты центра фрустума
+	virtual float3 getCenter() const = 0;
+
+	//! устанавливает координаты точки фрустума, iNumPoint = [0,7]
+	virtual void setPoint(int iNumPoint, const float3 *pPoint) = 0;
+
+	//! устанавливает координаты центра фрустума
+	virtual void setCenter(const float3 *pCenter) = 0;
 };
 
 //! создать ISXFrustum
@@ -895,65 +914,88 @@ public:
 
 	/*! \name Движение
 	 \note В метрах
-	@{ 
-	*/
-	virtual inline void PosLeftRight(float units) = 0;	//!< влево/вправо
-	virtual inline void PosUpDown(float units) = 0;		//!< вверх/вниз
-	virtual inline void PosFrontBack(float units) = 0;	//!< вперед/назад
+	@{*/
+
+	//! влево/вправо
+	virtual void posLeftRight(float fUnits) = 0;	
+
+	//! вверх/вниз
+	virtual void posUpDown(float fUnits) = 0;		
+
+	//! вперед/назад
+	virtual void posFrontBack(float fUnits) = 0;	
+
 	//!@}
 
 	/*! \name Вращение
 	 \note В радианах
-	@{ 
-	*/
-	virtual inline void RotUpDown(float angle) = 0;		//!< вращение вверх/вниз
-	virtual inline void RotRightLeft(float angle) = 0;	//!< вращение вправо/влево
-	virtual inline void Roll(float angle) = 0;			//!< крен
-	virtual inline void SetOrientation(const SMQuaternion & q) = 0; //!< установить полное вращение
+	@{*/
+
+	//! вращение вверх/вниз
+	virtual void rotUpDown(float fAngle) = 0;		
+
+	//! вращение вправо/влево
+	virtual void rotRightLeft(float fAngle) = 0;	
+
+	//! крен
+	virtual void roll(float fAngle) = 0;			
+
+	//! установить полное вращение
+	virtual void setOrientation(const SMQuaternion *pOrientation) = 0; 
+
 	//!@}
 
-	virtual inline void GetViewMatrix(float4x4* view_matrix) = 0;//!< получаем матрицу вида в view_matrix
+	//! получаем матрицу вида в pMatrix
+	virtual void getViewMatrix(float4x4 *pMatrix) = 0;
 
 	/*! \name Базис
 	@{
 	*/
 
-	virtual inline void GetPosition(float3* pos) = 0;	//!< в pos записывает текущую позицию в мире
-	virtual inline void SetPosition(float3* pos) = 0;	//!< устанавливает позицию в мире
+	//! в pos записывает текущую позицию в мире
+	virtual void getPosition(float3 *pPos) const = 0;	
+
+	//! устанавливает позицию в мире
+	virtual void setPosition(const float3 *pPos) = 0;	
 
-	virtual inline void GetRight(float3* right) = 0;	//!< в right записывает парвый вектор
-	virtual inline void GetUp(float3* up) = 0;			//!< в up записывает верхний вектор
-	virtual inline void GetLook(float3* look) = 0;		//!< в look записывает вектор направление взгляда
 
-	virtual inline void GetRotation(float3* rot) = 0;	//!< в rot записывает углы поворотов по осям, в радианах
+	//! в right записывает парвый вектор
+	virtual void getRight(float3 *pRight) const = 0;
+
+	//! в up записывает верхний вектор
+	virtual void getUp(float3 *vUp) const = 0;		
+
+	//! в look записывает вектор направление взгляда
+	virtual void getLook(float3 *vLook) const = 0;	
+
+
+	//! в rot записывает углы поворотов по осям, в радианах
+	virtual void getRotation(float3 *vRot) const = 0;	
 
 	//повроты по осям
-	virtual inline float GetRotationX() = 0;	//!< возвращает поворот по оси X, в радианах
-	virtual inline float GetRotationY() = 0;	//!< возвращает поворот по оси Y, в радианах
-	virtual inline float GetRotationZ() = 0;	//!< возвращает поворот по оси Z, в радианах
 
-	//!@}
+	//! возвращает поворот по оси X, в радианах
+	virtual float getRotationX() const = 0;	
 
-	virtual inline void SetFOV(float fov) = 0;	//!< Устанавливает FOV камеры
-	virtual inline float GetFOV() = 0;	//!< возвращает FOV камеры
+	//! возвращает поворот по оси Y, в радианах
+	virtual float getRotationY() const = 0;	
 
-	ISXFrustum* ObjFrustum;	//!< фрустум этой камеры
+	//! возвращает поворот по оси Z, в радианах
+	virtual float getRotationZ() const = 0;	
 
-	float3 LastVal; //??
-	bool IsAccel;	//??
+	//!@}
 
-protected:
-	float3 Right;
-	float3 Up;
-	float3 Look;
+	//! устанавливает FOV камеры
+	virtual void setFOV(float fFOV) = 0;
 
-	float3 Position;
+	//! возвращает FOV камеры
+	virtual float getFOV() const = 0;	
 
-	//float AngleUpDown, AngleRightLeft, AngleRoll;
-	
-	float3_t m_vPitchYawRoll;
+	//! обновление фрустума камеры
+	virtual void updateFrustum(const float4x4 *mProjection) = 0;
 
-	float m_fFOV;
+	//! возвращает константный указатель фрустума
+	virtual const ISXFrustum* getFrustum() = 0;
 };
 
 //! создать ISXCamera
@@ -982,35 +1024,35 @@ SX_LIB_API bool SGCore_SkyBoxIsLoadTex();
 
 
 //! загрузка текстуры, texture - имя текстуры с расширением
-SX_LIB_API void SGCore_SkyBoxLoadTex(const char *texture);	
+SX_LIB_API void SGCore_SkyBoxLoadTex(const char *szTexture);	
 
 //! смена текстуры, texture - имя текстуры с расширением
-SX_LIB_API void SGCore_SkyBoxChangeTex(const char *texture);
+SX_LIB_API void SGCore_SkyBoxChangeTex(const char *szTexture);
 
 //! в аргумент записывает путь до текущей активной текстуры
-SX_LIB_API void SGCore_SkyBoxGetActiveTex(char *texture);
+SX_LIB_API void SGCore_SkyBoxGetActiveTex(char *szTexture);
 
 //! в аргумент записывает путь до следующей текстуры 9если включена смена)
-SX_LIB_API void SGCore_SkyBoxGetSecondTex(char *texture);
+SX_LIB_API void SGCore_SkyBoxGetSecondTex(char *szTexture);
 
 
 //! установка угла поворота angle по оси y, в радианах
-SX_LIB_API void SGCore_SkyBoxSetRot(float angle);	
+SX_LIB_API void SGCore_SkyBoxSetRot(float fAngle);	
 
 //! возвращает угол поворота по оси y, в радианах
 SX_LIB_API float SGCore_SkyBoxGetRot();				
 
 
 //! установка цвета окраски в пределах 0-1, альфа компонента (w) - на сколько будет окрашен
-SX_LIB_API void SGCore_SkyBoxSetColor(float4_t* color);	
+SX_LIB_API void SGCore_SkyBoxSetColor(const float4_t *pColor);	
 
 //! в color записывает текущий цвет окраски
-SX_LIB_API void SGCore_SkyBoxGetColor(float4_t* color);	
+SX_LIB_API void SGCore_SkyBoxGetColor(float4_t *pColor);	
 
 //! рендер скайбокса
 SX_LIB_API void SGCore_SkyBoxRender(
 	float timeDelta,	//!< время рендера кадра в млсек 
-	float3* pos			//!< позиция набладателя, эта же позиция будет центром skybox
+	const float3 *pPos	//!< позиция набладателя, эта же позиция будет центром skybox
 	);
 
 //!@}
@@ -1038,50 +1080,50 @@ SX_LIB_API bool SGCore_SkyCloudsIsLoadTex();
  Так как позиция облаков константна то чтобы была илюзия полного покрытия уровня, необходимо облакам указывать размер в несколько раз больше чем весь доступный уровень, к примеру x2
 */
 SX_LIB_API void SGCore_SkyCloudsSetWidthHeightPos(
-	float width,	//!< ширина в метрах
-	float height,	//!< высота в метрах
-	float3* center	//!< позиция центра
+	float fWidth,			//!< ширина в метрах
+	float fHeight,			//!< высота в метрах
+	const float3 *pCenter	//!< позиция центра
 	);
 
 //! загрузка текстуры, texture - имя текстуры с расширением
-SX_LIB_API void SGCore_SkyCloudsLoadTex(const char *texture);	
+SX_LIB_API void SGCore_SkyCloudsLoadTex(const char *szNameTexture);	
 
-//! загрузка текстуры, texture - имя текстуры с расширением
-SX_LIB_API void SGCore_SkyCloudsChangeTex(const char *texture);	
+//! плавная смена текстуры, texture - имя текстуры с расширением
+SX_LIB_API void SGCore_SkyCloudsChangeTex(const char *szNameTexture);
 
 
 //! установка угла поворота angle по оси y, в радианах
-SX_LIB_API void SGCore_SkyCloudsSetRot(float angle);
+SX_LIB_API void SGCore_SkyCloudsSetRot(float fAngle);
 
 //! возвращает текущий угол поворота по оси y, в радианах
 SX_LIB_API float SGCore_SkyCloudsGetRot();			
 
 
 //! устанавливает коэфициент прозрачности, в пределах 0-1
-SX_LIB_API void SGCore_SkyCloudsSetAlpha(float alpha);	
+SX_LIB_API void SGCore_SkyCloudsSetAlpha(float fAlpha);	
 
 //! возвращает текущий коэфициент прозрачности
 SX_LIB_API float SGCore_SkyCloudsGetAlpha();			
 
 
 //! устанавливает коэфициент скорости движения
-SX_LIB_API void SGCore_SkyCloudsSetSpeed(float speed);	
+SX_LIB_API void SGCore_SkyCloudsSetSpeed(float fSpeed);	
 
 //! возвращает текущий коэфициент скорости движения
 SX_LIB_API float SGCore_SkyCloudsGetSpeed();			
 
 
 //! установка цвета окраски в пределах 0-1, альфа компонента (w) - на сколько будет окрашен
-SX_LIB_API void SGCore_SkyCloudsSetColor(float4_t* color);
+SX_LIB_API void SGCore_SkyCloudsSetColor(const float4_t *pColor);
 
 //! в color записывает текущий цвет окраски
-SX_LIB_API void SGCore_SkyCloudsGetColor(float4_t* color);
+SX_LIB_API void SGCore_SkyCloudsGetColor(float4_t *pColor);
 
 //! рендер облаков
 SX_LIB_API void SGCore_SkyCloudsRender(
-	DWORD timeDetlta,	//!< время рендера кадра в млсек
-	float3* pos,		//!< позиция набладателя
-	bool is_shadow		//!< для теней ли рендерим?
+	DWORD timeDetlta,		//!< время рендера кадра в млсек
+	const float3* pos,		//!< позиция набладателя
+	bool isShadow			//!< для теней ли рендерим?
 	);
 
 //!@}
diff --git a/source/gcore/sxgcore_dll.cpp b/source/gcore/sxgcore_dll.cpp
index 4030f098d..88b1ec58e 100644
--- a/source/gcore/sxgcore_dll.cpp
+++ b/source/gcore/sxgcore_dll.cpp
@@ -1,10 +1,9 @@
 
-/******************************************************
-Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
-#pragma once
 #include <windows.h>
 
 BOOL APIENTRY DllMain(HMODULE hModule,
diff --git a/source/gdefines.h b/source/gdefines.h
index 3c8b8311d..f5c235178 100644
--- a/source/gdefines.h
+++ b/source/gdefines.h
@@ -1,8 +1,8 @@
 
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 /*! \page general_info_libs Общая информация о библиотеках
 \tableofcontents
@@ -159,7 +159,7 @@ struct IBaseObject
 #define ASSERT(expr) if(!expr) ASSERT_S(#expr)
 
 //! Тип функции вывода отладочной информации
-typedef void(*report_func) (int level, const char* format, ...);
+typedef void(*report_func) (int iLevel, const char *szLibName, const char *szFormat, ...);
 
 #include <cstdio> 
 #if defined(_WINDOWS)
@@ -222,7 +222,7 @@ typedef void(*report_func) (int level, const char* format, ...);
 #define DEFAULT_FUNCTION_REPORT
 
 /*! Дефолтовая функция вывода отладочной информации ВМЕСТО НЕЕ В ЯДРО/ПОДСИСТЕМУ НУЖНО ОТПРАВЛЯТЬ СВОЮ */
-inline void DefReport(int level, const char* format, ...)
+inline void DefReport(int iLevel, const char *szLibName, const char *szFormat, ...)
 {
 #if defined(_WINDOWS)
 	AllocConsole();
@@ -230,8 +230,8 @@ inline void DefReport(int level, const char* format, ...)
 #endif
 	char buf[REPORT_MSG_MAX_LEN];
 	int strl = sizeof(buf);
-	format_str(buf, format);
-	fprintf(stdout, "!!! report function is not init !!! %s\n", buf);
+	format_str(buf, szFormat);
+	fprintf(stdout, "!!! report function is not init !!!\n  LibName: %s\n  message: %s\n", szLibName, buf);
 	fprintf(stdout, "work program will be stopped within 5 seconds ...");
 	Sleep(5000);
 	exit(1);
@@ -239,4 +239,22 @@ inline void DefReport(int level, const char* format, ...)
 
 #endif
 
+
+#ifndef SX_LIB_NAME
+#define SX_LIB_NAME "User"
+#endif
+
+inline void LibReport(int iLevel, const char *szFormat, ...)
+{
+	extern report_func g_fnReportf;
+
+	static char szStr[REPORT_MSG_MAX_LEN];
+	szStr[0] = 0;
+	int iStrLen = sizeof(szStr);
+	format_str(szStr, szFormat);
+
+	g_fnReportf(iLevel, SX_LIB_NAME, szStr);
+}
+
+
 #endif
diff --git a/source/geom/green.cpp b/source/geom/green.cpp
index b8f1a3b73..295f38180 100644
--- a/source/geom/green.cpp
+++ b/source/geom/green.cpp
@@ -1,5 +1,10 @@
 
-#include <geom\\green.h>
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
+#include "green.h"
 
 Green::Green()
 {
@@ -179,9 +184,9 @@ void Green::PreSegmentation(Model* model, float3* min_level, float3* max_level)
 	float3 tmpMin, tmpMax;
 	float3 tmpMin2, tmpMax2;
 	model->SplitsTree->BoundVolumeSys = SGCore_CrBound();
-	SGCore_FCompBoundBox(model->ArrLod[0]->model->VertexBuffer, &(model->SplitsTree->BoundVolumeSys), model->ArrLod[0]->model->AllVertexCount, sizeof(vertex_static));
+	SGCore_FCompBoundBox(model->ArrLod[0]->model->m_pVertexBuffer, &(model->SplitsTree->BoundVolumeSys), model->ArrLod[0]->model->m_uiAllVertexCount, sizeof(vertex_static));
 
-	model->SplitsTree->BoundVolumeSys->GetMinMax(&tmpMin2, &tmpMax2);
+	model->SplitsTree->BoundVolumeSys->getMinMax(&tmpMin2, &tmpMax2);
 	model->BBMax = tmpMax2 * (1.f + GREEN_GEN_RAND_SCALE);
 	model->BBMin = tmpMin2 * (1.f + GREEN_GEN_RAND_SCALE);
 	tmpMin = *min_level;
@@ -200,7 +205,7 @@ void Green::PreSegmentation(Model* model, float3* min_level, float3* max_level)
 	float tmpZ = tmpMax.z - tmpMin.z;
 
 	model->SplitsTree->BoundVolumeP = SGCore_CrBound();
-	model->SplitsTree->BoundVolumeP->SetMinMax(&tmpMin, &tmpMax);
+	model->SplitsTree->BoundVolumeP->setMinMax(&tmpMin, &tmpMax);
 
 	//выравниваем по квадрату
 	if (tmpX > tmpZ)
@@ -218,7 +223,7 @@ void Green::PreSegmentation(Model* model, float3* min_level, float3* max_level)
 		tmpMin.x -= tmpX;
 	}
 
-	model->SplitsTree->BoundVolumeSys->SetMinMax(&tmpMin, &tmpMax);
+	model->SplitsTree->BoundVolumeSys->setMinMax(&tmpMin, &tmpMax);
 
 	model->SplitsTree->CountAllGreen = model->AllCountGreen;
 	if (model->AllCountGreen > 0)
@@ -246,7 +251,7 @@ void Green::CycleSegmentation(Segment* Split, Model* mesh)
 
 	while (queue.size())
 	{
-		queue[0]->BoundVolumeSys->GetMinMax(&min, &max);
+		queue[0]->BoundVolumeSys->getMinMax(&min, &max);
 		if ((max.x - min.x)*0.5f > GREEN_BB_MIN_X && (max.z - min.z)*0.5f > GREEN_BB_MIN_Z)
 		{
 			Segmentation(queue[0], mesh);
@@ -281,9 +286,9 @@ void Green::Segmentation(Segment* Split, Model* mesh)
 	for (int i = 0; i<4; ++i)
 	{
 		Split->Splits[i]->BoundVolumeSys = ArrBound[i];
-		Split->Splits[i]->BoundVolumeSys->GetMinMax(&tmpmin, &tmpmax);
+		Split->Splits[i]->BoundVolumeSys->getMinMax(&tmpmin, &tmpmax);
 		Split->Splits[i]->BoundVolumeP = SGCore_CrBound();
-		Split->Splits[i]->BoundVolumeP->SetMinMax(&tmpmin, &tmpmax);
+		Split->Splits[i]->BoundVolumeP->setMinMax(&tmpmin, &tmpmax);
 	}
 
 	bool *tmp_arr_mesh_poly = 0;
@@ -298,7 +303,7 @@ void Green::Segmentation(Segment* Split, Model* mesh)
 	float3 tmpMin, tmpMax;
 	for (WORD i = 0; i<4; ++i)
 	{
-		Split->Splits[i]->BoundVolumeSys->GetMinMax(&tmpMin, &tmpMax);
+		Split->Splits[i]->BoundVolumeSys->getMinMax(&tmpMin, &tmpMax);
 		//SGCore_FCreateBoundingBoxMesh(&tmpMin, &tmpMax, &(Split->Splits[i]->BoundBox));
 
 		for (DWORD j = 0; j<Split->CountAllGreen; ++j)
@@ -383,11 +388,11 @@ void Green::AlignBound(Model* model, Segment* split)
 		float3 tmpMin, tmpMax;
 		float scalecoef = 1.f + GREEN_GEN_RAND_SCALE;
 
-		split->BoundVolumeSys->GetMinMax(&tmpMin, &tmpMax);
+		split->BoundVolumeSys->getMinMax(&tmpMin, &tmpMax);
 		tmpMax.y = comMax.y + model->BBMax.y * scalecoef;
 		tmpMin.y = comMin.y + model->BBMin.y * scalecoef;
 
-		split->BoundVolumeSys->SetMinMax(&tmpMin, &tmpMax);
+		split->BoundVolumeSys->setMinMax(&tmpMin, &tmpMax);
 
 		tmpMax.x = comMax.x + model->BBMax.x * scalecoef;
 		tmpMax.y = comMax.y + model->BBMax.y * scalecoef;
@@ -397,7 +402,7 @@ void Green::AlignBound(Model* model, Segment* split)
 		tmpMin.y = comMin.y + model->BBMin.y * scalecoef;
 		tmpMin.z = comMin.z + model->BBMin.z * scalecoef;
 
-		split->BoundVolumeP->SetMinMax(&tmpMin, &tmpMax);
+		split->BoundVolumeP->setMinMax(&tmpMin, &tmpMax);
 	}
 }
 
@@ -431,7 +436,7 @@ void Green::SetSplitID2(Model* model, Segment* Split, Array<Segment*, GREEN_DEFA
 	}
 }
 
-void Green::CPUFillingArrIndeces(ISXFrustum* frustum, float3* viewpos, ID id_arr)
+void Green::CPUFillingArrIndeces(const ISXFrustum* frustum, float3* viewpos, ID id_arr)
 {
 	GREEN_PRECOND_ARRCOMFOR_ERR_ID(id_arr);
 	
@@ -461,14 +466,14 @@ void Green::CPUFillingArrIndeces(ISXFrustum* frustum, float3* viewpos, ID id_arr
 	int qwert = 0;
 }
 
-void Green::ComRecArrIndeces(ISXFrustum* frustum, Segment** arrsplits, DWORD *count, Segment* comsegment, float3* viewpos, Array<Segment*, GREEN_DEFAULT_RESERVE_COM>* queue, ID curr_splits_ids_render)
+void Green::ComRecArrIndeces(const ISXFrustum* frustum, Segment** arrsplits, DWORD *count, Segment* comsegment, float3* viewpos, Array<Segment*, GREEN_DEFAULT_RESERVE_COM>* queue, ID curr_splits_ids_render)
 {
 	float3 jcenter;
 	float jradius;
 	ID SortId[GREEN_COUNT_TYPE_SEGMENTATION];
-	comsegment->BoundVolumeP->GetSphere(&jcenter, &jradius);
+	comsegment->BoundVolumeP->getSphere(&jcenter, &jradius);
 
-	if (comsegment->CountAllGreen > 0 && frustum->SphereInFrustum(&jcenter, jradius))
+	if (comsegment->CountAllGreen > 0 && frustum->sphereInFrustum(&jcenter, jradius))
 	{
 			if (comsegment->BFNonEnd)
 			{
@@ -479,7 +484,7 @@ void Green::ComRecArrIndeces(ISXFrustum* frustum, Segment** arrsplits, DWORD *co
 						SortId[q] = -1;
 						if (comsegment->Splits[q])
 						{
-							comsegment->Splits[q]->BoundVolumeP->GetSphere(&jcenter, &jradius);
+							comsegment->Splits[q]->BoundVolumeP->getSphere(&jcenter, &jradius);
 							comsegment->Splits[q]->DistForCamera = SMVector3Length2((jcenter - (*viewpos))) - jradius*jradius;
 						}
 					}
@@ -555,12 +560,12 @@ void Green::GPURender2(DWORD timeDelta, float3* viewpos, ID nm, int lod, ID id_t
 		Green::DXDevice->SetStreamSourceFreq(1, (D3DSTREAMSOURCE_INSTANCEDATA | 1));
 		Green::DXDevice->SetStreamSource(1, TransVertBuf, 0, sizeof(GreenDataVertex));
 
-		Green::DXDevice->SetStreamSource(0, ArrModels[nm]->ArrLod[lod]->model->VertexBuffer, 0, sizeof(vertex_static));
-		Green::DXDevice->SetIndices(ArrModels[nm]->ArrLod[lod]->model->IndexBuffer);
+		Green::DXDevice->SetStreamSource(0, ArrModels[nm]->ArrLod[lod]->model->m_pVertexBuffer, 0, sizeof(vertex_static));
+		Green::DXDevice->SetIndices(ArrModels[nm]->ArrLod[lod]->model->m_pIndexBuffer);
 		Green::DXDevice->SetVertexDeclaration(VertexDeclarationGreen);
 
 		jCountIndex = 0;
-		for (DWORD i = 0; i < ArrModels[nm]->ArrLod[lod]->model->SubsetCount; i++)
+		for (DWORD i = 0; i < ArrModels[nm]->ArrLod[lod]->model->m_uiSubsetCount; i++)
 		{
 			SGCore_MtlSet((id_tex > 0 ? id_tex : ArrModels[nm]->ArrLod[lod]->idstex[i]), 0);
 
@@ -570,13 +575,13 @@ void Green::GPURender2(DWORD timeDelta, float3* viewpos, ID nm, int lod, ID id_t
 					Green::DXDevice->SetVertexShaderConstantF(59, (float*)&float2_t(0,0), 1);
 
 			Green::DXDevice->SetVertexShaderConstantF(60, (float*)viewpos, 1);
-			Green::DXDevice->SetVertexShaderConstantF(61, (float*)&(ArrModels[nm]->ArrLod[lod]->model->BSphere), 1);
-			Green::DXDevice->SetVertexShaderConstantF(62, (float*)&(ArrModels[nm]->ArrLod[lod]->model->BBMax), 1);
-			Green::DXDevice->SetVertexShaderConstantF(63, (float*)&(ArrModels[nm]->ArrLod[lod]->model->BBMin), 1);
+			Green::DXDevice->SetVertexShaderConstantF(61, (float*)&(ArrModels[nm]->ArrLod[lod]->model->m_vBSphere), 1);
+			Green::DXDevice->SetVertexShaderConstantF(62, (float*)&(ArrModels[nm]->ArrLod[lod]->model->m_vBBMax), 1);
+			Green::DXDevice->SetVertexShaderConstantF(63, (float*)&(ArrModels[nm]->ArrLod[lod]->model->m_vBBMin), 1);
 
-			SGCore_DIP(D3DPT_TRIANGLELIST, 0, 0, ArrModels[nm]->ArrLod[lod]->model->VertexCount[i], jCountIndex, ArrModels[nm]->ArrLod[lod]->model->IndexCount[i] / 3);
-			Core_RIntSet(G_RI_INT_COUNT_POLY, Core_RIntGet(G_RI_INT_COUNT_POLY) + ((ArrModels[nm]->ArrLod[lod]->model->IndexCount[i] / 3) * RTCountDrawObj));
-			jCountIndex += ArrModels[nm]->ArrLod[lod]->model->IndexCount[i];
+			SGCore_DIP(D3DPT_TRIANGLELIST, 0, 0, ArrModels[nm]->ArrLod[lod]->model->m_pVertexCount[i], jCountIndex, ArrModels[nm]->ArrLod[lod]->model->m_pIndexCount[i] / 3);
+			Core_RIntSet(G_RI_INT_COUNT_POLY, Core_RIntGet(G_RI_INT_COUNT_POLY) + ((ArrModels[nm]->ArrLod[lod]->model->m_pIndexCount[i] / 3) * RTCountDrawObj));
+			jCountIndex += ArrModels[nm]->ArrLod[lod]->model->m_pIndexCount[i];
 		}
 
 		Green::DXDevice->SetStreamSourceFreq(0, 1);
@@ -618,7 +623,7 @@ void Green::GPURender(DWORD timeDelta, float3* viewpos, GREEN_TYPE type, ID id_a
 						RTCountDrawObj = 0;
 					}
 
-					jarrsplits[i]->BoundVolumeP->GetSphere(&jcenter, &jradius);
+					jarrsplits[i]->BoundVolumeP->getSphere(&jcenter, &jradius);
 					jarrsplits[i]->DistForCamera = SMVector3Length((jcenter - (*viewpos))) - jradius;
 
 					if (
@@ -709,7 +714,7 @@ void Green::GPURenderSingly(DWORD timeDelta, float3* viewpos, ID id, ID id_tex)
 					RTCountDrawObj = 0;
 				}
 
-				jarrsplits[i]->BoundVolumeP->GetSphere(&jcenter, &jradius);
+				jarrsplits[i]->BoundVolumeP->getSphere(&jcenter, &jradius);
 				jarrsplits[i]->DistForCamera = SMVector3Length((jcenter - (*viewpos))) - jradius;
 
 				if (
@@ -796,9 +801,9 @@ ID Green::Init(StaticGeom* geom, const char* name,
 		SGCore_StaticModelLoad(tmppath, &tmpnewmpdel->ArrLod[0]->model);
 		tmpnewmpdel->ArrLod[0]->path = path;
 		char tmppathtex[1024];
-		for (int i = 0; i < tmpnewmpdel->ArrLod[0]->model->SubsetCount; ++i)
+		for (int i = 0; i < tmpnewmpdel->ArrLod[0]->model->m_uiSubsetCount; ++i)
 		{
-			sprintf(tmppathtex, "%s.dds", tmpnewmpdel->ArrLod[0]->model->ArrTextures[i]);
+			sprintf(tmppathtex, "%s.dds", tmpnewmpdel->ArrLod[0]->model->m_ppTextures[i]);
 			tmpnewmpdel->ArrLod[0]->idstex[i] = SGCore_MtlLoad(tmppathtex, (tmpnewmpdel->TypeGreen == GREEN_TYPE_TREE ? MTL_TYPE_TREE : MTL_TYPE_GRASS));
 		}
 
@@ -813,9 +818,9 @@ ID Green::Init(StaticGeom* geom, const char* name,
 				tmpnewmpdel->ArrLod[1]->path = lod1;
 				SGCore_StaticModelLoad(tmppath, &tmpnewmpdel->ArrLod[1]->model);
 
-				for (int i = 0; i < tmpnewmpdel->ArrLod[1]->model->SubsetCount; ++i)
+				for (int i = 0; i < tmpnewmpdel->ArrLod[1]->model->m_uiSubsetCount; ++i)
 				{
-					sprintf(tmppathtex, "%s.dds", tmpnewmpdel->ArrLod[1]->model->ArrTextures[i]);
+					sprintf(tmppathtex, "%s.dds", tmpnewmpdel->ArrLod[1]->model->m_ppTextures[i]);
 					tmpnewmpdel->ArrLod[1]->idstex[i] = SGCore_MtlLoad(tmppathtex, (tmpnewmpdel->TypeGreen == GREEN_TYPE_TREE ? MTL_TYPE_TREE : MTL_TYPE_GRASS));
 				}
 			}
@@ -834,19 +839,19 @@ ID Green::Init(StaticGeom* geom, const char* name,
 				tmpnewmpdel->ArrLod[2]->path = lod2;
 				SGCore_StaticModelLoad(tmppath, &tmpnewmpdel->ArrLod[2]->model);
 
-				for (int i = 0; i < tmpnewmpdel->ArrLod[2]->model->SubsetCount; ++i)
+				for (int i = 0; i < tmpnewmpdel->ArrLod[2]->model->m_uiSubsetCount; ++i)
 				{
-					sprintf(tmppathtex, "%s.dds", tmpnewmpdel->ArrLod[1]->model->ArrTextures[i]);
+					sprintf(tmppathtex, "%s.dds", tmpnewmpdel->ArrLod[1]->model->m_ppTextures[i]);
 					tmpnewmpdel->ArrLod[2]->idstex[i] = SGCore_MtlLoad(tmppathtex, (tmpnewmpdel->TypeGreen == GREEN_TYPE_TREE ? MTL_TYPE_TREE : MTL_TYPE_GRASS));
 				}
 			}
 		}
 
 		ISXBound* tmpbb = SGCore_CrBound();
-		SGCore_FCompBoundBox(tmpnewmpdel->ArrLod[0]->model->VertexBuffer, &tmpbb, tmpnewmpdel->ArrLod[0]->model->AllVertexCount, sizeof(vertex_static));
+		SGCore_FCompBoundBox(tmpnewmpdel->ArrLod[0]->model->m_pVertexBuffer, &tmpbb, tmpnewmpdel->ArrLod[0]->model->m_uiAllVertexCount, sizeof(vertex_static));
 
 		float3 mmax, mmin;
-		tmpbb->GetMinMax(&mmin, &mmax);
+		tmpbb->getMinMax(&mmin, &mmax);
 		mem_release(tmpbb);
 
 		float3 tmpmin, tmpmax;
@@ -854,7 +859,7 @@ ID Green::Init(StaticGeom* geom, const char* name,
 
 		if (def_str_validate(path_mask))
 		{
-			ID IDTexMask = SGCore_LoadTexAddName(path_mask, LoadTexType::ltt_load);
+			ID IDTexMask = SGCore_LoadTexAddName(path_mask, LOAD_TEXTURE_TYPE_LOAD);
 			SGCore_LoadTexAllLoad();
 
 			GenByTex(geom, tmpnewmpdel, IDTexMask, &mmin, &mmax, count_max);
@@ -875,7 +880,7 @@ ID Green::Init(StaticGeom* geom, const char* name,
 	}
 	else
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_WARNING,"not found static geometry in level!!!");
+		LibReport(REPORT_MSG_LEVEL_WARNING,"not found static geometry in level!!!");
 	}
 
 	return -1;
@@ -1019,7 +1024,7 @@ ID Green::GetIDSplit(ID id, float3* pos)
 
 	while (queue.size())
 	{
-		queue[0]->BoundVolumeSys->GetMinMax(&min, &max);
+		queue[0]->BoundVolumeSys->getMinMax(&min, &max);
 		if (max.x >= pos->x && max.z >= pos->z && min.x <= pos->x && min.z <= pos->z)
 		{
 			if (!(queue[0]->Splits[0]))
@@ -1032,14 +1037,14 @@ ID Green::GetIDSplit(ID id, float3* pos)
 				float3 tmpMin, tmpMax;
 				float scalecoef = 1.f + GREEN_GEN_RAND_SCALE;
 
-				queue[0]->BoundVolumeSys->GetMinMax(&tmpMin, &tmpMax);
+				queue[0]->BoundVolumeSys->getMinMax(&tmpMin, &tmpMax);
 				if (tmpMax.y < (pos->y + ArrModels[id]->BBMax.y * scalecoef))
 					tmpMax.y = tmpMax.y + ArrModels[id]->BBMax.y * scalecoef;
 
 				if (tmpMin.y >(pos->y + ArrModels[id]->BBMin.y * scalecoef))
 					tmpMin.y = tmpMin.y + ArrModels[id]->BBMin.y * scalecoef;
 
-				queue[0]->BoundVolumeSys->SetMinMax(&tmpMin, &tmpMax);
+				queue[0]->BoundVolumeSys->setMinMax(&tmpMin, &tmpMax);
 
 				if (tmpMax.x < (pos->x + ArrModels[id]->BBMax.x * scalecoef))
 					tmpMax.x = tmpMax.x + ArrModels[id]->BBMax.x * scalecoef;
@@ -1053,7 +1058,7 @@ ID Green::GetIDSplit(ID id, float3* pos)
 				if (tmpMin.z >(pos->z + ArrModels[id]->BBMin.z * scalecoef))
 					tmpMin.z = tmpMin.z + ArrModels[id]->BBMin.z * scalecoef;
 
-				queue[0]->BoundVolumeP->SetMinMax(&tmpMin, &tmpMax);
+				queue[0]->BoundVolumeP->setMinMax(&tmpMin, &tmpMax);
 			}
 
 			for (int i = 0; i < GREEN_COUNT_TYPE_SEGMENTATION; i++)
@@ -1230,7 +1235,7 @@ void Green::Save(const char* path)
 void Green::SaveSplit(Segment* Split, FILE* file, Array<Segment*> * queue)
 {
 	float3 jmin, jmax;
-	Split->BoundVolumeSys->GetMinMax(&jmin, &jmax);
+	Split->BoundVolumeSys->getMinMax(&jmin, &jmax);
 	fwrite(&jmin.x, sizeof(float), 1, file);
 	fwrite(&jmin.y, sizeof(float), 1, file);
 	fwrite(&jmin.z, sizeof(float), 1, file);
@@ -1239,7 +1244,7 @@ void Green::SaveSplit(Segment* Split, FILE* file, Array<Segment*> * queue)
 	fwrite(&jmax.y, sizeof(float), 1, file);
 	fwrite(&jmax.z, sizeof(float), 1, file);
 
-	Split->BoundVolumeP->GetMinMax(&jmin, &jmax);
+	Split->BoundVolumeP->getMinMax(&jmin, &jmax);
 	fwrite(&jmin.x, sizeof(float), 1, file);
 	fwrite(&jmin.y, sizeof(float), 1, file);
 	fwrite(&jmin.z, sizeof(float), 1, file);
@@ -1341,9 +1346,9 @@ void Green::Load(const char* path)
 		SGCore_StaticModelLoad(tmppath, &tmpmodel->ArrLod[0]->model);
 		tmpmodel->ArrLod[0]->path = tmpstr[0];
 		char tmppathtex[1024];
-		for (int k = 0; k < tmpmodel->ArrLod[0]->model->SubsetCount; ++k)
+		for (int k = 0; k < tmpmodel->ArrLod[0]->model->m_uiSubsetCount; ++k)
 		{
-			sprintf(tmppathtex, "%s.dds", tmpmodel->ArrLod[0]->model->ArrTextures[k]);
+			sprintf(tmppathtex, "%s.dds", tmpmodel->ArrLod[0]->model->m_ppTextures[k]);
 			tmpmodel->ArrLod[0]->idstex[k] = SGCore_MtlLoad(tmppathtex, (tmpmodel->TypeGreen == GREEN_TYPE_TREE ? MTL_TYPE_TREE : MTL_TYPE_GRASS));
 		}
 
@@ -1358,9 +1363,9 @@ void Green::Load(const char* path)
 				sprintf(tmppath, "%s%s", Core_RStringGet(G_RI_STRING_PATH_GS_MESHES), tmpstr[1]);
 				SGCore_StaticModelLoad(tmppath, &tmpmodel->ArrLod[1]->model);
 
-				for (int k = 0; k < tmpmodel->ArrLod[1]->model->SubsetCount; ++k)
+				for (int k = 0; k < tmpmodel->ArrLod[1]->model->m_uiSubsetCount; ++k)
 				{
-					sprintf(tmppathtex, "%s.dds", tmpmodel->ArrLod[1]->model->ArrTextures[k]);
+					sprintf(tmppathtex, "%s.dds", tmpmodel->ArrLod[1]->model->m_ppTextures[k]);
 					tmpmodel->ArrLod[1]->idstex[k] = SGCore_MtlLoad(tmppathtex, (tmpmodel->TypeGreen == GREEN_TYPE_TREE ? MTL_TYPE_TREE : MTL_TYPE_GRASS));
 				}
 			}
@@ -1379,9 +1384,9 @@ void Green::Load(const char* path)
 				sprintf(tmppath, "%s%s", Core_RStringGet(G_RI_STRING_PATH_GS_MESHES), tmpstr[2]);
 				SGCore_StaticModelLoad(tmppath, &tmpmodel->ArrLod[2]->model);
 
-				for (int k = 0; k < tmpmodel->ArrLod[2]->model->SubsetCount; ++k)
+				for (int k = 0; k < tmpmodel->ArrLod[2]->model->m_uiSubsetCount; ++k)
 				{
-					sprintf(tmppathtex, "%s.dds", tmpmodel->ArrLod[1]->model->ArrTextures[k]);
+					sprintf(tmppathtex, "%s.dds", tmpmodel->ArrLod[1]->model->m_ppTextures[k]);
 					tmpmodel->ArrLod[2]->idstex[k] = SGCore_MtlLoad(tmppathtex, (tmpmodel->TypeGreen == GREEN_TYPE_TREE ? MTL_TYPE_TREE : MTL_TYPE_GRASS));
 				}
 			}
@@ -1436,7 +1441,7 @@ void Green::LoadSplit(Segment** Split, FILE* file, Array<Segment**> * queue)
 	fread(&jmax.z, sizeof(float), 1, file);
 
 	(*Split)->BoundVolumeSys = SGCore_CrBound();
-	(*Split)->BoundVolumeSys->SetMinMax(&jmin, &jmax);
+	(*Split)->BoundVolumeSys->setMinMax(&jmin, &jmax);
 
 
 	fread(&jmin.x, sizeof(float), 1, file);
@@ -1448,7 +1453,7 @@ void Green::LoadSplit(Segment** Split, FILE* file, Array<Segment**> * queue)
 	fread(&jmax.z, sizeof(float), 1, file);
 
 	(*Split)->BoundVolumeP = SGCore_CrBound();
-	(*Split)->BoundVolumeP->SetMinMax(&jmin, &jmax);
+	(*Split)->BoundVolumeP->setMinMax(&jmin, &jmax);
 
 	fread(&(*Split)->CountAllGreen, sizeof(uint32_t), 1, file);
 
@@ -1571,7 +1576,7 @@ long Green::GetGreenCountGen(ID id)
 long Green::GetGreenCountPoly(ID id)
 {
 	if (id < ArrModels.size() && ArrModels[id]->ArrLod[0])
-		return ArrModels[id]->ArrLod[0]->model->AllIndexCount / 3;
+		return ArrModels[id]->ArrLod[0]->model->m_uiAllIndexCount / 3;
 
 	return -1;
 }
@@ -1672,9 +1677,9 @@ void Green::SetGreenLod(ID id, int lod, const char* pathname)
 	sprintf(tmppath, "%s%s", Core_RStringGet(G_RI_STRING_PATH_GS_MESHES), pathname);
 	SGCore_StaticModelLoad(tmppath, &ArrModels[id]->ArrLod[lod]->model);
 
-	for (int k = 0; k < ArrModels[id]->ArrLod[lod]->model->SubsetCount; ++k)
+	for (int k = 0; k < ArrModels[id]->ArrLod[lod]->model->m_uiSubsetCount; ++k)
 	{
-		sprintf(tmppath, "%s.dds", ArrModels[id]->ArrLod[lod]->model->ArrTextures[k]);
+		sprintf(tmppath, "%s.dds", ArrModels[id]->ArrLod[lod]->model->m_ppTextures[k]);
 		ArrModels[id]->ArrLod[lod]->idstex[k] = SGCore_MtlLoad(tmppath, (ArrModels[id]->TypeGreen == GREEN_TYPE_TREE ? MTL_TYPE_TREE : MTL_TYPE_GRASS));
 	}
 }
@@ -1696,37 +1701,37 @@ void Green::SetGreenNav(ID id, const char* pathname)
 
 	ISXDataStaticModel* nmesh;
 	SGCore_StaticModelLoad(tmppath, &nmesh);
-	ArrModels[id]->NavigateMesh->count_vertex = nmesh->AllVertexCount;
-	ArrModels[id]->NavigateMesh->count_index = nmesh->AllIndexCount;
-	ArrModels[id]->NavigateMesh->arr_vertex = new float3_t[nmesh->AllVertexCount];
+	ArrModels[id]->NavigateMesh->count_vertex = nmesh->m_uiAllVertexCount;
+	ArrModels[id]->NavigateMesh->count_index = nmesh->m_uiAllIndexCount;
+	ArrModels[id]->NavigateMesh->arr_vertex = new float3_t[nmesh->m_uiAllVertexCount];
 	vertex_static *pVert;
-	nmesh->VertexBuffer->Lock(0, 0, (void **)&pVert, 0);
-	for (long i = 0; i < nmesh->AllVertexCount; ++i)
+	nmesh->m_pVertexBuffer->Lock(0, 0, (void **)&pVert, 0);
+	for (long i = 0; i < nmesh->m_uiAllVertexCount; ++i)
 	{
 		ArrModels[id]->NavigateMesh->arr_vertex[i] = pVert[i].Pos;
 	}
-	nmesh->VertexBuffer->Unlock();
+	nmesh->m_pVertexBuffer->Unlock();
 	
-	ArrModels[id]->NavigateMesh->arr_index = new uint32_t[nmesh->AllIndexCount];
-	ArrModels[id]->NavigateMesh->arr_mtl = new ID[nmesh->AllIndexCount];
+	ArrModels[id]->NavigateMesh->arr_index = new uint32_t[nmesh->m_uiAllIndexCount];
+	ArrModels[id]->NavigateMesh->arr_mtl = new ID[nmesh->m_uiAllIndexCount];
 	UINT* pInd;
-	nmesh->IndexBuffer->Lock(0, 0, (void **)&pInd, 0);
+	nmesh->m_pIndexBuffer->Lock(0, 0, (void **)&pInd, 0);
 	DWORD prebias = 0;
 	long tmp_countindex = 0;
 	char tmpnametex[SXGC_LOADTEX_MAX_SIZE_DIRNAME];
-	for (int i = 0; i < nmesh->SubsetCount; ++i)
+	for (int i = 0; i < nmesh->m_uiSubsetCount; ++i)
 	{
-		sprintf(tmpnametex, "%s.dds", nmesh->ArrTextures[i]);
+		sprintf(tmpnametex, "%s.dds", nmesh->m_ppTextures[i]);
 		ID tmpidmtl = SGCore_MtlLoad(tmpnametex, MTL_TYPE_TREE);
-		for (int k = 0; k < nmesh->IndexCount[i]; ++k)
+		for (int k = 0; k < nmesh->m_pIndexCount[i]; ++k)
 		{
-			ArrModels[id]->NavigateMesh->arr_index[tmp_countindex] = pInd[nmesh->StartIndex[i] + k] /*+ prebias*/;
+			ArrModels[id]->NavigateMesh->arr_index[tmp_countindex] = pInd[nmesh->m_pStartIndex[i] + k] /*+ prebias*/;
 			ArrModels[id]->NavigateMesh->arr_mtl[tmp_countindex] = tmpidmtl;
 			++tmp_countindex;
 		}
-		prebias += nmesh->IndexCount[i];
+		prebias += nmesh->m_pIndexCount[i];
 	}
-	nmesh->IndexBuffer->Unlock();
+	nmesh->m_pIndexBuffer->Unlock();
 	mem_release_del(nmesh);
 }
 
@@ -1829,7 +1834,7 @@ void Green::GetPartBeam(float3* pos, float3 * dir, Segment** arrsplits, DWORD *c
 {
 	float3 center;
 	float radius;
-	comsegment->BoundVolumeP->GetSphere(&center, &radius);
+	comsegment->BoundVolumeP->getSphere(&center, &radius);
 
 	float distsqr = SGCore_0DistancePointBeam2(center, *pos, *dir);
 	if (comsegment->CountAllGreen > 0 && distsqr <= radius*radius)
@@ -1881,11 +1886,11 @@ bool Green::TraceBeam(float3* start, float3* dir, float3* _res, ID* idgreen, ID*
 		GetPartBeam(start, dir, irs->Arr, &(irs->CountCom), model->SplitsTree, irs->Count);
 
 		vertex_static* pVertData = 0;
-		if (FAILED(model->ArrLod[0]->model->VertexBuffer->Lock(0, 0, (void**)&pVertData, 0)))
+		if (FAILED(model->ArrLod[0]->model->m_pVertexBuffer->Lock(0, 0, (void**)&pVertData, 0)))
 			continue;
 
 		DWORD* pIndData = 0;
-		if (FAILED(model->ArrLod[0]->model->IndexBuffer->Lock(0, 0, (void**)&pIndData, 0)))
+		if (FAILED(model->ArrLod[0]->model->m_pIndexBuffer->Lock(0, 0, (void**)&pIndData, 0)))
 			continue;
 
 		for (int k = 0; k < irs->CountCom; ++k)
@@ -1893,9 +1898,9 @@ bool Green::TraceBeam(float3* start, float3* dir, float3* _res, ID* idgreen, ID*
 			for (int key = 0; key < irs->Arr[k]->CountAllGreen; ++key)
 			{
 				UINT tmpcountind = 0;
-				for (int g = 0; g < model->ArrLod[0]->model->SubsetCount; ++g)
+				for (int g = 0; g < model->ArrLod[0]->model->m_uiSubsetCount; ++g)
 				{
-					for (int poly = 0; poly < model->ArrLod[0]->model->IndexCount[g] / 3; ++poly)
+					for (int poly = 0; poly < model->ArrLod[0]->model->m_pIndexCount[g] / 3; ++poly)
 					{
 						float tmpscale = irs->Arr[k]->Data[key].m_vTexCoord.x;
 						mat = SMMatrixScaling(tmpscale, tmpscale, tmpscale) * SMMatrixRotationY(irs->Arr[k]->Data[key].m_vTexCoord.y) * SMMatrixTranslation(irs->Arr[k]->Data[key].m_vPosition);
@@ -1926,13 +1931,13 @@ bool Green::TraceBeam(float3* start, float3* dir, float3* _res, ID* idgreen, ID*
 						}
 					}
 
-					tmpcountind += model->ArrLod[0]->model->SubsetCount;
+					tmpcountind += model->ArrLod[0]->model->m_uiSubsetCount;
 				}
 			}
 		}
 
-		model->ArrLod[0]->model->VertexBuffer->Unlock();
-		model->ArrLod[0]->model->IndexBuffer->Unlock();
+		model->ArrLod[0]->model->m_pVertexBuffer->Unlock();
+		model->ArrLod[0]->model->m_pIndexBuffer->Unlock();
 	}
 
 	if (found && _res)
@@ -1945,7 +1950,7 @@ void Green::GetPartBB(float3* bbmin, float3 * bbmax, Segment** arrsplits, DWORD
 {
 	float3 min,max;
 	float radius;
-	comsegment->BoundVolumeP->GetMinMax(&min, &max);
+	comsegment->BoundVolumeP->getMinMax(&min, &max);
 
 	if (comsegment->CountAllGreen > 0 && SGCore_0InretsectBox(bbmin, bbmax, &min, &max))
 	{
@@ -1989,14 +1994,14 @@ bool Green::GetOccurencessLeafGrass(float3* bbmin, float3* bbmax, int physic_mtl
 		GetPartBB(bbmin, bbmax, irs->Arr, &(irs->CountCom), model->SplitsTree, irs->Count);
 
 		vertex_static* pVertData = 0;
-		if (FAILED(model->ArrLod[0]->model->VertexBuffer->Lock(0, 0, (void**)&pVertData, 0)))
+		if (FAILED(model->ArrLod[0]->model->m_pVertexBuffer->Lock(0, 0, (void**)&pVertData, 0)))
 			continue;
 
 		DWORD* pIndData = 0;
-		if (FAILED(model->ArrLod[0]->model->IndexBuffer->Lock(0, 0, (void**)&pIndData, 0)))
+		if (FAILED(model->ArrLod[0]->model->m_pIndexBuffer->Lock(0, 0, (void**)&pIndData, 0)))
 			continue;
 
-		for (int g = 0; g < model->ArrLod[0]->model->SubsetCount && !isfound; ++g)
+		for (int g = 0; g < model->ArrLod[0]->model->m_uiSubsetCount && !isfound; ++g)
 		{
 			int pt = SGCore_MtlGetPhysicType(model->ArrLod[0]->idstex[g]);
 			if (SGCore_MtlGetPhysicType(model->ArrLod[0]->idstex[g]) != physic_mtl)
@@ -2008,7 +2013,7 @@ bool Green::GetOccurencessLeafGrass(float3* bbmin, float3* bbmax, int physic_mtl
 				{
 
 
-					for (int poly = 0; poly < model->ArrLod[0]->model->IndexCount[g] / 3 && !isfound; ++poly)
+					for (int poly = 0; poly < model->ArrLod[0]->model->m_pIndexCount[g] / 3 && !isfound; ++poly)
 					{
 						float tmpscale = irs->Arr[k]->Data[key].m_vTexCoord.x;
 						mat = SMMatrixScaling(tmpscale, tmpscale, tmpscale) * SMMatrixRotationY(irs->Arr[k]->Data[key].m_vTexCoord.y) * SMMatrixTranslation(irs->Arr[k]->Data[key].m_vPosition);
@@ -2058,8 +2063,8 @@ bool Green::GetOccurencessLeafGrass(float3* bbmin, float3* bbmax, int physic_mtl
 			}
 		}
 
-		model->ArrLod[0]->model->VertexBuffer->Unlock();
-		model->ArrLod[0]->model->IndexBuffer->Unlock();
+		model->ArrLod[0]->model->m_pVertexBuffer->Unlock();
+		model->ArrLod[0]->model->m_pIndexBuffer->Unlock();
 	}
 
 	return isfound;
diff --git a/source/geom/green.h b/source/geom/green.h
index 87085bbd8..5bc914a6b 100644
--- a/source/geom/green.h
+++ b/source/geom/green.h
@@ -1,19 +1,22 @@
 
-#ifndef __green
-#define __green
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
+#ifndef __GREEN_H
+#define __GREEN_H
 
 #include <gdefines.h>
-#include <common\\string.h>
-#include <common\array.h>
-#include <common\SXMath.h>
+#include <common/string.h>
+#include <common/array.h>
+#include <common/SXMath.h>
 
 #include <d3d9.h>
-#include <gcore\\sxgcore.h>
+#include <gcore/sxgcore.h>
 #include "static_geom.h"
 #include "sxgeom.h"
 
-extern report_func g_fnReportf;
-
 #define GREEN_COUNT_TYPE_SEGMENTATION 4
 #define GREEN_COUNT_LOD 3
 
@@ -23,13 +26,13 @@ extern report_func g_fnReportf;
 #define GREEN_PRECOND_ARRCOMFOR_ERR_ID(id_arr) \
 if (!(id_arr < ArrComFor.size()))\
 {\
-	g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s - green: unresolved id '%d' for array of compute visible", GEN_MSG_LOCATION, id_arr); \
+	LibReport(REPORT_MSG_LEVEL_ERROR, "%s - green: unresolved id '%d' for array of compute visible", GEN_MSG_LOCATION, id_arr); \
 }
 
 #define GREEN_PRECOND_ARRCOMFOR_ERR_ID_MODEL(id_model) \
 if (!(id_model < ArrModels.size() && ArrModels[id_model]))\
 {\
-	g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s - green: unresolved id '%d' for array of models", GEN_MSG_LOCATION, id_model); \
+	LibReport(REPORT_MSG_LEVEL_ERROR, "%s - green: unresolved id '%d' for array of models", GEN_MSG_LOCATION, id_model); \
 }
 
 class Green
@@ -71,7 +74,7 @@ public:
 	void Save(const char* path);
 	void Load(const char* path);
 	void Clear();
-	void CPUFillingArrIndeces(ISXFrustum* frustum, float3* viewpos, ID id_arr = 0);
+	void CPUFillingArrIndeces(const ISXFrustum* frustum, float3* viewpos, ID id_arr = 0);
 	void GPURender(DWORD timeDelta, float3* viewpos, GREEN_TYPE type, ID id_arr = 0);
 	void GPURenderSingly(DWORD timeDelta, float3* viewpos, ID id, ID id_tex);
 	void GPURenderObject(DWORD timeDelta, float3* viewpos, ID id, ID split, ID idobj, ID id_tex);
@@ -189,7 +192,7 @@ protected:
 	void GetPartBeam(float3* pos, float3 * dir, Segment** arrsplits, DWORD *count, Segment* comsegment, ID curr_splits_ids_render);
 	void GetPartBB(float3* bbmin, float3 * bbmax, Segment** arrsplits, DWORD *count, Segment* comsegment, ID curr_splits_ids_render);
 
-	void ComRecArrIndeces(ISXFrustum* frustum, Segment** arrsplits, DWORD *count, Segment* comsegment, float3* viewpos, Array<Segment*, GREEN_DEFAULT_RESERVE_COM>* queue, ID curr_splits_ids_render);
+	void ComRecArrIndeces(const ISXFrustum* frustum, Segment** arrsplits, DWORD *count, Segment* comsegment, float3* viewpos, Array<Segment*, GREEN_DEFAULT_RESERVE_COM>* queue, ID curr_splits_ids_render);
 
 	void AddModelInArrCom(ID id_model);
 	void DelModelInArrCom(ID id_model);
diff --git a/source/geom/static_geom.cpp b/source/geom/static_geom.cpp
index d31c69838..a29726b9c 100644
--- a/source/geom/static_geom.cpp
+++ b/source/geom/static_geom.cpp
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "static_geom.h"
 
 StaticGeom::Segment::Segment()
@@ -220,7 +225,7 @@ long StaticGeom::GetCountModel()
 
 ID StaticGeom::AddModel(const char* path, const char* lod1, const char* name)
 {
-	g_fnReportf(0, "load geometry: '%s'.. ", path);
+	LibReport(0, "load geometry: '%s'.. ", path);
 	DelArrIndexPtr();
 
 	ISXDataStaticModel* model = 0;
@@ -243,26 +248,26 @@ ID StaticGeom::AddModel(const char* path, const char* lod1, const char* name)
 	vertex_static* pVert;
 	UINT* pInd;
 
-	if (FAILED(model->VertexBuffer->Lock(0, 0, (void**)&pVert, 0)))
+	if (FAILED(model->m_pVertexBuffer->Lock(0, 0, (void**)&pVert, 0)))
 		return -1;
 
-	if (FAILED(model->IndexBuffer->Lock(0, 0, (void**)&pInd, 0)))
+	if (FAILED(model->m_pIndexBuffer->Lock(0, 0, (void**)&pInd, 0)))
 		return -1;
 
-	for (int i = 0; i < model->SubsetCount; ++i)
+	for (int i = 0; i < model->m_uiSubsetCount; ++i)
 	{
-		tmpmodel->CountPoly += model->IndexCount[i] / 3;
+		tmpmodel->CountPoly += model->m_pIndexCount[i] / 3;
 
 		char tmptex[1024];
-		sprintf(tmptex, "%s.dds", model->ArrTextures[i]);
+		sprintf(tmptex, "%s.dds", model->m_ppTextures[i]);
 		tmpmodel->IDTex[i] = SGCore_MtlLoad(tmptex, MTL_TYPE_GEOM);
 
 		
 
 		//если количество полигонов в подгруппе модели больше разрешенного
-		if (model->IndexCount[i] / 3 > GEOM_MAX_POLY_IN_GROUP)
+		if (model->m_pIndexCount[i] / 3 > GEOM_MAX_POLY_IN_GROUP)
 		{
-			g_fnReportf(-1, "[GEOM] %s count polygons %d in group over default '%d'", GEN_MSG_LOCATION, model->IndexCount[i] / 3, GEOM_MAX_POLY_IN_GROUP);
+			LibReport(REPORT_MSG_LEVEL_ERROR, "%s count polygons %d in group over default '%d'", GEN_MSG_LOCATION, model->m_pIndexCount[i] / 3, GEOM_MAX_POLY_IN_GROUP);
 			return -1;
 		}
 
@@ -271,7 +276,7 @@ ID StaticGeom::AddModel(const char* path, const char* lod1, const char* name)
 		for (int k = 0; k < AllGroups.size(); ++k)
 		{
 			//сравниваем подгруппы только по имени, если имена одинаковые значит это одна и та же подгруппа
-			if (stricmp(AllGroups[k]->name.c_str(), model->ArrTextures[i]) == 0)
+			if (stricmp(AllGroups[k]->name.c_str(), model->m_ppTextures[i]) == 0)
 			{
 				isunictex = false;
 
@@ -285,13 +290,13 @@ ID StaticGeom::AddModel(const char* path, const char* lod1, const char* name)
 				vertex_static * pData2;
 
 				//если последний незаполненный буфер не вмещает в себ¤
-				if (AllGroups[k]->CountIndex[AllGroups[k]->CountIndex.size() - 1] / 3 + model->IndexCount[i] / 3 > GEOM_MAX_POLY_IN_GROUP)
+				if (AllGroups[k]->CountIndex[AllGroups[k]->CountIndex.size() - 1] / 3 + model->m_pIndexCount[i] / 3 > GEOM_MAX_POLY_IN_GROUP)
 				{
 					//создаем новый
 					gdb.VertexStart = 0;
-					gdb.VertexCount = model->VertexCount[i];
+					gdb.VertexCount = model->m_pVertexCount[i];
 
-					StaticGeom::DXDevice->CreateVertexBuffer(sizeof(vertex_static)* model->VertexCount[i], NULL, NULL, D3DPOOL_MANAGED, &vb, 0);
+					StaticGeom::DXDevice->CreateVertexBuffer(sizeof(vertex_static)* model->m_pVertexCount[i], NULL, NULL, D3DPOOL_MANAGED, &vb, 0);
 					
 					/*Group::VertexBuff* vborigin = new Group::VertexBuff();
 					vborigin->count = model->VertexCount[i];
@@ -302,12 +307,12 @@ ID StaticGeom::AddModel(const char* path, const char* lod1, const char* name)
 					}
 					AllGroups[k]->VertexBufferOrigin.push_back(vborigin);*/
 					
-					AllGroups[k]->AllCountVertex += model->VertexCount[i];
-					AllGroups[k]->CountVertex.push_back(model->VertexCount[i]);
+					AllGroups[k]->AllCountVertex += model->m_pVertexCount[i];
+					AllGroups[k]->CountVertex.push_back(model->m_pVertexCount[i]);
 					//копируем данные в новый вершинный буфер
 					if (!FAILED(vb->Lock(0, 0, (void**)&pData, 0)))
 					{
-						memcpy(pData, pVert + model->StartVertex[i], sizeof(vertex_static)* model->VertexCount[i]);
+						memcpy(pData, pVert + model->m_pStartVertex[i], sizeof(vertex_static)* model->m_pVertexCount[i]);
 						vb->Unlock();
 					}
 
@@ -315,18 +320,18 @@ ID StaticGeom::AddModel(const char* path, const char* lod1, const char* name)
 
 
 					gdb.IndexStart = 0;
-					gdb.IndexCount = model->IndexCount[i];
-					AllGroups[k]->AllCountIndex += model->IndexCount[i];
-					AllGroups[k]->CountIndex.push_back(model->IndexCount[i]);
+					gdb.IndexCount = model->m_pIndexCount[i];
+					AllGroups[k]->AllCountIndex += model->m_pIndexCount[i];
+					AllGroups[k]->CountIndex.push_back(model->m_pIndexCount[i]);
 
 					gdb.idbuff = AllGroups[k]->VertexBuffer.size()-1;
 
 					AllGroups[k]->ArrModels[gdb.idbuff].push_back(tmpmodel);
 
-					if (SizeRenderIndexBuffer < model->IndexCount[i])
+					if (SizeRenderIndexBuffer < model->m_pIndexCount[i])
 					{
 						mem_release(RenderIndexBuffer);
-						SizeRenderIndexBuffer = model->IndexCount[i];
+						SizeRenderIndexBuffer = model->m_pIndexCount[i];
 						StaticGeom::DXDevice->CreateIndexBuffer(sizeof(uint32_t)* SizeRenderIndexBuffer, D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY, D3DFMT_INDEX32, D3DPOOL_DEFAULT/*D3DPOOL_MANAGED*/, &RenderIndexBuffer, 0);
 					}
 				}
@@ -339,7 +344,7 @@ ID StaticGeom::AddModel(const char* path, const char* lod1, const char* name)
 					AllGroups[k]->ArrModels[gdb.idbuff].push_back(tmpmodel);
 					long lastvbnum = AllGroups[k]->VertexBuffer.size() - 1;
 
-					StaticGeom::DXDevice->CreateVertexBuffer(sizeof(vertex_static)* (AllGroups[k]->CountVertex[lastvbnum] + model->VertexCount[i]), NULL, NULL, D3DPOOL_MANAGED, &vb, 0);
+					StaticGeom::DXDevice->CreateVertexBuffer(sizeof(vertex_static)* (AllGroups[k]->CountVertex[lastvbnum] + model->m_pVertexCount[i]), NULL, NULL, D3DPOOL_MANAGED, &vb, 0);
 					
 					/*Group::VertexBuff* vborigin = new Group::VertexBuff();
 					vborigin->count = (AllGroups[k]->CountVertex[lastvbnum] + model->VertexCount[i]);
@@ -353,7 +358,7 @@ ID StaticGeom::AddModel(const char* path, const char* lod1, const char* name)
 					AllGroups[k]->VertexBufferOrigin[lastvbnum] = vborigin;*/
 
 					gdb.VertexStart = AllGroups[k]->CountVertex[lastvbnum];
-					gdb.VertexCount = model->VertexCount[i];
+					gdb.VertexCount = model->m_pVertexCount[i];
 					
 					if (!FAILED(vb->Lock(0, 0, (void**)&pData, 0)))
 					{
@@ -363,25 +368,25 @@ ID StaticGeom::AddModel(const char* path, const char* lod1, const char* name)
 							AllGroups[k]->VertexBuffer[lastvbnum]->Unlock();
 						}
 
-						memcpy(pData + AllGroups[k]->CountVertex[lastvbnum], pVert + model->StartVertex[i], sizeof(vertex_static)* (model->VertexCount[i]));
+						memcpy(pData + AllGroups[k]->CountVertex[lastvbnum], pVert + model->m_pStartVertex[i], sizeof(vertex_static)* (model->m_pVertexCount[i]));
 						vb->Unlock();
 					}
 
-					AllGroups[k]->AllCountVertex += model->VertexCount[i];
-					AllGroups[k]->CountVertex[lastvbnum] += model->VertexCount[i];
+					AllGroups[k]->AllCountVertex += model->m_pVertexCount[i];
+					AllGroups[k]->CountVertex[lastvbnum] += model->m_pVertexCount[i];
 					mem_release(AllGroups[k]->VertexBuffer[lastvbnum]);
 					AllGroups[k]->VertexBuffer[lastvbnum] = vb;
 
 					gdb.IndexStart = AllGroups[k]->CountIndex[lastvbnum];
-					gdb.IndexCount = model->IndexCount[i];
+					gdb.IndexCount = model->m_pIndexCount[i];
 
-					AllGroups[k]->AllCountIndex += model->IndexCount[i];
-					AllGroups[k]->CountIndex[lastvbnum] += model->IndexCount[i];
+					AllGroups[k]->AllCountIndex += model->m_pIndexCount[i];
+					AllGroups[k]->CountIndex[lastvbnum] += model->m_pIndexCount[i];
 
-					if (SizeRenderIndexBuffer < (AllGroups[k]->CountIndex[lastvbnum] + model->IndexCount[i]))
+					if (SizeRenderIndexBuffer < (AllGroups[k]->CountIndex[lastvbnum] + model->m_pIndexCount[i]))
 					{
 						mem_release(RenderIndexBuffer);
-						SizeRenderIndexBuffer = (AllGroups[k]->CountIndex[lastvbnum] + model->IndexCount[i]);
+						SizeRenderIndexBuffer = (AllGroups[k]->CountIndex[lastvbnum] + model->m_pIndexCount[i]);
 						StaticGeom::DXDevice->CreateIndexBuffer(sizeof(uint32_t)* SizeRenderIndexBuffer, D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY, D3DFMT_INDEX32, D3DPOOL_DEFAULT/*D3DPOOL_MANAGED*/, &RenderIndexBuffer, 0);
 					}
 				}
@@ -400,14 +405,14 @@ ID StaticGeom::AddModel(const char* path, const char* lod1, const char* name)
 			gdb.idbuff = 0;
 			gdb.idgroup = AllGroups.size();
 			gdb.VertexStart = 0;
-			gdb.VertexCount = model->VertexCount[i];
+			gdb.VertexCount = model->m_pVertexCount[i];
 			gdb.IndexStart = 0;
-			gdb.IndexCount = model->IndexCount[i];
+			gdb.IndexCount = model->m_pIndexCount[i];
 
 			tmpmodel->SubSet.push_back(gdb);
 
 			IDirect3DVertexBuffer9* vb;
-			StaticGeom::DXDevice->CreateVertexBuffer(sizeof(vertex_static)* model->VertexCount[i], NULL, NULL, D3DPOOL_MANAGED, &vb, 0);
+			StaticGeom::DXDevice->CreateVertexBuffer(sizeof(vertex_static)* model->m_pVertexCount[i], NULL, NULL, D3DPOOL_MANAGED, &vb, 0);
 			
 			/*Group::VertexBuff* vborigin = new Group::VertexBuff();
 			vborigin->count = model->VertexCount[i];
@@ -418,25 +423,25 @@ ID StaticGeom::AddModel(const char* path, const char* lod1, const char* name)
 				vborigin->arr[k] = (model->ArrVertBuf + model->StartVertex[i] + k)->Pos;
 			}*/
 
-			ngroup->AllCountVertex = model->VertexCount[i];
-			ngroup->CountVertex.push_back(model->VertexCount[i]);
+			ngroup->AllCountVertex = model->m_pVertexCount[i];
+			ngroup->CountVertex.push_back(model->m_pVertexCount[i]);
 			vertex_static * pData;
 			if (!FAILED(vb->Lock(0, 0, (void**)&pData, 0)))
 			{
-				memcpy(pData, pVert + model->StartVertex[i], sizeof(vertex_static)* model->VertexCount[i]);
+				memcpy(pData, pVert + model->m_pStartVertex[i], sizeof(vertex_static)* model->m_pVertexCount[i]);
 				vb->Unlock();
 			}
 
-			ngroup->AllCountIndex = model->IndexCount[i];
-			ngroup->CountIndex.push_back(model->IndexCount[i]);
+			ngroup->AllCountIndex = model->m_pIndexCount[i];
+			ngroup->CountIndex.push_back(model->m_pIndexCount[i]);
 			
 			ngroup->VertexBuffer.push_back(vb);
 			//ngroup->VertexBufferOrigin.push_back(vborigin);
 			
-			if (SizeRenderIndexBuffer < model->IndexCount[i])
+			if (SizeRenderIndexBuffer < model->m_pIndexCount[i])
 			{
 				mem_release(RenderIndexBuffer);
-				SizeRenderIndexBuffer = model->IndexCount[i];
+				SizeRenderIndexBuffer = model->m_pIndexCount[i];
 				StaticGeom::DXDevice->CreateIndexBuffer(sizeof(uint32_t)* SizeRenderIndexBuffer, D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY, D3DFMT_INDEX32, D3DPOOL_DEFAULT/*D3DPOOL_MANAGED*/, &RenderIndexBuffer, 0);
 			}
 
@@ -446,20 +451,20 @@ ID StaticGeom::AddModel(const char* path, const char* lod1, const char* name)
 			ngroup->idtex = tmpmodel->IDTex[i];// SGCore_LoadMtl(tmptex, MTL_GEOM);
 			ngroup->SortGroup = SGCore_MtlGetSort(ngroup->idtex);
 			ngroup->IsRenderSingly = SGCore_MtlGroupRenderIsSingly(ngroup->idtex);
-			ngroup->name = model->ArrTextures[i];
+			ngroup->name = model->m_ppTextures[i];
 			AllGroups.push_back(ngroup);
 		}
 
 
 		vertex_static* pData;
-		model->VertexBuffer->Lock(0, 0, (void**)&pData, 0);
+		model->m_pVertexBuffer->Lock(0, 0, (void**)&pData, 0);
 
-		float3_t tmppos = pData[model->StartVertex[i]].Pos;
+		float3_t tmppos = pData[model->m_pStartVertex[i]].Pos;
 		float3 tmpMax = tmppos;
 		float3 tmpMin = tmppos;
-		for (DWORD k = 0; k<model->VertexCount[i]; k++)
+		for (DWORD k = 0; k<model->m_pVertexCount[i]; k++)
 		{
-			tmppos = pData[model->StartVertex[i] + k].Pos;
+			tmppos = pData[model->m_pStartVertex[i] + k].Pos;
 
 			if (tmppos.x > tmpMax.x)
 				tmpMax.x = tmppos.x;
@@ -482,24 +487,24 @@ ID StaticGeom::AddModel(const char* path, const char* lod1, const char* name)
 		}
 
 		DWORD* indeces;
-		model->IndexBuffer->Lock(0, 0, (void **)&indeces, 0);
+		model->m_pIndexBuffer->Lock(0, 0, (void **)&indeces, 0);
 
 		float3 tmpMM = SMVectorLerp(tmpMax, tmpMin, 0.5f);
 
 		D3DXPlaneFromPoints(&tmpmodel->SubSet[i].Plane,
-				&D3DXVECTOR3(pData[indeces[model->StartIndex[i] + 0]].Pos.x, pData[indeces[model->StartIndex[i] + 0]].Pos.y, pData[indeces[model->StartIndex[i] + 0]].Pos.z),
-				&D3DXVECTOR3(pData[indeces[model->StartIndex[i] + 1]].Pos.x, pData[indeces[model->StartIndex[i] + 1]].Pos.y, pData[indeces[model->StartIndex[i] + 1]].Pos.z),
-				&D3DXVECTOR3(pData[indeces[model->StartIndex[i] + 2]].Pos.x, pData[indeces[model->StartIndex[i] + 2]].Pos.y, pData[indeces[model->StartIndex[i] + 2]].Pos.z));
-		model->VertexBuffer->Unlock();
-		model->IndexBuffer->Unlock();
+			&D3DXVECTOR3(pData[indeces[model->m_pStartIndex[i] + 0]].Pos.x, pData[indeces[model->m_pStartIndex[i] + 0]].Pos.y, pData[indeces[model->m_pStartIndex[i] + 0]].Pos.z),
+			&D3DXVECTOR3(pData[indeces[model->m_pStartIndex[i] + 1]].Pos.x, pData[indeces[model->m_pStartIndex[i] + 1]].Pos.y, pData[indeces[model->m_pStartIndex[i] + 1]].Pos.z),
+			&D3DXVECTOR3(pData[indeces[model->m_pStartIndex[i] + 2]].Pos.x, pData[indeces[model->m_pStartIndex[i] + 2]].Pos.y, pData[indeces[model->m_pStartIndex[i] + 2]].Pos.z));
+		model->m_pVertexBuffer->Unlock();
+		model->m_pIndexBuffer->Unlock();
 
 		tmpmodel->SubSet[i].Center = (float3_t)((tmpMax + tmpMin) * 0.5);
 		tmpmodel->SubSet[i].Min = tmpMin;
 		tmpmodel->SubSet[i].Max = tmpMax;
 	}
 
-	model->VertexBuffer->Unlock();
-	model->IndexBuffer->Unlock();
+	model->m_pVertexBuffer->Unlock();
+	model->m_pIndexBuffer->Unlock();
 
 	AllModels.push_back(tmpmodel);
 
@@ -515,8 +520,8 @@ ID StaticGeom::AddModel(const char* path, const char* lod1, const char* name)
 
 	float3 jmin, jmax, jmin2, jmax2;
 
-	AllModels[AllModels.size()-1]->ArrSplits->BoundVolumeP->GetMinMax(&jmin, &jmax);
-	BoundVolume->GetMinMax(&jmin2, &jmax2);
+	AllModels[AllModels.size()-1]->ArrSplits->BoundVolumeP->getMinMax(&jmin, &jmax);
+	BoundVolume->getMinMax(&jmin2, &jmax2);
 
 	if (jmin2.x > jmin.x)
 		jmin2.x = jmin.x;
@@ -532,14 +537,14 @@ ID StaticGeom::AddModel(const char* path, const char* lod1, const char* name)
 	if (jmax2.z < jmax.z)
 		jmax2.z = jmax.z;
 
-	BoundVolume->SetMinMax(&jmin2, &jmax2);
+	BoundVolume->setMinMax(&jmin2, &jmax2);
 	
 	mem_release_del(model);
 
 	mem_delete_a(ArrMeshVertex);
 	mem_delete_a(ArrMeshIndex);
 
-	g_fnReportf(0, " completed\n", path);
+	LibReport(0, " completed\n", path);
 	return AllModels.size() - 1;
 }
 
@@ -625,7 +630,7 @@ void StaticGeom::DelModel(ID id)
 			if (tmpidingroup == -1)
 			{
 				//то это очень плохо
-				g_fnReportf(REPORT_MSG_LEVEL_ERROR, "[GEOM] %s - when deleting the model, it was found in an array of patterns in subgroups of the buffer, it is very bad", GEN_MSG_LOCATION);
+				LibReport(REPORT_MSG_LEVEL_ERROR, "%s - when deleting the model, it was found in an array of patterns in subgroups of the buffer, it is very bad", GEN_MSG_LOCATION);
 			}
 
 			//обновляем данные в подгруппе модели о стартовых позициях
@@ -977,7 +982,7 @@ void StaticGeom::InitArrIndexPtr()
 }
 
 
-void StaticGeom::CPUFillingArrIndeces(ISXFrustum* frustum, float3* viewpos, ID id_arr)
+void StaticGeom::CPUFillingArrIndeces(const ISXFrustum* frustum, float3* viewpos, ID id_arr)
 {
 	STATIC_PRECOND_ARRCOMFOR_ERR_ID(id_arr);
 
@@ -991,7 +996,7 @@ void StaticGeom::CPUFillingArrIndeces(ISXFrustum* frustum, float3* viewpos, ID i
 	{
 		if (id_arr == 0)
 		{
-			AllModels[i]->ArrSplits->BoundVolumeP->GetSphere(&jcenter, &jradius);
+			AllModels[i]->ArrSplits->BoundVolumeP->getSphere(&jcenter, &jradius);
 			AllModels[i]->ArrSplits->DistForCamera = SMVector3Length((jcenter - (*viewpos))) - jradius;
 		}
 
@@ -1020,13 +1025,13 @@ void StaticGeom::CPUFillingArrIndeces(ISXFrustum* frustum, float3* viewpos, ID i
 	}
 }
 
-void StaticGeom::ComRecArrIndeces(ISXFrustum* frustum, Segment** arrsplits, DWORD *count, Segment* comsegment, float3* viewpos, Array<Segment*, GEOM_DEFAULT_RESERVE_COM>* queue, ID curr_splits_ids_render)
+void StaticGeom::ComRecArrIndeces(const ISXFrustum* frustum, Segment** arrsplits, DWORD *count, Segment* comsegment, float3* viewpos, Array<Segment*, GEOM_DEFAULT_RESERVE_COM>* queue, ID curr_splits_ids_render)
 {
 	float jradius;
 	float3 jcenter;
-	comsegment->BoundVolumeP->GetSphere(&jcenter, &jradius);
+	comsegment->BoundVolumeP->getSphere(&jcenter, &jradius);
 
-	if (comsegment->CountAllPoly > 0 && (frustum->SphereInFrustum(&jcenter, jradius)))
+	if (comsegment->CountAllPoly > 0 && (frustum->sphereInFrustum(&jcenter, jradius)))
 	{
 			if (comsegment->BFNonEnd )
 			{
@@ -1040,7 +1045,7 @@ void StaticGeom::ComRecArrIndeces(ISXFrustum* frustum, Segment** arrsplits, DWOR
 						SortId[q] = -1;
 						if (comsegment->Splits[q])
 						{
-							comsegment->Splits[q]->BoundVolumeP->GetSphere(&jcenter, &jradius);
+							comsegment->Splits[q]->BoundVolumeP->getSphere(&jcenter, &jradius);
 							DistFor[q] = SMVector3Length2((jcenter - (*viewpos))) - jradius*jradius;
 						}
 					}
@@ -1177,16 +1182,16 @@ void StaticGeom::GPURender(DWORD timeDelta, int sort_mtl, ID id_arr, ID exclude_
 
 		if (AllModels[i]->IsRenderLod)
 		{
-			StaticGeom::DXDevice->SetStreamSource(0, AllModels[i]->Lod0.model->VertexBuffer, 0, sizeof(vertex_static));
-			StaticGeom::DXDevice->SetIndices(AllModels[i]->Lod0.model->IndexBuffer);
+			StaticGeom::DXDevice->SetStreamSource(0, AllModels[i]->Lod0.model->m_pVertexBuffer, 0, sizeof(vertex_static));
+			StaticGeom::DXDevice->SetIndices(AllModels[i]->Lod0.model->m_pIndexBuffer);
 			StaticGeom::DXDevice->SetVertexDeclaration(SGCore_StaticModelGetDecl());
-			for(int k = 0, kl = AllModels[i]->Lod0.model->SubsetCount; k < kl; ++k)
+			for (int k = 0, kl = AllModels[i]->Lod0.model->m_uiSubsetCount; k < kl; ++k)
 			{
 				if (AllModels[i]->Lod0.SortGroup == sort_mtl || sort_mtl == -1)
 				{
 					SGCore_MtlSet(AllModels[i]->Lod0.IDsTexs[k], 0);
-					SGCore_DIP(D3DPT_TRIANGLELIST, 0, 0, AllModels[i]->Lod0.model->VertexCount[k], AllModels[i]->Lod0.model->StartIndex[k], AllModels[i]->Lod0.model->IndexCount[k] / 3);
-					Core_RIntSet(G_RI_INT_COUNT_POLY, Core_RIntGet(G_RI_INT_COUNT_POLY) + AllModels[i]->Lod0.model->IndexCount[k] / 3);
+					SGCore_DIP(D3DPT_TRIANGLELIST, 0, 0, AllModels[i]->Lod0.model->m_pVertexCount[k], AllModels[i]->Lod0.model->m_pStartIndex[k], AllModels[i]->Lod0.model->m_pIndexCount[k] / 3);
+					Core_RIntSet(G_RI_INT_COUNT_POLY, Core_RIntGet(G_RI_INT_COUNT_POLY) + AllModels[i]->Lod0.model->m_pIndexCount[k] / 3);
 				}
 			}
 		}
@@ -1398,14 +1403,14 @@ void StaticGeom::GPURenderSingly(DWORD timeDelta, ID id, ID id_tex)
 
 	if (AllModels[id]->IsRenderLod)
 	{
-		StaticGeom::DXDevice->SetStreamSource(0, AllModels[id]->Lod0.model->VertexBuffer, 0, sizeof(vertex_static));
-		StaticGeom::DXDevice->SetIndices(AllModels[id]->Lod0.model->IndexBuffer);
+		StaticGeom::DXDevice->SetStreamSource(0, AllModels[id]->Lod0.model->m_pVertexBuffer, 0, sizeof(vertex_static));
+		StaticGeom::DXDevice->SetIndices(AllModels[id]->Lod0.model->m_pIndexBuffer);
 		StaticGeom::DXDevice->SetVertexDeclaration(SGCore_StaticModelGetDecl());
-		for (int k = 0, kl = AllModels[id]->Lod0.model->SubsetCount; k < kl; ++k)
+		for (int k = 0, kl = AllModels[id]->Lod0.model->m_uiSubsetCount; k < kl; ++k)
 		{
 			SGCore_MtlSet((id_tex > 0 ? id_tex : AllModels[id]->Lod0.IDsTexs[k]), 0);
-			SGCore_DIP(D3DPT_TRIANGLELIST, 0, 0, AllModels[id]->Lod0.model->VertexCount[k], AllModels[id]->Lod0.model->StartIndex[k], AllModels[id]->Lod0.model->IndexCount[k] / 3);
-			Core_RIntSet(G_RI_INT_COUNT_POLY, Core_RIntGet(G_RI_INT_COUNT_POLY) + AllModels[id]->Lod0.model->IndexCount[k] / 3);
+			SGCore_DIP(D3DPT_TRIANGLELIST, 0, 0, AllModels[id]->Lod0.model->m_pVertexCount[k], AllModels[id]->Lod0.model->m_pStartIndex[k], AllModels[id]->Lod0.model->m_pIndexCount[k] / 3);
+			Core_RIntSet(G_RI_INT_COUNT_POLY, Core_RIntGet(G_RI_INT_COUNT_POLY) + AllModels[id]->Lod0.model->m_pIndexCount[k] / 3);
 		}
 	}
 	else if (ArrComFor[0]->arr[id]->CountCom > 0)
@@ -1492,34 +1497,34 @@ void StaticGeom::PreSegmentation(Model* mesh, ISXDataStaticModel* model)
 	vertex_static *CreateV;
 	mem_delete_a(ArrMeshVertex);
 	mem_delete_a(ArrMeshIndex);
-	CountVertex = model->AllVertexCount;
+	CountVertex = model->m_uiAllVertexCount;
 	//копируем все вершины для текущих расчетов
-	ArrMeshVertex = new float3[model->AllVertexCount];
+	ArrMeshVertex = new float3[model->m_uiAllVertexCount];
 
-	model->VertexBuffer->Lock(0, 0, (void **)&CreateV, 0);
-	for (DWORD i = 0; i<model->AllVertexCount; i++)
+	model->m_pVertexBuffer->Lock(0, 0, (void **)&CreateV, 0);
+	for (DWORD i = 0; i<model->m_uiAllVertexCount; i++)
 	{
 		ArrMeshVertex[i] = (CreateV[i].Pos.operator float3());
 	}
-	model->VertexBuffer->Unlock();
+	model->m_pVertexBuffer->Unlock();
 
-	ArrMeshIndex = new UINT[model->AllIndexCount];
+	ArrMeshIndex = new UINT[model->m_uiAllIndexCount];
 	UINT* pInd;
-	model->IndexBuffer->Lock(0, 0, (void **)&pInd, 0);
-	memcpy(ArrMeshIndex, pInd, sizeof(UINT)* model->AllIndexCount);
-	model->IndexBuffer->Unlock();
+	model->m_pIndexBuffer->Lock(0, 0, (void **)&pInd, 0);
+	memcpy(ArrMeshIndex, pInd, sizeof(UINT)* model->m_uiAllIndexCount);
+	model->m_pIndexBuffer->Unlock();
 
 	///////
 
 	mesh->ArrSplits = new Segment();
-	mesh->ArrSplits->CountAllPoly = model->AllIndexCount/3;
-	g_fnReportf(REPORT_MSG_LEVEL_NOTICE, "poly: %d, ", mesh->ArrSplits->CountAllPoly);
+	mesh->ArrSplits->CountAllPoly = model->m_uiAllIndexCount / 3;
+	LibReport(REPORT_MSG_LEVEL_NOTICE, "poly: %d, ", mesh->ArrSplits->CountAllPoly);
 
 	mesh->ArrSplits->BoundVolumeP = SGCore_CrBound();
-	mesh->ArrSplits->BoundVolumeP->CalcBound(model->VertexBuffer, model->AllVertexCount, sizeof(vertex_static));
+	mesh->ArrSplits->BoundVolumeP->calcBound(model->m_pVertexBuffer, model->m_uiAllVertexCount, sizeof(vertex_static));
 
 	float3 tmpMin, tmpMax;
-	mesh->ArrSplits->BoundVolumeP->GetMinMax(&tmpMin, &tmpMax);
+	mesh->ArrSplits->BoundVolumeP->getMinMax(&tmpMin, &tmpMax);
 
 	int CountSplitsSys = 0;
 	int CountPolyInSegment = GEOM_MIN_COUNT_POLY;
@@ -1530,24 +1535,24 @@ void StaticGeom::PreSegmentation(Model* mesh, ISXDataStaticModel* model)
 	const float minVol = GEOM_MIN_ALLVOLUME_FOR_SEGMENTATION;
 	const float minLen = GEOM_MIN_LENGTH_FOR_SEGMENTATION;
 	const float minOctoHeight = GEOM_MIN_HEIGHT_FOR_SEGMENTATION;
-	if ((allvolume >= minVol || dimensions.x >= minLen || dimensions.y >= minOctoHeight || dimensions.z >= minLen) && (model->AllIndexCount >= GEOM_MIN_POLYGONS_FOR_SEGMENTATION * 3 || allvolume >= GEOM_FORCE_ALLVOLUME_FOR_SEGMENTATION))
+	if ((allvolume >= minVol || dimensions.x >= minLen || dimensions.y >= minOctoHeight || dimensions.z >= minLen) && (model->m_uiAllIndexCount >= GEOM_MIN_POLYGONS_FOR_SEGMENTATION * 3 || allvolume >= GEOM_FORCE_ALLVOLUME_FOR_SEGMENTATION))
 	{
 		if(dimensions.y >= minOctoHeight)
 		{
 			CountSplitsSys = GEOM_COUNT_TYPE_SEGMENTATION_OCTO;
-			g_fnReportf(REPORT_MSG_LEVEL_NOTICE, " div: octo, ");
+			LibReport(REPORT_MSG_LEVEL_NOTICE, " div: octo, ");
 		}
 		else
 		{
 			CountSplitsSys = GEOM_COUNT_TYPE_SEGMENTATION_QUAD;
-			g_fnReportf(REPORT_MSG_LEVEL_NOTICE, " div: quad, ");
+			LibReport(REPORT_MSG_LEVEL_NOTICE, " div: quad, ");
 
 		}
 			
-		float4_t tmpmin(dimensions.x / minLen, dimensions.y / minOctoHeight, dimensions.z / minLen, (float)model->AllIndexCount / (float)GEOM_MIN_POLYGONS_FOR_SEGMENTATION / 3.0f);
+		float4_t tmpmin(dimensions.x / minLen, dimensions.y / minOctoHeight, dimensions.z / minLen, (float)model->m_uiAllIndexCount / (float)GEOM_MIN_POLYGONS_FOR_SEGMENTATION / 3.0f);
 		tmpmin.x = min(min(min(tmpmin.x, tmpmin.y), min(tmpmin.z, tmpmin.w)), (allvolume / minVol)) * 10.0;
 
-		CountPolyInSegment = (float)model->AllIndexCount / 3.0 / tmpmin.x / CountSplitsSys;
+		CountPolyInSegment = (float)model->m_uiAllIndexCount / 3.0 / tmpmin.x / CountSplitsSys;
 
 		if (CountPolyInSegment < GEOM_MIN_COUNT_POLY)
 		{
@@ -1559,7 +1564,7 @@ void StaticGeom::PreSegmentation(Model* mesh, ISXDataStaticModel* model)
 			CountPolyInSegment = GEOM_MAX_COUNT_POLY;
 		}
 
-		g_fnReportf(REPORT_MSG_LEVEL_NOTICE, "poly in split: %d, ", CountPolyInSegment);
+		LibReport(REPORT_MSG_LEVEL_NOTICE, "poly in split: %d, ", CountPolyInSegment);
 	}
 
 #else
@@ -1576,12 +1581,12 @@ void StaticGeom::PreSegmentation(Model* mesh, ISXDataStaticModel* model)
 			{
 				//делим как octo дерево
 				CountSplitsSys = GEOM_COUNT_TYPE_SEGMENTATION_OCTO;
-				g_fnReportf(REPORT_MSG_LEVEL_NOTICE, " div: octo, ");
+				LibReport(REPORT_MSG_LEVEL_NOTICE, " div: octo, ");
 			}
 			else
 			{
 				CountSplitsSys = STATIC_COUNT_TYPE_SEGMENTATION_QUAD;
-				g_fnReportf(REPORT_MSG_LEVEL_NOTICE, " div: quad, ");
+				LibReport(REPORT_MSG_LEVEL_NOTICE, " div: quad, ");
 			}
 
 			//определяем коэфициент интерполяции для определния минимального количества полигонов в сплите
@@ -1591,7 +1596,7 @@ void StaticGeom::PreSegmentation(Model* mesh, ISXDataStaticModel* model)
 			else if(tmpcoef < 0.f)
 				tmpcoef = 0;
 			CountPolyInSegment = lerpf(STATIC_MIN_COUNT_POLY, STATIC_MAX_COUNT_POLY, tmpcoef);
-			g_fnReportf(REPORT_MSG_LEVEL_NOTICE, "poly in split: %d, ", CountPolyInSegment);
+			LibReport(REPORT_MSG_LEVEL_NOTICE, "poly in split: %d, ", CountPolyInSegment);
 		}
 #endif
 
@@ -1659,22 +1664,22 @@ void StaticGeom::PreSegmentation(Model* mesh, ISXDataStaticModel* model)
 	}
 
 	mesh->ArrSplits->BoundVolumeSys = SGCore_CrBound();
-	mesh->ArrSplits->BoundVolumeSys->SetMinMax(&tmpMin, &tmpMax);
+	mesh->ArrSplits->BoundVolumeSys->setMinMax(&tmpMin, &tmpMax);
 	//}}
 
-	mesh->ArrSplits->CountSubSet = model->SubsetCount;
-	mesh->ArrSplits->NumberGroup = new uint32_t[model->SubsetCount];
-	mesh->ArrSplits->NumberGroupModel = new uint32_t[model->SubsetCount];
-	mesh->ArrSplits->CountPoly = new uint32_t[model->SubsetCount];
+	mesh->ArrSplits->CountSubSet = model->m_uiSubsetCount;
+	mesh->ArrSplits->NumberGroup = new uint32_t[model->m_uiSubsetCount];
+	mesh->ArrSplits->NumberGroupModel = new uint32_t[model->m_uiSubsetCount];
+	mesh->ArrSplits->CountPoly = new uint32_t[model->m_uiSubsetCount];
 
 	/////
 
 	//заполняем массив с номаерами подгрупп и массив с количествами полигонов
-	for (DWORD i = 0; i<model->SubsetCount; i++)
+	for (DWORD i = 0; i<model->m_uiSubsetCount; i++)
 	{
 		mesh->ArrSplits->NumberGroupModel[i] = i;
 		mesh->ArrSplits->NumberGroup[i] = i;
-		mesh->ArrSplits->CountPoly[i] = model->IndexCount[i] / 3;
+		mesh->ArrSplits->CountPoly[i] = model->m_pIndexCount[i] / 3;
 	}
 
 	//создаем массивы с полигонами, каждый полигон принадлежит своей подгруппе
@@ -1685,9 +1690,9 @@ void StaticGeom::PreSegmentation(Model* mesh, ISXDataStaticModel* model)
 	}
 
 	//заполняем массивы с полигонами
-	for (DWORD i = 0; i<model->SubsetCount; i++)
+	for (DWORD i = 0; i<model->m_uiSubsetCount; i++)
 	{
-		memcpy(mesh->ArrSplits->ArrPoly[i], ArrMeshIndex + model->StartIndex[i], model->IndexCount[i] * sizeof(uint32_t));
+		memcpy(mesh->ArrSplits->ArrPoly[i], ArrMeshIndex + model->m_pStartIndex[i], model->m_pIndexCount[i] * sizeof(uint32_t));
 	}
 
 	//если количество полигонов и текущая установка деления позволяют делить дальше
@@ -1731,7 +1736,7 @@ void StaticGeom::PreSegmentation(Model* mesh, ISXDataStaticModel* model)
 		{
 			for (DWORD k = 0; k<mesh->ArrSplits->CountPoly[i] * 3; k++)
 			{
-				mesh->ArrSplits->ArrPoly[i][k] -= model->StartVertex[mesh->ArrSplits->NumberGroup[i]];
+				mesh->ArrSplits->ArrPoly[i][k] -= model->m_pStartVertex[mesh->ArrSplits->NumberGroup[i]];
 				mesh->ArrSplits->ArrPoly[i][k] += mesh->SubSet[mesh->ArrSplits->NumberGroup[i]].VertexStart;
 			}
 			mesh->ArrSplits->NumberGroup[i] = mesh->SubSet[mesh->ArrSplits->NumberGroup[i]].idgroup;
@@ -1791,9 +1796,9 @@ void StaticGeom::Segmentation(Segment* Split, Model* mesh, ISXDataStaticModel* m
 		for (int i = 0; i<CountSplitsSys; i++)
 		{
 			Split->Splits[i]->BoundVolumeSys = ArrBound[i];
-			Split->Splits[i]->BoundVolumeSys->GetMinMax(&tmpmin, &tmpmax);
+			Split->Splits[i]->BoundVolumeSys->getMinMax(&tmpmin, &tmpmax);
 			Split->Splits[i]->BoundVolumeP = SGCore_CrBound();
-			Split->Splits[i]->BoundVolumeP->SetMinMax(&tmpmin, &tmpmax);
+			Split->Splits[i]->BoundVolumeP->setMinMax(&tmpmin, &tmpmax);
 		}
 	}
 	else if (CountSplitsSys == GEOM_COUNT_TYPE_SEGMENTATION_OCTO)
@@ -1808,9 +1813,9 @@ void StaticGeom::Segmentation(Segment* Split, Model* mesh, ISXDataStaticModel* m
 		for (int i = 0; i<CountSplitsSys; i++)
 		{
 			Split->Splits[i]->BoundVolumeSys = ArrBound[i];
-			Split->Splits[i]->BoundVolumeSys->GetMinMax(&tmpmin, &tmpmax);
+			Split->Splits[i]->BoundVolumeSys->getMinMax(&tmpmin, &tmpmax);
 			Split->Splits[i]->BoundVolumeP = SGCore_CrBound();
-			Split->Splits[i]->BoundVolumeP->SetMinMax(&tmpmin, &tmpmax);
+			Split->Splits[i]->BoundVolumeP->setMinMax(&tmpmin, &tmpmax);
 		}
 	}
 	//}}
@@ -1823,7 +1828,7 @@ void StaticGeom::Segmentation(Segment* Split, Model* mesh, ISXDataStaticModel* m
 	float3 tmpMin, tmpMax;
 	for (int i = 0; i<CountSplitsSys; i++)
 	{
-		Split->Splits[i]->BoundVolumeSys->GetMinMax(&tmpMin, &tmpMax);
+		Split->Splits[i]->BoundVolumeSys->getMinMax(&tmpMin, &tmpMax);
 		//SGCore_FCreateBoundingBoxMesh(&tmpMin, &tmpMax, &(Split->Splits[i]->BoundBox));
 		DWORD tmpNumCurrentPoly = 0;
 		for (DWORD j = 0; j<Split->CountSubSet; j++)
@@ -1881,7 +1886,7 @@ void StaticGeom::Segmentation(Segment* Split, Model* mesh, ISXDataStaticModel* m
 
 					for (int q = 0; q<CountSplitsSys; q++)
 					{
-						Split->Splits[q]->BoundVolumeSys->GetSphere(&SphereCenter, &ShereRadius);
+						Split->Splits[q]->BoundVolumeSys->getSphere(&SphereCenter, &ShereRadius);
 						Length = -SphereCenter + CenterPoly;
 						ArrLength[q] = SMVector3Length(Length);
 					}
@@ -2060,7 +2065,7 @@ void StaticGeom::Segmentation(Segment* Split, Model* mesh, ISXDataStaticModel* m
 				{
 					for (DWORD k = 0; k<Split->Splits[i]->CountPoly[q] * 3; k++)
 					{
-						Split->Splits[i]->ArrPoly[q][k] -= model->StartVertex[Split->Splits[i]->NumberGroup[q]];
+						Split->Splits[i]->ArrPoly[q][k] -= model->m_pStartVertex[Split->Splits[i]->NumberGroup[q]];
 						Split->Splits[i]->ArrPoly[q][k] += mesh->SubSet[Split->Splits[i]->NumberGroup[q]].VertexStart;
 					}
 
@@ -2097,7 +2102,7 @@ void StaticGeom::EditVolume(Model* mesh, Segment* Split)
 	Min = ArrMeshVertex[(Split->ArrPoly[0][0])];
 
 	float3 Max2, Min2;
-	Split->BoundVolumeSys->GetMinMax(&Min2, &Max2);
+	Split->BoundVolumeSys->getMinMax(&Min2, &Max2);
 
 	float3 tmpf;
 	for (DWORD i = 0; i<Split->CountSubSet; i++)
@@ -2125,7 +2130,7 @@ void StaticGeom::EditVolume(Model* mesh, Segment* Split)
 	//float Radius = SMVector3Length(Center - Max);
 
 	//Split->BoundVolumeP->SetSphere(&Center, &Radius);
-	Split->BoundVolumeP->SetMinMax(&Min, &Max);
+	Split->BoundVolumeP->setMinMax(&Min, &Max);
 }
 
 void StaticGeom::Save(const char* path)
@@ -2248,7 +2253,7 @@ void StaticGeom::Save(const char* path)
 void StaticGeom::SaveSplit(Segment* Split, FILE* file, Array<Segment*> * queue)
 {
 	float3 jmin, jmax;
-	Split->BoundVolumeSys->GetMinMax(&jmin, &jmax);
+	Split->BoundVolumeSys->getMinMax(&jmin, &jmax);
 	fwrite(&jmin.x, sizeof(float), 1, file);
 	fwrite(&jmin.y, sizeof(float), 1, file);
 	fwrite(&jmin.z, sizeof(float), 1, file);
@@ -2257,7 +2262,7 @@ void StaticGeom::SaveSplit(Segment* Split, FILE* file, Array<Segment*> * queue)
 	fwrite(&jmax.y, sizeof(float), 1, file);
 	fwrite(&jmax.z, sizeof(float), 1, file);
 
-	Split->BoundVolumeP->GetMinMax(&jmin, &jmax);
+	Split->BoundVolumeP->getMinMax(&jmin, &jmax);
 	fwrite(&jmin.x, sizeof(float), 1, file);
 	fwrite(&jmin.y, sizeof(float), 1, file);
 	fwrite(&jmin.z, sizeof(float), 1, file);
@@ -2478,8 +2483,8 @@ void StaticGeom::Load(const char* path)
 
 		float3 jmin, jmax, jmin2, jmax2;
 
-		AllModels[i]->ArrSplits->BoundVolumeP->GetMinMax(&jmin, &jmax);
-		BoundVolume->GetMinMax(&jmin2, &jmax2);
+		AllModels[i]->ArrSplits->BoundVolumeP->getMinMax(&jmin, &jmax);
+		BoundVolume->getMinMax(&jmin2, &jmax2);
 
 		if (jmin2.x > jmin.x)
 			jmin2.x = jmin.x;
@@ -2495,7 +2500,7 @@ void StaticGeom::Load(const char* path)
 		if (jmax2.z < jmax.z)
 			jmax2.z = jmax.z;
 
-		BoundVolume->SetMinMax(&jmin2, &jmax2);
+		BoundVolume->setMinMax(&jmin2, &jmax2);
 	}
 
 	for (long i = 0; i < AllGroups.size(); ++i)
@@ -2528,7 +2533,7 @@ void StaticGeom::LoadSplit(Segment** Split, FILE* file, Array<Segment**> * queue
 	fread(&jmax.z, sizeof(float), 1, file);
 
 	(*Split)->BoundVolumeSys = SGCore_CrBound();
-	(*Split)->BoundVolumeSys->SetMinMax(&jmin, &jmax);
+	(*Split)->BoundVolumeSys->setMinMax(&jmin, &jmax);
 
 
 	fread(&jmin.x, sizeof(float), 1, file);
@@ -2540,7 +2545,7 @@ void StaticGeom::LoadSplit(Segment** Split, FILE* file, Array<Segment**> * queue
 	fread(&jmax.z, sizeof(float), 1, file);
 
 	(*Split)->BoundVolumeP = SGCore_CrBound();
-	(*Split)->BoundVolumeP->SetMinMax(&jmin, &jmax);
+	(*Split)->BoundVolumeP->setMinMax(&jmin, &jmax);
 
 	fread(&(*Split)->CountAllPoly, sizeof(uint32_t), 1, file);
 
@@ -2647,7 +2652,7 @@ void StaticGeom::SortGroup(float3* viewpos, int sort_mtl)
 void StaticGeom::GetIntersectedRayY2(float3* pos, Segment** arrsplits, DWORD *count, Segment* comsegment, ID curr_splits_ids_render)
 {
 	float3 jmin, jmax;
-	comsegment->BoundVolumeP->GetMinMax(&jmin, &jmax);
+	comsegment->BoundVolumeP->getMinMax(&jmin, &jmax);
 
 	if (comsegment->CountAllPoly > 0 && pos->x >= jmin.x && pos->z >= jmin.z && pos->x <= jmax.x && pos->z <= jmax.z)
 	{
@@ -2754,7 +2759,7 @@ bool StaticGeom::GetIntersectedRayY(float3* pos)
 
 void StaticGeom::GetMinMax(float3* min, float3* max)
 {
-	BoundVolume->GetMinMax(min, max);
+	BoundVolume->getMinMax(min, max);
 }
 
 ID StaticGeom::AddArrForCom()
@@ -2861,7 +2866,7 @@ void StaticGeom::GetModelMinMax(ID id, float3* min, float3* max)
 	if (id >= AllModels.size())
 		return;
 
-	AllModels[id]->ArrSplits->BoundVolumeP->GetMinMax(min, max);
+	AllModels[id]->ArrSplits->BoundVolumeP->getMinMax(min, max);
 }
 
 
@@ -2910,9 +2915,9 @@ void StaticGeom::SetModelLodPath(ID id, const char* path)
 
 		char tmptex[1024];
 		ID tmpidmat;
-		for (int i = 0; i < AllModels[id]->Lod0.model->SubsetCount; ++i)
+		for (int i = 0; i < AllModels[id]->Lod0.model->m_uiSubsetCount; ++i)
 		{
-			sprintf(tmptex, "%s.dds", AllModels[id]->Lod0.model->ArrTextures[i]);
+			sprintf(tmptex, "%s.dds", AllModels[id]->Lod0.model->m_ppTextures[i]);
 			tmpidmat = SGCore_MtlLoad(tmptex, MTL_TYPE_GEOM);
 			AllModels[id]->Lod0.IDsTexs.push_back(tmpidmat);
 			AllModels[id]->Lod0.SortGroup = SGCore_MtlGetSort(tmpidmat);
@@ -2920,7 +2925,7 @@ void StaticGeom::SetModelLodPath(ID id, const char* path)
 
 		sprintf(AllModels[id]->Lod0.PathName,"%s",path);
 		
-		AllModels[id]->Lod0.BoundVolume->CalcBound(AllModels[id]->Lod0.model->VertexBuffer, AllModels[id]->Lod0.model->AllVertexCount, sizeof(vertex_static));
+		AllModels[id]->Lod0.BoundVolume->calcBound(AllModels[id]->Lod0.model->m_pVertexBuffer, AllModels[id]->Lod0.model->m_uiAllVertexCount, sizeof(vertex_static));
 		
 		ApplyTransformLod(id);
 	}
@@ -2937,7 +2942,7 @@ void StaticGeom::ApplyTransform(ID id)
 	float3 tmpscale = tmpmodel->Scale / tmpmodel->OldScale;
 
 	float3 jmin, jmax;
-	tmpmodel->ArrSplits->BoundVolumeP->GetMinMax(&jmin, &jmax);
+	tmpmodel->ArrSplits->BoundVolumeP->getMinMax(&jmin, &jmax);
 	float3 jcentererpos = (jmax + jmin)*0.5f;
 	
 	RotationMat = SMMatrixRotationX(tmprot.x) * SMMatrixRotationY(tmprot.y) * SMMatrixRotationZ(tmprot.z);
@@ -3015,7 +3020,7 @@ void StaticGeom::ApplyTransform(ID id)
 
 	while (queue.size())
 	{
-		queue[0]->BoundVolumeSys->GetMinMax(&tmpmin, &tmpmax);
+		queue[0]->BoundVolumeSys->getMinMax(&tmpmin, &tmpmax);
 		tmpmin -= jcentererpos;
 		tmpmax -= jcentererpos;
 
@@ -3024,9 +3029,9 @@ void StaticGeom::ApplyTransform(ID id)
 
 		tmpmin += jcentererpos;
 		tmpmax += jcentererpos;
-		queue[0]->BoundVolumeSys->SetMinMax(&tmpmin, &tmpmax);
+		queue[0]->BoundVolumeSys->setMinMax(&tmpmin, &tmpmax);
 
-		queue[0]->BoundVolumeP->GetMinMax(&tmpmin, &tmpmax);
+		queue[0]->BoundVolumeP->getMinMax(&tmpmin, &tmpmax);
 		tmpmin -= jcentererpos;
 		tmpmax -= jcentererpos;
 
@@ -3035,7 +3040,7 @@ void StaticGeom::ApplyTransform(ID id)
 
 		tmpmin += jcentererpos;
 		tmpmax += jcentererpos;
-		queue[0]->BoundVolumeP->SetMinMax(&tmpmin, &tmpmax);
+		queue[0]->BoundVolumeP->setMinMax(&tmpmin, &tmpmax);
 
 		if (queue[0]->BFNonEnd)
 		{
@@ -3064,12 +3069,12 @@ void StaticGeom::ApplyTransformLod(ID id)
 	vertex_static* pData;
 
 	float3 jmin, jmax;
-	AllModels[id]->Lod0.BoundVolume->GetMinMax(&jmin, &jmax);
+	AllModels[id]->Lod0.BoundVolume->getMinMax(&jmin, &jmax);
 	float3 jcentererpos = (jmax + jmin)*0.5f;
 
-	tmpmodel->Lod0.model->VertexBuffer->Lock(0, 0, (void**)&pData, 0);
+	tmpmodel->Lod0.model->m_pVertexBuffer->Lock(0, 0, (void**)&pData, 0);
 
-	for (long i = 0; i < tmpmodel->Lod0.model->AllVertexCount; ++i)
+	for (long i = 0; i < tmpmodel->Lod0.model->m_uiAllVertexCount; ++i)
 	{
 		pData[i].Pos.x -= jcentererpos.x;
 		pData[i].Pos.y -= jcentererpos.y;
@@ -3080,7 +3085,7 @@ void StaticGeom::ApplyTransformLod(ID id)
 		pData[i].Pos.z += jcentererpos.z;
 	}
 
-	tmpmodel->Lod0.model->VertexBuffer->Unlock();
+	tmpmodel->Lod0.model->m_pVertexBuffer->Unlock();
 
 	
 	jmin -= jcentererpos;
@@ -3091,7 +3096,7 @@ void StaticGeom::ApplyTransformLod(ID id)
 
 	jmin += jcentererpos;
 	jmax += jcentererpos;
-	tmpmodel->Lod0.BoundVolume->SetMinMax(&jmin, &jmax);
+	tmpmodel->Lod0.BoundVolume->setMinMax(&jmin, &jmax);
 }
 
 void StaticGeom::Clear()
@@ -3123,7 +3128,7 @@ void StaticGeom::Clear()
 	CountVertex = 0;
 
 	float3 jmin(0, 0, 0), jmax(0, 0, 0);
-	BoundVolume->SetMinMax(&jmin,&jmax);
+	BoundVolume->setMinMax(&jmin,&jmax);
 }
 
 void StaticGeom::GetArrBuffsGeom(float3_t*** arr_vertex, int32_t** arr_count_vertex, uint32_t*** arr_index, ID*** arr_mtl, int32_t** arr_count_index, int32_t* count_models)
@@ -3255,7 +3260,7 @@ void StaticGeom::GetPartBeam(float3* pos, float3 * dir, Segment** arrsplits, DWO
 {
 	float3 center;
 	float radius;
-	comsegment->BoundVolumeP->GetSphere(&center, &radius);
+	comsegment->BoundVolumeP->getSphere(&center, &radius);
 
 	float distsqr = SGCore_0DistancePointBeam2(center, *pos, *dir);
 	if (comsegment->CountAllPoly > 0 && distsqr <= radius*radius)
diff --git a/source/geom/static_geom.h b/source/geom/static_geom.h
index f8b90a08f..a4c1acbc3 100644
--- a/source/geom/static_geom.h
+++ b/source/geom/static_geom.h
@@ -1,31 +1,34 @@
 
-#ifndef __static_geom
-#define __static_geom
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
 
-#include <common\\string.h>
-#include <common\array.h>
-#include <gcore\\sxgcore.h>
-#include "sxgeom.h"
+#ifndef __STATIC_GEOM_H
+#define __STATIC_GEOM_H
 
-extern report_func g_fnReportf;
+#include <common/string.h>
+#include <common/array.h>
+#include <gcore/sxgcore.h>
+#include "sxgeom.h"
 
 #define STATIC_PRECOND_ARRCOMFOR_ERR_ID(id_arr) \
 if (!(id_arr < ArrComFor.size()))\
 {\
-	g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s - static: unresolved id '%d' for array of compute visible", GEN_MSG_LOCATION, id_arr); \
+	LibReport(REPORT_MSG_LEVEL_ERROR, "%s - static: unresolved id '%d' for array of compute visible", GEN_MSG_LOCATION, id_arr); \
 }
 
 #define STATIC_PRECOND_ARRCOMFOR_ERR_ID_MODEL(id_model, retval) \
 if (!(id_model < AllModels.size() && AllModels[id_model]))\
 {\
-	g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s - static: unresolved id '%d' for array of models", GEN_MSG_LOCATION, id_model); \
+	LibReport(REPORT_MSG_LEVEL_ERROR, "%s - static: unresolved id '%d' for array of models", GEN_MSG_LOCATION, id_model); \
 	return retval;\
 }
 
 #define STATIC_PRECOND_ERR_ID_GROUP(id_model,id_group, ret_val) \
 if (!(id_model < AllModels.size() && AllModels[id_model] && id_group < AllModels[id_model]->SubSet.size()))\
 {\
-	g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s - static: unresolved id '%d' for array of group in model '%d'", GEN_MSG_LOCATION, id_group, id_model); \
+	LibReport(REPORT_MSG_LEVEL_ERROR, "%s - static: unresolved id '%d' for array of group in model '%d'", GEN_MSG_LOCATION, id_group, id_model); \
 	return ret_val; \
 }
 
@@ -196,7 +199,7 @@ public:
 	
 	long GetCountModel();
 
-	void CPUFillingArrIndeces(ISXFrustum* frustum, float3* viewpos, ID id_arr = 0);
+	void CPUFillingArrIndeces(const ISXFrustum* frustum, float3* viewpos, ID id_arr = 0);
 	bool GetIntersectedRayY(float3* pos);
 
 	bool SortExistsForRender(int sort, ID id_arr = 0);
@@ -280,7 +283,7 @@ protected:
 	void EditVolume(Model* mesh, Segment* Split);
 	void SetSplitID(Segment* Split, ID* SplitsIDs, ID* SplitsIDsRender);	//установка каждому куску идентификатора, удаление пустых кусков
 	void SetSplitID2(Segment* Split, ID* SplitsIDs, ID* SplitsIDsRender, Array<Segment*>* queue);
-	void ComRecArrIndeces(ISXFrustum* frustum, Segment** arrsplits, DWORD *count, Segment* comsegment, float3* viewpos, Array<Segment*, GEOM_DEFAULT_RESERVE_COM>* queue, ID curr_splits_ids_render);
+	void ComRecArrIndeces(const ISXFrustum* frustum, Segment** arrsplits, DWORD *count, Segment* comsegment, float3* viewpos, Array<Segment*, GEOM_DEFAULT_RESERVE_COM>* queue, ID curr_splits_ids_render);
 
 	//рабочие данные, используются внутри в методах
 	//{{
diff --git a/source/geom/sxgeom.cpp b/source/geom/sxgeom.cpp
index 374643837..72a2facd1 100644
--- a/source/geom/sxgeom.cpp
+++ b/source/geom/sxgeom.cpp
@@ -1,8 +1,8 @@
 
-/******************************************************
-Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 #define SXGEOM_VERSION 1
 
@@ -30,7 +30,7 @@ report_func g_fnReportf = DefReport;
 StaticGeom* GeometryObj = 0;
 Green* GreenObj = 0;
 
-#define GEOM_PRECOND(retval) if(!GeometryObj || !GreenObj){g_fnReportf(-1, "%s - sxgeom is not init", GEN_MSG_LOCATION); return retval;}
+#define GEOM_PRECOND(retval) if(!GeometryObj || !GreenObj){LibReport(REPORT_MSG_LEVEL_ERROR, "%s - sxgeom is not init", GEN_MSG_LOCATION); return retval;}
 
 //##########################################################################
 
@@ -54,7 +54,7 @@ SX_LIB_API void SGeom_0Create(const char *szName, bool isUnic)
 			if (GetLastError() == ERROR_ALREADY_EXISTS)
 			{
 				CloseHandle(hMutex);
-				g_fnReportf(-1, "%s - none unic name, sxgeom", GEN_MSG_LOCATION);
+				LibReport(REPORT_MSG_LEVEL_ERROR, "%s - none unic name", GEN_MSG_LOCATION);
 			}
 			else
 			{
@@ -73,7 +73,7 @@ SX_LIB_API void SGeom_0Create(const char *szName, bool isUnic)
 		}
 	}
 	else
-		g_fnReportf(-1, "%s - not init argument [name], sxgeom", GEN_MSG_LOCATION);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - not init argument [name]", GEN_MSG_LOCATION);
 }
 
 SX_LIB_API void SGeom_AKill()
@@ -199,7 +199,7 @@ SX_LIB_API long SGeom_ModelsGetCount()
 	return GeometryObj->GetCountModel();
 }
 
-SX_LIB_API void SGeom_ModelsComVisible(ISXFrustum* frustum, float3* viewpos, ID id_arr)
+SX_LIB_API void SGeom_ModelsComVisible(const ISXFrustum* frustum, float3* viewpos, ID id_arr)
 {
 	GEOM_PRECOND(_VOID);
 	GeometryObj->CPUFillingArrIndeces(frustum, viewpos, id_arr);
@@ -474,7 +474,7 @@ SX_LIB_API void SGeom_GreenClear()
 	GreenObj->Clear();
 }
 
-SX_LIB_API void SGeom_GreenComVisible(ISXFrustum* frustum, float3* viewpos, ID id_arr)
+SX_LIB_API void SGeom_GreenComVisible(const ISXFrustum* frustum, float3* viewpos, ID id_arr)
 {
 	GEOM_PRECOND(_VOID);
 	GreenObj->CPUFillingArrIndeces(frustum, viewpos, id_arr);
diff --git a/source/geom/sxgeom.h b/source/geom/sxgeom.h
index 9051a914c..9da30798c 100644
--- a/source/geom/sxgeom.h
+++ b/source/geom/sxgeom.h
@@ -1,8 +1,8 @@
 
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 /*!
 \file
@@ -186,7 +186,7 @@ SX_LIB_API long SGeom_ModelsGetCount();
 
 //! просчитать видимость всех моделей для фрустума 
 SX_LIB_API void SGeom_ModelsComVisible(	
-	ISXFrustum *pFrustum,	//!< фрустум для которого считаем видимость моделей
+	const ISXFrustum *pFrustum,	//!< фрустум для которого считаем видимость моделей
 	float3 *vViewPos,		//!< позиция источника фрустума чтобы просчитать дистанцию
 	ID idArr = 0			//!< идентификатор массива информации о видимости для фрустума, создается через #SGeom_ModelsAddArrForCom, если 0 то считаем в дефолтный
 	);	
@@ -526,7 +526,7 @@ SX_LIB_API void SGeom_GreenClear();
 
 //! просчитать видимость всей растительности для фрустума
 SX_LIB_API void SGeom_GreenComVisible(
-	ISXFrustum *pFrustum,	//!< фрустум для которого считаем видимость моделей
+	const ISXFrustum *pFrustum,	//!< фрустум для которого считаем видимость моделей
 	float3 *pViewPos,		//!< позиция источника фрустума чтобы просчитать дистанцию
 	ID idArr = 0			//!< идентификатор массива информации о видимости для фрустума, создается через #SGeom_ModelsAddArrForCom, если 0 то считаем в дефолтный
 	);
diff --git a/source/geom/sxgeom_dll.cpp b/source/geom/sxgeom_dll.cpp
index 4030f098d..88b1ec58e 100644
--- a/source/geom/sxgeom_dll.cpp
+++ b/source/geom/sxgeom_dll.cpp
@@ -1,10 +1,9 @@
 
-/******************************************************
-Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
-#pragma once
 #include <windows.h>
 
 BOOL APIENTRY DllMain(HMODULE hModule,
diff --git a/source/input/input.cpp b/source/input/input.cpp
index 6632d46a4..cadca3fa0 100644
--- a/source/input/input.cpp
+++ b/source/input/input.cpp
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "sxinput.h"
 #include "input.h"
 
@@ -10,10 +15,6 @@
 #	pragma comment(lib, "sxcore.lib")
 #endif
 
-#pragma once
-
-extern report_func g_fnReportf;
-
 SXInput::SXInput(const char* name):
 	mdelta({0, 0}),
 	mdeltaOld({0, 0})
@@ -35,7 +36,7 @@ long SXInput::Init(HWND hwnd)
 
 	if(RegisterRawInputDevices(Rid, sizeof(Rid) / sizeof(RAWINPUTDEVICE), sizeof(Rid[0])) == FALSE)
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_ERROR, "Registering RAW Input failed");
+		LibReport(REPORT_MSG_LEVEL_ERROR, "Registering RAW Input failed");
 		return(-1);
 	}
 #endif
diff --git a/source/input/input.h b/source/input/input.h
index aa1256f3f..54b13bafe 100644
--- a/source/input/input.h
+++ b/source/input/input.h
@@ -1,6 +1,11 @@
 
-#ifndef SX_INPUT_CLASS_H
-#define SX_INPUT_CLASS_H
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
+#ifndef __INPUT_H
+#define __INPUT_H
 
 #include <queue>
 
diff --git a/source/input/sxinput.cpp b/source/input/sxinput.cpp
index 58c643aea..b5477ce9e 100644
--- a/source/input/sxinput.cpp
+++ b/source/input/sxinput.cpp
@@ -1,8 +1,8 @@
 
-/******************************************************
-Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 #include "sxinput.h"
 #include "input.h"
@@ -19,7 +19,7 @@ SXInput* ObjectInput = 0;
 report_func g_fnReportf = DefReport;
 #endif
 
-#define SI_PRECOND(retval) if(!ObjectInput){g_fnReportf(-1, "%s - sxinput is not init", GEN_MSG_LOCATION); return retval;}
+#define SI_PRECOND(retval) if(!ObjectInput){LibReport(REPORT_MSG_LEVEL_ERROR, "%s - sxinput is not init", GEN_MSG_LOCATION); return retval;}
 
 //##########################################################################
 
@@ -64,14 +64,14 @@ SX_LIB_API void SSInput_0Create(const char* name, HWND hwnd, bool is_unic)
 						if(GetLastError() == ERROR_ALREADY_EXISTS)
 						{
 							CloseHandle(hMutex);
-							g_fnReportf(-1, "%s - none unic name for system input", GEN_MSG_LOCATION);
+							LibReport(REPORT_MSG_LEVEL_ERROR, "%s - none unic name for system input", GEN_MSG_LOCATION);
 							return;
 						}
 				}
 			InitIntup(name, hwnd);
 		}
 		else
-			g_fnReportf(-1, "%s - not init argument [name] for system sound", GEN_MSG_LOCATION);
+			LibReport(REPORT_MSG_LEVEL_ERROR, "%s - not init argument [name] for system input", GEN_MSG_LOCATION);
 }
 
 SX_LIB_API void SSInput_Update()
diff --git a/source/input/sxinput.h b/source/input/sxinput.h
index 9f86b26b3..67e7d5c13 100644
--- a/source/input/sxinput.h
+++ b/source/input/sxinput.h
@@ -1,8 +1,8 @@
 
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 /*!
 \file
diff --git a/source/input/sxinput_dll.cpp b/source/input/sxinput_dll.cpp
index 6bd158387..88b1ec58e 100644
--- a/source/input/sxinput_dll.cpp
+++ b/source/input/sxinput_dll.cpp
@@ -1,8 +1,8 @@
 
-/******************************************************
-Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 #include <windows.h>
 
diff --git a/source/level/AmbientSounds.cpp b/source/level/AmbientSounds.cpp
index 23660b1bd..3932a81b6 100644
--- a/source/level/AmbientSounds.cpp
+++ b/source/level/AmbientSounds.cpp
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "AmbientSounds.h"
 
 CAmbientSounds::CAmbientSounds()
diff --git a/source/level/AmbientSounds.h b/source/level/AmbientSounds.h
index 3180378f3..eca3ee5da 100644
--- a/source/level/AmbientSounds.h
+++ b/source/level/AmbientSounds.h
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #ifndef __AMBIENTSOUNDS_H
 #define __AMBIENTSOUNDS_H
 
diff --git a/source/level/Weather.h b/source/level/Weather.h
index 419fb5d03..21b67b23f 100644
--- a/source/level/Weather.h
+++ b/source/level/Weather.h
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #ifndef __WEATHER_H
 #define __WEATHER_H
 
@@ -20,8 +25,6 @@
 #define WEATHER_THUNDERBOLT_LENGTH	10.f	/*!< длина возможного пространства для молнии */
 #define WEATHER_THUNDERBOLT_HEIGHT	100.f	/*!< высота возможного пространства для молнии */
 
-extern report_func g_fnReportf;
-
 //рандомные звуки с 
 class CWeatherRndSnd
 {
@@ -69,10 +72,10 @@ protected:
 #define WEATHER_CONFIG_SECTION_KEY(name_key, key, file, section) \
 { \
 	if (!name_key || strlen(name_key) != 2 || !isdigit(name_key[0]) || !isdigit(name_key[1])) \
-	g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s - unresolved name of key '%s' \nfile '%s' \nsection '%s'", GEN_MSG_LOCATION, key, file, section); \
+	LibReport(REPORT_MSG_LEVEL_ERROR, "%s - unresolved name of key '%s' \nfile '%s' \nsection '%s'", GEN_MSG_LOCATION, key, file, section); \
 }
-#define WEATHER_CONFIG_LACKS_COMPONENT(component, file, section, key) if(!component) {g_fnReportf(REPORT_MSG_LEVEL_ERROR,"%s - lacks component in key '%s' \nfile '%s' \nsection '%s'",GEN_MSG_LOCATION, key, file, section);}
-#define WEATHER_CONFIG_LACKS_KEY(key, file, section) {g_fnReportf(REPORT_MSG_LEVEL_ERROR,"%s - lacks key '%s' \nfile '%s' \nsection '%s'",GEN_MSG_LOCATION, key, file, section);}
+#define WEATHER_CONFIG_LACKS_COMPONENT(component, file, section, key) if(!component) {LibReport(REPORT_MSG_LEVEL_ERROR,"%s - lacks component in key '%s' \nfile '%s' \nsection '%s'",GEN_MSG_LOCATION, key, file, section);}
+#define WEATHER_CONFIG_LACKS_KEY(key, file, section) {LibReport(REPORT_MSG_LEVEL_ERROR,"%s - lacks key '%s' \nfile '%s' \nsection '%s'",GEN_MSG_LOCATION, key, file, section);}
 
 class CWeather
 {
diff --git a/source/level/level.cpp b/source/level/level.cpp
index 63a8d8d7b..c124f1a32 100644
--- a/source/level/level.cpp
+++ b/source/level/level.cpp
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "level.h"
 
 CLevel::CLevel()
@@ -43,7 +48,7 @@ void CLevel::load(const char *szName, bool isGame)
 	sprintf(tmppathlevel, "%s%s/%s.lvl", Core_RStringGet(G_RI_STRING_PATH_GS_LEVELS), szName, szName);
 	if (!Core_0FileExists(tmppathlevel))
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_WARNING, "not found file of level '%s'", tmppathlevel);
+		LibReport(REPORT_MSG_LEVEL_WARNING, "not found file of level '%s'", tmppathlevel);
 		return;
 	}
 
@@ -56,7 +61,7 @@ void CLevel::load(const char *szName, bool isGame)
 			SGeom_ModelsLoad(tmppath);
 		else
 		{
-			g_fnReportf(REPORT_MSG_LEVEL_WARNING, "not found file of geometry '%s'", tmppath);
+			LibReport(REPORT_MSG_LEVEL_WARNING, "not found file of geometry '%s'", tmppath);
 		}
 	}
 
@@ -68,7 +73,7 @@ void CLevel::load(const char *szName, bool isGame)
 			SGeom_GreenLoad(tmppath);
 		else
 		{
-			g_fnReportf(REPORT_MSG_LEVEL_WARNING, "not found file of green '%s'", tmppath);
+			LibReport(REPORT_MSG_LEVEL_WARNING, "not found file of green '%s'", tmppath);
 		}
 	}
 
@@ -80,7 +85,7 @@ void CLevel::load(const char *szName, bool isGame)
 			SXGame_LoadEnts(tmppath);
 		else
 		{
-			g_fnReportf(REPORT_MSG_LEVEL_WARNING, "not found file of entity '%s'", tmppath);
+			LibReport(REPORT_MSG_LEVEL_WARNING, "not found file of entity '%s'", tmppath);
 		}
 	}
 
@@ -115,7 +120,7 @@ void CLevel::load(const char *szName, bool isGame)
 			SAIG_GridLoad(tmppath);
 		else
 		{
-			g_fnReportf(REPORT_MSG_LEVEL_WARNING, "not found file of aigrid '%s'", tmppath);
+			LibReport(REPORT_MSG_LEVEL_WARNING, "not found file of aigrid '%s'", tmppath);
 		}
 	}
 
@@ -155,7 +160,7 @@ void CLevel::load(const char *szName, bool isGame)
 				m_pWeather->load(tmppath);
 			else
 			{
-				g_fnReportf(REPORT_MSG_LEVEL_WARNING, "not found file of weather '%s'", tmppath);
+				LibReport(REPORT_MSG_LEVEL_WARNING, "not found file of weather '%s'", tmppath);
 			}
 		}
 	}
diff --git a/source/level/level.h b/source/level/level.h
index d453fd5e7..f17c32058 100644
--- a/source/level/level.h
+++ b/source/level/level.h
@@ -1,8 +1,8 @@
 
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 /*!
 \file
diff --git a/source/level/sxlevel.cpp b/source/level/sxlevel.cpp
index b275fc237..cf33f8559 100644
--- a/source/level/sxlevel.cpp
+++ b/source/level/sxlevel.cpp
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #define SXLEVEL_VERSION 1
 
 #include "sxlevel.h"
@@ -14,7 +19,7 @@ report_func g_fnReportf = DefReport;
 
 CLevel* g_pLevel = 0;
 
-#define SL_PRECOND(ret) if(!g_pLevel){g_fnReportf(-1, "%s - sxlevel is not init", GEN_MSG_LOCATION);return ret;}
+#define SL_PRECOND(ret) if(!g_pLevel){LibReport(REPORT_MSG_LEVEL_ERROR, "%s - sxlevel is not init", GEN_MSG_LOCATION);return ret;}
 
 //##########################################################################
 
@@ -38,7 +43,7 @@ SX_LIB_API void SLevel_0Create(const char *szName, bool isUnic)
 			if (GetLastError() == ERROR_ALREADY_EXISTS)
 			{
 				CloseHandle(hMutex);
-				g_fnReportf(-1, "%s - none unic name, sxlevel", GEN_MSG_LOCATION);
+				LibReport(REPORT_MSG_LEVEL_ERROR, "%s - none unic name", GEN_MSG_LOCATION);
 			}
 			else
 			{
@@ -51,7 +56,7 @@ SX_LIB_API void SLevel_0Create(const char *szName, bool isUnic)
 		}
 	}
 	else
-		g_fnReportf(-1, "%s - not init argument [name], sxlevel", GEN_MSG_LOCATION);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - not init argument [name]", GEN_MSG_LOCATION);
 }
 
 SX_LIB_API void SLevel_AKill()
diff --git a/source/level/sxlevel.h b/source/level/sxlevel.h
index e0f5baeb6..82918d98b 100644
--- a/source/level/sxlevel.h
+++ b/source/level/sxlevel.h
@@ -1,8 +1,8 @@
 
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 /*!
 \file
diff --git a/source/level/sxlevel_dll.cpp b/source/level/sxlevel_dll.cpp
index ddaaf5bd4..a34ff74f6 100644
--- a/source/level/sxlevel_dll.cpp
+++ b/source/level/sxlevel_dll.cpp
@@ -1,8 +1,8 @@
 
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 #include <windows.h>
 
diff --git a/source/level/weather.cpp b/source/level/weather.cpp
index 79a888466..85bd30871 100644
--- a/source/level/weather.cpp
+++ b/source/level/weather.cpp
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "Weather.h"
 
 CWeatherRndSnd::CWeatherRndSnd()
@@ -159,13 +164,13 @@ CWeather::CWeather()
 	}
 	else
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s - not found effect 'rain'", GEN_MSG_LOCATION);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - not found effect 'rain'", GEN_MSG_LOCATION);
 	}
 
 	m_idEffThunderbolt = SPE_EffectGetByName("thunderbolt");
 	if (m_idEffThunderbolt < 0)
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s - not found effect 'thunderbolt'", GEN_MSG_LOCATION);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - not found effect 'thunderbolt'", GEN_MSG_LOCATION);
 	}
 	m_ulTimeBoltNext = m_ulTimeBoltLast = 0;
 
@@ -225,7 +230,7 @@ void CWeather::load(const char *szPath)
 
 	if (!config->sectionExists("sections"))
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s - not found section 'sections' \nfile '%s'", GEN_MSG_LOCATION, szPath);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - not found section 'sections' \nfile '%s'", GEN_MSG_LOCATION, szPath);
 		mem_release_del(config);
 		return;
 	}
@@ -239,7 +244,7 @@ void CWeather::load(const char *szPath)
 
 		if (strlen(str) != 8)
 		{
-			g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s - unresolved name of key '%s' \nfile '%s' \nsection '%s'", GEN_MSG_LOCATION, str, szPath, "sections");
+			LibReport(REPORT_MSG_LEVEL_ERROR, "%s - unresolved name of key '%s' \nfile '%s' \nsection '%s'", GEN_MSG_LOCATION, str, szPath, "sections");
 			mem_release_del(config);
 			return;
 		}
@@ -282,7 +287,7 @@ void CWeather::load(const char *szPath)
 
 	for (int i = 0, il = m_aTimeSections.size(); i < il; ++i)
 	{
-		//g_fnReportf(0, "%d\n", m_aTimeSections[i].time);
+		//LibReport(0, "%d\n", m_aTimeSections[i].time);
 
 		if (config->keyExists(m_aTimeSections[i].m_szSection, "sky_texture"))
 			sprintf(m_aTimeSections[i].m_DataSection.m_szSkyTex, "%s", config->getKey(m_aTimeSections[i].m_szSection, "sky_texture"));
@@ -487,7 +492,7 @@ void CWeather::load(const char *szPath)
 
 			if (!config->sectionExists(text_env))
 			{
-				g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s - lacks env_ambient section '%s' \nszPath '%s' \nsection '%s'", GEN_MSG_LOCATION, text_env, szPath, m_aTimeSections[i].m_szSection);
+				LibReport(REPORT_MSG_LEVEL_ERROR, "%s - lacks env_ambient section '%s' \nszPath '%s' \nsection '%s'", GEN_MSG_LOCATION, text_env, szPath, m_aTimeSections[i].m_szSection);
 				return;
 			}
 
@@ -744,7 +749,7 @@ void CWeather::update()
 			tmp_fog_color2->z = lerpf(m_aTimeSections[m_iSectionOld].m_DataSection.m_vFogColor.z, m_aTimeSections[m_iSectionCurr].m_DataSection.m_vFogColor.z, lerp_factor);
 		}
 		else
-			g_fnReportf(REPORT_MSG_LEVEL_WARNING, "cvar pp_fog_color is not init");
+			LibReport(REPORT_MSG_LEVEL_WARNING, "cvar pp_fog_color is not init");
 	}
 
 	//если в текущей секции есть частота молнии
diff --git a/source/mtllight/light.cpp b/source/mtllight/light.cpp
index 6d338cd88..74b59a158 100644
--- a/source/mtllight/light.cpp
+++ b/source/mtllight/light.cpp
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "light.h"
 
 Lights::Lights()
@@ -39,7 +44,7 @@ ID Lights::CreateCopy(ID id)
 		tmplight2->BoundVolume = SGCore_CrBound();
 		IDirect3DVertexBuffer9* vertexbuf;
 		tmplight->Mesh->GetVertexBuffer(&vertexbuf);
-		tmplight->BoundVolume->CalcBound(vertexbuf, tmplight->Mesh->GetNumVertices(), tmplight->Mesh->GetNumBytesPerVertex());
+		tmplight->BoundVolume->calcBound(vertexbuf, tmplight->Mesh->GetNumVertices(), tmplight->Mesh->GetNumBytesPerVertex());
 		mem_release(vertexbuf);
 		tmplight2->Power = tmplight->Power;
 		tmplight2->Dist = tmplight->Dist;
@@ -288,7 +293,7 @@ ID Lights::CreatePoint(ID id, const float3* center, float dist, const float3* co
 {
 	if (GlobalLight != -1 && isglobal)
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s - light: global light exists, you can not create 2 global light sources", GEN_MSG_LOCATION);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - light: global light exists, you can not create 2 global light sources", GEN_MSG_LOCATION);
 		return -1;
 	}
 
@@ -357,7 +362,7 @@ ID Lights::CreatePoint(ID id, const float3* center, float dist, const float3* co
 	tmplight->BoundVolume = SGCore_CrBound();
 	IDirect3DVertexBuffer9* vertexbuf;
 	tmplight->Mesh->GetVertexBuffer(&vertexbuf);
-	tmplight->BoundVolume->CalcBound(vertexbuf, tmplight->Mesh->GetNumVertices(), tmplight->Mesh->GetNumBytesPerVertex());
+	tmplight->BoundVolume->calcBound(vertexbuf, tmplight->Mesh->GetNumVertices(), tmplight->Mesh->GetNumBytesPerVertex());
 	mem_release(vertexbuf);
 
 	if (tmplight->IsGlobal)
@@ -425,7 +430,7 @@ ID Lights::CreateDirection(ID id, const float3* pos, float dist, const float3* c
 	tmplight->BoundVolume = SGCore_CrBound();
 	IDirect3DVertexBuffer9* vertexbuf;
 	tmplight->Mesh->GetVertexBuffer(&vertexbuf);
-	tmplight->BoundVolume->CalcBound(vertexbuf, tmplight->Mesh->GetNumVertices(), tmplight->Mesh->GetNumBytesPerVertex());
+	tmplight->BoundVolume->calcBound(vertexbuf, tmplight->Mesh->GetNumVertices(), tmplight->Mesh->GetNumBytesPerVertex());
 	mem_release(vertexbuf);
 
 	ID tmpid = id;
@@ -548,7 +553,7 @@ void Lights::SetLightDist(ID id, float radius_height, bool is_create)
 	{
 		IDirect3DVertexBuffer9* vertexbuf;
 		ArrLights[id]->Mesh->GetVertexBuffer(&vertexbuf);
-		ArrLights[id]->BoundVolume->CalcBound(vertexbuf, ArrLights[id]->Mesh->GetNumVertices(), ArrLights[id]->Mesh->GetNumBytesPerVertex());
+		ArrLights[id]->BoundVolume->calcBound(vertexbuf, ArrLights[id]->Mesh->GetNumVertices(), ArrLights[id]->Mesh->GetNumBytesPerVertex());
 		mem_release_del(vertexbuf);
 	}
 
@@ -675,10 +680,10 @@ bool Lights::ComVisibleForFrustum(ID id, const ISXFrustum* frustum)
 
 	float3 tmpcenter;
 	float tmpradius;
-	ArrLights[id]->BoundVolume->GetSphere(&tmpcenter, &tmpradius);
+	ArrLights[id]->BoundVolume->getSphere(&tmpcenter, &tmpradius);
 	tmpcenter = SMVector3Transform(tmpcenter, ArrLights[id]->WorldMat);
 
-	return frustum->SphereInFrustum(&tmpcenter, tmpradius);
+	return frustum->sphereInFrustum(&tmpcenter, tmpradius);
 }
 
 bool Lights::GetVisibleForFrustum(ID id)
@@ -955,7 +960,7 @@ void Lights::SetLightAngle(ID id, float angle, bool is_create)
 		{
 			IDirect3DVertexBuffer9* vertexbuf;
 			ArrLights[id]->Mesh->GetVertexBuffer(&vertexbuf);
-			ArrLights[id]->BoundVolume->CalcBound(vertexbuf, ArrLights[id]->Mesh->GetNumVertices(), ArrLights[id]->Mesh->GetNumBytesPerVertex());
+			ArrLights[id]->BoundVolume->calcBound(vertexbuf, ArrLights[id]->Mesh->GetNumVertices(), ArrLights[id]->Mesh->GetNumBytesPerVertex());
 			mem_release(vertexbuf);
 		}
 
@@ -980,7 +985,7 @@ void Lights::SetLightTopRadius(ID id, float top_radius)
 		{
 			IDirect3DVertexBuffer9* vertexbuf;
 			ArrLights[id]->Mesh->GetVertexBuffer(&vertexbuf);
-			ArrLights[id]->BoundVolume->CalcBound(vertexbuf, ArrLights[id]->Mesh->GetNumVertices(), ArrLights[id]->Mesh->GetNumBytesPerVertex());
+			ArrLights[id]->BoundVolume->calcBound(vertexbuf, ArrLights[id]->Mesh->GetNumVertices(), ArrLights[id]->Mesh->GetNumBytesPerVertex());
 			mem_release_del(vertexbuf);
 		}
 
@@ -1227,7 +1232,7 @@ bool Lights::LightCountUpdateUpdate(ID id, const float3* viewpos, int ghow)
 			float3 tmpcenter;
 			float tmpradius;
 
-			tmpl->BoundVolume->GetSphere(&tmpcenter, &tmpradius);
+			tmpl->BoundVolume->getSphere(&tmpcenter, &tmpradius);
 			float dist = SMVector3Distance(tmpl->Position, (*viewpos)) - tmpradius;
 			if (dist < LIGHTS_UPDATE_L0_DIST)
 				tmpl->CountUpdate = -1;
diff --git a/source/mtllight/light.h b/source/mtllight/light.h
index e09a8f1fe..406ad080b 100644
--- a/source/mtllight/light.h
+++ b/source/mtllight/light.h
@@ -1,6 +1,11 @@
 
-#ifndef __light_h
-#define __light_h
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
+#ifndef __LIGHT_H
+#define __LIGHT_H
 
 #include <gdefines.h>
 
@@ -12,17 +17,16 @@
 
 #include "sxmtllight.h"
 #include "ml_data.h"
-extern report_func g_fnReportf;
 
 #define LIGHTS_PRE_COND_ID(id,stdval) \
 if (!(id >= 0 && id < ArrLights.size()))\
-{g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s - light: unresolved index of access '%d'", GEN_MSG_LOCATION, id); return stdval; }\
+{LibReport(REPORT_MSG_LEVEL_ERROR, "%s - light: unresolved index of access '%d'", GEN_MSG_LOCATION, id); return stdval; }\
 	else if (!ArrLights[id]) \
-{g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s - light: light is deleted '%d'", GEN_MSG_LOCATION, id); return stdval; }
+{LibReport(REPORT_MSG_LEVEL_ERROR, "%s - light: light is deleted '%d'", GEN_MSG_LOCATION, id); return stdval; }
 
 #define LIGHTS_PRE_COND_KEY_DEL(key,stdval) \
 if (!(key >= 0 && key < ArrDelLights.size()))\
-{g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s - light: unresolved key of access '%d'", GEN_MSG_LOCATION, key); return stdval; }
+{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>
diff --git a/source/mtllight/material.cpp b/source/mtllight/material.cpp
index b03440093..22b28f6da 100644
--- a/source/mtllight/material.cpp
+++ b/source/mtllight/material.cpp
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "material.h"
 
 Materials::Materials()
@@ -546,7 +551,7 @@ MTLTYPE_PHYSIC Materials::MtlGetPhysicMaterial(ID id)
 void Materials::MtlSetTexture(ID id, const char* path_tex)
 {
 	MTL_PRE_COND_ID(id);
-	ArrMaterials[id]->mtl->MainTexture = SGCore_LoadTexAddName(path_tex, LoadTexType::ltt_load);
+	ArrMaterials[id]->mtl->MainTexture = SGCore_LoadTexAddName(path_tex, LOAD_TEXTURE_TYPE_LOAD);
 }
 
 void Materials::MtlGetTexture(ID id, char* name)
@@ -620,7 +625,7 @@ bool Materials::MtlGetIsTextureLighting(ID id)
 void Materials::MtlSetTextureLighting(ID id, const char* path_tex)
 {
 	MTL_PRE_COND_ID(id);
-	ArrMaterials[id]->mtl->LightParam.ParamTex = SGCore_LoadTexAddName(path_tex, LoadTexType::ltt_load);
+	ArrMaterials[id]->mtl->LightParam.ParamTex = SGCore_LoadTexAddName(path_tex, LOAD_TEXTURE_TYPE_LOAD);
 }
 
 void Materials::MtlGetTextureLighting(ID id, char* path_tex)
@@ -753,7 +758,7 @@ MTLTYPE_REFLECT Materials::MtlGetTypeReflection(ID id)
 void Materials::MtlSetMaskTex(ID id, const char* path_tex)
 {
 	MTL_PRE_COND_ID(id);
-	ArrMaterials[id]->mtl->MicroDetail.Mask = SGCore_LoadTexAddName(path_tex, LoadTexType::ltt_load);
+	ArrMaterials[id]->mtl->MicroDetail.Mask = SGCore_LoadTexAddName(path_tex, LOAD_TEXTURE_TYPE_LOAD);
 }
 
 void Materials::MtlGetMaskTex(ID id, char* path_tex)
@@ -768,7 +773,7 @@ void Materials::MtlGetMaskTex(ID id, char* path_tex)
 void Materials::MtlSetMRTex(ID id, int channel, const char* path_tex)
 {
 	MTL_PRE_COND_ID(id);
-	ArrMaterials[id]->mtl->MicroDetail.ArrMicroDiffuse[channel] = SGCore_LoadTexAddName(path_tex, LoadTexType::ltt_load);
+	ArrMaterials[id]->mtl->MicroDetail.ArrMicroDiffuse[channel] = SGCore_LoadTexAddName(path_tex, LOAD_TEXTURE_TYPE_LOAD);
 }
 
 void Materials::MtlGetMRTex(ID id, int channel, char* path_tex)
@@ -784,7 +789,7 @@ void Materials::MtlGetMRTex(ID id, int channel, char* path_tex)
 void Materials::MtlSetDTex(ID id, int channel, const char* path_tex)
 {
 	MTL_PRE_COND_ID(id);
-	ArrMaterials[id]->mtl->MicroDetail.ArrDeatail[channel] = SGCore_LoadTexAddName(path_tex, LoadTexType::ltt_load);
+	ArrMaterials[id]->mtl->MicroDetail.ArrDeatail[channel] = SGCore_LoadTexAddName(path_tex, LOAD_TEXTURE_TYPE_LOAD);
 }
 
 void Materials::MtlGetDTex(ID id, int channel, char* path_tex)
@@ -980,7 +985,7 @@ ID Materials::IsExists(const char* name)
 	if (!IsTruePath)
 	{
 		return -2;
-		//reportf(-1, "%s - wrong texture name [%s]!!!", gen_msg_location, name);
+		//LibReport(REPORT_MSG_LEVEL_ERROR, "%s - wrong texture name [%s]!!!", gen_msg_location, name);
 	}
 
 	long tmpkey = -1;	//переменная в которой храним ключ от массива в который записываем
@@ -1148,9 +1153,9 @@ bool Materials::LoadMtl(const char* name, Material** mtl)
 
 		//если в конфиге указана текстура то берем ее
 		if (config->keyExists(tmp_name, "texture"))
-			tmpMtl->MainTexture = SGCore_LoadTexAddName(config->getKey(tmp_name, "texture"), LoadTexType::ltt_load);
+			tmpMtl->MainTexture = SGCore_LoadTexAddName(config->getKey(tmp_name, "texture"), LOAD_TEXTURE_TYPE_LOAD);
 		else //если нет то тогда берем имя материала, может быть он имя текстуры, иначе будет -1
-			tmpMtl->MainTexture = SGCore_LoadTexAddName(name, LoadTexType::ltt_load);
+			tmpMtl->MainTexture = SGCore_LoadTexAddName(name, LOAD_TEXTURE_TYPE_LOAD);
 
 		sprintf(tmpMtl->Name, "%s", tmp_name);
 
@@ -1194,7 +1199,7 @@ bool Materials::LoadMtl(const char* name, Material** mtl)
 			sprintf(tmpMicroDiff[0], "%s", config->getKey(tmp_name, "mirco_diff_r"));
 
 		if (tmpMicroDiff[0][0] != '0' && tmpMicroDiff[0][0] != 0)
-			tmpMtl->MicroDetail.ArrMicroDiffuse[0] = SGCore_LoadTexAddName(tmpMicroDiff[0], LoadTexType::ltt_load);
+			tmpMtl->MicroDetail.ArrMicroDiffuse[0] = SGCore_LoadTexAddName(tmpMicroDiff[0], LOAD_TEXTURE_TYPE_LOAD);
 		else
 			tmpMtl->MicroDetail.ArrMicroDiffuse[0] = -1;
 
@@ -1202,7 +1207,7 @@ bool Materials::LoadMtl(const char* name, Material** mtl)
 		if (config->keyExists(tmp_name, "mirco_diff_g"))
 			sprintf(tmpMicroDiff[1], "%s", config->getKey(tmp_name, "mirco_diff_g"));
 		if (tmpMicroDiff[1][0] != '0' && tmpMicroDiff[1][0] != 0)
-			tmpMtl->MicroDetail.ArrMicroDiffuse[1] = SGCore_LoadTexAddName(tmpMicroDiff[1], LoadTexType::ltt_load);
+			tmpMtl->MicroDetail.ArrMicroDiffuse[1] = SGCore_LoadTexAddName(tmpMicroDiff[1], LOAD_TEXTURE_TYPE_LOAD);
 		else
 			tmpMtl->MicroDetail.ArrMicroDiffuse[1] = -1;
 
@@ -1210,7 +1215,7 @@ bool Materials::LoadMtl(const char* name, Material** mtl)
 		if (config->keyExists(tmp_name, "mirco_diff_b"))
 			sprintf(tmpMicroDiff[2], "%s", config->getKey(tmp_name, "mirco_diff_b"));
 		if (tmpMicroDiff[2][0] != '0' && tmpMicroDiff[2][0] != 0)
-			tmpMtl->MicroDetail.ArrMicroDiffuse[2] = SGCore_LoadTexAddName(tmpMicroDiff[2], LoadTexType::ltt_load);
+			tmpMtl->MicroDetail.ArrMicroDiffuse[2] = SGCore_LoadTexAddName(tmpMicroDiff[2], LOAD_TEXTURE_TYPE_LOAD);
 		else
 			tmpMtl->MicroDetail.ArrMicroDiffuse[2] = -1;
 
@@ -1218,7 +1223,7 @@ bool Materials::LoadMtl(const char* name, Material** mtl)
 		if (config->keyExists(tmp_name, "mirco_diff_a"))
 		sprintf(tmpMicroDiff[3], "%s", config->getKey(tmp_name, "mirco_diff_a"));
 		if (tmpMicroDiff[3][0] != '0' && tmpMicroDiff[3][0] != 0)
-			tmpMtl->MicroDetail.ArrMicroDiffuse[3] = SGCore_LoadTexAddName(tmpMicroDiff[3], LoadTexType::ltt_load);
+			tmpMtl->MicroDetail.ArrMicroDiffuse[3] = SGCore_LoadTexAddName(tmpMicroDiff[3], LOAD_TEXTURE_TYPE_LOAD);
 		else
 			tmpMtl->MicroDetail.ArrMicroDiffuse[3] = -1;
 
@@ -1227,7 +1232,7 @@ bool Materials::LoadMtl(const char* name, Material** mtl)
 		if (config->keyExists(tmp_name, "detail_r"))
 			sprintf(tmpDetail[0], "%s", config->getKey(tmp_name, "detail_r"));
 		if (tmpDetail[0][0] != '0' && tmpMicroDiff[0][0] != 0)
-			tmpMtl->MicroDetail.ArrDeatail[0] = SGCore_LoadTexAddName(tmpDetail[0], LoadTexType::ltt_load);
+			tmpMtl->MicroDetail.ArrDeatail[0] = SGCore_LoadTexAddName(tmpDetail[0], LOAD_TEXTURE_TYPE_LOAD);
 		else
 			tmpMtl->MicroDetail.ArrDeatail[0] = -1;
 
@@ -1235,7 +1240,7 @@ bool Materials::LoadMtl(const char* name, Material** mtl)
 		if (config->keyExists(tmp_name, "detail_g"))
 			sprintf(tmpDetail[1], "%s", config->getKey(tmp_name, "detail_g"));
 		if (tmpDetail[1][0] != '0' && tmpMicroDiff[1][0] != 0)
-			tmpMtl->MicroDetail.ArrDeatail[1] = SGCore_LoadTexAddName(tmpDetail[1], LoadTexType::ltt_load);
+			tmpMtl->MicroDetail.ArrDeatail[1] = SGCore_LoadTexAddName(tmpDetail[1], LOAD_TEXTURE_TYPE_LOAD);
 		else
 			tmpMtl->MicroDetail.ArrDeatail[1] = -1;
 
@@ -1243,7 +1248,7 @@ bool Materials::LoadMtl(const char* name, Material** mtl)
 		if (config->keyExists(tmp_name, "detail_b"))
 			sprintf(tmpDetail[2], "%s", config->getKey(tmp_name, "detail_b"));
 		if (tmpDetail[2][0] != '0' && tmpMicroDiff[2][0] != 0)
-			tmpMtl->MicroDetail.ArrDeatail[2] = SGCore_LoadTexAddName(tmpDetail[2], LoadTexType::ltt_load);
+			tmpMtl->MicroDetail.ArrDeatail[2] = SGCore_LoadTexAddName(tmpDetail[2], LOAD_TEXTURE_TYPE_LOAD);
 		else
 			tmpMtl->MicroDetail.ArrDeatail[2] = -1;
 
@@ -1251,7 +1256,7 @@ bool Materials::LoadMtl(const char* name, Material** mtl)
 		if (config->keyExists(tmp_name, "detail_a"))
 			sprintf(tmpDetail[3], "%s", config->getKey(tmp_name, "detail_a"));
 		if (tmpDetail[3][0] != '0' && tmpMicroDiff[3][0] != 0)
-			tmpMtl->MicroDetail.ArrDeatail[3] = SGCore_LoadTexAddName(tmpDetail[3], LoadTexType::ltt_load);
+			tmpMtl->MicroDetail.ArrDeatail[3] = SGCore_LoadTexAddName(tmpDetail[3], LOAD_TEXTURE_TYPE_LOAD);
 		else
 			tmpMtl->MicroDetail.ArrDeatail[3] = -1;
 
@@ -1259,7 +1264,7 @@ bool Materials::LoadMtl(const char* name, Material** mtl)
 		if (config->keyExists(tmp_name, "mask"))
 			sprintf(tmpMask, "%s", config->getKey(tmp_name, "mask"));
 		if (tmpMask[0] != '0' && tmpMask[0] != 0)
-			tmpMtl->MicroDetail.Mask = SGCore_LoadTexAddName(tmpMask, LoadTexType::ltt_load);
+			tmpMtl->MicroDetail.Mask = SGCore_LoadTexAddName(tmpMask, LOAD_TEXTURE_TYPE_LOAD);
 		else
 			tmpMtl->MicroDetail.Mask = -1;
 
@@ -1302,7 +1307,7 @@ bool Materials::LoadMtl(const char* name, Material** mtl)
 		//если текстура с параметрами освещения была определена
 		if (tmpParamLigth[0] != '0' && tmpParamLigth[0] != 0)
 		{
-			tmpMtl->LightParam.ParamTex = SGCore_LoadTexAddName(tmpParamLigth, LoadTexType::ltt_load);
+			tmpMtl->LightParam.ParamTex = SGCore_LoadTexAddName(tmpParamLigth, LOAD_TEXTURE_TYPE_LOAD);
 			//если использование параметров освещения из текстуры не было определено
 			if (istexparam == -1)
 				tmpMtl->LightParam.IsTextureParam = true;
@@ -1501,7 +1506,7 @@ void Materials::CreateMtl(const char* name, Material** mtl, MTLTYPE_MODEL type)
 	tmpMtl->PS.Param = float4(0, 0, 0, 0);
 	}*/
 
-	tmpMtl->MainTexture = SGCore_LoadTexAddName(name, LoadTexType::ltt_load);
+	tmpMtl->MainTexture = SGCore_LoadTexAddName(name, LOAD_TEXTURE_TYPE_LOAD);
 	tmpMtl->VS.IsTransWorldViewProjection = true;
 
 	tmpMtl->LightParam.RoughnessValue = MTL_LIGHTING_DEFAULT_ROUGHNESS;
diff --git a/source/mtllight/material.h b/source/mtllight/material.h
index fc7181cb1..87003dc48 100644
--- a/source/mtllight/material.h
+++ b/source/mtllight/material.h
@@ -1,24 +1,27 @@
 
-#ifndef __sxmaterial
-#define __sxmaterial
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
+#ifndef __MATERIAL_H
+#define __MATERIAL_H
 
 #include <common/String.h>
 #include <common/Array.h>
 #include "reflection.h"
 #include <direct.h>
 
-extern report_func g_fnReportf;
-
 #define MTL_PRE_COND_ID(id,stdval) \
 if (!(id >= 0 && id < ArrMaterials.size()))\
-{g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s - material: unresolved index of access '%d'", GEN_MSG_LOCATION, id); return stdval; }\
+{LibReport(REPORT_MSG_LEVEL_ERROR, "%s - material: unresolved index of access '%d'", GEN_MSG_LOCATION, id); return stdval; }\
 else if (!ArrMaterials[id])\
-{g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s - material: material '%d' is not init", GEN_MSG_LOCATION, id); return stdval; }
+{LibReport(REPORT_MSG_LEVEL_ERROR, "%s - material: material '%d' is not init", GEN_MSG_LOCATION, id); return stdval; }
 
 #define MTL_REF_PRE_COND_ID(id,stdval) \
 MTL_PRE_COND_ID(id, stdval)\
 if (!(ArrMaterials[id]->Reflect))\
-{g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s - material: material id = '%d', name = '%s' unsupported reflection", GEN_MSG_LOCATION, id, ArrMaterials[id]->mtl->Name); return stdval; }
+{LibReport(REPORT_MSG_LEVEL_ERROR, "%s - material: material id = '%d', name = '%s' unsupported reflection", GEN_MSG_LOCATION, id, ArrMaterials[id]->mtl->Name); return stdval; }
 
 class Materials
 {
diff --git a/source/mtllight/ml_data.cpp b/source/mtllight/ml_data.cpp
index d43d06190..30a84ae6b 100644
--- a/source/mtllight/ml_data.cpp
+++ b/source/mtllight/ml_data.cpp
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "ml_data.h"
 
 namespace MLSet
@@ -181,7 +186,7 @@ void MLSet::MLInit()
 
 	MLSet::WinSize = *winsize;
 	MLSet::ProjFov = projfov;*/
-	MLSet::IDsTexs::Tex_NoiseTex = SGCore_LoadTexAddName("noise_rottex.dds", LoadTexType::ltt_const);
+	MLSet::IDsTexs::Tex_NoiseTex = SGCore_LoadTexAddName("noise_rottex.dds", LOAD_TEXTURE_TYPE_CONST);
 
 
 
diff --git a/source/mtllight/ml_data.h b/source/mtllight/ml_data.h
index dff658de2..162c173b7 100644
--- a/source/mtllight/ml_data.h
+++ b/source/mtllight/ml_data.h
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #ifndef __ML_DATA_H
 #define __ML_DATA_H
 
@@ -6,7 +11,7 @@
 
 #define SM_D3D_CONVERSIONS
 #include <common/SXMath.h>
-#include <common\array.h>
+#include <common/array.h>
 
 #include <GRegisterIndex.h>
 
diff --git a/source/mtllight/reflection.cpp b/source/mtllight/reflection.cpp
index 90697afb7..71bbbec2f 100644
--- a/source/mtllight/reflection.cpp
+++ b/source/mtllight/reflection.cpp
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "reflection.h"
 
 Reflection::Reflection()
@@ -162,7 +167,7 @@ void Reflection::PreRenderRefPlane(D3DXPLANE* plane)
 {
 	if (!plane)
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_WARNING, "%s - sxmtllight [reflection]: plane is NULL", GEN_MSG_LOCATION);
+		LibReport(REPORT_MSG_LEVEL_WARNING, "%s - sxmtllight [reflection]: plane is NULL", GEN_MSG_LOCATION);
 		return;
 	}
 
@@ -180,7 +185,7 @@ void Reflection::PreRenderRefPlane(D3DXPLANE* plane)
 	viewmat._32 = -viewmat._32;
 	viewmat._42 = -viewmat._42;
 
-	ReflectFrustum[0]->Update(&viewmat, &(MLSet::RefMProjPlane));
+	ReflectFrustum[0]->update(&viewmat, &(MLSet::RefMProjPlane));
 
 	Core_RMatrixGet(G_RI_MATRIX_VIEW, &OldMatView);
 	Core_RMatrixGet(G_RI_MATRIX_PROJECTION, &OldMatProj);
@@ -242,7 +247,7 @@ void Reflection::BeginRenderRefCube(float3_t* center)
 {
 	if (!center)
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_WARNING, "%s - sxmtllight [reflection]: position center is NULL", GEN_MSG_LOCATION);
+		LibReport(REPORT_MSG_LEVEL_WARNING, "%s - sxmtllight [reflection]: position center is NULL", GEN_MSG_LOCATION);
 		return;
 	}
 
@@ -275,7 +280,7 @@ void Reflection::PreRenderRefCube(int cube, float4x4* world)
 	Core_RMatrixSet(G_RI_MATRIX_PROJECTION, &MLSet::RefMProjCube);
 	Core_RMatrixSet(G_RI_MATRIX_VIEWPROJ, &(MatrixView * MLSet::RefMProjCube));
 
-	ReflectFrustum[cube]->Update(&float4x4(MatrixView), &MLSet::RefMProjCube);
+	ReflectFrustum[cube]->update(&float4x4(MatrixView), &MLSet::RefMProjCube);
 
 	mem_release_del(SurfaceReflect);
 	TextureReflect->GetSurfaceLevel(0, &SurfaceReflect);
diff --git a/source/mtllight/reflection.h b/source/mtllight/reflection.h
index e1405cbed..019b26e56 100644
--- a/source/mtllight/reflection.h
+++ b/source/mtllight/reflection.h
@@ -1,6 +1,11 @@
 
-#ifndef __reflection
-#define __reflection
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
+#ifndef __REFLECTION_H
+#define __REFLECTION_H
 
 #include <gdefines.h>
 
@@ -12,8 +17,6 @@
 #include "sxmtllight.h"
 #include "ml_data.h"
 
-extern report_func g_fnReportf;
-
 class Reflection
 {
 public:
diff --git a/source/mtllight/shadow.cpp b/source/mtllight/shadow.cpp
index 20c69f5ee..e097c24c3 100644
--- a/source/mtllight/shadow.cpp
+++ b/source/mtllight/shadow.cpp
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "shadow.h"
 	
 PSSM::PSSM()
@@ -127,7 +132,7 @@ void PSSM::OnResetDevice()
 			HRESULT hr = MLSet::DXDevice->CreateTexture(MLSet::SizeTexDepthGlobal.x, MLSet::SizeTexDepthGlobal.y, 1, D3DUSAGE_RENDERTARGET, D3DFMT_R32F,D3DPOOL_DEFAULT, &(DepthMaps[i]), NULL);
 
 				/*if(FAILED(hr))
-					reportf(-1,"Ќе удалось создать текстуру глубины PSSM");*/
+					LibReport(REPORT_MSG_LEVEL_ERROR,"Ќе удалось создать текстуру глубины PSSM");*/
 			
 			DepthSurfaces[i] = 0;
 		}
@@ -208,7 +213,7 @@ void PSSM::UpdateFrustums(int split, const float3* poscam, const float3* dircam)
 	FovRatio.x = *r_default_fov;
 	FovRatio.y = float(*r_win_width) / float(*r_win_height);
 
-	Frustums[split]->Update(&(Views[split]), &(Projs[split]));
+	Frustums[split]->update(&(Views[split]), &(Projs[split]));
 
 	float3 up(0.0f, 1.0f, 0.0f);
 	float3 right = SMVector3Normalize(SMVector3Cross((*dircam), up));
@@ -223,26 +228,25 @@ void PSSM::UpdateFrustums(int split, const float3* poscam, const float3* dircam)
 	float far_height = tan(FovRatio.x / 2.f) * NearFar[split].y;
 	float far_width = far_height * FovRatio.y;
 
-	Frustums[split]->Point[0] = nc - up*near_height - right*near_width;
-	Frustums[split]->Point[1] = nc + up*near_height - right*near_width;
-	Frustums[split]->Point[2] = nc + up*near_height + right*near_width;
-	Frustums[split]->Point[3] = nc - up*near_height + right*near_width;
+	Frustums[split]->setPoint(0, &float3(nc - up*near_height - right*near_width));
+	Frustums[split]->setPoint(1, &float3(nc + up*near_height - right*near_width));
+	Frustums[split]->setPoint(2, &float3(nc + up*near_height + right*near_width));
+	Frustums[split]->setPoint(3, &float3(nc - up*near_height + right*near_width));
 
-	Frustums[split]->Point[4] = fc - up*far_height - right*far_width;
-	Frustums[split]->Point[5] = fc + up*far_height - right*far_width;
-	Frustums[split]->Point[6] = fc + up*far_height + right*far_width;
-	Frustums[split]->Point[7] = fc - up*far_height + right*far_width;
+	Frustums[split]->setPoint(4, &float3(fc - up*far_height - right*far_width));
+	Frustums[split]->setPoint(5, &float3(fc + up*far_height - right*far_width));
+	Frustums[split]->setPoint(6, &float3(fc + up*far_height + right*far_width));
+	Frustums[split]->setPoint(7, &float3(fc - up*far_height + right*far_width));
 
 	float3 vCenter(0, 0, 0);
 	for (int i = 0; i < 8; i++)
-		vCenter += Frustums[split]->Point[i];
+		vCenter += Frustums[split]->getPoint(i);
 	vCenter /= 8;
-	Frustums[split]->Center = vCenter;
-
+	Frustums[split]->setCenter(&vCenter);
 
 	float dist = 1;
 	float3 DirL = Position;
-	float3 TarG = float3(Frustums[split]->Center.x, Frustums[split]->Center.y, Frustums[split]->Center.z);
+	float3 TarG = float3(Frustums[split]->getCenter());
 
 	float3 LightPos = TarG + DirL*dist;
 	float3 LightPos2 = DirL;
@@ -258,7 +262,7 @@ void PSSM::UpdateFrustums(int split, const float3* poscam, const float3* dircam)
 	float maxZ = 0;
 
 	float4 trans0;
-	float4 transform0(Frustums[split]->Point[0].x, Frustums[split]->Point[0].y, Frustums[split]->Point[0].z, 1);
+	float4 transform0(Frustums[split]->getPoint(0), 1);
 	trans0 = SMVector4Transform(transform0, Views[split]);
 
 	minX = trans0.x; maxX = trans0.x;
@@ -268,7 +272,7 @@ void PSSM::UpdateFrustums(int split, const float3* poscam, const float3* dircam)
 	for (int i = 0; i<8; i++)
 	{
 		float4 trans;
-		float4 transform(Frustums[split]->Point[i].x, Frustums[split]->Point[i].y, Frustums[split]->Point[i].z, 1);
+		float4 transform(Frustums[split]->getPoint(i), 1);
 
 		trans = SMVector4Transform(transform, Views[split]);
 
@@ -290,7 +294,7 @@ void PSSM::UpdateFrustums(int split, const float3* poscam, const float3* dircam)
 	float2 OrtMax = float2(maxX, maxY);
 	float2 OrtMin = float2(minX, minY);
 
-	float3 Diagonal = Frustums[split]->Point[0] - Frustums[split]->Point[6];
+	float3 Diagonal = Frustums[split]->getPoint(0) - Frustums[split]->getPoint(6);
 	float LengthDiagonal = SMVector3Length(Diagonal);
 
 	float2 BoarderOffset = (float2(LengthDiagonal, LengthDiagonal) - (OrtMax - OrtMin)) * 0.5;
@@ -709,7 +713,7 @@ void ShadowMapTech::Begin()
 	Core_RMatrixSet(G_RI_MATRIX_PROJECTION, &Proj);
 	Core_RMatrixSet(G_RI_MATRIX_VIEWPROJ, &(View * Proj));
 	
-	Frustum->Update(&(View),&(Proj));
+	Frustum->update(&(View),&(Proj));
 
 	SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::SMDepthGeomPSSMDirect, "WorldViewProjection", &SMMatrixTranspose(View * Proj));
 	SGCore_ShaderBind(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::SMDepthGeomPSSMDirect);
@@ -1027,7 +1031,7 @@ void ShadowMapCubeTech::Pre(int cube)
 	//MLSet::DXDevice->SetTransform(D3DTS_VIEW,&(View[cube].operator D3DXMATRIX()));
 	//MLSet::DXDevice->SetTransform(D3DTS_PROJECTION,&(Proj[cube].operator D3DXMATRIX()));
 
-	Frustums[cube]->Update(&(View[cube]), &(Proj[cube]));
+	Frustums[cube]->update(&(View[cube]), &(Proj[cube]));
 
 	float4x4 vp = View[cube] * Proj[cube];
 
diff --git a/source/mtllight/shadow.h b/source/mtllight/shadow.h
index 9af154b10..d9dead086 100644
--- a/source/mtllight/shadow.h
+++ b/source/mtllight/shadow.h
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #ifndef __SHADOW_H
 #define __SHADOW_H
 
diff --git a/source/mtllight/sxmtllight.cpp b/source/mtllight/sxmtllight.cpp
index 817681b77..bc37f158c 100644
--- a/source/mtllight/sxmtllight.cpp
+++ b/source/mtllight/sxmtllight.cpp
@@ -1,8 +1,8 @@
 
-/******************************************************
-Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 #define SXMATERIAL_LIGTH_VERSION 1
 
@@ -20,7 +20,7 @@ report_func g_fnReportf = DefReport;
 Lights* ArrLights = 0;
 Materials* ArrMaterials = 0;
 
-#define ML_PRECOND(retval) if(!ArrLights){g_fnReportf(-1, "%s - sxmtlligth is not init", GEN_MSG_LOCATION); return retval;}
+#define ML_PRECOND(retval) if(!ArrLights){LibReport(-1, "%s - sxmtlligth is not init", GEN_MSG_LOCATION); return retval;}
 
 //##########################################################################
 
@@ -44,7 +44,7 @@ SX_LIB_API void SML_0Create(const char* name, bool is_unic)
 			if (GetLastError() == ERROR_ALREADY_EXISTS)
 			{
 				CloseHandle(hMutex);
-				g_fnReportf(-1, "%s - none unic name, sxmaterial_ligth", GEN_MSG_LOCATION);
+				LibReport(REPORT_MSG_LEVEL_ERROR, "%s - none unic name", GEN_MSG_LOCATION);
 			}
 			else
 			{
@@ -63,7 +63,7 @@ SX_LIB_API void SML_0Create(const char* name, bool is_unic)
 		}
 	}
 	else
-		g_fnReportf(-1, "%s - not init argument [name], sxmaterial_ligth", GEN_MSG_LOCATION);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - not init argument [name]", GEN_MSG_LOCATION);
 }
 
 SX_LIB_API void SML_AKill()
diff --git a/source/mtllight/sxmtllight.h b/source/mtllight/sxmtllight.h
index 1f475ca2c..ce6619087 100644
--- a/source/mtllight/sxmtllight.h
+++ b/source/mtllight/sxmtllight.h
@@ -1,8 +1,8 @@
 
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 /*!
 \file
@@ -230,7 +230,7 @@ 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 const ISXFrustum *pFrustum);	//!< виден ли свет в данном фрустуме frustum (отдельный просчет)
 SX_LIB_API float SML_LigthsComDistFor(ID id, const float3 *pViewPos);				//!< дистанция от viewpos до начала света (отдельный просчет)
 
 //! просчет видимости и расстояния от наблюдателя viewpos до начала света, для каждого света (предварительный просчет)
diff --git a/source/mtllight/sxmtllight_dll.cpp b/source/mtllight/sxmtllight_dll.cpp
index 6bd158387..88b1ec58e 100644
--- a/source/mtllight/sxmtllight_dll.cpp
+++ b/source/mtllight/sxmtllight_dll.cpp
@@ -1,8 +1,8 @@
 
-/******************************************************
-Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 #include <windows.h>
 
diff --git a/source/particles/PESet.cpp b/source/particles/PESet.cpp
index ea6dbf538..2eac90d08 100644
--- a/source/particles/PESet.cpp
+++ b/source/particles/PESet.cpp
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "PESet.h"
 
 namespace PESet
diff --git a/source/particles/PESet.h b/source/particles/PESet.h
index 3de967ea4..99882a1f6 100644
--- a/source/particles/PESet.h
+++ b/source/particles/PESet.h
@@ -1,6 +1,11 @@
 
-#ifndef __PESET_H
-#define __PESET_H
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
+#ifndef __PE_SET_H
+#define __PE_SET_H
 
 #include <gdefines.h>
 #include <d3d9.h>
diff --git a/source/particles/effect.cpp b/source/particles/effect.cpp
index 78f0868f9..3a150f357 100644
--- a/source/particles/effect.cpp
+++ b/source/particles/effect.cpp
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "effect.h"
 
 Effects::Effects()
@@ -123,7 +128,7 @@ void Effects::Save(const char* path)
 
 	if (!file)
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_WARNING, "%s - failed to save %s", GEN_MSG_LOCATION, path);
+		LibReport(REPORT_MSG_LEVEL_WARNING, "%s - failed to save %s", GEN_MSG_LOCATION, path);
 		return;
 	}
 
@@ -301,7 +306,7 @@ void Effects::Load(const char* path)
 {
 	if (!Core_0FileExists(path))
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s - failed to save, %s", GEN_MSG_LOCATION, path);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - failed to save, %s", GEN_MSG_LOCATION, path);
 		return;
 	}
 		
@@ -309,13 +314,13 @@ void Effects::Load(const char* path)
 
 	if (!config->sectionExists("effects"))
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s - main section 'effects' not found, %s", GEN_MSG_LOCATION, path);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - main section 'effects' not found, %s", GEN_MSG_LOCATION, path);
 		return;
 	}
 
 	if (!config->keyExists("effects", "count"))
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s - main key 'count' in section 'effects' not found, %s", GEN_MSG_LOCATION, path);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - main key 'count' in section 'effects' not found, %s", GEN_MSG_LOCATION, path);
 		return;
 	}
 
@@ -328,7 +333,7 @@ void Effects::Load(const char* path)
 		sprintf(eff_section_name, "effect_%d", i);
 		if (!config->sectionExists(eff_section_name))
 		{
-			g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s - not found effect [%s], %s", GEN_MSG_LOCATION, eff_section_name, path);
+			LibReport(REPORT_MSG_LEVEL_ERROR, "%s - not found effect [%s], %s", GEN_MSG_LOCATION, eff_section_name, path);
 			return;
 		}
 
@@ -347,7 +352,7 @@ void Effects::Load(const char* path)
 			sprintf(part_section_name, "effect_%d_emitter_%d", i, k);
 			if (!config->sectionExists(eff_section_name))
 			{
-				g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s - not found particles [%s], %s", GEN_MSG_LOCATION, part_section_name, path);
+				LibReport(REPORT_MSG_LEVEL_ERROR, "%s - not found particles [%s], %s", GEN_MSG_LOCATION, part_section_name, path);
 				return;
 			}
 
@@ -1122,7 +1127,7 @@ void Effects::EffectRenderAll(DWORD timeDelta)
 	}
 }
 
-bool Effects::EffectVisibleCom(ID id, ISXFrustum* frustum, float3* view)
+bool Effects::EffectVisibleCom(ID id, const ISXFrustum* frustum, float3* view)
 {
 	EFFECTS_EFFECT_PRECOND(id, false);
 
@@ -1136,14 +1141,14 @@ bool Effects::EffectVisibleCom(ID id, ISXFrustum* frustum, float3* view)
 	scenter = (eff->CurrMin2 + eff->CurrMax2) * 0.5f;
 	sradius = SMVector3Length(scenter - eff->CurrMax2);
 	
-	eff->ViewRender = frustum->SphereInFrustum(&scenter, sradius);
+	eff->ViewRender = frustum->sphereInFrustum(&scenter, sradius);
 
 	eff->ViewDist = SMVector3Length((scenter - (*view))) - sradius;
 
 	return eff->ViewRender;
 }
 
-void Effects::EffectVisibleComAll(ISXFrustum* frustum, float3* view)
+void Effects::EffectVisibleComAll(const ISXFrustum* frustum, float3* view)
 {
 	for(int i = 0, l = ArrID.size(); i < l; ++i)
 	{
@@ -1183,12 +1188,12 @@ void Effects::EffectVisibleComAll(ISXFrustum* frustum, float3* view)
 	{
 		for (int i = 0; i < ArrSortSizeCurr; ++i)
 		{
-			//g_fnReportf(0, "ArrSort[%d] = %d\n", i, ArrSort[i]);
+			//LibReport(0, "ArrSort[%d] = %d\n", i, ArrSort[i]);
 			if (ArrSort[i] >= 0)
-				g_fnReportf(0, "ViewDist = %f\n", ArrID[ArrSort[i]]->ViewDist);
+				LibReport(0, "ViewDist = %f\n", ArrID[ArrSort[i]]->ViewDist);
 		}
 
-		g_fnReportf(0, "%d---------\n", ArrSortSizeCurr);
+		LibReport(0, "%d---------\n", ArrSortSizeCurr);
 	}*/
 }
 
diff --git a/source/particles/effect.h b/source/particles/effect.h
index 22e5c6a99..4c0089476 100644
--- a/source/particles/effect.h
+++ b/source/particles/effect.h
@@ -1,37 +1,40 @@
 
-#ifndef __effect_h
-#define __effect_h
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
+#ifndef __EFFECT_H
+#define __EFFECT_H
 
 #include <gdefines.h>
 
 #define SM_D3D_CONVERSIONS
-#include <common\SXMath.h>
+#include <common/SXMath.h>
 
 #include "PESet.h"
 
-extern report_func g_fnReportf;
-
 #include "emitter.h"
 #include <common/array.h>
 #include <common/string.h>
 
 #define EFFECTS_EFFECT_PRECOND_KEY(key,retval) \
 if (!(key >= 0 && key < ArrKey.size()))\
-{g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s - sxparticles: unresolved key of access '%d'", GEN_MSG_LOCATION, key); return retval; }
+{LibReport(REPORT_MSG_LEVEL_ERROR, "%s - sxparticles: unresolved key of access '%d'", GEN_MSG_LOCATION, key); return retval; }
 
 #define EFFECTS_EFFECT_PRECOND(id, retval) \
 	if (id < 0 || id >= ArrID.size() || !(ArrID[id]))\
-{g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s - sxparticles - unresolved address to effect %d", GEN_MSG_LOCATION, id); return retval; }
+{LibReport(REPORT_MSG_LEVEL_ERROR, "%s - sxparticles - unresolved address to effect %d", GEN_MSG_LOCATION, id); return retval; }
 
 #define EFFECTS_POOL_PRECOND(id, retval) \
 	if (id < 0 || id >= Pools.size())\
-{g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s - sxparticles - unresolved address to pool %d", GEN_MSG_LOCATION, id); return retval; } \
+{LibReport(REPORT_MSG_LEVEL_ERROR, "%s - sxparticles - unresolved address to pool %d", GEN_MSG_LOCATION, id); return retval; } \
 	if (Pools[id]->ideff < 0) \
-{g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s - sxparticles - uninitialized pool %d", GEN_MSG_LOCATION, id); return retval; }
+{LibReport(REPORT_MSG_LEVEL_ERROR, "%s - sxparticles - uninitialized pool %d", GEN_MSG_LOCATION, id); return retval; }
 
 #define EFFECTS_PARTICLES_PRECOND(id, id_part, retval) \
 	if (id_part < 0 || id_part >= ArrID[id]->Arr.size() || !(ArrID[id]->Arr[id_part]))\
-{g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s - sxparticles - unresolved address to particles %d in effect %d", GEN_MSG_LOCATION, id_part, id); return retval; }
+{LibReport(REPORT_MSG_LEVEL_ERROR, "%s - sxparticles - unresolved address to particles %d in effect %d", GEN_MSG_LOCATION, id_part, id); return retval; }
 
 #define EFFECTS_PRECOND(id, id_part, retval) \
 	EFFECTS_EFFECT_PRECOND(id, retval); \
@@ -155,8 +158,8 @@ public:
 	void EffectDirGet(ID id, float3* dir);
 	void EffectRotGet(ID id, float3* rot);
 
-	bool EffectVisibleCom(ID id, ISXFrustum* frustum, float3* view);
-	void EffectVisibleComAll(ISXFrustum* frustum, float3* view);
+	bool EffectVisibleCom(ID id, const ISXFrustum* frustum, float3* view);
+	void EffectVisibleComAll(const ISXFrustum* frustum, float3* view);
 	bool EffectVisibleGet(ID id);
 	float EffectDistToViewGet(ID id);
 
diff --git a/source/particles/emitter.cpp b/source/particles/emitter.cpp
index 2eef7f58f..6b7bf9e6e 100644
--- a/source/particles/emitter.cpp
+++ b/source/particles/emitter.cpp
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "Emitter.h"
 
 void Emitter::NullingInit()
@@ -114,7 +119,7 @@ void Emitter::TextureSetID(ID tex)
 
 void Emitter::TextureSet(const char* tex)
 {
-	IDTex = SGCore_LoadTexAddName(tex, LoadTexType::ltt_load);
+	IDTex = SGCore_LoadTexAddName(tex, LOAD_TEXTURE_TYPE_LOAD);
 	//SGCore_LoadTexLoadTextures();
 	isTexInit = false;
 	if (SGCore_LoadTexGetTex(IDTex))
@@ -144,7 +149,7 @@ void Emitter::TextureTrackSetID(ID tex)
 
 void Emitter::TextureTrackSet(const char* tex)
 {
-	IDTexTrack = SGCore_LoadTexAddName(tex, LoadTexType::ltt_load);
+	IDTexTrack = SGCore_LoadTexAddName(tex, LOAD_TEXTURE_TYPE_LOAD);
 	//SGCore_LoadTexLoadTextures();
 }
 
@@ -251,7 +256,7 @@ void Emitter::CountSet(int count)
 
 	if (Count <= 0)
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s - buffer null size", GEN_MSG_LOCATION);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - buffer null size", GEN_MSG_LOCATION);
 		return;
 	}
 
@@ -1306,7 +1311,7 @@ void Emitter::Render(DWORD timeDelta, float4x4* matrot, float4x4* matpos)
 			if (PESet::IDsRenderTargets::DepthScene >= 0)
 				PESet::DXDevice->SetTexture(1, SGCore_RTGetTexture(PESet::IDsRenderTargets::DepthScene));
 			else
-				g_fnReportf(REPORT_MSG_LEVEL_WARNING, "sxparticles - not init depth map\n");
+				LibReport(REPORT_MSG_LEVEL_WARNING, "sxparticles - not init depth map\n");
 		}
 
 		SGCore_ShaderBind(SHADER_TYPE_VERTEX, PESet::IDsShaders::VS::Particles);
diff --git a/source/particles/emitter.h b/source/particles/emitter.h
index 2e9640c4e..62a2f30aa 100644
--- a/source/particles/emitter.h
+++ b/source/particles/emitter.h
@@ -1,16 +1,20 @@
 
-#ifndef __particles_h
-#define __particles_h
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
+#ifndef __EMITTER_H
+#define __EMITTER_H
 
 #include <gdefines.h>
 
 #define SM_D3D_CONVERSIONS
-#include <common\SXMath.h>
+#include <common/SXMath.h>
 
 #include "sxparticles.h"
 #include "PESet.h"
 
-extern report_func g_fnReportf;
 extern g_particles_phy_collision GParticlesPhyCollision;
 
 //структура описывающая партикл
diff --git a/source/particles/sxparticles.cpp b/source/particles/sxparticles.cpp
index 6b3a53003..f9d62c87b 100644
--- a/source/particles/sxparticles.cpp
+++ b/source/particles/sxparticles.cpp
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "sxparticles.h"
 #include "emitter.h"
 #include "effect.h"
@@ -21,7 +26,7 @@ g_particles_phy_collision GParticlesPhyCollision = ParticlesPhyCollision;
 
 Effects* ArrEffects = 0;
 
-#define PE_PRECOND(retval) if(!ArrEffects){g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s - sxparticles is not init", GEN_MSG_LOCATION); return retval;}
+#define PE_PRECOND(retval) if(!ArrEffects){LibReport(REPORT_MSG_LEVEL_ERROR, "%s - sxparticles is not init", GEN_MSG_LOCATION); return retval;}
 
 //##########################################################################
 
@@ -50,7 +55,7 @@ SX_LIB_API void SPE_0Create(const char* name, bool is_unic)
 			if (GetLastError() == ERROR_ALREADY_EXISTS)
 			{
 				CloseHandle(hMutex);
-				g_fnReportf(-1, "%s - none unic name, sxparticles", GEN_MSG_LOCATION);
+				LibReport(REPORT_MSG_LEVEL_ERROR, "%s - none unic name", GEN_MSG_LOCATION);
 			}
 			else
 			{
@@ -65,7 +70,7 @@ SX_LIB_API void SPE_0Create(const char* name, bool is_unic)
 		}
 	}
 	else
-		g_fnReportf(-1, "%s - not init argument [name], sxparticles", GEN_MSG_LOCATION);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - not init argument [name]", GEN_MSG_LOCATION);
 }
 
 SX_LIB_API void SPE_RTDepthSet(ID id)
@@ -321,14 +326,14 @@ SX_LIB_API void SPE_EffectRotGet(ID id, float3* rot)
 }
 
 
-SX_LIB_API bool SPE_EffectVisibleCom(ID id, ISXFrustum* frustum, float3* view)
+SX_LIB_API bool SPE_EffectVisibleCom(ID id, const ISXFrustum* frustum, float3* view)
 {
 	PE_PRECOND(false);
 
 	return ArrEffects->EffectVisibleCom(id, frustum, view);
 }
 
-SX_LIB_API void SPE_EffectVisibleComAll(ISXFrustum* frustum, float3* view)
+SX_LIB_API void SPE_EffectVisibleComAll(const ISXFrustum* frustum, float3* view)
 {
 	PE_PRECOND(_VOID);
 
diff --git a/source/particles/sxparticles.h b/source/particles/sxparticles.h
index 939856846..dfc0eeb06 100644
--- a/source/particles/sxparticles.h
+++ b/source/particles/sxparticles.h
@@ -1,8 +1,8 @@
 
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 /*!
 \file
@@ -498,10 +498,10 @@ SX_LIB_API void SPE_EffectRotGet(ID id, float3* rot);
 
 
 //! просчет видимости эффекта для фрустума frustum, и расчет расстояния от позиции наблюдателя view до эффекта, возвращает виден ли фруустуму эффект
-SX_LIB_API bool SPE_EffectVisibleCom(ID id, ISXFrustum* frustum, float3* view);	
+SX_LIB_API bool SPE_EffectVisibleCom(ID id, const ISXFrustum* frustum, float3* view);	
 
 //! просчет видимости всех эффектов для фрустума frustum, и расчет расстояний от позиции наблюдателя view до всех эффектов
-SX_LIB_API void SPE_EffectVisibleComAll(ISXFrustum* frustum, float3* view);
+SX_LIB_API void SPE_EffectVisibleComAll(const ISXFrustum* frustum, float3* view);
 
 
 //! виден ли эффект? по результатам просчетов #SPE_EffectVisibleComAll
diff --git a/source/particles/sxparticles_dll.cpp b/source/particles/sxparticles_dll.cpp
index 6bd158387..88b1ec58e 100644
--- a/source/particles/sxparticles_dll.cpp
+++ b/source/particles/sxparticles_dll.cpp
@@ -1,8 +1,8 @@
 
-/******************************************************
-Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 #include <windows.h>
 
diff --git a/source/physics/PhyWorld.cpp b/source/physics/PhyWorld.cpp
index b0a196688..c58e7a5f8 100644
--- a/source/physics/PhyWorld.cpp
+++ b/source/physics/PhyWorld.cpp
@@ -1,3 +1,9 @@
+
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "PhyWorld.h"
 #include <core/sxcore.h>
 #include <geom/sxgeom.h>
@@ -605,7 +611,7 @@ void PhyWorld::DebugDrawer::drawContactPoint(const btVector3 & PointOnB, const b
 
 void PhyWorld::DebugDrawer::reportErrorWarning(const char * warningString)
 {
-	reportf(REPORT_MSG_LEVEL_WARNING, "%s\n", warningString);
+	LibReport(REPORT_MSG_LEVEL_WARNING, "%s\n", warningString);
 }
 
 void PhyWorld::DebugDrawer::draw3dText(const btVector3& location, const char* textString)
diff --git a/source/physics/PhyWorld.h b/source/physics/PhyWorld.h
index 103a8637c..435608ca7 100644
--- a/source/physics/PhyWorld.h
+++ b/source/physics/PhyWorld.h
@@ -1,5 +1,11 @@
-#ifndef SXPHYWORLD_H
-#define SXPHYWORLD_H
+
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
+#ifndef __PHY_WORLD_H
+#define __PHY_WORLD_H
 
 
 #include <btBulletDynamicsCommon.h>
@@ -30,8 +36,6 @@ struct PhyMatFile
 };
 #pragma pack(pop)
 
-extern report_func reportf;
-
 class PhyWorld
 {
 public:
diff --git a/source/physics/sxphysics.h b/source/physics/sxphysics.h
index 8f69cc3fd..4c2ee3e85 100644
--- a/source/physics/sxphysics.h
+++ b/source/physics/sxphysics.h
@@ -1,8 +1,8 @@
 
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 /*!
 \file
diff --git a/source/physics/sxphysics_dll.cpp b/source/physics/sxphysics_dll.cpp
index 99a5920d4..3ec2b29dc 100644
--- a/source/physics/sxphysics_dll.cpp
+++ b/source/physics/sxphysics_dll.cpp
@@ -1,8 +1,8 @@
 
-/******************************************************
-Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 #define WIN32_LEAN_AND_MEAN
 #include <windows.h>
@@ -32,12 +32,12 @@ See the license in LICENSE
 
 #if !defined(DEF_STD_REPORT)
 #define DEF_STD_REPORT
-report_func reportf = DefReport;
+report_func g_fnReportf = DefReport;
 #endif
 
 PhyWorld * g_pWorld = NULL;
 
-#define SP_PRECOND(ret) if(!g_pWorld){reportf(-1, "%s - sxphysics is not init", GEN_MSG_LOCATION);return ret;}
+#define SP_PRECOND(ret) if(!g_pWorld){LibReport(REPORT_MSG_LEVEL_ERROR, "%s - sxphysics is not init", GEN_MSG_LOCATION);return ret;}
 
 BOOL APIENTRY DllMain(HMODULE hModule,
 	DWORD  ul_reason_for_call,
@@ -59,7 +59,7 @@ SX_LIB_API void SXPhysics_0Create()
 {
 	if(g_pWorld)
 	{
-		reportf(-1, "%s - sxphysics double init", GEN_MSG_LOCATION);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - sxphysics double init", GEN_MSG_LOCATION);
 		return;
 	}
 	Core_SetOutPtr();
@@ -90,7 +90,7 @@ SX_LIB_API void SXPhysics_Sync()
 
 SX_LIB_API void SXPhysics_Dbg_Set(report_func rf)
 {
-	reportf = rf;
+	g_fnReportf = rf;
 }
 
 SX_LIB_API void SXPhysics_LoadGeom(const char * file)
diff --git a/source/pp/sxpp.cpp b/source/pp/sxpp.cpp
index 59e1e00fb..54a490a67 100644
--- a/source/pp/sxpp.cpp
+++ b/source/pp/sxpp.cpp
@@ -1,8 +1,8 @@
 
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 #define SXPP_VERSION 1
 
@@ -167,7 +167,7 @@ void PPSet::Init()
 	PPSet::IDsShaders::PS::DLAA_Small = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "ppe_dlaa_small.ps", "ppe_dlaa_small.ps", SHADER_CHECKDOUBLE_PATH);
 	PPSet::IDsShaders::PS::DLAA_Long = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "ppe_dlaa_long.ps", "ppe_dlaa_long.ps", SHADER_CHECKDOUBLE_PATH);
 
-	PPSet::IDsTexs::Noise = SGCore_LoadTexAddName("noise_rottex.dds", LoadTexType::ltt_const);
+	PPSet::IDsTexs::Noise = SGCore_LoadTexAddName("noise_rottex.dds", LOAD_TEXTURE_TYPE_CONST);
 	PPSet::IDsTexs::Sun = -1;
 
 	
@@ -195,8 +195,8 @@ void PPSet::Init()
 	PPSet::IDsRenderTargets::Bright2 = SGCore_RTAdd(PPSet::WinSize.x, PPSet::WinSize.y, 0, D3DUSAGE_RENDERTARGET | D3DUSAGE_AUTOGENMIPMAP, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, "pp_bright2", 1);
 }
 
-#define PP_PRECOND(retval) if(!PPSet::DXDevice){g_fnReportf(-1, "%s - post process is not init", GEN_MSG_LOCATION); return retval;}
-#define PP_PRECOND_SECOND(retval) if(PPSet::IDsRenderTargets::Input < 0 || PPSet::IDsRenderTargets::Output < 0){g_fnReportf(-1, "%s - post process is not init output textures", GEN_MSG_LOCATION); return retval;}
+#define PP_PRECOND(retval) if(!PPSet::DXDevice){LibReport(REPORT_MSG_LEVEL_ERROR, "%s - post process is not init", GEN_MSG_LOCATION); return retval;}
+#define PP_PRECOND_SECOND(retval) if(PPSet::IDsRenderTargets::Input < 0 || PPSet::IDsRenderTargets::Output < 0){LibReport(REPORT_MSG_LEVEL_ERROR, "%s - post process is not init output textures", GEN_MSG_LOCATION); return retval;}
 
 //##########################################################################
 
@@ -221,7 +221,7 @@ SX_LIB_API void SPP_0Create(const char* name, bool is_unic)
 			if (GetLastError() == ERROR_ALREADY_EXISTS)
 			{
 				CloseHandle(hMutex);
-				g_fnReportf(-1, "%s - none unic name, post process", GEN_MSG_LOCATION);
+				LibReport(REPORT_MSG_LEVEL_ERROR, "%s - none unic name", GEN_MSG_LOCATION);
 			}
 			else
 			{
@@ -234,7 +234,7 @@ SX_LIB_API void SPP_0Create(const char* name, bool is_unic)
 		}
 	}
 	else
-		g_fnReportf(-1, "%s - not init argument [name], post process", GEN_MSG_LOCATION);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - not init argument [name]", GEN_MSG_LOCATION);
 }
 
 SX_LIB_API void SPP_0Kill()
@@ -721,7 +721,7 @@ SX_LIB_API void SPP_UpdateSun(float3* sunpos)
 
 SX_LIB_API void SPP_ChangeTexSun(const char* str)
 {
-	PPSet::IDsTexs::Sun = SGCore_LoadTexAddName(str, LoadTexType::ltt_const);
+	PPSet::IDsTexs::Sun = SGCore_LoadTexAddName(str, LOAD_TEXTURE_TYPE_CONST);
 }
 
 SX_LIB_API void SPP_RenderSun(float4_t* sun_color)
@@ -734,7 +734,7 @@ SX_LIB_API void SPP_RenderSun(float4_t* sun_color)
 
 	if (PPSet::IDsTexs::Sun < 0 || !SGCore_LoadTexGetTex(PPSet::IDsTexs::Sun))
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_WARNING, "sxpp: %s - sun texture is not init, process can not be started\n", GEN_MSG_LOCATION);
+		LibReport(REPORT_MSG_LEVEL_WARNING, "%s - sun texture is not init, process can not be started\n", GEN_MSG_LOCATION);
 		return;
 	}
 
diff --git a/source/pp/sxpp.h b/source/pp/sxpp.h
index 400e0513b..7ad0eacf9 100644
--- a/source/pp/sxpp.h
+++ b/source/pp/sxpp.h
@@ -1,8 +1,8 @@
 
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 /*!
 \file
@@ -25,7 +25,7 @@ See the license in LICENSE
 
 #undef SX_LIB_API
 #define SX_LIB_API extern "C" __declspec (dllimport)
-#include <gcore\\sxgcore.h>
+#include <gcore/sxgcore.h>
 
 #ifdef SX_DLL
 #undef SX_LIB_API
diff --git a/source/pp/sxpp_dll.cpp b/source/pp/sxpp_dll.cpp
index 4030f098d..88b1ec58e 100644
--- a/source/pp/sxpp_dll.cpp
+++ b/source/pp/sxpp_dll.cpp
@@ -1,10 +1,9 @@
 
-/******************************************************
-Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
-#pragma once
 #include <windows.h>
 
 BOOL APIENTRY DllMain(HMODULE hModule,
diff --git a/source/render/camera_update.cpp b/source/render/camera_update.cpp
index 40fcf3e1b..13465dd5b 100644
--- a/source/render/camera_update.cpp
+++ b/source/render/camera_update.cpp
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "camera_update.h"
 
 //обработка вводы информации с клавиатуры
@@ -6,28 +11,28 @@ void CameraUpdate::UpdateInputKeyBoard(DWORD timeDelta)
 {
 	//обработка ходьбы
 	if(SSInput_GetKeyState(SIK_W))
-		GData::ObjCamera->PosFrontBack(
+		GData::ObjCamera->posFrontBack(
 		GData::CamWalkParamEditor.x *
 		(SSInput_GetKeyState(SIK_LSHIFT) ? GData::CamWalkParamEditor.y : 1) *
 		float(timeDelta) * 0.001f
 		);
 
 	if(SSInput_GetKeyState(SIK_S))
-		GData::ObjCamera->PosFrontBack(
+		GData::ObjCamera->posFrontBack(
 		-GData::CamWalkParamEditor.x *
 		(SSInput_GetKeyState(SIK_LSHIFT) ? GData::CamWalkParamEditor.y : 1) * GData::CamWalkParamEditor.w *
 		float(timeDelta) * 0.001f
 		);
 
 	if(SSInput_GetKeyState(SIK_A))
-		GData::ObjCamera->PosLeftRight(
+		GData::ObjCamera->posLeftRight(
 		-GData::CamWalkParamEditor.x *
 		(SSInput_GetKeyState(SIK_LSHIFT) ? GData::CamWalkParamEditor.y : 1) * GData::CamWalkParamEditor.z *
 		float(timeDelta) * 0.001f
 		);
 
 	if(SSInput_GetKeyState(SIK_D))
-		GData::ObjCamera->PosLeftRight(
+		GData::ObjCamera->posLeftRight(
 		GData::CamWalkParamEditor.x *
 		(SSInput_GetKeyState(SIK_LSHIFT) ? GData::CamWalkParamEditor.y : 1) * GData::CamWalkParamEditor.z *
 		float(timeDelta) * 0.001f
@@ -45,13 +50,13 @@ void CameraUpdate::UpdateInputMouseRotate(DWORD timeDelta)
 
 	if(dx)
 	{
-		GData::ObjCamera->RotRightLeft(float(timeDelta) * *sense * float(dx));
+		GData::ObjCamera->rotRightLeft(float(timeDelta) * *sense * float(dx));
 		//SetCursorPos(centr.x,cy);
 	}
 
 	if(dy)
 	{
-		GData::ObjCamera->RotUpDown(float(timeDelta) * *sense * float(dy));
+		GData::ObjCamera->rotUpDown(float(timeDelta) * *sense * float(dy));
 		//SetCursorPos(cx,centr.y);
 	}
 }
@@ -67,7 +72,7 @@ void CameraUpdate::UpdateInputMouseUpDown(DWORD timeDelta)
 
 	if(dy)
 	{
-		GData::ObjCamera->PosUpDown(5 * float(timeDelta) * *sense * float(-dy));
+		GData::ObjCamera->posUpDown(5 * float(timeDelta) * *sense * float(-dy));
 	}
 }
 
diff --git a/source/render/camera_update.h b/source/render/camera_update.h
index 9d4426365..5ffa34770 100644
--- a/source/render/camera_update.h
+++ b/source/render/camera_update.h
@@ -1,8 +1,8 @@
 
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 /*!
 \file
@@ -13,8 +13,8 @@ See the license in LICENSE
  \ingroup render
 @{*/
 
-#ifndef __CAMERA_UPDATE
-#define __CAMERA_UPDATE
+#ifndef __CAMERA_UPDATE_H
+#define __CAMERA_UPDATE_H
 
 #include <windows.h>
 #include <input/sxinput.h>
diff --git a/source/render/editor/axes_static.cpp b/source/render/editor/axes_static.cpp
index 844bfeaea..1a84aedca 100644
--- a/source/render/editor/axes_static.cpp
+++ b/source/render/editor/axes_static.cpp
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "grid.h"
 
 CAxesStatic::CAxesStatic()
diff --git a/source/render/editor/axes_static.h b/source/render/editor/axes_static.h
index b3fd3d267..a974a8b82 100644
--- a/source/render/editor/axes_static.h
+++ b/source/render/editor/axes_static.h
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #ifndef __AXES_STATIC_H
 #define __AXES_STATIC_H
 
diff --git a/source/render/editor/grid.cpp b/source/render/editor/grid.cpp
index dbfcdd8e8..34c438a88 100644
--- a/source/render/editor/grid.cpp
+++ b/source/render/editor/grid.cpp
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "grid.h"
 
 CGrid::CGrid()
diff --git a/source/render/editor/grid.h b/source/render/editor/grid.h
index 359fcdf45..6c2e7e8ed 100644
--- a/source/render/editor/grid.h
+++ b/source/render/editor/grid.h
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #ifndef __GRID_H
 #define __GRID_H
 
diff --git a/source/render/gdata.cpp b/source/render/gdata.cpp
index dfc8ee2f5..0591d76b0 100644
--- a/source/render/gdata.cpp
+++ b/source/render/gdata.cpp
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "gdata.h"
 
 namespace GData
diff --git a/source/render/gdata.h b/source/render/gdata.h
index 982349713..02125fe56 100644
--- a/source/render/gdata.h
+++ b/source/render/gdata.h
@@ -1,8 +1,8 @@
 
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 /*!
 \file
diff --git a/source/render/model_sim.cpp b/source/render/model_sim.cpp
index e03e721ca..bc59a307c 100644
--- a/source/render/model_sim.cpp
+++ b/source/render/model_sim.cpp
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "model_sim.h"
 
 ModelSim::ModelSim()
@@ -85,24 +90,24 @@ void ModelSim::Add(const char* path)
 	sprintf(tmppath, "%s%s", Core_RStringGet(G_RI_STRING_PATH_GS_MESHES), path);
 	SGCore_StaticModelLoad(tmppath, &StaticModel);
 
-	if (StaticModel->SubsetCount > 1)
+	if (StaticModel->m_uiSubsetCount > 1)
 	{
 		//error
 	}
 
-	sprintf(tmppath, "%s.dds", StaticModel->ArrTextures[0]);
+	sprintf(tmppath, "%s.dds", StaticModel->m_ppTextures[0]);
 	IDsMat = SGCore_MtlLoad(tmppath, MTL_TYPE_GEOM);
 
 
 	vertex_static* pData;
-	StaticModel->VertexBuffer->Lock(0, 0, (void**)&pData, 0);
+	StaticModel->m_pVertexBuffer->Lock(0, 0, (void**)&pData, 0);
 
-	float3_t tmppos = pData[StaticModel->StartVertex[0]].Pos;
+	float3_t tmppos = pData[StaticModel->m_pStartVertex[0]].Pos;
 	float3 tmpMax = tmppos;
 	float3 tmpMin = tmppos;
-	for (DWORD k = 0; k<StaticModel->VertexCount[0]; k++)
+	for (DWORD k = 0; k<StaticModel->m_pVertexCount[0]; k++)
 	{
-		tmppos = pData[StaticModel->StartVertex[0] + k].Pos;
+		tmppos = pData[StaticModel->m_pStartVertex[0] + k].Pos;
 
 		if (tmppos.x > tmpMax.x)
 			tmpMax.x = tmppos.x;
@@ -125,16 +130,16 @@ void ModelSim::Add(const char* path)
 	}
 
 	DWORD* indeces;
-	StaticModel->IndexBuffer->Lock(0, 0, (void **)&indeces, 0);
+	StaticModel->m_pIndexBuffer->Lock(0, 0, (void **)&indeces, 0);
 
 	float3 tmpMM = SMVectorLerp(tmpMax, tmpMin, 0.5f);
 	D3DXPLANE Plane;
 	D3DXPlaneFromPoints(&Plane,
-		&D3DXVECTOR3(pData[indeces[StaticModel->StartIndex[0] + 0]].Pos.x, pData[indeces[StaticModel->StartIndex[0] + 0]].Pos.y, pData[indeces[StaticModel->StartIndex[0] + 0]].Pos.z),
-		&D3DXVECTOR3(pData[indeces[StaticModel->StartIndex[0] + 1]].Pos.x, pData[indeces[StaticModel->StartIndex[0] + 1]].Pos.y, pData[indeces[StaticModel->StartIndex[0] + 1]].Pos.z),
-		&D3DXVECTOR3(pData[indeces[StaticModel->StartIndex[0] + 2]].Pos.x, pData[indeces[StaticModel->StartIndex[0] + 2]].Pos.y, pData[indeces[StaticModel->StartIndex[0] + 2]].Pos.z));
-	StaticModel->VertexBuffer->Unlock();
-	StaticModel->IndexBuffer->Unlock();
+		&D3DXVECTOR3(pData[indeces[StaticModel->m_pStartIndex[0] + 0]].Pos.x, pData[indeces[StaticModel->m_pStartIndex[0] + 0]].Pos.y, pData[indeces[StaticModel->m_pStartIndex[0] + 0]].Pos.z),
+		&D3DXVECTOR3(pData[indeces[StaticModel->m_pStartIndex[0] + 1]].Pos.x, pData[indeces[StaticModel->m_pStartIndex[0] + 1]].Pos.y, pData[indeces[StaticModel->m_pStartIndex[0] + 1]].Pos.z),
+		&D3DXVECTOR3(pData[indeces[StaticModel->m_pStartIndex[0] + 2]].Pos.x, pData[indeces[StaticModel->m_pStartIndex[0] + 2]].Pos.y, pData[indeces[StaticModel->m_pStartIndex[0] + 2]].Pos.z));
+	StaticModel->m_pVertexBuffer->Unlock();
+	StaticModel->m_pIndexBuffer->Unlock();
 
 	float3_t Center = (float3_t)((tmpMax + tmpMin) * 0.5);
 	float3_t Min = tmpMin;
@@ -144,7 +149,7 @@ void ModelSim::Add(const char* path)
 
 	IDirect3DVertexBuffer9* Anim;
 	GData::DXDevice->CreateVertexBuffer(
-		StaticModel->AllVertexCount * sizeof(vertex_animated),
+		StaticModel->m_uiAllVertexCount * sizeof(vertex_animated),
 		D3DUSAGE_WRITEONLY,
 		0,
 		D3DPOOL_MANAGED,
@@ -153,9 +158,9 @@ void ModelSim::Add(const char* path)
 
 	vertex_animated* pDataAnim;
 	Anim->Lock(0, 0, (void**)&pDataAnim, 0);
-	StaticModel->VertexBuffer->Lock(0, 0, (void**)&pData, 0);
+	StaticModel->m_pVertexBuffer->Lock(0, 0, (void**)&pData, 0);
 	
-	for (UINT i = 0; i < StaticModel->AllVertexCount; ++i)
+	for (UINT i = 0; i < StaticModel->m_uiAllVertexCount; ++i)
 	{
 		pDataAnim[i].Pos = pData[i].Pos;
 		pDataAnim[i].Norm = pData[i].Norm;
@@ -166,7 +171,7 @@ void ModelSim::Add(const char* path)
 	}
 
 	Anim->Unlock();
-	StaticModel->VertexBuffer->Unlock();
+	StaticModel->m_pVertexBuffer->Unlock();
 
 	ArrStaticModel[ArrStaticModel.size() - 1]->Anim = Anim;
 }
@@ -221,16 +226,16 @@ void ModelSim::RenderStatic(DWORD timeDelta)
 {
 //	uint32_t* RTGPUArrIndicesPtrs2;
 
-	GData::DXDevice->SetStreamSource(0, ArrStaticModel[CurrRenderModel]->Model->VertexBuffer, 0, sizeof(vertex_static));
-	GData::DXDevice->SetIndices(ArrStaticModel[CurrRenderModel]->Model->IndexBuffer);
+	GData::DXDevice->SetStreamSource(0, ArrStaticModel[CurrRenderModel]->Model->m_pVertexBuffer, 0, sizeof(vertex_static));
+	GData::DXDevice->SetIndices(ArrStaticModel[CurrRenderModel]->Model->m_pIndexBuffer);
 	GData::DXDevice->SetVertexDeclaration(VertexDeclarationStatic);
 	long jCountIndex = 0;
 
 
 	SGCore_MtlSet(IDsMat, &WorldMat);
-	SGCore_DIP(D3DPT_TRIANGLELIST, 0, 0, ArrStaticModel[CurrRenderModel]->Model->VertexCount[0], jCountIndex, ArrStaticModel[CurrRenderModel]->Model->IndexCount[0] / 3);
-	Core_RIntSet(G_RI_INT_COUNT_POLY, Core_RIntGet(G_RI_INT_COUNT_POLY) + ArrStaticModel[CurrRenderModel]->Model->IndexCount[0] / 3);
-	jCountIndex += ArrStaticModel[CurrRenderModel]->Model->IndexCount[0];
+	SGCore_DIP(D3DPT_TRIANGLELIST, 0, 0, ArrStaticModel[CurrRenderModel]->Model->m_pVertexCount[0], jCountIndex, ArrStaticModel[CurrRenderModel]->Model->m_pIndexCount[0] / 3);
+	Core_RIntSet(G_RI_INT_COUNT_POLY, Core_RIntGet(G_RI_INT_COUNT_POLY) + ArrStaticModel[CurrRenderModel]->Model->m_pIndexCount[0] / 3);
+	jCountIndex += ArrStaticModel[CurrRenderModel]->Model->m_pIndexCount[0];
 }
 
 void ModelSim::RenderGreen(DWORD timeDelta)
@@ -240,17 +245,17 @@ void ModelSim::RenderGreen(DWORD timeDelta)
 	GData::DXDevice->SetStreamSourceFreq(1, (D3DSTREAMSOURCE_INSTANCEDATA | 1));
 	GData::DXDevice->SetStreamSource(1, TransVertBufGreen, 0, sizeof(DataVertex));
 
-	GData::DXDevice->SetStreamSource(0, ArrStaticModel[CurrRenderModel]->Model->VertexBuffer, 0, sizeof(vertex_static));
-	GData::DXDevice->SetIndices(ArrStaticModel[CurrRenderModel]->Model->IndexBuffer);
+	GData::DXDevice->SetStreamSource(0, ArrStaticModel[CurrRenderModel]->Model->m_pVertexBuffer, 0, sizeof(vertex_static));
+	GData::DXDevice->SetIndices(ArrStaticModel[CurrRenderModel]->Model->m_pIndexBuffer);
 	GData::DXDevice->SetVertexDeclaration(VertexDeclarationGreen);
 
 
 	long jCountIndex = 0;
 
 	SGCore_MtlSet(IDsMat, &SMMatrixIdentity());
-	SGCore_DIP(D3DPT_TRIANGLELIST, 0, 0, ArrStaticModel[CurrRenderModel]->Model->VertexCount[0], jCountIndex, ArrStaticModel[CurrRenderModel]->Model->IndexCount[0] / 3);
-	Core_RIntSet(G_RI_INT_COUNT_POLY, Core_RIntGet(G_RI_INT_COUNT_POLY) + ((ArrStaticModel[CurrRenderModel]->Model->IndexCount[0] / 3) * 1));
-	jCountIndex += ArrStaticModel[CurrRenderModel]->Model->IndexCount[0];
+	SGCore_DIP(D3DPT_TRIANGLELIST, 0, 0, ArrStaticModel[CurrRenderModel]->Model->m_pVertexCount[0], jCountIndex, ArrStaticModel[CurrRenderModel]->Model->m_pIndexCount[0] / 3);
+	Core_RIntSet(G_RI_INT_COUNT_POLY, Core_RIntGet(G_RI_INT_COUNT_POLY) + ((ArrStaticModel[CurrRenderModel]->Model->m_pIndexCount[0] / 3) * 1));
+	jCountIndex += ArrStaticModel[CurrRenderModel]->Model->m_pIndexCount[0];
 
 	GData::DXDevice->SetStreamSourceFreq(0, 1);
 	GData::DXDevice->SetStreamSourceFreq(1, 1);
@@ -263,11 +268,11 @@ void ModelSim::RenderSkin(DWORD timeDelta)
 	mbs.orient = SMQuaternion();
 
 	GData::DXDevice->SetStreamSource(0, ArrStaticModel[CurrRenderModel]->Anim, 0, sizeof(vertex_animated));
-	GData::DXDevice->SetIndices(ArrStaticModel[CurrRenderModel]->Model->IndexBuffer);
+	GData::DXDevice->SetIndices(ArrStaticModel[CurrRenderModel]->Model->m_pIndexBuffer);
 	GData::DXDevice->SetVertexDeclaration(VertexDeclarationSkin);
 
 	SGCore_MtlSet(IDsMat, &WorldMat);
 	GData::DXDevice->SetVertexShaderConstantF(16, (float*)&mbs, 2);
-	SGCore_DIP(D3DPT_TRIANGLELIST, 0, 0, ArrStaticModel[CurrRenderModel]->Model->VertexCount[0], 0, ArrStaticModel[CurrRenderModel]->Model->IndexCount[0] / 3);
-	Core_RIntSet(G_RI_INT_COUNT_POLY, Core_RIntGet(G_RI_INT_COUNT_POLY) + ArrStaticModel[CurrRenderModel]->Model->IndexCount[0] / 3);
+	SGCore_DIP(D3DPT_TRIANGLELIST, 0, 0, ArrStaticModel[CurrRenderModel]->Model->m_pVertexCount[0], 0, ArrStaticModel[CurrRenderModel]->Model->m_pIndexCount[0] / 3);
+	Core_RIntSet(G_RI_INT_COUNT_POLY, Core_RIntGet(G_RI_INT_COUNT_POLY) + ArrStaticModel[CurrRenderModel]->Model->m_pIndexCount[0] / 3);
 }
\ No newline at end of file
diff --git a/source/render/model_sim.h b/source/render/model_sim.h
index 9945e9671..d5a4eb8f4 100644
--- a/source/render/model_sim.h
+++ b/source/render/model_sim.h
@@ -1,8 +1,8 @@
 
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 /*!
 \file
diff --git a/source/render/render_func.cpp b/source/render/render_func.cpp
index 9265f0e29..f0c3e7936 100644
--- a/source/render/render_func.cpp
+++ b/source/render/render_func.cpp
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "render_func.h"
 
 /*
@@ -134,12 +139,12 @@ void SXRenderFunc::ComDeviceLost()
 
 	SXRenderFunc::InitModeWindow();
 	bool bf = SGCore_OnDeviceReset(*r_win_width, *r_win_height, *r_win_windowed);
-	g_fnReportf(REPORT_MSG_LEVEL_WARNING, "r_win_width %d, r_win_height %d, r_win_windowed %d \n", *r_win_width, *r_win_height, *r_win_windowed);
+	LibReport(REPORT_MSG_LEVEL_WARNING, "r_win_width %d, r_win_height %d, r_win_windowed %d \n", *r_win_width, *r_win_height, *r_win_windowed);
 
 	if (bf)
 	{
 		//если все-таки функция зашла сюда значит что-то было неосвобождено
-		g_fnReportf(REPORT_MSG_LEVEL_ERROR, "reset device is failed ... \n");
+		LibReport(REPORT_MSG_LEVEL_ERROR, "reset device is failed ... \n");
 	}
 	else
 	{
@@ -163,7 +168,7 @@ void SXRenderFunc::ComVisibleForLight()
 		if (!SML_LigthsGetExists(i))
 			continue;
 
-		if (SML_LigthsGetShadowed(i) && (SML_LigthsComVisibleForFrustum(i, GData::ObjCamera->ObjFrustum) && SML_LigthsGetEnable(i)) /*|| (Data::Level::LightManager->Arr[i]->ShadowCube && Data::Level::LightManager->Arr[i]->ShadowCube->GetStatic() && !Data::Level::LightManager->Arr[i]->ShadowCube->GetUpdate())*/)
+		if (SML_LigthsGetShadowed(i) && (SML_LigthsComVisibleForFrustum(i, GData::ObjCamera->getFrustum()) && SML_LigthsGetEnable(i)) /*|| (Data::Level::LightManager->Arr[i]->ShadowCube && Data::Level::LightManager->Arr[i]->ShadowCube->GetStatic() && !Data::Level::LightManager->Arr[i]->ShadowCube->GetUpdate())*/)
 		{
 			if (SML_LigthsGetType(i) == LTYPE_LIGHT_GLOBAL)
 			{
@@ -286,12 +291,12 @@ void SXRenderFunc::ComVisibleForLight()
 void SXRenderFunc::ComVisibleForCamera()
 {
 	if (SGeom_ModelsGetCount() > 0)
-		SGeom_ModelsComVisible(GData::ObjCamera->ObjFrustum, &GData::ConstCurrCamPos);
+		SGeom_ModelsComVisible(GData::ObjCamera->getFrustum(), &GData::ConstCurrCamPos);
 
 	if (SGeom_GreenGetCount() > 0)
-		SGeom_GreenComVisible(GData::ObjCamera->ObjFrustum, &GData::ConstCurrCamPos);
+		SGeom_GreenComVisible(GData::ObjCamera->getFrustum(), &GData::ConstCurrCamPos);
 
-	SXAnim_ModelsComVisible(GData::ObjCamera->ObjFrustum, &GData::ConstCurrCamPos);
+	SXAnim_ModelsComVisible(GData::ObjCamera->getFrustum(), &GData::ConstCurrCamPos);
 }
 
 void SXRenderFunc::ComVisibleReflection()
@@ -492,7 +497,7 @@ void SXRenderFunc::FullScreenChangeSizeAbs()
 		*r_win_width = iFullScreenWidth;
 		*r_win_height = iFullScreenHeight;
 
-		//g_fnReportf(REPORT_MSG_LEVEL_WARNING, "iFullScreenWidth %d, iFullScreenHeight %d \n", iFullScreenWidth, iFullScreenHeight);
+		//LibReport(REPORT_MSG_LEVEL_WARNING, "iFullScreenWidth %d, iFullScreenHeight %d \n", iFullScreenWidth, iFullScreenHeight);
 	}
 
 	static int *r_resize = (int*)GET_PCVAR_INT("r_resize");
@@ -505,7 +510,7 @@ void SXRenderFunc::UpdateView()
 {
 	GData::InitAllMatrix();
 
-	GData::ObjCamera->GetViewMatrix(&GData::MCamView);
+	GData::ObjCamera->getViewMatrix(&GData::MCamView);
 	
 	Core_RMatrixSet(G_RI_MATRIX_WORLD, &SMMatrixIdentity());
 	Core_RMatrixSet(G_RI_MATRIX_VIEW, &GData::MCamView);
@@ -513,8 +518,8 @@ void SXRenderFunc::UpdateView()
 	Core_RMatrixSet(G_RI_MATRIX_VIEWPROJ, &(GData::MCamView * GData::MLightProj));
 	Core_RMatrixSet(G_RI_MATRIX_TRANSP_VIEWPROJ, &SMMatrixTranspose(GData::MCamView * GData::MLightProj));
 
-	GData::ObjCamera->GetPosition(&GData::ConstCurrCamPos);
-	GData::ObjCamera->GetLook(&GData::ConstCurrCamDir);
+	GData::ObjCamera->getPosition(&GData::ConstCurrCamPos);
+	GData::ObjCamera->getLook(&GData::ConstCurrCamDir);
 
 	Core_RFloat3Set(G_RI_FLOAT3_OBSERVER_POSITION, &GData::ConstCurrCamPos);
 	Core_RFloat3Set(G_RI_FLOAT3_OBSERVER_DIRECTION, &GData::ConstCurrCamDir);
@@ -527,7 +532,7 @@ void SXRenderFunc::UpdateView()
 	Core_RFloatSet(G_RI_FLOAT_OBSERVER_FAR, GData::NearFar.y);
 	Core_RFloatSet(G_RI_FLOAT_OBSERVER_FOV, GData::ProjFov);*/
 
-	GData::ObjCamera->ObjFrustum->Update(&(GData::MCamView), &(GData::MCamProj));
+	GData::ObjCamera->updateFrustum(&GData::MCamProj);
 
 	if (GData::DefaultGeomIDArr < 0)
 		GData::DefaultGeomIDArr = SGeom_ModelsAddArrForCom();
@@ -823,7 +828,7 @@ void SXRenderFunc::BuildMRT(DWORD timeDelta, bool isRenderSimulation)
 void SXRenderFunc::UpdateShadow(DWORD timeDelta)
 {
 	Core_RIntSet(G_RI_INT_RENDERSTATE, RENDER_STATE_SHADOW);
-	SML_LigthsComVisibleFrustumDistFor(GData::ObjCamera->ObjFrustum, &GData::ConstCurrCamPos);
+	SML_LigthsComVisibleFrustumDistFor(GData::ObjCamera->getFrustum(), &GData::ConstCurrCamPos);
 	GData::DXDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE);
 	GData::DXDevice->SetRenderState(D3DRS_ZWRITEENABLE, D3DZB_TRUE);
 	GData::DXDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, FALSE);
@@ -842,7 +847,7 @@ void SXRenderFunc::UpdateShadow(DWORD timeDelta)
 			continue;
 
 		Core_RIntSet(G_RI_INT_CURRIDLIGHT, i);
-		if (SML_LigthsGetShadowed(i) && (SML_LigthsComVisibleForFrustum(i, GData::ObjCamera->ObjFrustum) && SML_LigthsGetEnable(i)) /*|| (Data::Level::LightManager->Arr[i]->ShadowCube && Data::Level::LightManager->Arr[i]->ShadowCube->GetStatic() && !Data::Level::LightManager->Arr[i]->ShadowCube->GetUpdate())*/)
+		if (SML_LigthsGetShadowed(i) && (SML_LigthsComVisibleForFrustum(i, GData::ObjCamera->getFrustum()) && SML_LigthsGetEnable(i)) /*|| (Data::Level::LightManager->Arr[i]->ShadowCube && Data::Level::LightManager->Arr[i]->ShadowCube->GetStatic() && !Data::Level::LightManager->Arr[i]->ShadowCube->GetUpdate())*/)
 		{
 			if (SML_LigthsGetType(i) == LTYPE_LIGHT_GLOBAL)
 			{
diff --git a/source/render/render_func.h b/source/render/render_func.h
index 703131977..8e6859f6f 100644
--- a/source/render/render_func.h
+++ b/source/render/render_func.h
@@ -1,8 +1,8 @@
 
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 /*!
 \file
@@ -34,8 +34,6 @@ See the license in LICENSE
 #include <pp/sxpp.h>
 #include <decals/sxdecals.h>
 
-extern report_func g_fnReportf;
-
 //! пространство имен с орагнизацией рендера
 namespace SXRenderFunc
 {
diff --git a/source/render/sxrender.cpp b/source/render/sxrender.cpp
index c85721b49..6b43a9238 100644
--- a/source/render/sxrender.cpp
+++ b/source/render/sxrender.cpp
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "sxrender.h"
 
 #include <render/camera_update.h>
@@ -13,7 +18,7 @@
 report_func g_fnReportf = DefReport;
 #endif
 
-#define SR_PRECOND(retval) if(!GData::DXDevice){g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s - sxrender is not init", GEN_MSG_LOCATION); return retval;}
+#define SR_PRECOND(retval) if(!GData::DXDevice){LibReport(REPORT_MSG_LEVEL_ERROR, "%s - sxrender is not init", GEN_MSG_LOCATION); return retval;}
 
 //##########################################################################
 
@@ -37,7 +42,7 @@ SX_LIB_API void SRender_0Create(const char *szName, HWND hWnd3D, HWND hWndParent
 			if (GetLastError() == ERROR_ALREADY_EXISTS)
 			{
 				CloseHandle(hMutex);
-				g_fnReportf(-1, "%s - none unic name, sxparticles", GEN_MSG_LOCATION);
+				LibReport(REPORT_MSG_LEVEL_ERROR, "%s - none unic name", GEN_MSG_LOCATION);
 				return;
 			}
 		}
@@ -48,7 +53,7 @@ SX_LIB_API void SRender_0Create(const char *szName, HWND hWnd3D, HWND hWndParent
 		GData::DXDevice = SGCore_GetDXDevice();
 
 		GData::ObjCamera = SGCore_CrCamera();
-		GData::ObjCamera->SetFOV(GData::ProjFov);
+		GData::ObjCamera->setFOV(GData::ProjFov);
 
 		GData::InitAllMatrix();
 
@@ -97,7 +102,7 @@ SX_LIB_API void SRender_0Create(const char *szName, HWND hWnd3D, HWND hWndParent
 		//SGCore_LoadTexLoadTextures();
 	}
 	else
-		g_fnReportf(-1, "%s - not init argument [name], sxparticles", GEN_MSG_LOCATION);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - not init argument [name]", GEN_MSG_LOCATION);
 }
 
 SX_LIB_API void SRender_AKill()
diff --git a/source/render/sxrender.h b/source/render/sxrender.h
index fe75890a8..0954ff53f 100644
--- a/source/render/sxrender.h
+++ b/source/render/sxrender.h
@@ -1,8 +1,8 @@
 
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 /*!
 \file
diff --git a/source/score/CallBackOgg.cpp b/source/score/CallBackOgg.cpp
index d4b6630c6..da236f7fa 100644
--- a/source/score/CallBackOgg.cpp
+++ b/source/score/CallBackOgg.cpp
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #pragma once
 
 //чтение файла
diff --git a/source/score/sound.cpp b/source/score/sound.cpp
index 718701bde..41b5ce6b5 100644
--- a/source/score/sound.cpp
+++ b/source/score/sound.cpp
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "sound.h"
 
 size_t ogg_read(void *ptr, size_t size, size_t nmemb, void *datasource)
@@ -81,13 +86,13 @@ void MainSound::Init(HWND hwnd)
 {
 	if (FAILED(DirectSoundCreate8(NULL, &DeviceSound, NULL)))
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s - could not create sound device", GEN_MSG_LOCATION);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - could not create sound device", GEN_MSG_LOCATION);
 		return;// SOUND_INIT_ERR_INIT;
 	}
 
 	if (FAILED(DeviceSound->SetCooperativeLevel(hwnd, DSSCL_EXCLUSIVE)))
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s - could not create cooperative level", GEN_MSG_LOCATION);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - could not create cooperative level", GEN_MSG_LOCATION);
 		return;// SOUND_INIT_ERR_CL;
 	}
 
@@ -101,7 +106,7 @@ void MainSound::Init(HWND hwnd)
 
 	if (FAILED(DeviceSound->CreateSoundBuffer(&dsbd, &DSPrimary, NULL)))
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s - could not create primary buffer", GEN_MSG_LOCATION);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - could not create primary buffer", GEN_MSG_LOCATION);
 		return;// SOUND_INIT_ERR_PRIM_BUF;
 	}
 
@@ -117,7 +122,7 @@ void MainSound::Init(HWND hwnd)
 
 	if (FAILED(DSPrimary->SetFormat(&wfex)))
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s - could not init format", GEN_MSG_LOCATION);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - could not init format", GEN_MSG_LOCATION);
 		return;// SOUND_INIT_ERR_SET_FORMAT;
 	}
 
@@ -182,7 +187,7 @@ void MainSound::LoadWAV(Sound* snd, const char* fpath)
 	
 	if (!(snd->DSBuffer = SoundBufferCreate(&Hdr)))
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s - could not create sound buffer [%s]", GEN_MSG_LOCATION, snd->RPath);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - could not create sound buffer [%s]", GEN_MSG_LOCATION, snd->RPath);
 		return;
 	}
 
@@ -299,7 +304,7 @@ void MainSound::LoadOGG(Sound* snd, const char* fpath)
 
 	if (ov_fopen(fpath, &ogg))
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s - error reading [%s]", GEN_MSG_LOCATION, snd->RPath);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - error reading [%s]", GEN_MSG_LOCATION, snd->RPath);
 		return;
 	}
 
@@ -317,7 +322,7 @@ void MainSound::LoadOGG(Sound* snd, const char* fpath)
 
 	if (!vi)
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s - error reading (info) [%s]", GEN_MSG_LOCATION, snd->RPath);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - error reading (info) [%s]", GEN_MSG_LOCATION, snd->RPath);
 		return;
 	}
 
@@ -342,7 +347,7 @@ void MainSound::LoadOGG(Sound* snd, const char* fpath)
 
 	if (!snd->DSBuffer)
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s - could not create sound buffer [%s]", GEN_MSG_LOCATION, snd->RPath);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - could not create sound buffer [%s]", GEN_MSG_LOCATION, snd->RPath);
 		return;
 	}
 
@@ -421,7 +426,7 @@ void MainSound::SoundDataOGGLoad(OggVorbis_File* VorbisFile, IDirectSoundBuffer8
 		else if (bites_read == OV_EINVAL)
 		{
 			//ошибка при декодировании, нужно поставить заглушку
-			g_fnReportf(REPORT_MSG_LEVEL_WARNING,"OV_EINVAL");
+			LibReport(REPORT_MSG_LEVEL_WARNING,"OV_EINVAL");
 		}
 		else
 			break;
@@ -445,7 +450,7 @@ void MainSound::SoundDataOGGLoad(OggVorbis_File* VorbisFile, IDirectSoundBuffer8
 			else if (bites_read == OV_EINVAL)
 			{
 				//ошибка при декодировании, нужно поставить заглушку
-				g_fnReportf(REPORT_MSG_LEVEL_WARNING, "OV_EINVAL");
+				LibReport(REPORT_MSG_LEVEL_WARNING, "OV_EINVAL");
 			}
 			else
 				break;
@@ -467,7 +472,7 @@ ID MainSound::SoundCreate2d(const char *file, bool looping, DWORD size_stream)
 
 	if (!Core_0FileExists(fullpath))
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s - file not found [%s]", GEN_MSG_LOCATION, fullpath);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - file not found [%s]", GEN_MSG_LOCATION, fullpath);
 		return -1;
 	}
 
@@ -475,7 +480,7 @@ ID MainSound::SoundCreate2d(const char *file, bool looping, DWORD size_stream)
 
 	if (fmt == SOUND_FILEFORMAT_UNKNOWN)
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s - unknown format [%s]", GEN_MSG_LOCATION, file);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - unknown format [%s]", GEN_MSG_LOCATION, file);
 		return -1;
 	}
 
@@ -566,13 +571,13 @@ void MainSound::SoundInstancePlay2d(ID id, int volume, int pan)
 
 	if (snd->StreamSize > 0)
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_WARNING, "%s - can not create sound instance for streaming [%s]", GEN_MSG_LOCATION, snd->RPath);
+		LibReport(REPORT_MSG_LEVEL_WARNING, "%s - can not create sound instance for streaming [%s]", GEN_MSG_LOCATION, snd->RPath);
 		return;
 	}
 
 	if (snd->Is3d)
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_WARNING, "%s - can not create 2d sound instance by 3d [%s]", GEN_MSG_LOCATION, snd->RPath);
+		LibReport(REPORT_MSG_LEVEL_WARNING, "%s - can not create 2d sound instance by 3d [%s]", GEN_MSG_LOCATION, snd->RPath);
 		return;
 	}
 
@@ -593,7 +598,7 @@ void MainSound::SoundInstancePlay2d(ID id, int volume, int pan)
 		DeviceSound->DuplicateSoundBuffer(snd->DSBuffer, &tsb);
 		if (!tsb)
 		{
-			g_fnReportf(REPORT_MSG_LEVEL_WARNING, "%s - can not create sound instance [%s], this is big problem", GEN_MSG_LOCATION, snd->RPath);
+			LibReport(REPORT_MSG_LEVEL_WARNING, "%s - can not create sound instance [%s], this is big problem", GEN_MSG_LOCATION, snd->RPath);
 			return;
 		}
 		tsb->QueryInterface(IID_IDirectSoundBuffer8, (void**)&tsb8);
@@ -626,13 +631,13 @@ void MainSound::SoundInstancePlay3d(ID id, const float3* pos)
 
 	if (snd->StreamSize > 0)
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_WARNING, "%s - can not create sound instance for streaming [%s]", GEN_MSG_LOCATION, snd->RPath);
+		LibReport(REPORT_MSG_LEVEL_WARNING, "%s - can not create sound instance for streaming [%s]", GEN_MSG_LOCATION, snd->RPath);
 		return;
 	}
 
 	if (!snd->Is3d)
 	{
-		g_fnReportf(REPORT_MSG_LEVEL_WARNING, "%s - can not create 3d sound instance by 2d[%s]", GEN_MSG_LOCATION, snd->RPath);
+		LibReport(REPORT_MSG_LEVEL_WARNING, "%s - can not create 3d sound instance by 2d[%s]", GEN_MSG_LOCATION, snd->RPath);
 		return;
 	}
 
@@ -653,7 +658,7 @@ void MainSound::SoundInstancePlay3d(ID id, const float3* pos)
 		DeviceSound->DuplicateSoundBuffer(snd->DSBuffer, &tsb);
 		if (!tsb)
 		{
-			g_fnReportf(REPORT_MSG_LEVEL_WARNING, "%s - can not create sound instance [%s], this is big problem", GEN_MSG_LOCATION, snd->RPath);
+			LibReport(REPORT_MSG_LEVEL_WARNING, "%s - can not create sound instance [%s], this is big problem", GEN_MSG_LOCATION, snd->RPath);
 			return;
 		}
 		tsb->QueryInterface(IID_IDirectSoundBuffer8, (void**)&tsb8);
diff --git a/source/score/sound.h b/source/score/sound.h
index d365d60e4..a5fe99dde 100644
--- a/source/score/sound.h
+++ b/source/score/sound.h
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #ifndef __SOUND_H
 #define __SOUND_H
 
@@ -19,8 +24,6 @@
 #include <common/assotiativearray.h>
 #include "sxscore.h"
 
-extern report_func g_fnReportf;
-
 struct AAStringNR : public AAString
 {
 	__forceinline AAStringNR(const char * str)
@@ -44,7 +47,7 @@ struct AAStringNR : public AAString
 
 #define SOUND_PRECOND(id, retval) \
 if((UINT)id >= ArrSounds.size() || !(ArrSounds[id]))\
-{g_fnReportf(REPORT_MSG_LEVEL_ERROR, "%s - sxsound - unresolved address to sound %d", GEN_MSG_LOCATION, id); return retval; }
+{LibReport(REPORT_MSG_LEVEL_ERROR, "%s - unresolved address to sound %d", GEN_MSG_LOCATION, id); return retval; }
 
 inline long SOUND_3D_COM_VOLUME(const float3 & snd_pos, const float3 & view_pos, const float snd_distaudible)
 {
diff --git a/source/score/sxscore.cpp b/source/score/sxscore.cpp
index 5baa139a2..a4dc51178 100644
--- a/source/score/sxscore.cpp
+++ b/source/score/sxscore.cpp
@@ -1,8 +1,8 @@
 
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 #define SXSCORE_VERSION 1
 
@@ -16,7 +16,7 @@ report_func g_fnReportf = DefReport;
 
 MainSound* MSound = 0;
 
-#define SCORE_PRECOND(retval) if(!MSound){g_fnReportf(-1, "%s - sxsound is not init", GEN_MSG_LOCATION); return retval;}
+#define SCORE_PRECOND(retval) if(!MSound){LibReport(-1, "%s - sxsound is not init", GEN_MSG_LOCATION); return retval;}
 
 //##########################################################################
 
@@ -40,7 +40,7 @@ SX_LIB_API void SSCore_0Create(const char* name, HWND hwnd, bool is_unic)
 			if (GetLastError() == ERROR_ALREADY_EXISTS)
 			{
 				CloseHandle(hMutex);
-				g_fnReportf(-1, "%s - none unic name, sxsound", GEN_MSG_LOCATION);
+				LibReport(REPORT_MSG_LEVEL_ERROR, "%s - none unic name", GEN_MSG_LOCATION);
 			}
 			else
 			{
@@ -55,7 +55,7 @@ SX_LIB_API void SSCore_0Create(const char* name, HWND hwnd, bool is_unic)
 		}
 	}
 	else
-		g_fnReportf(-1, "%s - not init argument [name], sxsound", GEN_MSG_LOCATION);
+		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - not init argument [name]", GEN_MSG_LOCATION);
 }
 
 SX_LIB_API void SSCore_AKill()
diff --git a/source/score/sxscore.h b/source/score/sxscore.h
index 18c2650f5..60bb52183 100644
--- a/source/score/sxscore.h
+++ b/source/score/sxscore.h
@@ -1,8 +1,8 @@
 
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
 /*!
 \file
diff --git a/source/score/sxscore_dll.cpp b/source/score/sxscore_dll.cpp
index 40901c2f9..a34ff74f6 100644
--- a/source/score/sxscore_dll.cpp
+++ b/source/score/sxscore_dll.cpp
@@ -1,10 +1,9 @@
 
-/******************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
-******************************************************/
+***********************************************************/
 
-#pragma once
 #include <windows.h>
 
 BOOL APIENTRY DllMain(HMODULE hModule,
diff --git a/source/skyxengine.cpp b/source/skyxengine.cpp
index 97bf1bf4b..b2e1b62e1 100644
--- a/source/skyxengine.cpp
+++ b/source/skyxengine.cpp
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "SkyXEngine.h"
 
 //##########################################################################
@@ -61,39 +66,71 @@ void SkyXEngine_InitOutLog()
 	}
 }
 
-void SkyXEngine_PrintfLog(int level, const char *szFormat, ...)
+void SkyXEngine_PrintfLog(int iLevel, const char *szLibName, const char *szFormat, ...)
 {
-	va_list va;
+	/*va_list va;
 	char buf[REPORT_MSG_MAX_LEN];
 	va_start(va, szFormat);
 	vsprintf_s(buf, REPORT_MSG_MAX_LEN, szFormat, va);
+	va_end(va);*/
+
+	static char szStr[REPORT_MSG_MAX_LEN];
+	szStr[0] = 0;
+	static char szStr2[REPORT_MSG_MAX_LEN];
+	szStr2[0] = 0;
+	int iStrLen = sizeof(szStr);
+
+	va_list va;
+	va_start(va, szFormat);
+	vsprintf_s(szStr, REPORT_MSG_MAX_LEN, szFormat, va);
 	va_end(va);
 
 	if (g_pFileOutLog)
 	{
-		if (level == REPORT_MSG_LEVEL_ERROR)
+		if (szStr[0] != ' ' && szStr[0] != '\t')
+			sprintf(szStr2, "%s%s%s: ", COLOR_GREEN, szLibName, COLOR_RESET);
+
+		/*if (iLevel == REPORT_MSG_LEVEL_ERROR)
 		{
 			printf(COLOR_LRED "! ");
 			fwrite("! ", 1, 2, g_pFileOutLog);
 		}
-		else if (level == REPORT_MSG_LEVEL_WARNING)
+		else if (iLevel == REPORT_MSG_LEVEL_WARNING)
 		{
 			printf(COLOR_YELLOW "* ");
 			fwrite("* ", 1, 2, g_pFileOutLog);
 		}
 
 		printf(buf);
-		if (level == REPORT_MSG_LEVEL_ERROR || level == REPORT_MSG_LEVEL_WARNING)
+		if (iLevel == REPORT_MSG_LEVEL_ERROR || iLevel == REPORT_MSG_LEVEL_WARNING)
 		{
 			printf(COLOR_RESET);
+		}*/
+
+		if (iLevel == REPORT_MSG_LEVEL_ERROR)
+		{
+			sprintf(szStr2 + strlen(szStr2), "%s", COLOR_LRED);
+		}
+		else if (iLevel == REPORT_MSG_LEVEL_WARNING)
+		{
+			sprintf(szStr2 + strlen(szStr2), "%s", COLOR_YELLOW);
+		}
+
+		sprintf(szStr2 + strlen(szStr2), "%s", szStr);
+
+		if (iLevel == REPORT_MSG_LEVEL_ERROR || iLevel == REPORT_MSG_LEVEL_WARNING)
+		{
+			sprintf(szStr2 + strlen(szStr2), "%s", COLOR_RESET);
 		}
-		fwrite(buf, 1, strlen(buf), g_pFileOutLog);
+
+		printf(szStr2);
+		fwrite(szStr2, 1, strlen(szStr2), g_pFileOutLog);
 		//fprintf(FileOutLog, "\n");
 		fflush(g_pFileOutLog);
 
-		if (level == REPORT_MSG_LEVEL_ERROR)
+		if (iLevel == REPORT_MSG_LEVEL_ERROR)
 		{
-			SkyXEngine_HandlerError(buf);
+			SkyXEngine_HandlerError(szStr2);
 		}
 	}
 }
@@ -513,7 +550,7 @@ void SkyXEngine_Frame(DWORD timeDelta)
 
 	if (!pDXDevice)
 	{
-		SkyXEngine_PrintfLog(REPORT_MSG_LEVEL_ERROR, "dxdevice not found ...");
+		SkyXEngine_PrintfLog(REPORT_MSG_LEVEL_ERROR, "SkyXEngine_Frame", "dxdevice not found ...");
 		return;
 	}
 
@@ -762,7 +799,7 @@ void SkyXEngine_Frame(DWORD timeDelta)
 	DelayUpdateVisibleForLight += TimeGetMcsU(Core_RIntGet(G_RI_INT_TIMER_RENDER)) - ttime;
 
 	ttime = TimeGetMcsU(Core_RIntGet(G_RI_INT_TIMER_RENDER));
-	SPE_EffectVisibleComAll(SRender_GetCamera()->ObjFrustum, &vCamPos);
+	SPE_EffectVisibleComAll(SRender_GetCamera()->getFrustum(), &vCamPos);
 	SPE_EffectComputeAll();
 	SPE_EffectComputeLightingAll();
 	DelayUpdateParticles += TimeGetMcsU(Core_RIntGet(G_RI_INT_TIMER_RENDER)) - ttime;
diff --git a/source/sxae/Camera.cpp b/source/sxae/Camera.cpp
index ab62d2f12..bda3832d5 100644
--- a/source/sxae/Camera.cpp
+++ b/source/sxae/Camera.cpp
@@ -1,3 +1,9 @@
+
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "Camera.h"
 
 Camera::Camera():
diff --git a/source/sxae/Camera.h b/source/sxae/Camera.h
index 197ea65dd..895177795 100644
--- a/source/sxae/Camera.h
+++ b/source/sxae/Camera.h
@@ -1,5 +1,11 @@
-#ifndef CAMERA_H
-#define CAMERA_H
+
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
+#ifndef __CAMERA_H
+#define __CAMERA_H
 
 #include <common/SXMath.h>
 
diff --git a/source/sxae/EMessages.h b/source/sxae/EMessages.h
index e98294649..35514c25b 100644
--- a/source/sxae/EMessages.h
+++ b/source/sxae/EMessages.h
@@ -1,5 +1,11 @@
-#ifndef EMessages_H
-#define EMessages_H
+
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
+#ifndef __EMESSAGES_H
+#define __EMESSAGES_H
 
 #include <Windows.h>
 
diff --git a/source/sxae/Editor.cpp b/source/sxae/Editor.cpp
index 022886836..b624fc6ac 100644
--- a/source/sxae/Editor.cpp
+++ b/source/sxae/Editor.cpp
@@ -1,3 +1,9 @@
+
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "Editor.h"
 
 #include <Commdlg.h>
diff --git a/source/sxae/Editor.h b/source/sxae/Editor.h
index 0d35632ba..af22a8989 100644
--- a/source/sxae/Editor.h
+++ b/source/sxae/Editor.h
@@ -1,5 +1,11 @@
-#ifndef Editor_H
-#define Editor_H
+
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
+#ifndef __EDITOR_H
+#define __EDITOR_H
 
 #define MAINWIN_SIZE_X	1320
 #define MAINWIN_SIZE_Y	730
diff --git a/source/sxae/EditorTab.cpp b/source/sxae/EditorTab.cpp
index 3108af6ed..f06f57d95 100644
--- a/source/sxae/EditorTab.cpp
+++ b/source/sxae/EditorTab.cpp
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "EditorTab.h"
 
 EditorTab::EditorTab(TabManager * tm):
diff --git a/source/sxae/EditorTab.h b/source/sxae/EditorTab.h
index 099d26097..7a0867d13 100644
--- a/source/sxae/EditorTab.h
+++ b/source/sxae/EditorTab.h
@@ -1,5 +1,11 @@
-#ifndef EditorTab_H
-#define EditorTab_H
+
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
+#ifndef __EDITOR_TAB_H
+#define __EDITOR_TAB_H
 
 #include "TabManager.h"
 #include <SXGUIWinApi/sxgui.h>
diff --git a/source/sxae/TabActivities.cpp b/source/sxae/TabActivities.cpp
index 14f35dad1..2c14f5173 100644
--- a/source/sxae/TabActivities.cpp
+++ b/source/sxae/TabActivities.cpp
@@ -1,3 +1,9 @@
+
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "TabActivities.h"
 #include "Tools.h"
 
diff --git a/source/sxae/TabActivities.h b/source/sxae/TabActivities.h
index 5a5e8a034..533cf4931 100644
--- a/source/sxae/TabActivities.h
+++ b/source/sxae/TabActivities.h
@@ -1,5 +1,11 @@
-#ifndef TabActivities_H
-#define TabActivities_H
+
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
+#ifndef __TAB_ACTIVITIES_H
+#define __TAB_ACTIVITIES_H
 
 #include "EditorTab.h"
 #include <anim/animated.h>
diff --git a/source/sxae/TabAnimation.cpp b/source/sxae/TabAnimation.cpp
index 1fdfacf2e..6e81dbe42 100644
--- a/source/sxae/TabAnimation.cpp
+++ b/source/sxae/TabAnimation.cpp
@@ -1,3 +1,9 @@
+
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "TabAnimation.h"
 
 TabAnimation::TabAnimation(TabManager * tm):EditorTab(tm)
diff --git a/source/sxae/TabAnimation.h b/source/sxae/TabAnimation.h
index c586570d7..4c8bf8b9f 100644
--- a/source/sxae/TabAnimation.h
+++ b/source/sxae/TabAnimation.h
@@ -1,5 +1,11 @@
-#ifndef TabAnimation_H
-#define TabAnimation_H
+
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
+#ifndef __TAB_ANIMATION_H
+#define __TAB_ANIMATION_H
 
 #include "EditorTab.h"
 
diff --git a/source/sxae/TabAttachments.cpp b/source/sxae/TabAttachments.cpp
index e80cd0315..dea3e7e8a 100644
--- a/source/sxae/TabAttachments.cpp
+++ b/source/sxae/TabAttachments.cpp
@@ -1,3 +1,9 @@
+
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "TabAttachments.h"
 
 TabAttachments::TabAttachments(TabManager * tm):EditorTab(tm)
diff --git a/source/sxae/TabAttachments.h b/source/sxae/TabAttachments.h
index 8c6893829..4b38e0e89 100644
--- a/source/sxae/TabAttachments.h
+++ b/source/sxae/TabAttachments.h
@@ -1,5 +1,11 @@
-#ifndef TabAttachments_H
-#define TabAttachments_H
+
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
+#ifndef __TAB_ATTACHMENTS_H
+#define __TAB_ATTACHMENTS_H
 
 #include "EditorTab.h"
 
diff --git a/source/sxae/TabControllers.cpp b/source/sxae/TabControllers.cpp
index 7e231b403..9b9db41cb 100644
--- a/source/sxae/TabControllers.cpp
+++ b/source/sxae/TabControllers.cpp
@@ -1,3 +1,9 @@
+
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "TabControllers.h"
 
 TabControllers::TabControllers(TabManager * tm):EditorTab(tm)
diff --git a/source/sxae/TabControllers.h b/source/sxae/TabControllers.h
index 87c9ec49f..c39e20361 100644
--- a/source/sxae/TabControllers.h
+++ b/source/sxae/TabControllers.h
@@ -1,5 +1,11 @@
-#ifndef TabControllers_H
-#define TabControllers_H
+
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
+#ifndef __TAB_CONTROLLERS_H
+#define __TAB_CONTROLLERS_H
 
 #include "EditorTab.h"
 
diff --git a/source/sxae/TabFiles.cpp b/source/sxae/TabFiles.cpp
index 3eec45e5e..c7d81059f 100644
--- a/source/sxae/TabFiles.cpp
+++ b/source/sxae/TabFiles.cpp
@@ -1,3 +1,9 @@
+
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "TabFiles.h"
 
 TabFiles::TabFiles(TabManager * tm):EditorTab(tm)
diff --git a/source/sxae/TabFiles.h b/source/sxae/TabFiles.h
index 11b06cc04..7f91b8aa6 100644
--- a/source/sxae/TabFiles.h
+++ b/source/sxae/TabFiles.h
@@ -1,5 +1,11 @@
-#ifndef TabFiles_H
-#define TabFiles_H
+
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
+#ifndef __TAB_FILES_H
+#define __TAB_FILES_H
 
 #include "EditorTab.h"
 
diff --git a/source/sxae/TabHitboxes.cpp b/source/sxae/TabHitboxes.cpp
index 483952f5e..36742fba6 100644
--- a/source/sxae/TabHitboxes.cpp
+++ b/source/sxae/TabHitboxes.cpp
@@ -1,3 +1,9 @@
+
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "TabHitboxes.h"
 #include <anim/ModelFile.h>
 
diff --git a/source/sxae/TabHitboxes.h b/source/sxae/TabHitboxes.h
index edb55fd70..e62bc8406 100644
--- a/source/sxae/TabHitboxes.h
+++ b/source/sxae/TabHitboxes.h
@@ -1,5 +1,11 @@
-#ifndef TabHitboxes_H
-#define TabHitboxes_H
+
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
+#ifndef __TAB_HITBOXES_H
+#define __TAB_HITBOXES_H
 
 #include "EditorTab.h"
 
diff --git a/source/sxae/TabManager.cpp b/source/sxae/TabManager.cpp
index 854b0486f..f4fb71bd5 100644
--- a/source/sxae/TabManager.cpp
+++ b/source/sxae/TabManager.cpp
@@ -1,3 +1,9 @@
+
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "TabManager.h"
 
 #include "TabAttachments.h"
diff --git a/source/sxae/TabManager.h b/source/sxae/TabManager.h
index ad081be7b..aa2a181ec 100644
--- a/source/sxae/TabManager.h
+++ b/source/sxae/TabManager.h
@@ -1,5 +1,11 @@
-#ifndef TabManager_H
-#define TabManager_H
+
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
+#ifndef __TAB_MANAGER_H
+#define __TAB_MANAGER_H
 
 class EditorTab;
 struct ISXGUIBaseWnd;
diff --git a/source/sxae/TabSkins.cpp b/source/sxae/TabSkins.cpp
index 909ac472e..adce7dc62 100644
--- a/source/sxae/TabSkins.cpp
+++ b/source/sxae/TabSkins.cpp
@@ -1,3 +1,9 @@
+
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "TabSkins.h"
 
 TabSkins::TabSkins(TabManager * tm):EditorTab(tm)
diff --git a/source/sxae/TabSkins.h b/source/sxae/TabSkins.h
index 525ab5022..d014dab21 100644
--- a/source/sxae/TabSkins.h
+++ b/source/sxae/TabSkins.h
@@ -1,5 +1,11 @@
-#ifndef TabSkins_H
-#define TabSkins_H
+
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
+#ifndef __TAB_SKINS_H
+#define __TAB_SKINS_H
 
 #include "EditorTab.h"
 
diff --git a/source/sxae/Tools.cpp b/source/sxae/Tools.cpp
index f77748f40..a8f2b91a0 100644
--- a/source/sxae/Tools.cpp
+++ b/source/sxae/Tools.cpp
@@ -1,3 +1,9 @@
+
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "Tools.h"
 
 #include <windows.h>
diff --git a/source/sxae/Tools.h b/source/sxae/Tools.h
index 532ec9f6e..4bcd416a9 100644
--- a/source/sxae/Tools.h
+++ b/source/sxae/Tools.h
@@ -1,5 +1,11 @@
-#ifndef Tools_H
-#define Tools_H
+
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
+#ifndef __TOOLS_H
+#define __TOOLS_H
 
 #include <Windows.h>
 
diff --git a/source/sxae/main.cpp b/source/sxae/main.cpp
index 787d074c7..b66a0be94 100644
--- a/source/sxae/main.cpp
+++ b/source/sxae/main.cpp
@@ -1,4 +1,9 @@
 
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 //#define WIN32_LEAN_AND_MEAN
 #include <Windows.h>
 
diff --git a/source/sxae/ui.cpp b/source/sxae/ui.cpp
index 1bb57846b..5a9ced1aa 100644
--- a/source/sxae/ui.cpp
+++ b/source/sxae/ui.cpp
@@ -1,3 +1,9 @@
+
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 //include the header file and the lib file
 
 #include <SXGUIWinApi/sxguielements.h>
diff --git a/source/sxconsole/ColorPrint.cpp b/source/sxconsole/ColorPrint.cpp
index b1c775c7a..c0cf50734 100644
--- a/source/sxconsole/ColorPrint.cpp
+++ b/source/sxconsole/ColorPrint.cpp
@@ -1,3 +1,9 @@
+
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include "ColorPrint.h"
 
 
diff --git a/source/sxconsole/ColorPrint.h b/source/sxconsole/ColorPrint.h
index bc5e0f7dc..32864f68e 100644
--- a/source/sxconsole/ColorPrint.h
+++ b/source/sxconsole/ColorPrint.h
@@ -1,5 +1,11 @@
-#ifndef _ColorPrint_H_
-#define _ColorPrint_H_
+
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
+#ifndef __COLOR_PRINT_H
+#define __COLOR_PRINT_H
 
 #include <windows.h> 
 
diff --git a/source/sxconsole/sxconsole.cpp b/source/sxconsole/sxconsole.cpp
index 7f4956198..61c8b6670 100644
--- a/source/sxconsole/sxconsole.cpp
+++ b/source/sxconsole/sxconsole.cpp
@@ -1,3 +1,9 @@
+
+/***********************************************************
+Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+See the license in LICENSE
+***********************************************************/
+
 #include <stdio.h>
 #include <stdlib.h>
 
-- 
GitLab