From f8ae78762c6ebb55a0e561c8ec38bfd7806d793f Mon Sep 17 00:00:00 2001
From: D-AIRY <admin@ds-servers.com>
Date: Sun, 13 Dec 2020 02:48:18 +0300
Subject: [PATCH] Removed obsolete sxscore

---
 build/gamesource/config/entities/classes.ent  |   12 +-
 build/gamesource/config/entities/defaults.ent |    2 +-
 proj/SkyXEngine/vs2013/SkyXEngine.sln         |   94 +-
 proj/sxscore/vs2013/sxscore.vcxproj           |  199 --
 proj/sxscore/vs2013/sxscore.vcxproj.filters   |   57 -
 source/game/BaseEntity.h                      |    2 +-
 source/game/BaseTool.cpp                      |   45 +-
 source/game/BaseTool.h                        |    4 +-
 source/game/BaseWeapon.cpp                    |   94 +-
 source/game/BaseWeapon.h                      |   27 +-
 source/game/GameData.cpp                      |    1 -
 source/game/GameStates.cpp                    |   15 +-
 source/game/NPCZombie.cpp                     |   25 +-
 source/game/NPCZombie.h                       |    6 +-
 source/game/PropBreakable.cpp                 |   22 +-
 source/game/PropBreakable.h                   |    9 +-
 source/game/PropDoor.cpp                      |   58 +-
 source/game/PropDoor.h                        |   16 +-
 source/game/SoundPlayer.h                     |    1 -
 source/game/ZombieHands.cpp                   |   10 +-
 source/game/proptable.cpp                     |    1 +
 source/gdefines.h                             |    2 +
 source/score/CallBackOgg.cpp                  |   43 -
 source/score/sound.cpp                        | 1805 -----------------
 source/score/sound.h                          |  639 ------
 source/score/sxscore.cpp                      |  548 -----
 source/score/sxscore.h                        |  507 -----
 source/score/sxscore_dll.cpp                  |   24 -
 28 files changed, 226 insertions(+), 4042 deletions(-)
 delete mode 100644 proj/sxscore/vs2013/sxscore.vcxproj
 delete mode 100644 proj/sxscore/vs2013/sxscore.vcxproj.filters
 delete mode 100644 source/score/CallBackOgg.cpp
 delete mode 100644 source/score/sound.cpp
 delete mode 100644 source/score/sound.h
 delete mode 100644 source/score/sxscore.cpp
 delete mode 100644 source/score/sxscore.h
 delete mode 100644 source/score/sxscore_dll.cpp

diff --git a/build/gamesource/config/entities/classes.ent b/build/gamesource/config/entities/classes.ent
index 1db9d18a7..8ac055b8a 100644
--- a/build/gamesource/config/entities/classes.ent
+++ b/build/gamesource/config/entities/classes.ent
@@ -99,12 +99,12 @@ rifle_step = 200 ; шаг нарезки, мм
 
 
 ; звуки
-snd_draw         = "wpn/ak74_draw.ogg" ; Достать
-snd_holster      = "wpn/generic_holster.ogg" ; Убрать
-snd_shoot        = "wpn/ak74_shoot2.ogg" ; Стрелять
-snd_empty        = "wpn/gen_empty.ogg" ; Пустой
-snd_reload       = "wpn/ak74_reload.ogg" ; Перезарядка
-snd_switch       = "wpn/generic_close.ogg" ; Переключение режима
+snd_draw         = "sounds/wpn/ak74_draw.ogg" ; Достать
+snd_holster      = "sounds/wpn/generic_holster.ogg" ; Убрать
+snd_shoot        = "sounds/wpn/ak74_shoot2.ogg" ; Стрелять
+snd_empty        = "sounds/wpn/gen_empty.ogg" ; Пустой
+snd_reload       = "sounds/wpn/ak74_reload.ogg" ; Перезарядка
+snd_switch       = "sounds/wpn/generic_close.ogg" ; Переключение режима
 
 ;прочность
 durability_max = 350000
diff --git a/build/gamesource/config/entities/defaults.ent b/build/gamesource/config/entities/defaults.ent
index 9e849bedb..f6fc7afaf 100644
--- a/build/gamesource/config/entities/defaults.ent
+++ b/build/gamesource/config/entities/defaults.ent
@@ -23,7 +23,7 @@ effective_distance = 2
 spread_base       	= 10    ;угол (в градусах) базовой дисперсии оружия (оружия, зажатого в тисках)
 
 ; звуки
-snd_shoot        = "mobs/zombie/zombie_attack_1.ogg" ; Стрелять
+snd_shoot        = "sounds/mobs/zombie/zombie_attack_1.ogg" ; Стрелять
 
 damage = 100
 
diff --git a/proj/SkyXEngine/vs2013/SkyXEngine.sln b/proj/SkyXEngine/vs2013/SkyXEngine.sln
index ab3233bdb..c7ad64771 100644
--- a/proj/SkyXEngine/vs2013/SkyXEngine.sln
+++ b/proj/SkyXEngine/vs2013/SkyXEngine.sln
@@ -1,7 +1,7 @@
 
 Microsoft Visual Studio Solution File, Format Version 12.00
 # Visual Studio 2013
-VisualStudioVersion = 12.0.21005.1
+VisualStudioVersion = 12.0.40629.0
 MinimumVisualStudioVersion = 10.0.40219.1
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SkyXEngine", "SkyXEngine.vcxproj", "{97D8EE94-0A6D-47F2-BE01-63F7C89715BC}"
 	ProjectSection(ProjectDependencies) = postProject
@@ -20,7 +20,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SkyXEngine", "SkyXEngine.vc
 		{5145958A-F75F-4F6D-9793-7384B616CF76} = {5145958A-F75F-4F6D-9793-7384B616CF76}
 		{3A5449A3-DCE7-4557-9C9F-DEEAFBAAC763} = {3A5449A3-DCE7-4557-9C9F-DEEAFBAAC763}
 		{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}
@@ -72,7 +71,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sxae", "..\..\sxae\vs2013\s
 		{2B3BA583-D5EC-4DC2-91CF-42B1C7ADFD9D} = {2B3BA583-D5EC-4DC2-91CF-42B1C7ADFD9D}
 		{3A5449A3-DCE7-4557-9C9F-DEEAFBAAC763} = {3A5449A3-DCE7-4557-9C9F-DEEAFBAAC763}
 		{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}
@@ -109,7 +107,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sxleveleditor", "..\..\sxle
 		{97D8EE94-0A6D-47F2-BE01-63F7C89715BC} = {97D8EE94-0A6D-47F2-BE01-63F7C89715BC}
 		{3A5449A3-DCE7-4557-9C9F-DEEAFBAAC763} = {3A5449A3-DCE7-4557-9C9F-DEEAFBAAC763}
 		{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}
@@ -131,7 +128,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sxmaterialeditor", "..\..\s
 		{2B3BA583-D5EC-4DC2-91CF-42B1C7ADFD9D} = {2B3BA583-D5EC-4DC2-91CF-42B1C7ADFD9D}
 		{3A5449A3-DCE7-4557-9C9F-DEEAFBAAC763} = {3A5449A3-DCE7-4557-9C9F-DEEAFBAAC763}
 		{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}
@@ -173,11 +169,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sxparticles", "..\..\sxpart
 		{AEECC2DB-C7C7-4089-9262-A69794DF834D} = {AEECC2DB-C7C7-4089-9262-A69794DF834D}
 	EndProjectSection
 EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sxscore", "..\..\sxscore\vs2013\sxscore.vcxproj", "{120D29B8-D2D9-4B4E-8AC6-D951973B7398}"
-	ProjectSection(ProjectDependencies) = postProject
-		{C1C1F046-C839-4602-AF70-923CDD237C1B} = {C1C1F046-C839-4602-AF70-923CDD237C1B}
-	EndProjectSection
-EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sxgame", "..\..\sxgame\vs2013\sxgame.vcxproj", "{718C186E-9155-41DF-B8AB-74ED03E204CD}"
 	ProjectSection(ProjectDependencies) = postProject
 		{7C0C8205-BDD3-44A3-AA3A-7855C7EFC88E} = {7C0C8205-BDD3-44A3-AA3A-7855C7EFC88E}
@@ -187,7 +178,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sxgame", "..\..\sxgame\vs20
 		{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}
 		{AEECC2DB-C7C7-4089-9262-A69794DF834D} = {AEECC2DB-C7C7-4089-9262-A69794DF834D}
 		{56A8D7F7-B73C-4206-8038-83D8A169AA2F} = {56A8D7F7-B73C-4206-8038-83D8A169AA2F}
 		{8144D5F8-07D0-4663-AAAE-11053614FAC5} = {8144D5F8-07D0-4663-AAAE-11053614FAC5}
@@ -216,7 +206,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sxparticleseditor", "..\..\
 		{2B3BA583-D5EC-4DC2-91CF-42B1C7ADFD9D} = {2B3BA583-D5EC-4DC2-91CF-42B1C7ADFD9D}
 		{3A5449A3-DCE7-4557-9C9F-DEEAFBAAC763} = {3A5449A3-DCE7-4557-9C9F-DEEAFBAAC763}
 		{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}
@@ -260,7 +249,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sxgenpreview", "..\..\sxgen
 		{2B3BA583-D5EC-4DC2-91CF-42B1C7ADFD9D} = {2B3BA583-D5EC-4DC2-91CF-42B1C7ADFD9D}
 		{3A5449A3-DCE7-4557-9C9F-DEEAFBAAC763} = {3A5449A3-DCE7-4557-9C9F-DEEAFBAAC763}
 		{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}
@@ -337,7 +325,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xEngine", "..\..\xEngine\vs
 		{FE640066-C8E8-41FB-AD13-89BC03BFFBFB} = {FE640066-C8E8-41FB-AD13-89BC03BFFBFB}
 		{718C186E-9155-41DF-B8AB-74ED03E204CD} = {718C186E-9155-41DF-B8AB-74ED03E204CD}
 		{3A5449A3-DCE7-4557-9C9F-DEEAFBAAC763} = {3A5449A3-DCE7-4557-9C9F-DEEAFBAAC763}
-		{120D29B8-D2D9-4B4E-8AC6-D951973B7398} = {120D29B8-D2D9-4B4E-8AC6-D951973B7398}
 		{7F0ACED1-6E16-4DD3-800E-0C50150897C2} = {7F0ACED1-6E16-4DD3-800E-0C50150897C2}
 		{AEECC2DB-C7C7-4089-9262-A69794DF834D} = {AEECC2DB-C7C7-4089-9262-A69794DF834D}
 		{8144D5F8-07D0-4663-AAAE-11053614FAC5} = {8144D5F8-07D0-4663-AAAE-11053614FAC5}
@@ -524,10 +511,6 @@ Global
 		{56A8D7F7-B73C-4206-8038-83D8A169AA2F}.Debug|x64.ActiveCfg = Debug|x64
 		{56A8D7F7-B73C-4206-8038-83D8A169AA2F}.Release|Win32.ActiveCfg = Release|Win32
 		{56A8D7F7-B73C-4206-8038-83D8A169AA2F}.Release|x64.ActiveCfg = Release|x64
-		{120D29B8-D2D9-4B4E-8AC6-D951973B7398}.Debug|Win32.ActiveCfg = Debug|Win32
-		{120D29B8-D2D9-4B4E-8AC6-D951973B7398}.Debug|x64.ActiveCfg = Debug|x64
-		{120D29B8-D2D9-4B4E-8AC6-D951973B7398}.Release|Win32.ActiveCfg = Release|Win32
-		{120D29B8-D2D9-4B4E-8AC6-D951973B7398}.Release|x64.ActiveCfg = Release|x64
 		{718C186E-9155-41DF-B8AB-74ED03E204CD}.Debug|Win32.ActiveCfg = Debug|Win32
 		{718C186E-9155-41DF-B8AB-74ED03E204CD}.Debug|Win32.Build.0 = Debug|Win32
 		{718C186E-9155-41DF-B8AB-74ED03E204CD}.Debug|x64.ActiveCfg = Debug|x64
@@ -763,70 +746,69 @@ Global
 		HideSolutionNode = FALSE
 	EndGlobalSection
 	GlobalSection(NestedProjects) = preSolution
-		{74D74409-BAC7-4DD0-8C74-117516B4A01C} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
-		{E6B16854-D4A4-4B56-8E1C-482DD523F205} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
-		{BA779DCC-93C8-4FB7-BBB9-A7D2F76C35DE} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
-		{0292BE32-298E-4E18-BC42-5A39F9487EBA} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
-		{6376944C-E417-43FD-8B56-073A310EB7D9} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
-		{56A8D7F7-B73C-4206-8038-83D8A169AA2F} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
-		{120D29B8-D2D9-4B4E-8AC6-D951973B7398} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
-		{B9656841-7734-4D0B-8619-1BED5E2ED7AE} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
-		{6A402480-C09B-4CBF-A6BD-115CE4BFF2D8} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
-		{2D039A6D-B874-4AA7-8F89-E86DD70B21ED} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
-		{236F4A16-78D8-42E4-86C0-30265CA2D84D} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
-		{8C9E1225-F0B3-403E-AB88-3372E67DE173} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
-		{C3CAABF6-9239-4133-86E3-44DF79A67AF6} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
+		{C1C1F046-C839-4602-AF70-923CDD237C1B} = {74D74409-BAC7-4DD0-8C74-117516B4A01C}
 		{AEECC2DB-C7C7-4089-9262-A69794DF834D} = {74D74409-BAC7-4DD0-8C74-117516B4A01C}
+		{0C7E3DB7-005F-41E9-A570-868BCF959E91} = {4408F4BE-1F9D-4861-881A-AF9869C3D663}
 		{3A5449A3-DCE7-4557-9C9F-DEEAFBAAC763} = {74D74409-BAC7-4DD0-8C74-117516B4A01C}
-		{7C0C8205-BDD3-44A3-AA3A-7855C7EFC88E} = {74D74409-BAC7-4DD0-8C74-117516B4A01C}
-		{718C186E-9155-41DF-B8AB-74ED03E204CD} = {74D74409-BAC7-4DD0-8C74-117516B4A01C}
-		{7F0ACED1-6E16-4DD3-800E-0C50150897C2} = {74D74409-BAC7-4DD0-8C74-117516B4A01C}
-		{8AA0585B-D6E4-46B4-9183-3BACD5B9D47F} = {74D74409-BAC7-4DD0-8C74-117516B4A01C}
-		{8144D5F8-07D0-4663-AAAE-11053614FAC5} = {74D74409-BAC7-4DD0-8C74-117516B4A01C}
-		{16D78A7B-8EE9-4FD3-84C9-B71D8723E718} = {74D74409-BAC7-4DD0-8C74-117516B4A01C}
-		{D2386C4E-7032-487B-8EAD-951778AD6EBC} = {74D74409-BAC7-4DD0-8C74-117516B4A01C}
-		{C1C1F046-C839-4602-AF70-923CDD237C1B} = {74D74409-BAC7-4DD0-8C74-117516B4A01C}
-		{A1C76785-6ED9-4246-89C0-3AB0D603894F} = {74D74409-BAC7-4DD0-8C74-117516B4A01C}
-		{4408F4BE-1F9D-4861-881A-AF9869C3D663} = {E6B16854-D4A4-4B56-8E1C-482DD523F205}
-		{7C1F0E50-7A19-4AB4-B559-11EF078F4787} = {E6B16854-D4A4-4B56-8E1C-482DD523F205}
-		{6FE14C5C-6052-4D96-A89F-0843D91F89AD} = {E6B16854-D4A4-4B56-8E1C-482DD523F205}
-		{349DE810-592A-42AF-9440-A0B3F46A9229} = {E6B16854-D4A4-4B56-8E1C-482DD523F205}
+		{BA779DCC-93C8-4FB7-BBB9-A7D2F76C35DE} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
+		{0292BE32-298E-4E18-BC42-5A39F9487EBA} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
 		{6A3341BF-710B-4310-A7F8-810040D698DC} = {5128FBE9-1706-4255-B422-4A652320085E}
+		{709D8A7A-D3E0-4070-A493-EFDF7A8E9D73} = {4408F4BE-1F9D-4861-881A-AF9869C3D663}
 		{AFBF200A-9260-4469-AE64-DCB42C796DD6} = {5128FBE9-1706-4255-B422-4A652320085E}
 		{A2B9EACA-69C1-4E9D-AF3C-704608DB57DE} = {5128FBE9-1706-4255-B422-4A652320085E}
 		{9C34362D-7FA6-4BD1-A48B-8FDE541344B0} = {5128FBE9-1706-4255-B422-4A652320085E}
 		{CEFD4247-0B36-4268-B455-C1E826173005} = {5128FBE9-1706-4255-B422-4A652320085E}
-		{B66C63CA-62E0-472F-9D24-070CAC7C8B12} = {5128FBE9-1706-4255-B422-4A652320085E}
-		{D381001E-C1FF-415F-A269-5264AD9013D5} = {5128FBE9-1706-4255-B422-4A652320085E}
-		{A1AC0163-A56A-416D-AFA0-19F7DFBE9F64} = {5128FBE9-1706-4255-B422-4A652320085E}
-		{2B3BA583-D5EC-4DC2-91CF-42B1C7ADFD9D} = {4408F4BE-1F9D-4861-881A-AF9869C3D663}
-		{0C7E3DB7-005F-41E9-A570-868BCF959E91} = {4408F4BE-1F9D-4861-881A-AF9869C3D663}
-		{709D8A7A-D3E0-4070-A493-EFDF7A8E9D73} = {4408F4BE-1F9D-4861-881A-AF9869C3D663}
-		{AE74C93F-2FD3-462D-8E98-B3F3198B9104} = {4408F4BE-1F9D-4861-881A-AF9869C3D663}
-		{3B9DBCFA-CFB6-459D-BE24-2EECB2E3042C} = {4408F4BE-1F9D-4861-881A-AF9869C3D663}
+		{6376944C-E417-43FD-8B56-073A310EB7D9} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
 		{A57B87BE-C63D-C64F-A06E-C48B4723C51A} = {6376944C-E417-43FD-8B56-073A310EB7D9}
 		{EF2EC91D-F2A6-BD43-89AC-8054F3D5EECA} = {6376944C-E417-43FD-8B56-073A310EB7D9}
 		{D6ECE531-C294-BC42-8C32-6F09F1240325} = {6376944C-E417-43FD-8B56-073A310EB7D9}
 		{60A46FEB-576C-7B40-A047-D6079D9D66C4} = {6376944C-E417-43FD-8B56-073A310EB7D9}
+		{7C0C8205-BDD3-44A3-AA3A-7855C7EFC88E} = {74D74409-BAC7-4DD0-8C74-117516B4A01C}
 		{072A60D2-317A-CC41-AD12-7E381235064A} = {6376944C-E417-43FD-8B56-073A310EB7D9}
 		{46A17C83-2972-4C41-B67F-224640089085} = {6376944C-E417-43FD-8B56-073A310EB7D9}
 		{E74F00B5-7DC5-DC48-8E91-D1C2296F455F} = {6376944C-E417-43FD-8B56-073A310EB7D9}
+		{56A8D7F7-B73C-4206-8038-83D8A169AA2F} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
+		{718C186E-9155-41DF-B8AB-74ED03E204CD} = {74D74409-BAC7-4DD0-8C74-117516B4A01C}
+		{B9656841-7734-4D0B-8619-1BED5E2ED7AE} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
+		{B66C63CA-62E0-472F-9D24-070CAC7C8B12} = {5128FBE9-1706-4255-B422-4A652320085E}
 		{F2DD3789-7BC9-D241-8C8D-2179933B30DD} = {6376944C-E417-43FD-8B56-073A310EB7D9}
 		{ED53EB62-C809-1649-A203-948AF1412B4C} = {6376944C-E417-43FD-8B56-073A310EB7D9}
+		{6A402480-C09B-4CBF-A6BD-115CE4BFF2D8} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
+		{7F0ACED1-6E16-4DD3-800E-0C50150897C2} = {74D74409-BAC7-4DD0-8C74-117516B4A01C}
+		{D381001E-C1FF-415F-A269-5264AD9013D5} = {5128FBE9-1706-4255-B422-4A652320085E}
+		{8AA0585B-D6E4-46B4-9183-3BACD5B9D47F} = {74D74409-BAC7-4DD0-8C74-117516B4A01C}
+		{2D039A6D-B874-4AA7-8F89-E86DD70B21ED} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
 		{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B} = {2D039A6D-B874-4AA7-8F89-E86DD70B21ED}
+		{8144D5F8-07D0-4663-AAAE-11053614FAC5} = {74D74409-BAC7-4DD0-8C74-117516B4A01C}
+		{2B3BA583-D5EC-4DC2-91CF-42B1C7ADFD9D} = {4408F4BE-1F9D-4861-881A-AF9869C3D663}
+		{236F4A16-78D8-42E4-86C0-30265CA2D84D} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
+		{8C9E1225-F0B3-403E-AB88-3372E67DE173} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
 		{9117FCDB-957B-4FF8-8AD4-90965159B721} = {8C9E1225-F0B3-403E-AB88-3372E67DE173}
 		{15AD3AF2-47B1-4836-9777-F1249EB299A7} = {8C9E1225-F0B3-403E-AB88-3372E67DE173}
 		{DAFA20F5-5162-4F21-99AF-DB8084D3C557} = {8C9E1225-F0B3-403E-AB88-3372E67DE173}
+		{A1AC0163-A56A-416D-AFA0-19F7DFBE9F64} = {5128FBE9-1706-4255-B422-4A652320085E}
+		{E6B16854-D4A4-4B56-8E1C-482DD523F205} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
+		{7C1F0E50-7A19-4AB4-B559-11EF078F4787} = {E6B16854-D4A4-4B56-8E1C-482DD523F205}
 		{5145958A-F75F-4F6D-9793-7384B616CF76} = {7C1F0E50-7A19-4AB4-B559-11EF078F4787}
+		{F0BA654B-EFF1-4F48-8ED5-4B1AA6888687} = {C3CAABF6-9239-4133-86E3-44DF79A67AF6}
+		{C3CAABF6-9239-4133-86E3-44DF79A67AF6} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
+		{4408F4BE-1F9D-4861-881A-AF9869C3D663} = {E6B16854-D4A4-4B56-8E1C-482DD523F205}
+		{16D78A7B-8EE9-4FD3-84C9-B71D8723E718} = {74D74409-BAC7-4DD0-8C74-117516B4A01C}
+		{D2386C4E-7032-487B-8EAD-951778AD6EBC} = {74D74409-BAC7-4DD0-8C74-117516B4A01C}
+		{74D74409-BAC7-4DD0-8C74-117516B4A01C} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
+		{6FE14C5C-6052-4D96-A89F-0843D91F89AD} = {E6B16854-D4A4-4B56-8E1C-482DD523F205}
 		{FE640066-C8E8-41FB-AD13-89BC03BFFBFB} = {7C1F0E50-7A19-4AB4-B559-11EF078F4787}
+		{AE74C93F-2FD3-462D-8E98-B3F3198B9104} = {4408F4BE-1F9D-4861-881A-AF9869C3D663}
+		{A1C76785-6ED9-4246-89C0-3AB0D603894F} = {74D74409-BAC7-4DD0-8C74-117516B4A01C}
 		{602837DA-C6C8-4D51-97A1-770224A52693} = {7C1F0E50-7A19-4AB4-B559-11EF078F4787}
-		{3DB7AC42-6141-417D-B2E6-7D62F08A2246} = {7C1F0E50-7A19-4AB4-B559-11EF078F4787}
-		{1D304E26-D5EC-4AA6-B41A-2246FC359112} = {7C1F0E50-7A19-4AB4-B559-11EF078F4787}
-		{F0BA654B-EFF1-4F48-8ED5-4B1AA6888687} = {C3CAABF6-9239-4133-86E3-44DF79A67AF6}
 		{02E4C411-4802-4522-A2D6-00094A4CD14B} = {602837DA-C6C8-4D51-97A1-770224A52693}
 		{F926F7FA-099E-499C-ABC9-743BCAB919C4} = {602837DA-C6C8-4D51-97A1-770224A52693}
-		{8D0540EE-F8A5-44AB-8023-AD75251167E4} = {3B9DBCFA-CFB6-459D-BE24-2EECB2E3042C}
+		{3DB7AC42-6141-417D-B2E6-7D62F08A2246} = {7C1F0E50-7A19-4AB4-B559-11EF078F4787}
 		{4A77FC81-98F6-4ABF-A489-B6F427354E5B} = {3B9DBCFA-CFB6-459D-BE24-2EECB2E3042C}
+		{8D0540EE-F8A5-44AB-8023-AD75251167E4} = {3B9DBCFA-CFB6-459D-BE24-2EECB2E3042C}
+		{3B9DBCFA-CFB6-459D-BE24-2EECB2E3042C} = {4408F4BE-1F9D-4861-881A-AF9869C3D663}
+		{1D304E26-D5EC-4AA6-B41A-2246FC359112} = {7C1F0E50-7A19-4AB4-B559-11EF078F4787}
+		{349DE810-592A-42AF-9440-A0B3F46A9229} = {E6B16854-D4A4-4B56-8E1C-482DD523F205}
 		{BE42C295-1262-4499-9CD8-7C3B0044EC3D} = {198BBFFF-2183-41F4-9453-BEB12B0C37F5}
 	EndGlobalSection
 EndGlobal
diff --git a/proj/sxscore/vs2013/sxscore.vcxproj b/proj/sxscore/vs2013/sxscore.vcxproj
deleted file mode 100644
index 3f8af6b3a..000000000
--- a/proj/sxscore/vs2013/sxscore.vcxproj
+++ /dev/null
@@ -1,199 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|x64">
-      <Configuration>Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\..\source\common\file_utils.cpp" />
-    <ClCompile Include="..\..\..\source\common\string.cpp" />
-    <ClCompile Include="..\..\..\source\common\string_utils.cpp" />
-    <ClCompile Include="..\..\..\source\score\sound.cpp" />
-    <ClCompile Include="..\..\..\source\score\sxscore.cpp" />
-    <ClCompile Include="..\..\..\source\score\sxscore_dll.cpp" />
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="..\..\..\source\common\array.h" />
-    <ClInclude Include="..\..\..\source\common\file_utils.h" />
-    <ClInclude Include="..\..\..\source\common\string.h" />
-    <ClInclude Include="..\..\..\source\common\string_utils.h" />
-    <ClInclude Include="..\..\..\source\score\sound.h" />
-    <ClInclude Include="..\..\..\source\score\sxscore.h" />
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{120D29B8-D2D9-4B4E-8AC6-D951973B7398}</ProjectGuid>
-    <Keyword>Win32Proj</Keyword>
-    <RootNamespace>sxscore</RootNamespace>
-    <ProjectName>sxscore</ProjectName>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>DynamicLibrary</ConfigurationType>
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <PlatformToolset>v120_xp</PlatformToolset>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
-    <ConfigurationType>DynamicLibrary</ConfigurationType>
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <PlatformToolset>v120_xp</PlatformToolset>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>DynamicLibrary</ConfigurationType>
-    <UseDebugLibraries>false</UseDebugLibraries>
-    <PlatformToolset>v120_xp</PlatformToolset>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
-    <ConfigurationType>DynamicLibrary</ConfigurationType>
-    <UseDebugLibraries>false</UseDebugLibraries>
-    <PlatformToolset>v120_xp</PlatformToolset>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <LinkIncremental>false</LinkIncremental>
-    <OutDir>../../../build/bin/</OutDir>
-    <TargetName>$(ProjectName)_d</TargetName>
-    <IncludePath>../../../sdks/ogg/libogg/include/;../../../sdks/ogg/libvorbis/include/;../../../source;$(VC_IncludePath);$(WindowsSDK_IncludePath);../../../sdks/dx9sdk/Include</IncludePath>
-    <LibraryPath>../../../libs;$(LibraryPath);$(WindowsSDK_LibraryPath_x86);../../../sdks/dx9sdk/Lib</LibraryPath>
-    <SourcePath>../../../sdks/ogg/libogg/include/;../../../sdks/ogg/libvorbis/include/;../../../source;$(VC_IncludePath);$(WindowsSDK_IncludePath);../../../sdks/dx9sdk/Include</SourcePath>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <TargetName>$(ProjectName)_d</TargetName>
-    <IncludePath>../../../sdks/ogg/libogg/include/;../../../sdks/ogg/libvorbis/include/;../../../source;$(VC_IncludePath);$(WindowsSDK_IncludePath);../../../sdks/dx9sdk/Include</IncludePath>
-    <LibraryPath>../../../libs64;$(LibraryPath);$(WindowsSDK_LibraryPath_x64);../../../sdks/dx9sdk/Lib</LibraryPath>
-    <SourcePath>../../../sdks/ogg/libogg/include/;../../../sdks/ogg/libvorbis/include/;../../../source;$(VC_IncludePath);$(WindowsSDK_IncludePath);../../../sdks/dx9sdk/Include</SourcePath>
-    <LinkIncremental>false</LinkIncremental>
-    <OutDir>../../../build/bin64/</OutDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <LinkIncremental>false</LinkIncremental>
-    <OutDir>../../../build/bin/</OutDir>
-    <IncludePath>../../../sdks/ogg/libogg/include/;../../../sdks/ogg/libvorbis/include/;../../../source;$(VC_IncludePath);$(WindowsSDK_IncludePath);../../../sdks/dx9sdk/Include</IncludePath>
-    <LibraryPath>../../../libs;$(LibraryPath);$(WindowsSDK_LibraryPath_x86);../../../sdks/dx9sdk/Lib</LibraryPath>
-    <SourcePath>../../../sdks/ogg/libogg/include/;../../../sdks/ogg/libvorbis/include/;../../../source;$(VC_IncludePath);$(WindowsSDK_IncludePath);../../../sdks/dx9sdk/Include</SourcePath>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <IncludePath>../../../sdks/ogg/libogg/include/;../../../sdks/ogg/libvorbis/include/;../../../source;$(VC_IncludePath);$(WindowsSDK_IncludePath);../../../sdks/dx9sdk/Include</IncludePath>
-    <LibraryPath>../../../libs64;$(LibraryPath);$(WindowsSDK_LibraryPath_x64);../../../sdks/dx9sdk/Lib</LibraryPath>
-    <SourcePath>../../../sdks/ogg/libogg/include/;../../../sdks/ogg/libvorbis/include/;../../../source;$(VC_IncludePath);$(WindowsSDK_IncludePath);../../../sdks/dx9sdk/Include</SourcePath>
-    <LinkIncremental>false</LinkIncremental>
-    <OutDir>../../../build/bin64/</OutDir>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <Optimization>Disabled</Optimization>
-      <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>
-      <TreatSpecificWarningsAsErrors>4316</TreatSpecificWarningsAsErrors>
-    </ClCompile>
-    <Link>
-      <SubSystem>Windows</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(ProjectDir)../../../pdb/$(TargetName).pdb</ProgramDatabaseFile>
-      <ImportLibrary>../../../libs/$(TargetName).lib</ImportLibrary>
-      <Profile>true</Profile>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <ClCompile>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN64;_CRT_SECURE_NO_WARNINGS;_DEBUG;_WINDOWS;_USRDLL;SXSCORE_EXPORTS;SX_DLL;%(PreprocessorDefinitions);SX_LIB_NAME="SCORE"</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <TreatSpecificWarningsAsErrors>4316</TreatSpecificWarningsAsErrors>
-    </ClCompile>
-    <Link>
-      <SubSystem>Windows</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(ProjectDir)../../../pdb64/$(TargetName).pdb</ProgramDatabaseFile>
-      <ImportLibrary>../../../libs64/$(TargetName).lib</ImportLibrary>
-      <Profile>true</Profile>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <WarningLevel>Level1</WarningLevel>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <Optimization>MaxSpeed</Optimization>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>WIN32;_CRT_SECURE_NO_WARNINGS;NDEBUG;_WINDOWS;_USRDLL;SXSCORE_EXPORTS;SX_DLL;%(PreprocessorDefinitions);SX_LIB_NAME="SCORE"</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
-      <TreatSpecificWarningsAsErrors>4316</TreatSpecificWarningsAsErrors>
-    </ClCompile>
-    <Link>
-      <SubSystem>Windows</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <OptimizeReferences>true</OptimizeReferences>
-      <ProgramDatabaseFile>$(ProjectDir)../../../pdb/$(TargetName).pdb</ProgramDatabaseFile>
-      <ImportLibrary>../../../libs/$(TargetName).lib</ImportLibrary>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <ClCompile>
-      <WarningLevel>Level1</WarningLevel>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <Optimization>MaxSpeed</Optimization>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>WIN64;_CRT_SECURE_NO_WARNINGS;NDEBUG;_WINDOWS;_USRDLL;SXSCORE_EXPORTS;SX_DLL;%(PreprocessorDefinitions);SX_LIB_NAME="SCORE"</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
-      <TreatSpecificWarningsAsErrors>4316</TreatSpecificWarningsAsErrors>
-    </ClCompile>
-    <Link>
-      <SubSystem>Windows</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <OptimizeReferences>true</OptimizeReferences>
-      <ProgramDatabaseFile>$(ProjectDir)../../../pdb64/$(TargetName).pdb</ProgramDatabaseFile>
-      <ImportLibrary>../../../libs64/$(TargetName).lib</ImportLibrary>
-    </Link>
-  </ItemDefinitionGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
diff --git a/proj/sxscore/vs2013/sxscore.vcxproj.filters b/proj/sxscore/vs2013/sxscore.vcxproj.filters
deleted file mode 100644
index 86412f4c9..000000000
--- a/proj/sxscore/vs2013/sxscore.vcxproj.filters
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup>
-    <Filter Include="Source Files">
-      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
-      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
-    </Filter>
-    <Filter Include="Header Files">
-      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
-      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
-    </Filter>
-    <Filter Include="Resource Files">
-      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
-      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
-    </Filter>
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\..\source\score\sxscore_dll.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\source\score\sxscore.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\source\score\sound.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\source\common\string.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\source\common\file_utils.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\source\common\string_utils.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="..\..\..\source\score\sxscore.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\source\score\sound.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\source\common\array.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\source\common\string.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\source\common\file_utils.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\source\common\string_utils.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-  </ItemGroup>
-</Project>
\ No newline at end of file
diff --git a/source/game/BaseEntity.h b/source/game/BaseEntity.h
index a218a3603..3d5bd7580 100644
--- a/source/game/BaseEntity.h
+++ b/source/game/BaseEntity.h
@@ -22,7 +22,7 @@ See the license in LICENSE
 #include <common/Math.h>
 #include <core/sxcore.h>
 #include <physics/sxphysics.h>
-#include <score/sxscore.h>
+#include <xcommon/IXSoundSystem.h>
 
 #include "EntityFactory.h"
 #include "EntityManager.h"
diff --git a/source/game/BaseTool.cpp b/source/game/BaseTool.cpp
index 708d1a287..9bfb41ebf 100644
--- a/source/game/BaseTool.cpp
+++ b/source/game/BaseTool.cpp
@@ -94,8 +94,6 @@ CBaseTool::CBaseTool(CEntityManager * pMgr):
 	m_fZoomTime(0.0f),
 	m_fReloadTime(0.0f),
 	m_iZoomable(1),
-	m_iSoundAction1(-1),
-	m_iSoundAction2(-1),
 	m_iMuzzleFlash(-1),
 	m_iMuzzleFlash2(-1),
 	m_fMaxDistance(1000.0f),
@@ -110,27 +108,36 @@ CBaseTool::CBaseTool(CEntityManager * pMgr):
 CBaseTool::~CBaseTool()
 {
 	CLEAR_INTERVAL(m_iIvalUpdate);
+
+	mem_release(m_pSoundAction1);
+	mem_release(m_pSoundAction2);
 }
 
 void CBaseTool::onPostLoad()
 {
 	BaseClass::onPostLoad();
 
-	if(m_szPrimaryActionSound[0])
-	{
-		m_iSoundAction1 = SSCore_SndCreate3dInst(m_szPrimaryActionSound, SX_SOUND_CHANNEL_GAME, 100);
-	}
-	if(m_szSecondaryActionSound[0])
-	{
-		m_iSoundAction2 = SSCore_SndCreate3dInst(m_szSecondaryActionSound, SX_SOUND_CHANNEL_GAME, 100);
-	}
-	if(m_szPrimaryActionMuzzleflash[0])
+	IXSoundSystem *pSound = (IXSoundSystem*)(Core_GetIXCore()->getPluginManager()->getInterface(IXSOUNDSYSTEM_GUID));
+	if(pSound)
 	{
-		m_iMuzzleFlash = SPE_EffectInstanceByName(m_szPrimaryActionMuzzleflash);
-	}
-	if(m_szSecondaryActionMuzzleflash[0])
-	{
-		m_iMuzzleFlash2 = SPE_EffectInstanceByName(m_szSecondaryActionMuzzleflash);
+		IXSoundLayer *pGameLayer = pSound->findLayer("xGame");
+
+		if(m_szPrimaryActionSound[0])
+		{
+			m_pSoundAction1 = pGameLayer->newSoundEmitter(m_szPrimaryActionSound, SOUND_SPACE_3D);
+		}
+		if(m_szSecondaryActionSound[0])
+		{
+			m_pSoundAction2 = pGameLayer->newSoundEmitter(m_szSecondaryActionSound, SOUND_SPACE_3D);
+		}
+		if(m_szPrimaryActionMuzzleflash[0])
+		{
+			m_iMuzzleFlash = SPE_EffectInstanceByName(m_szPrimaryActionMuzzleflash);
+		}
+		if(m_szSecondaryActionMuzzleflash[0])
+		{
+			m_iMuzzleFlash2 = SPE_EffectInstanceByName(m_szSecondaryActionMuzzleflash);
+		}
 	}
 }
 
@@ -154,10 +161,8 @@ void CBaseTool::primaryAction(BOOL st)
 		{
 			SPE_EffectSetEnable(m_iMuzzleFlash, true);
 		}
-		if(ID_VALID(m_iSoundAction1))
-		{
-			SSCore_SndInstancePlay3d(m_iSoundAction1, false, false, &getPos());
-		}
+		SAFE_CALL(m_pSoundAction1, setWorldPos, getPos());
+		SAFE_CALL(m_pSoundAction1, play);
 
 		//((CPlayer*)m_pOwner)->is
 
diff --git a/source/game/BaseTool.h b/source/game/BaseTool.h
index a1b51ff61..144911221 100644
--- a/source/game/BaseTool.h
+++ b/source/game/BaseTool.h
@@ -121,8 +121,8 @@ protected:
 
 	ID m_iMuzzleFlash;
 	ID m_iMuzzleFlash2;
-	ID m_iSoundAction1;
-	ID m_iSoundAction2;
+	IXSoundEmitter *m_pSoundAction1 = NULL;
+	IXSoundEmitter *m_pSoundAction2 = NULL;
 
 	const char * m_szPrimaryActionSound;
 	const char * m_szSecondaryActionSound;
diff --git a/source/game/BaseWeapon.cpp b/source/game/BaseWeapon.cpp
index 2af4c1c19..48e6217cf 100644
--- a/source/game/BaseWeapon.cpp
+++ b/source/game/BaseWeapon.cpp
@@ -104,14 +104,7 @@ CBaseWeapon::CBaseWeapon(CEntityManager * pMgr):
 	m_pMag(NULL),
 	m_fireMode(FIRE_MODE_SINGLE),
 	m_iFireModes(0),
-
-	m_idSndDraw(-1),
-	m_idSndHolster(-1),
-	m_idSndShoot(-1),
-	m_idSndEmpty(-1),
-	m_idSndReload(-1),
-	m_idSndSwitch(-1),
-
+	
 	m_iCapacity(1),
 	m_iCurrentLoad(0),
 
@@ -131,33 +124,49 @@ CBaseWeapon::CBaseWeapon(CEntityManager * pMgr):
 	m_bIsWeapon = true;
 }
 
+CBaseWeapon::~CBaseWeapon()
+{
+	mem_release(m_pSndDraw);
+	mem_release(m_pSndHolster);
+	mem_release(m_pSndShoot);
+	mem_release(m_pSndEmpty);
+	mem_release(m_pSndReload);
+	mem_release(m_pSndSwitch);
+}
+
 void CBaseWeapon::onPostLoad()
 {
 	BaseClass::onPostLoad();
 
-	if(m_szSndDraw[0])
-	{
-		m_idSndDraw = SSCore_SndCreate3dInst(m_szSndDraw, SX_SOUND_CHANNEL_GAME, 100);
-	}
-	if(m_szSndHolster[0])
-	{
-		m_idSndHolster = SSCore_SndCreate3dInst(m_szSndHolster, SX_SOUND_CHANNEL_GAME, 100);
-	}
-	if(m_szSndShoot[0])
+	IXSoundSystem *pSound = (IXSoundSystem*)(Core_GetIXCore()->getPluginManager()->getInterface(IXSOUNDSYSTEM_GUID));
+	if(pSound)
 	{
-		m_idSndShoot = SSCore_SndCreate3dInst(m_szSndShoot, SX_SOUND_CHANNEL_GAME, 100);
-	}
-	if(m_szSndEmpty[0])
-	{
-		m_idSndEmpty = SSCore_SndCreate3dInst(m_szSndEmpty, SX_SOUND_CHANNEL_GAME, 100);
-	}
-	if(m_szSndReload[0])
-	{
-		m_idSndReload = SSCore_SndCreate3dInst(m_szSndReload, SX_SOUND_CHANNEL_GAME, 100);
-	}
-	if(m_szSndSwitch[0])
-	{
-		m_idSndSwitch = SSCore_SndCreate3dInst(m_szSndSwitch, SX_SOUND_CHANNEL_GAME, 100);
+		IXSoundLayer *pGameLayer = pSound->findLayer("xGame");
+
+		if(m_szSndDraw[0])
+		{
+			m_pSndDraw = pGameLayer->newSoundPlayer(m_szSndDraw, SOUND_SPACE_3D);
+		}
+		if(m_szSndHolster[0])
+		{
+			m_pSndHolster = pGameLayer->newSoundPlayer(m_szSndHolster, SOUND_SPACE_3D);
+		}
+		if(m_szSndShoot[0])
+		{
+			m_pSndShoot = pGameLayer->newSoundEmitter(m_szSndShoot, SOUND_SPACE_3D);
+		}
+		if(m_szSndEmpty[0])
+		{
+			m_pSndEmpty = pGameLayer->newSoundPlayer(m_szSndEmpty, SOUND_SPACE_3D);
+		}
+		if(m_szSndReload[0])
+		{
+			m_pSndReload = pGameLayer->newSoundPlayer(m_szSndReload, SOUND_SPACE_3D);
+		}
+		if(m_szSndSwitch[0])
+		{
+			m_pSndSwitch = pGameLayer->newSoundPlayer(m_szSndSwitch, SOUND_SPACE_3D);
+		}
 	}
 }
 
@@ -292,10 +301,8 @@ void CBaseWeapon::reload()
 			}
 			else
 			{
-				if(ID_VALID(m_idSndReload))
-				{
-					SSCore_SndInstancePlay3d(m_idSndReload, false, false, &getPos());
-				}
+				SAFE_CALL(m_pSndReload, setWorldPos, getPos());
+				SAFE_CALL(m_pSndReload, play);
 			}
 
 			CHUDcontroller * pHUD = ((CBaseCharacter*)getOwner())->getHUDcontroller();
@@ -318,10 +325,8 @@ void CBaseWeapon::setFireMode(FIRE_MODE mode)
 	if((m_iFireModes & mode) && canUse())
 	{
 		m_fireMode = mode;
-		if(ID_VALID(m_idSndSwitch))
-		{
-			SSCore_SndInstancePlay3d(m_idSndSwitch, false, false, &getPos());
-		}
+		SAFE_CALL(m_pSndSwitch, setWorldPos, getPos());
+		SAFE_CALL(m_pSndSwitch, play);
 	}
 }
 
@@ -450,10 +455,9 @@ void CBaseWeapon::taskShoot(float dt)
 	}
 	else
 	{
-		if(ID_VALID(m_idSndEmpty))
-		{
-			SSCore_SndInstancePlay3d(m_idSndEmpty, false, false, &getPos());
-		}
+		SAFE_CALL(m_pSndEmpty, setWorldPos, getPos());
+		SAFE_CALL(m_pSndEmpty, play);
+
 		if(ID_VALID(m_idTaskShoot))
 		{
 			CLEAR_INTERVAL(m_idTaskShoot);
@@ -468,10 +472,8 @@ void CBaseWeapon::taskShoot(float dt)
 	{
 		SPE_EffectSetEnable(m_iMuzzleFlash, true);
 	}
-	if(ID_VALID(m_idSndShoot))
-	{
-		SSCore_SndInstancePlay3d(m_idSndShoot, false, false, &getPos());
-	}
+	SAFE_CALL(m_pSndShoot, setWorldPos, getPos());
+	SAFE_CALL(m_pSndShoot, play);
 
 	//((CPlayer*)m_pOwner)->is
 
diff --git a/source/game/BaseWeapon.h b/source/game/BaseWeapon.h
index 362f076db..fbd1dcc3b 100644
--- a/source/game/BaseWeapon.h
+++ b/source/game/BaseWeapon.h
@@ -62,6 +62,7 @@ class CBaseWeapon: public CBaseTool
 	DECLARE_PROPTABLE();
 public:
 	DECLARE_CONSTRUCTOR();
+	~CBaseWeapon();
 	virtual void onPostLoad();
 
 	virtual void primaryAction(BOOL st);
@@ -129,19 +130,19 @@ protected:
 	int m_iCutoffCurrent;
 
 	// Sounds
-	const char * m_szSndDraw;
-	const char * m_szSndHolster;
-	const char * m_szSndShoot;
-	const char * m_szSndEmpty;
-	const char * m_szSndReload;
-	const char * m_szSndSwitch;
-
-	ID m_idSndDraw;
-	ID m_idSndHolster;
-	ID m_idSndShoot;
-	ID m_idSndEmpty;
-	ID m_idSndReload;
-	ID m_idSndSwitch;
+	const char *m_szSndDraw;
+	const char *m_szSndHolster;
+	const char *m_szSndShoot;
+	const char *m_szSndEmpty;
+	const char *m_szSndReload;
+	const char *m_szSndSwitch;
+
+	IXSoundPlayer *m_pSndDraw = NULL;
+	IXSoundPlayer *m_pSndHolster = NULL;
+	IXSoundEmitter *m_pSndShoot = NULL;
+	IXSoundPlayer *m_pSndEmpty = NULL;
+	IXSoundPlayer *m_pSndReload = NULL;
+	IXSoundPlayer *m_pSndSwitch = NULL;
 
 	// Shooting
 	float m_fEffectiveDistance;
diff --git a/source/game/GameData.cpp b/source/game/GameData.cpp
index 3d9cf94a9..a8d93d1db 100644
--- a/source/game/GameData.cpp
+++ b/source/game/GameData.cpp
@@ -9,7 +9,6 @@ See the license in LICENSE
 
 //#include "Ragdoll.h"
 
-#include <score/sxscore.h>
 #include <input/sxinput.h>
 
 #include "Tracer.h"
diff --git a/source/game/GameStates.cpp b/source/game/GameStates.cpp
index 993ab09c5..49f53eaf6 100644
--- a/source/game/GameStates.cpp
+++ b/source/game/GameStates.cpp
@@ -3,7 +3,6 @@
 #include "GameData.h"
 #include "Baseline.h"
 
-#include <score/sxscore.h>
 #include <input/sxinput.h>
 
 #include "Editable.h"
@@ -125,16 +124,13 @@ void CIngameGameState::activate()
 
 	ID idTimerRender = Core_RIntGet(G_RI_INT_TIMER_GAME);
 	Core_TimeWorkingSet(idTimerRender, true);
-	SSCore_ChannelPlay(SX_SOUND_CHANNEL_GAME);
+//	SSCore_ChannelPlay(SX_SOUND_CHANNEL_GAME);
 	SSInput_SetEnable(true);
 	SPhysics_EnableSimulation();
 
 	Core_0ConsoleExecCmd("game_time_running 1");
 
-	if(GameData::m_pGameLayer)
-	{
-		GameData::m_pGameLayer->play(true);
-	}
+	SAFE_CALL(GameData::m_pGameLayer, play, true);
 }
 
 void CIngameGameState::deactivate()
@@ -146,14 +142,11 @@ void CIngameGameState::deactivate()
 
 	ID idTimerRender = Core_RIntGet(G_RI_INT_TIMER_GAME);
 	Core_TimeWorkingSet(idTimerRender, false);
-	SSCore_ChannelStop(SX_SOUND_CHANNEL_GAME);
+//	SSCore_ChannelStop(SX_SOUND_CHANNEL_GAME);
 	SSInput_SetEnable(false);
 	SPhysics_DisableSimulation();
 
-	if(GameData::m_pGameLayer)
-	{
-		GameData::m_pGameLayer->play(false);
-	}
+	SAFE_CALL(GameData::m_pGameLayer, play, false);
 
 	if(*dev_reset_world_on_run)
 	{
diff --git a/source/game/NPCZombie.cpp b/source/game/NPCZombie.cpp
index 95ea45e22..a021c3732 100644
--- a/source/game/NPCZombie.cpp
+++ b/source/game/NPCZombie.cpp
@@ -5,7 +5,6 @@ See the license in LICENSE
 ***********************************************************/
 
 #include "NPCZombie.h"
-#include "score/sxscore.h"
 
 #include "GameData.h"
 #include "BaseTool.h"
@@ -33,10 +32,14 @@ CNPCZombie::CNPCZombie(CEntityManager * pMgr) :
 {
 	//m_fSpeedWalk = 0.07f;
 	//m_fSpeedRun = 0.12f;
-
-	m_idSndIdle = SSCore_SndCreate3d("mobs/zombie/zombie_idle_16.ogg", SX_SOUND_CHANNEL_GAME, 0, 30);
-	m_idSndIdle2 = SSCore_SndCreate3d("mobs/zombie/zombie_idle_17.ogg", SX_SOUND_CHANNEL_GAME, 0, 30);
-	m_idSndDeath = SSCore_SndCreate3d("mobs/zombie/zombie_die_1.ogg", SX_SOUND_CHANNEL_GAME, 0, 45);
+	IXSoundSystem *pSound = (IXSoundSystem*)(Core_GetIXCore()->getPluginManager()->getInterface(IXSOUNDSYSTEM_GUID));
+	if(pSound)
+	{
+		IXSoundLayer *pGameLayer = pSound->findLayer("xGame");
+		m_pSndIdle = pGameLayer->newSoundPlayer("mobs/zombie/zombie_idle_16.ogg", SOUND_SPACE_3D);
+		m_pSndIdle2 = pGameLayer->newSoundPlayer("mobs/zombie/zombie_idle_17.ogg", SOUND_SPACE_3D);
+		m_pSndDeath = pGameLayer->newSoundPlayer("mobs/zombie/zombie_die_1.ogg", SOUND_SPACE_3D);
+	}
 
 	m_pActiveTool = (CBaseTool*)CREATE_ENTITY("wpn_zombie_hands", m_pMgr);
 	m_pActiveTool->setOwner(this);
@@ -50,11 +53,15 @@ CNPCZombie::CNPCZombie(CEntityManager * pMgr) :
 CNPCZombie::~CNPCZombie()
 {
 	REMOVE_ENTITY(m_pActiveTool);
+
+	mem_release(m_pSndIdle);
+	mem_release(m_pSndIdle2);
+	mem_release(m_pSndDeath);
 }
 
 void CNPCZombie::onDeath(CBaseEntity *pAttacker, CBaseEntity *pInflictor)
 {
-	SSCore_SndPlay(m_idSndDeath);
+	SAFE_CALL(m_pSndDeath, play);
 
 	BaseClass::onDeath(pAttacker, pInflictor);
 
@@ -67,9 +74,9 @@ void CNPCZombie::onSync()
 {
 	BaseClass::onSync();
 
-	SSCore_SndSetPosWorld(m_idSndIdle, &getPos());
-	SSCore_SndSetPosWorld(m_idSndIdle2, &getPos());
-	SSCore_SndSetPosWorld(m_idSndDeath, &getPos());
+	SAFE_CALL(m_pSndIdle, setWorldPos, getPos());
+	SAFE_CALL(m_pSndIdle2, setWorldPos, getPos());
+	SAFE_CALL(m_pSndDeath, setWorldPos, getPos());
 }
 
 void CNPCZombie::rotateThink(float dt)
diff --git a/source/game/NPCZombie.h b/source/game/NPCZombie.h
index f113766d7..42b26a47a 100644
--- a/source/game/NPCZombie.h
+++ b/source/game/NPCZombie.h
@@ -53,9 +53,9 @@ protected:
 	//virtual void initPhysics();
 
 	void randWalk();
-	ID m_idSndIdle;
-	ID m_idSndIdle2;
-	ID m_idSndDeath;
+	IXSoundPlayer *m_pSndIdle = NULL;
+	IXSoundPlayer *m_pSndIdle2 = NULL;
+	IXSoundPlayer *m_pSndDeath = NULL;
 
 	NPC_STATE_DANGER m_stateDanger;
 	float3_t m_vLastDangerPos;
diff --git a/source/game/PropBreakable.cpp b/source/game/PropBreakable.cpp
index 16ea3986b..5334f3b5f 100644
--- a/source/game/PropBreakable.cpp
+++ b/source/game/PropBreakable.cpp
@@ -29,13 +29,23 @@ END_PROPTABLE()
 
 REGISTER_ENTITY(CPropBreakable, prop_breakable);
 
+CPropBreakable::~CPropBreakable()
+{
+	mem_release(m_pSndBreak);
+}
+
 void CPropBreakable::onPostLoad()
 {
 	BaseClass::onPostLoad();
 
-	if(m_szSndBreak[0])
+	IXSoundSystem *pSound = (IXSoundSystem*)(Core_GetIXCore()->getPluginManager()->getInterface(IXSOUNDSYSTEM_GUID));
+	if(pSound)
 	{
-		m_idSndBreak = SSCore_SndCreate3dInst(m_szSndBreak, SX_SOUND_CHANNEL_GAME, 100);
+		IXSoundLayer *pGameLayer = pSound->findLayer("xGame");
+		if(m_szSndBreak[0])
+		{
+			m_pSndBreak = pGameLayer->newSoundPlayer(m_szSndBreak, SOUND_SPACE_3D);
+		}
 	}
 }
 
@@ -47,10 +57,10 @@ void CPropBreakable::breakInput(inputdata_t * pInputdata)
 void CPropBreakable::onDeath(CBaseEntity *pAttacker, CBaseEntity *pInflictor)
 {
 	FIRE_OUTPUT(m_onBroken, pInflictor);
-	if(ID_VALID(m_idSndBreak))
-	{
-		SSCore_SndInstancePlay3d(m_idSndBreak, false, false, &getPos());
-	}
+
+	SAFE_CALL(m_pSndBreak, setWorldPos, getPos());
+	SAFE_CALL(m_pSndBreak, play);
+
 	if(m_szModelFile)
 	{
 		int len = (int)strlen(m_szModelFile);
diff --git a/source/game/PropBreakable.h b/source/game/PropBreakable.h
index 21e43d845..5209a0c52 100644
--- a/source/game/PropBreakable.h
+++ b/source/game/PropBreakable.h
@@ -1,12 +1,12 @@
 
 /***********************************************************
-Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
 ***********************************************************/
 
 /*!
 \file
-���������� ������
+Разбиваемй объект
 */
 
 #ifndef __PROP_BREAKABLE_H
@@ -14,7 +14,7 @@ See the license in LICENSE
 
 #include "PropDynamic.h"
 
-/*! ����������� ������
+/*! Разбиваемый объект
 \ingroup cbaseanimating
 */
 class CPropBreakable: public CPropDynamic
@@ -23,6 +23,7 @@ class CPropBreakable: public CPropDynamic
 	DECLARE_PROPTABLE();
 public:
 	DECLARE_TRIVIAL_CONSTRUCTOR();
+	~CPropBreakable();
 	virtual void onPostLoad();
 
 	void onDeath(CBaseEntity *pAttacker, CBaseEntity *pInflictor);
@@ -32,7 +33,7 @@ protected:
 	output_t m_onBroken;
 
 	const char * m_szSndBreak;
-	ID m_idSndBreak = -1;
+	IXSoundPlayer *m_pSndBreak = NULL;
 };
 
 #endif
diff --git a/source/game/PropDoor.cpp b/source/game/PropDoor.cpp
index 47aaffa68..e07700ea4 100644
--- a/source/game/PropDoor.cpp
+++ b/source/game/PropDoor.cpp
@@ -75,6 +75,10 @@ CPropDoor::CPropDoor(CEntityManager *pMgr):BaseClass(pMgr)
 CPropDoor::~CPropDoor()
 {
 	releasePhysics();
+
+	mem_release(m_pSndClose);
+	mem_release(m_pSndOpen);
+	mem_release(m_pSndLocked);
 }
 
 void CPropDoor::onPostLoad()
@@ -84,17 +88,23 @@ void CPropDoor::onPostLoad()
 
 	BaseClass::onPostLoad();
 
-	if(m_szSndClose[0])
-	{
-		m_idSndClose = SSCore_SndCreate3dInst(m_szSndClose, SX_SOUND_CHANNEL_GAME, 100);
-	}
-	if(m_szSndOpen[0])
+	IXSoundSystem *pSound = (IXSoundSystem*)(Core_GetIXCore()->getPluginManager()->getInterface(IXSOUNDSYSTEM_GUID));
+	if(pSound)
 	{
-		m_idSndOpen = SSCore_SndCreate3dInst(m_szSndOpen, SX_SOUND_CHANNEL_GAME, 100);
-	}
-	if(m_szSndLocked[0])
-	{
-		m_idSndLocked = SSCore_SndCreate3dInst(m_szSndLocked, SX_SOUND_CHANNEL_GAME, 100);
+		IXSoundLayer *pGameLayer = pSound->findLayer("xGame");
+
+		if(m_szSndClose[0])
+		{
+			m_pSndClose = pGameLayer->newSoundPlayer(m_szSndClose, SOUND_SPACE_3D);
+		}
+		if(m_szSndOpen[0])
+		{
+			m_pSndOpen = pGameLayer->newSoundPlayer(m_szSndOpen, SOUND_SPACE_3D);
+		}
+		if(m_szSndLocked[0])
+		{
+			m_pSndLocked = pGameLayer->newSoundPlayer(m_szSndLocked, SOUND_SPACE_3D);
+		}
 	}
 }
 
@@ -103,10 +113,9 @@ void CPropDoor::inputOpen(inputdata_t * pInputdata)
 	if(m_isLocked)
 	{
 		FIRE_OUTPUT(m_onUseLocked, pInputdata->pInflictor);
-		if(ID_VALID(m_idSndLocked))
-		{
-			SSCore_SndInstancePlay3d(m_idSndLocked, false, false, &getPos());
-		}
+
+		SAFE_CALL(m_pSndLocked, setWorldPos, getPos());
+		SAFE_CALL(m_pSndLocked, play);
 		return;
 	}
 	if(m_bState)
@@ -121,10 +130,9 @@ void CPropDoor::inputOpen(inputdata_t * pInputdata)
 
 	m_pInflictor = pInputdata->pInflictor;
 	FIRE_OUTPUT(m_onOpen, pInputdata->pInflictor);
-	if(ID_VALID(m_idSndOpen))
-	{
-		SSCore_SndInstancePlay3d(m_idSndOpen, false, false, &getPos());
-	}
+
+	SAFE_CALL(m_pSndOpen, setWorldPos, getPos());
+	SAFE_CALL(m_pSndOpen, play);
 
 	m_isOpening = true;
 	m_idThinkInterval = SET_INTERVAL(think, 0);
@@ -134,10 +142,9 @@ void CPropDoor::inputClose(inputdata_t * pInputdata)
 	if(m_isLocked)
 	{
 		FIRE_OUTPUT(m_onUseLocked, pInputdata->pInflictor);
-		if(ID_VALID(m_idSndLocked))
-		{
-			SSCore_SndInstancePlay3d(m_idSndLocked, false, false, &getPos());
-		}
+
+		SAFE_CALL(m_pSndLocked, setWorldPos, getPos());
+		SAFE_CALL(m_pSndLocked, play);
 		return;
 	}
 	if(!m_bState)
@@ -158,10 +165,9 @@ void CPropDoor::inputClose(inputdata_t * pInputdata)
 
 	m_pInflictor = pInputdata->pInflictor;
 	FIRE_OUTPUT(m_onClose, pInputdata->pInflictor);
-	if(ID_VALID(m_idSndClose))
-	{
-		SSCore_SndInstancePlay3d(m_idSndClose, false, false, &getPos());
-	}
+
+	SAFE_CALL(m_pSndClose, setWorldPos, getPos());
+	SAFE_CALL(m_pSndClose, play);
 
 	m_isClosing = true;
 	m_idThinkInterval = SET_INTERVAL(think, 0);
diff --git a/source/game/PropDoor.h b/source/game/PropDoor.h
index 959d7dda4..28ce7e953 100644
--- a/source/game/PropDoor.h
+++ b/source/game/PropDoor.h
@@ -1,12 +1,12 @@
 
 /***********************************************************
-Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
+Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
 See the license in LICENSE
 ***********************************************************/
 
 /*!
 \file
-�����
+Дверь
 */
 
 #ifndef __PROP_DOOR_H
@@ -20,12 +20,12 @@ See the license in LICENSE
 #define DOOR_AUTOCLOSE ENT_FLAG_3
 #define DOOR_FORCE ENT_FLAG_4
 
-//! ������� ����������� ��� �����
+//! базовое направление для двери
 #define DOOR_BASE_DIR float3(0, 0, -1.0f)
 
 #define DOOR_MAX_PENETRATION_DEPTH 0.16f
 
-/*! �����
+/*! Дверь
 \ingroup cbaseanimating
 */
 class CPropDoor: public CPropDynamic
@@ -39,7 +39,7 @@ public:
 
 	void onUse(CBaseEntity *pUser);
 
-	//! ������������� ��������� � ����
+	//! Устанавливает положение в мире
 	void setPos(const float3 & pos);
 
 protected:
@@ -74,11 +74,11 @@ protected:
 	float m_fBlockDamage = 100.0f;
 
 	const char * m_szSndClose;
-	ID m_idSndClose = -1;
+	IXSoundPlayer *m_pSndClose = NULL;
 	const char * m_szSndOpen;
-	ID m_idSndOpen = -1;
+	IXSoundPlayer *m_pSndOpen = NULL;
 	const char * m_szSndLocked;
-	ID m_idSndLocked = -1;
+	IXSoundPlayer *m_pSndLocked = NULL;
 
 	bool m_isLocked = false;
 
diff --git a/source/game/SoundPlayer.h b/source/game/SoundPlayer.h
index 0fbea81ce..550095ee1 100644
--- a/source/game/SoundPlayer.h
+++ b/source/game/SoundPlayer.h
@@ -12,7 +12,6 @@ See the license in LICENSE
 #define __SOUND_PLAYER_H
 
 #include "PointEntity.h"
-#include <xcommon/IXSoundSystem.h>
 
 //##########################################################################
 
diff --git a/source/game/ZombieHands.cpp b/source/game/ZombieHands.cpp
index 1d13869ba..40f43f633 100644
--- a/source/game/ZombieHands.cpp
+++ b/source/game/ZombieHands.cpp
@@ -5,11 +5,11 @@
 #include "Tracer.h"
 
 /*! \skydocent wpn_zombie_hands
-���� �����
+Руки зомби
 */
 
 BEGIN_PROPTABLE(CZombieHands)
-	//! ��������� ����
+	//! Наносимый урон
 	DEFINE_FIELD_FLOAT(m_fDamage, PDFF_NOEDIT | PDFF_NOEXPORT, "damage", "", EDITOR_NONE)
 END_PROPTABLE()
 
@@ -49,10 +49,8 @@ void CZombieHands::taskShoot(float dt)
 	pOwner->playActivity("ACT_SHOOT", 200);
 	pOwner->playActivityNext("ACT_IDLE", 200);
 
-	if(ID_VALID(m_idSndShoot))
-	{
-		SSCore_SndInstancePlay3d(m_idSndShoot, false, false, &getPos());
-	}
+	SAFE_CALL(m_pSndShoot, setWorldPos, getPos());
+	SAFE_CALL(m_pSndShoot, play);
 
 	m_idActualShootTimeout = SET_TIMEOUT(actualShoot, 0.6f);
 }
diff --git a/source/game/proptable.cpp b/source/game/proptable.cpp
index a90a51a65..c203467d4 100644
--- a/source/game/proptable.cpp
+++ b/source/game/proptable.cpp
@@ -94,6 +94,7 @@ void output_t::fire(CBaseEntity *pInflictor, CBaseEntity *pActivator, inputdata_
 	data.pInflictor = pInflictor;
 	for(int i = 0; i < iOutCount; ++i)
 	{
+		data.type = PDF_NONE;
 		if(pOutputs[i].fDelay == 0.0f && !pOutputs[i].useRandomDelay)
 		{
 			for(int j = 0; j < pOutputs[i].iOutCount; ++j)
diff --git a/source/gdefines.h b/source/gdefines.h
index f0dc5fd81..1bac62753 100644
--- a/source/gdefines.h
+++ b/source/gdefines.h
@@ -133,6 +133,8 @@ struct IBaseObject
 
 #define ID_VALID(id) ((id) >= 0)
 
+#define SAFE_CALL(obj, fn, ...) if(obj){obj->fn(__VA_ARGS__);}
+
 #ifndef IFACEBASEOBJECT
 #define IFACEBASEOBJECT
 
diff --git a/source/score/CallBackOgg.cpp b/source/score/CallBackOgg.cpp
deleted file mode 100644
index da236f7fa..000000000
--- a/source/score/CallBackOgg.cpp
+++ /dev/null
@@ -1,43 +0,0 @@
-
-/***********************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
-See the license in LICENSE
-***********************************************************/
-
-#pragma once
-
-//чтение файла
-size_t read_ogg(void *ptr, size_t size, size_t nmemb, void *datasource)
-{
-	FILE* f = (FILE*)datasource;
-	return fread(ptr, 1, size * nmemb, f);
-}
-
-//закртытие файла
-int close_ogg(void* datasource)
-{
-	FILE* f = (FILE*) datasource;
-	fclose(f);
-	return 0;
-}
-
-//позиционирование
-int seek_ogg(void *datasource, ogg_int64_t offset, int whence)
-{
-	FILE* f = (FILE*)datasource;
-		switch (whence) 
-		{
-			case SEEK_SET: return fseek(f, offset, SEEK_SET);  break;
-			case SEEK_CUR: return fseek(f, offset, SEEK_CUR);  break;
-			case SEEK_END: return fseek(f, offset, SEEK_END);  break;
-			default: return -1;
-		}
-	return 1;
-}
-
-//размер файла
-long tell_ogg(void* datasource)
-{
-	FILE* f = (FILE*)datasource;
-	return ftell(f);
-}
diff --git a/source/score/sound.cpp b/source/score/sound.cpp
deleted file mode 100644
index 14c8c1446..000000000
--- a/source/score/sound.cpp
+++ /dev/null
@@ -1,1805 +0,0 @@
-
-/***********************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
-See the license in LICENSE
-***********************************************************/
-
-#include "sound.h"
-
-//############################################################################
-
-size_t OggCallbackRead(void *ptr, size_t size, size_t nmemb, void *datasource)
-{
-	FILE* f = (FILE*)datasource;
-	return fread(ptr, 1, size * nmemb, f);
-}
-
-int OggCallbackClose(void* datasource)
-{
-	FILE* f = (FILE*)datasource;
-	fclose(f);
-	return 0;
-}
-
-int OggCallbackSeek(void *datasource, ogg_int64_t offset, int whence)
-{
-	FILE* f = (FILE*)datasource;
-	switch (whence)
-	{
-	case SEEK_SET: return fseek(f, offset, SEEK_SET);
-	case SEEK_CUR: return fseek(f, offset, SEEK_CUR);
-	case SEEK_END: return fseek(f, offset, SEEK_END);
-	default: return -1;
-	}
-	return 1;
-}
-
-long OggCallbackTell(void* datasource)
-{
-	FILE* f = (FILE*)datasource;
-	return ftell(f);
-}
-
-//############################################################################
-
-CSoundManager::CSoundManager()
-{
-	m_pDeviceSound = 0;
-	m_pPrimaryBuffer = 0;
-
-	for (int i = 0; i < SOUND_CHANNELS_COUNT; ++i)
-		m_aChannels[i] = SOUND_CHANNEL_NONE;
-}
-
-CSoundManager::~CSoundManager()
-{
-	clear();
-	mem_release_del(m_pPrimaryBuffer);
-	mem_release_del(m_pDeviceSound);
-}
-
-void CSoundManager::clear()
-{
-	for(UINT i = 0; i < m_aSounds.size(); ++i)
-	{
-		mem_delete(m_aSounds[i]);
-	}
-}
-
-CSoundManager::CSound::CSound()
-{
-	ZeroMemory(this, sizeof(CSoundManager::CSound));
-	m_id = SOUND_FAIL_ID;
-	m_fVolume = 1.f;
-}
-
-CSoundManager::CSound::~CSound()
-{
-	if (m_pStream)
-		fclose(m_pStream);
-
-	//mem_release_del(m_pSoundBuffer);
-	if (m_pVorbisFile)
-	{
-		ov_clear(m_pVorbisFile);
-		mem_delete(m_pVorbisFile);
-	}
-}
-
-//##########################################################################
-
-CSoundManager::СSoundKit::СSoundKit()
-{ 
-	m_szName[0] = 0; 
-	m_idChannel = SOUND_FAIL_ID; 
-	m_is3D = false;
-	m_fDistAudible = SOUND_DIST_AUDIBLE_DEFAULT;
-}
-
-CSoundManager::СSoundKit::~СSoundKit()
-{
-	
-}
-
-ID CSoundManager::sndkitCreate(const char *szName, ID idChannel, bool is3D, float fDistAudible)
-{
-	// список звуков подлежащаих загрузке
-	СSoundKit *pSndKit = new СSoundKit();
-	pSndKit->m_idChannel = idChannel;
-	pSndKit->m_is3D = is3D;
-	pSndKit->m_fDistAudible = fDistAudible;
-	sprintf(pSndKit->m_szName, "%s", szName);
-
-	m_aSoundKits.push_back(pSndKit);
-
-	return m_aSoundKits.size() - 1;
-}
-
-ID CSoundManager::sndkitCreateFromList(const char *szName, ID idChannel, Array<String> aStrings, bool is3D, float fDistAudible, float fVolume)
-{
-	СSoundKit *pSndKit = new СSoundKit();
-	pSndKit->m_idChannel = idChannel;
-	pSndKit->m_is3D = is3D;
-	pSndKit->m_fDistAudible = fDistAudible;
-	sprintf(pSndKit->m_szName, "%s", szName);
-	m_aSoundKits.push_back(pSndKit);
-	ID idSndKit = m_aSoundKits.size() - 1;
-
-	String sFileData;
-	float fDistAudibleData = -2.f;
-	float fVolumeData = -2.f;
-	Array<UINT> aDelaysData;
-
-	for (int i = 0, il = aStrings.size(); i < il; ++i)
-	{
-		aDelaysData.clearFast();
-		fDistAudibleData = -2.f;
-		fVolumeData = -2.f;
-
-		if (SndGetDataFromStr(aStrings[i].c_str(), sFileData, fDistAudibleData, fVolumeData, aDelaysData))
-		{
-			if (fDistAudibleData == -2.f)
-				fDistAudibleData = -1.f;
-
-			if (fVolumeData == -2.f)
-				fVolumeData = fVolume;
-
-			sndkitAddSound(idSndKit, sFileData.c_str(), fDistAudibleData, fVolumeData, (aDelaysData.size() > 0 ? &(aDelaysData[0]) : 0), aDelaysData.size());
-		}
-		else
-			sndkitAddSound(idSndKit, StrTrim(aStrings[i].c_str()).c_str(), pSndKit->m_fDistAudible, fVolume);
-	}
-
-	return idSndKit;
-}
-
-void CSoundManager::sndkitAddSound(ID idSndKit, const char *szFile, float fDistAudible, float fVolume, UINT *pArrDelay, int iSizeArrDelay)
-{
-	SOUND_SNDKIT_PRECOND(idSndKit, _VOID);
-
-	СSoundKit *pSndKit = m_aSoundKits[idSndKit];
-
-	ID idSnd = SOUND_FAIL_ID;
-
-	if (pSndKit->m_is3D)
-		idSnd = soundCreate3dInst(szFile, pSndKit->m_idChannel, (fDistAudible > 0 ? fDistAudible : pSndKit->m_fDistAudible));
-	else
-		idSnd = soundCreate2dInst(szFile, pSndKit->m_idChannel);
-
-	СSoundKit::CSoundKitObject oSndKitObj;
-	oSndKitObj.m_id = idSnd;
-	oSndKitObj.m_fVolume = fVolume;
-
-	for (int i = 0, il = iSizeArrDelay; i < il; ++i)
-	{
-		oSndKitObj.m_aDelays.push_back(pArrDelay[i]);
-	}
-
-	pSndKit->m_aSounds.push_back(oSndKitObj);
-}
-
-
-ID CSoundManager::sndkitGetID(const char *szName)
-{
-	for (int i = 0, il = m_aSoundKits.size(); i < il; ++i)
-	{
-		if (stricmp(m_aSoundKits[i]->m_szName, szName) == 0)
-			return i;
-	}
-
-	return SOUND_FAIL_ID;
-}
-
-ID CSoundManager::sndkitGetChannel(ID idSndKit)
-{
-	SOUND_SNDKIT_PRECOND(idSndKit, SOUND_FAIL_ID);
-
-	return m_aSoundKits[idSndKit]->m_idChannel;
-}
-
-
-void CSoundManager::sndkitGetName(ID idSndKit, char *szName)
-{
-	SOUND_SNDKIT_PRECOND(idSndKit, _VOID);
-
-	strcpy(szName, m_aSoundKits[idSndKit]->m_szName);
-}
-
-
-void CSoundManager::sndkitDelete(ID idSndKit)
-{
-	SOUND_SNDKIT_PRECOND(idSndKit, _VOID);
-
-	СSoundKit *pSndKit = m_aSoundKits[idSndKit];
-
-	for (int i = 0, il = pSndKit->m_aSounds.size(); i < il; ++i)
-	{
-		soundDelete(pSndKit->m_aSounds[i].m_id);
-	}
-
-	mem_delete(m_aSoundKits[idSndKit]);
-}
-
-
-void CSoundManager::sndkitDeleteAll()
-{
-	for (int i = 0, il = m_aSoundKits.size(); i < il; ++i)
-	{
-		sndkitDelete(i);
-	}
-}
-
-
-uint64_t CSoundManager::sndkitPlay(ID idSndKit, uint64_t id2, const float3 *pPos, float fVolume, float fPan)
-{
-	SOUND_SNDKIT_PRECOND(idSndKit, SOUND_FAIL_ID);
-
-	СSoundKit *pSndKit = m_aSoundKits[idSndKit];
-
-	// если канал проигрывается
-	SOUND_CHANNEL_PLAYING(pSndKit->m_idChannel, ((id2 != SOUND_SNDKIT_INSTANCE_BLOCK && id2 != SOUND_SNDKIT_INSTANCE_NOTBLOCK) ? id2 : SOUND_FAIL_ID));
-
-	// если id2 валиден и инстанс проигрывается
-	if ((id2 != SOUND_SNDKIT_INSTANCE_BLOCK && id2 != SOUND_SNDKIT_INSTANCE_NOTBLOCK) && soundInstancePlaying(pSndKit->m_aSounds[SOUND_DECODE2ID_HI(id2)].m_id, SOUND_DECODE2ID_LO(id2)))
-		return id2;
-
-	// если id2 валиден то освобождаем инстанс
-	if (id2 != SOUND_SNDKIT_INSTANCE_BLOCK && id2 != SOUND_SNDKIT_INSTANCE_NOTBLOCK)
-		soundInstanceFree(pSndKit->m_aSounds[SOUND_DECODE2ID_HI(id2)].m_id, SOUND_DECODE2ID_LO(id2));
-
-	ID idRand = rand() % (pSndKit->m_aSounds.size());
-	ID idSndInstance = -1;
-
-	UINT *pArr = 0;
-	int iSizeArr = pSndKit->m_aSounds[idRand].m_aDelays.size();
-
-	if (iSizeArr > 0)
-		pArr = &(pSndKit->m_aSounds[idRand].m_aDelays[0]);
-
-	if (pSndKit->m_is3D)
-	{
-		if (!pPos)
-		{
-			LibReport(REPORT_MSG_LEVEL_ERROR, "%s - unresolved call function playing 3d sound without position", GEN_MSG_LOCATION);
-			return SOUND_FAIL_ID;
-		}
-
-		idSndInstance = soundInstancePlay(pSndKit->m_aSounds[idRand].m_id, id2 != SOUND_SNDKIT_INSTANCE_NOTBLOCK, false, pArr, iSizeArr, pPos, (fVolume < 0 ? pSndKit->m_aSounds[idRand].m_fVolume : fVolume));
-	}
-	else
-		idSndInstance = soundInstancePlay(pSndKit->m_aSounds[idRand].m_id, id2 != SOUND_SNDKIT_INSTANCE_NOTBLOCK, false, pArr, iSizeArr, 0, (fVolume < 0 ? pSndKit->m_aSounds[idRand].m_fVolume : fVolume), fPan);
-	
-	/*if (idSndInstance > 0)
-	{
-		CSound* snd = m_aSounds[pSndKit->m_aSounds[SOUND_DECODE2ID_HI(id2)].m_id];
-		SOUND_SNDINSTANCE_BUSY busy = snd->m_aInstances[SOUND_DECODE2ID_LO(id2)].m_busy;
-		int qwerty = 0;
-	}*/
-	
-	//ibReport(REPORT_MSG_LEVEL_NOTICE, "idSndInstance = %d\n", idSndInstance);
-	return SOUND_ENCODE2ID(idRand, idSndInstance);
-}
-
-
-void CSoundManager::sndkitStop(ID idSndKit, uint64_t id2)
-{
-	SOUND_SNDKIT_PRECOND(idSndKit, _VOID);
-
-	if (id2 == SOUND_SNDKIT_INSTANCE_BLOCK)
-		return;
-
-	СSoundKit *pSndKit = m_aSoundKits[idSndKit];
-
-	soundInstanceStop(pSndKit->m_aSounds[SOUND_DECODE2ID_HI(id2)].m_id, SOUND_DECODE2ID_LO(id2));
-}
-
-//##########################################################################
-
-void CSoundManager::channelAdd(ID idChannel, bool isPlaying)
-{
-	SOUND_CHANNEL_PRECOND(idChannel, _VOID);
-		
-	if (m_aChannels[idChannel] == SOUND_CHANNEL_NONE)
-		m_aChannels[idChannel] = isPlaying;
-}
-
-bool CSoundManager::channelExists(ID idChannel)
-{
-	SOUND_CHANNEL_PRECOND(idChannel, false);
-
-	return (m_aChannels[idChannel] != SOUND_CHANNEL_NONE);
-}
-
-int CSoundManager::channelGetSndCount(ID idChannel)
-{
-	SOUND_CHANNEL_PRECOND(idChannel, SOUND_CHANNEL_NONE);
-
-	int iCount = 0;
-	for (int i = 0, il = m_aSounds.size(); i < il; ++i)
-	{
-		if (m_aSounds[i]->m_idChannel == idChannel)
-			++iCount;
-	}
-
-	return iCount;
-}
-
-void CSoundManager::channelPlay(ID idChannel)
-{
-	SOUND_CHANNEL_PRECOND(idChannel, _VOID);
-
-	for (int i = 0, il = m_aSounds.size(); i < il; ++i)
-	{
-		if (m_aSounds[i] && m_aSounds[i]->m_idChannel == idChannel)
-		{
-			channelSndPlay(idChannel, i);
-		}
-	}
-
-	m_aChannels[idChannel] = SOUND_CHANNEL_PLAY;
-}
-
-bool CSoundManager::channelPlaying(ID idChannel)
-{
-	SOUND_CHANNEL_PRECOND(idChannel, false);
-
-	return m_aChannels[idChannel];
-}
-
-void CSoundManager::channelStop(ID idChannel)
-{
-	SOUND_CHANNEL_PRECOND(idChannel, _VOID);
-
-	for (int i = 0, il = m_aSounds.size(); i < il; ++i)
-	{
-		if (m_aSounds[i] && m_aSounds[i]->m_idChannel == idChannel)
-		{
-			channelSndStop(idChannel, i);
-		}
-	}
-
-	m_aChannels[idChannel] = SOUND_CHANNEL_STOP;
-}
-
-void CSoundManager::channelPlayOnly(ID idChannel)
-{
-	SOUND_CHANNEL_PRECOND(idChannel, _VOID);
-
-	for (int i = 0, il = m_aSounds.size(); i < il; ++i)
-	{
-		if (m_aSounds[i])
-		{
-			if (m_aSounds[i]->m_idChannel == idChannel)
-			{
-				channelSndPlay(idChannel, i);
-			}
-			else
-			{
-				channelSndStop(idChannel, i);
-			}
-		}
-	}
-}
-
-void CSoundManager::soundResumePlayDelay(CSoundBase *pSndBase)
-{
-	if (!pSndBase || !(pSndBase->m_isPlayDelay))
-		return;
-
-	//если ключ валиден
-	if (pSndBase->oPlayDelay.m_iCurrPlayDelay >= 0 && pSndBase->oPlayDelay.m_aPlayDelay.size() > pSndBase->oPlayDelay.m_iCurrPlayDelay)
-	{
-		//если текущее значение задержка
-		if (pSndBase->oPlayDelay.m_aPlayDelay[pSndBase->oPlayDelay.m_iCurrPlayDelay].m_isDelay)
-			pSndBase->oPlayDelay.m_uiPlayDelayStart = GetTickCount() - pSndBase->oPlayDelay.m_uiPlayDelayStart;
-		else
-			pSndBase->m_pSoundBuffer->Play(0, 0, 0);
-	}
-	//иначе ключ невалиден, просто доигрываем
-	else
-		pSndBase->m_pSoundBuffer->Play(0, 0, 0);
-}
-
-void CSoundManager::channelSndPlay(ID idChannel, ID idSound)
-{
-	if (idSound < m_aSounds.size() && idSound >= 0 && m_aSounds[idSound] && m_aSounds[idSound]->m_idChannel == idChannel)
-	{
-		CSound *pSnd = m_aSounds[idSound];
-		DWORD dwStatus = 0;
-
-		if (!(pSnd->m_isPlayDelay) && SUCCEEDED(pSnd->m_pSoundBuffer->GetStatus(&dwStatus)) && !(dwStatus & DSBSTATUS_PLAYING) && pSnd->m_state == SOUND_OBJSTATE_PLAY)
-			pSnd->m_pSoundBuffer->Play(0, 0, (pSnd->m_uiStreamSize || pSnd->m_isLooping ? DSBPLAY_LOOPING : 0));
-		//если воспроизведение с задержками
-		else if (pSnd->m_isPlayDelay && pSnd->m_state == SOUND_OBJSTATE_PLAY)			
-			soundResumePlayDelay(pSnd);
-			
-
-		for (int k = 0, kl = pSnd->m_aInstances.size(); k < kl; ++k)
-		{
-			//TODO: доделать восстановление проигрывания с задержками для инстансов
-
-			if (pSnd->m_aInstances[k].m_state == SOUND_OBJSTATE_PAUSE)
-			{
-				pSnd->m_aInstances[k].m_state = SOUND_OBJSTATE_PLAY;
-				
-				if (!(pSnd->m_isPlayDelay))
-					pSnd->m_aInstances[k].m_pSoundBuffer->Play(0, 0, (pSnd->m_aInstances[k].m_isLooping ? DSBPLAY_LOOPING : 0));
-				else
-					soundResumePlayDelay(&(pSnd->m_aInstances[k]));
-			}
-		}
-	}
-}
-
-void CSoundManager::channelSndStop(ID idChannel, ID idSound)
-{
-	if (idSound < m_aSounds.size() && idSound >= 0 && m_aSounds[idSound] && m_aSounds[idSound]->m_idChannel == idChannel)
-	{
-		CSound *pSnd = m_aSounds[idSound];
-
-		if (pSnd->m_isPlayDelay)
-		{
-			if (pSnd->oPlayDelay.m_iCurrPlayDelay >= 0 && pSnd->oPlayDelay.m_aPlayDelay.size() > pSnd->oPlayDelay.m_iCurrPlayDelay && pSnd->oPlayDelay.m_aPlayDelay[pSnd->oPlayDelay.m_iCurrPlayDelay].m_isDelay)
-				pSnd->oPlayDelay.m_uiPlayDelayStart = GetTickCount() - pSnd->oPlayDelay.m_uiPlayDelayStart;
-		}
-
-		pSnd->m_pSoundBuffer->Stop();
-		DWORD dwStatus = 0;
-		CSoundInstance *pSndInst = 0;
-
-		for (int k = 0, kl = pSnd->m_aInstances.size(); k < kl; ++k)
-		{
-			pSndInst = &(pSnd->m_aInstances[k]);
-			dwStatus = 0;
-
-			if (pSndInst->m_state == SOUND_OBJSTATE_PLAY && SUCCEEDED(pSndInst->m_pSoundBuffer->GetStatus(&dwStatus)) && (dwStatus & DSBSTATUS_PLAYING))
-			{
-				pSndInst->m_pSoundBuffer->Stop();
-				pSndInst->m_state = SOUND_OBJSTATE_PAUSE;
-			}
-
-			if (pSndInst->m_isPlayDelay)
-			{
-				if (pSndInst->oPlayDelay.m_iCurrPlayDelay >= 0 && pSndInst->oPlayDelay.m_aPlayDelay.size() > pSndInst->oPlayDelay.m_iCurrPlayDelay && pSndInst->oPlayDelay.m_aPlayDelay[pSndInst->oPlayDelay.m_iCurrPlayDelay].m_isDelay)
-					pSndInst->oPlayDelay.m_uiPlayDelayStart = GetTickCount() - pSndInst->oPlayDelay.m_uiPlayDelayStart;
-			}
-		}
-	}
-}
-
-//##########################################################################
-
-void CSoundManager::init(HWND hwnd)
-{
-	if (FAILED(DirectSoundCreate8(NULL, &m_pDeviceSound, NULL)))
-	{
-		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - could not create sound device", GEN_MSG_LOCATION);
-		return;// SOUND_INIT_ERR_INIT;
-	}
-
-	if (FAILED(m_pDeviceSound->SetCooperativeLevel(hwnd, DSSCL_EXCLUSIVE)))
-	{
-		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - could not create cooperative level", GEN_MSG_LOCATION);
-		return;// SOUND_INIT_ERR_CL;
-	}
-
-	DSBUFFERDESC  dsbd;
-	ZeroMemory(&dsbd, sizeof(DSBUFFERDESC));
-
-	dsbd.dwSize = sizeof(DSBUFFERDESC);
-	dsbd.dwFlags = DSBCAPS_PRIMARYBUFFER | DSBCAPS_CTRLVOLUME;
-	dsbd.dwBufferBytes = 0;
-	dsbd.lpwfxFormat = 0;
-
-	if (FAILED(m_pDeviceSound->CreateSoundBuffer(&dsbd, &m_pPrimaryBuffer, NULL)))
-	{
-		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - could not create primary buffer", GEN_MSG_LOCATION);
-		return;// SOUND_INIT_ERR_PRIM_BUF;
-	}
-
-	WAVEFORMATEX wfex;
-	ZeroMemory(&wfex, sizeof(WAVEFORMATEX));
-
-	wfex.wFormatTag = WAVE_FORMAT_PCM;
-	wfex.nChannels = SOUND_G_CHANELS_COUNT;
-	wfex.nSamplesPerSec = SOUND_G_BITS_PER_SEC;
-	wfex.wBitsPerSample = SOUND_G_BITS_PER_SAMPLE;
-	wfex.nBlockAlign = (wfex.wBitsPerSample / 8) * wfex.nChannels;
-	wfex.nAvgBytesPerSec = wfex.nSamplesPerSec * wfex.nBlockAlign;
-
-	if (FAILED(m_pPrimaryBuffer->SetFormat(&wfex)))
-	{
-		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - could not init format", GEN_MSG_LOCATION);
-		return;// SOUND_INIT_ERR_SET_FORMAT;
-	}
-
-	m_pPrimaryBuffer->SetVolume(0);
-	m_pPrimaryBuffer->Play(0, 0, DSBPLAY_LOOPING);
-}
-
-//
-
-SOUND_FILEFORMAT CSoundManager::fileFormat(const char* file)
-{
-	FILE *fp;
-
-	if (!(fp = fopen(file, "rb")))
-		return SOUND_FILEFORMAT_UNKNOWN;
-
-	CSoundWaveHeader Hdr;
-	fseek(fp, 0, SEEK_SET);
-	fread(&Hdr, 1, sizeof(CSoundWaveHeader), fp);
-
-	if (memcmp(Hdr.RiffSig, "RIFF", 4) == 0 || memcmp(Hdr.Sig, "WAVE", 4) == 0 || memcmp(Hdr.FormatSig, "fmt ", 4) == 0)
-	{
-		fclose(fp);
-		return SOUND_FILEFORMAT_WAV;
-	}
-
-	if (strcmp(fp->_base, "OggS") == 0)
-	{
-		fclose(fp);
-		return SOUND_FILEFORMAT_OGG;
-	}
-
-	fclose(fp);
-
-	return SOUND_FILEFORMAT_UNKNOWN;
-}
-
-void CSoundManager::setMainVolume(float fVolume)
-{
-	m_pPrimaryBuffer->SetVolume(lerpf(-10000, 0, fVolume));
-}
-
-//#############################################################################
-
-void CSoundManager::load(CSound* snd, const char* fpath, SOUND_FILEFORMAT fmt)
-{
-	if (fmt == SOUND_FILEFORMAT_OGG)
-		loadOGG(snd, fpath);
-	else if (fmt == SOUND_FILEFORMAT_WAV)
-		loadWAV(snd, fpath);
-}
-
-void CSoundManager::loadWAV(CSound* snd, const char* fpath)
-{
-	CSoundWaveHeader Hdr;
-	snd->m_pStream = fopen(fpath, "rb");
-
-	fseek(snd->m_pStream, 0, SEEK_SET);
-	fread(&Hdr, 1, sizeof(CSoundWaveHeader), snd->m_pStream);
-
-	snd->m_uiSizeFull = (Hdr.ChunkSize + (sizeof(char)* 4 + sizeof(int32_t))) - sizeof(CSoundWaveHeader);
-
-	/*if (snd->m_uiStreamSize == 0)
-		Hdr.DataSize = snd->m_uiSizeFull;
-	else
-		Hdr.DataSize = snd->m_uiStreamSize;*/
-
-	if (snd->m_uiStreamSize > 0)
-		Hdr.DataSize = snd->m_uiStreamSize;
-	
-	if (!(snd->m_pSoundBuffer = soundBufferCreate(&Hdr)))
-	{
-		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - could not create sound buffer [%s]", GEN_MSG_LOCATION, snd->m_szRPath);
-		return;
-	}
-
-	fseek(snd->m_pStream, sizeof(CSoundWaveHeader), SEEK_SET);
-
-	soundDataWAVLoad(snd->m_pSoundBuffer, 0, snd->m_pStream, Hdr.DataSize, 0);
-
-	snd->m_iLengthSec = snd->m_uiStreamSize / (Hdr.BytesPerSec);
-	snd->m_iChannelsCount = Hdr.Channels;
-	snd->m_iSampleRate = Hdr.SampleRate;
-	snd->m_iBitsPerSample = Hdr.BitsPerSample;
-	snd->m_uiBytesPerSec = ((snd->m_iBitsPerSample / 8) * snd->m_iChannelsCount) * snd->m_iSampleRate;
-
-	if (snd->m_uiStreamSize == 0)
-	{
-		fclose(snd->m_pStream);
-	}
-	else
-	{
-		snd->m_uiSplit1Size = snd->m_uiStreamSize / 4;
-		snd->m_uiSplit2Size = snd->m_uiSplit1Size * 2;
-		snd->m_uiSplit3Size = snd->m_uiSplit1Size * 3;
-
-		snd->m_isWork1 = false;
-		snd->m_isWork2 = false;
-		snd->m_isWork3 = false;
-		snd->m_isWork4 = false;
-
-		snd->m_isStarting = true;
-
-		snd->m_iRePlayCount = 0;
-		double tmpCRPE = double(snd->m_uiSizeFull) / double(snd->m_uiStreamSize);
-		float Count = 0;
-
-		while (1)
-		{
-			if (tmpCRPE > Count && tmpCRPE < Count + 1)
-			{
-				snd->m_iRePlayEndCount = Count + 1;
-				break;
-			}
-			else if (tmpCRPE == Count)
-			{
-				snd->m_iRePlayEndCount = Count;
-				break;
-			}
-			Count++;
-		}
-	}
-}
-
-IDirectSoundBuffer8* CSoundManager::soundBufferCreate(CSoundWaveHeader* hdr)
-{
-	IDirectSoundBuffer  *DSB;
-	IDirectSoundBuffer8 *m_pSoundBuffer;
-	DSBUFFERDESC dsbd;
-	WAVEFORMATEX wfex;
-
-	//устанавливаем формат воспроизведени§
-	ZeroMemory(&wfex, sizeof(WAVEFORMATEX));
-	wfex.wFormatTag = WAVE_FORMAT_PCM;
-	wfex.nChannels = hdr->Channels;
-	wfex.nSamplesPerSec = hdr->SampleRate;
-	wfex.wBitsPerSample = hdr->BitsPerSample;
-	wfex.nBlockAlign = wfex.wBitsPerSample / 8 * wfex.nChannels;
-	wfex.nAvgBytesPerSec = wfex.nSamplesPerSec * wfex.nBlockAlign;
-
-	//создаем звуковой буфер, использу¤ данные заголовка
-	ZeroMemory(&dsbd, sizeof(DSBUFFERDESC));
-	dsbd.dwSize = sizeof(DSBUFFERDESC);
-	dsbd.dwFlags = DSBCAPS_CTRLVOLUME | DSBCAPS_CTRLPAN | DSBCAPS_CTRLFREQUENCY | DSBCAPS_LOCSOFTWARE;
-	dsbd.dwBufferBytes = hdr->DataSize;
-	dsbd.lpwfxFormat = &wfex;
-	if (FAILED(m_pDeviceSound->CreateSoundBuffer(&dsbd, &DSB, NULL)))
-		return NULL;
-
-	if (FAILED(DSB->QueryInterface(IID_IDirectSoundBuffer8, (void**)&m_pSoundBuffer)))
-	{
-		DSB->Release();
-		return NULL;
-	}
-
-	return m_pSoundBuffer;
-}
-
-void CSoundManager::soundDataWAVLoad(IDirectSoundBuffer8* m_pSoundBuffer, int LockPos, FILE* data, int Size, UINT flag)
-{
-	BYTE  *Ptr1, *Ptr2;
-	DWORD Size1, Size2;
-
-	if (!Size)
-		return;
-
-	if (FAILED(m_pSoundBuffer->Lock(LockPos, Size, (void**)&Ptr1, &Size1, (void**)&Ptr2, &Size2, flag)))
-		return;
-
-	fread(Ptr1, 1, Size1, data);
-	if (Ptr2)
-		fread(Ptr2, 1, Size2, data);
-
-	m_pSoundBuffer->Unlock(Ptr1, Size1, Ptr2, Size2);
-}
-
-/////////////////////////////////////////////////////////////////////////////
-
-void CSoundManager::loadOGG(CSound* snd, const char* fpath)
-{
-	OggVorbis_File ogg;
-
-	snd->m_pStream = fopen(fpath, "rb");
-
-	if (snd->m_pStream == NULL)
-		return;
-
-	if (ov_fopen(fpath, &ogg))
-	{
-		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - error reading [%s]", GEN_MSG_LOCATION, snd->m_szRPath);
-		return;
-	}
-
-	snd->m_pVorbisFile = new OggVorbis_File;
-
-	ov_callbacks cb;
-	cb.close_func = OggCallbackClose;
-	cb.read_func = OggCallbackRead;
-	cb.seek_func = OggCallbackSeek;
-	cb.tell_func = OggCallbackTell;
-
-	ov_open_callbacks(snd->m_pStream, snd->m_pVorbisFile, 0, 0, cb);
-
-	vorbis_info *vi = ov_info(&ogg, -1);
-
-	if (!vi)
-	{
-		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - error reading (info) [%s]", GEN_MSG_LOCATION, snd->m_szRPath);
-		return;
-	}
-
-	snd->m_iLengthSec = float(ov_pcm_total(snd->m_pVorbisFile, -1)) / float(vi->rate);
-	snd->m_iChannelsCount = vi->channels;
-	snd->m_iSampleRate = vi->rate;
-	snd->m_iBitsPerSample = SOUND_OGG_BITS_PER_SAMPLE;
-	snd->m_uiBytesPerSec = ((snd->m_iBitsPerSample / 8) * snd->m_iChannelsCount) * snd->m_iSampleRate;
-	snd->m_uiSizeFull = ov_pcm_total(snd->m_pVorbisFile, -1) * 2 * vi->channels;
-
-	CSoundWaveHeader hdr;
-	hdr.Channels = vi->channels;
-	hdr.SampleRate = vi->rate;
-	hdr.BitsPerSample = SOUND_OGG_BITS_PER_SAMPLE;
-
-	if (snd->m_uiStreamSize == 0)
-		hdr.DataSize = snd->m_uiSizeFull;
-	else
-		hdr.DataSize = snd->m_uiStreamSize;
-
-	snd->m_pSoundBuffer = soundBufferCreate(&hdr);
-
-	if (!snd->m_pSoundBuffer)
-	{
-		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - could not create sound buffer [%s]", GEN_MSG_LOCATION, snd->m_szRPath);
-		return;
-	}
-
-	soundDataOGGLoad(snd->m_pVorbisFile, snd->m_pSoundBuffer, 0, hdr.DataSize, 0);
-
-	if (snd->m_uiStreamSize == 0)
-	{
-		fclose(snd->m_pStream);
-		ov_clear(&ogg);
-		ov_clear(snd->m_pVorbisFile);
-		mem_delete(snd->m_pVorbisFile);
-		snd->m_pVorbisFile = 0;
-	}
-	else
-	{
-		snd->m_uiSplit1Size = snd->m_uiStreamSize / 4;
-		snd->m_uiSplit2Size = snd->m_uiSplit1Size * 2;
-		snd->m_uiSplit3Size = snd->m_uiSplit1Size * 3;
-
-		snd->m_isWork1 = false;
-		snd->m_isWork2 = false;
-		snd->m_isWork3 = false;
-		snd->m_isWork4 = false;
-
-		snd->m_isStarting = true;
-
-		snd->m_iRePlayCount = 0;
-		double tmpCRPE = double(snd->m_uiSizeFull) / double(snd->m_uiStreamSize);
-		float Count = 0;
-
-		while (1)
-		{
-			if (tmpCRPE > Count && tmpCRPE < Count + 1)
-			{
-				snd->m_iRePlayEndCount = Count + 1;
-				break;
-			}
-			else if (tmpCRPE == Count)
-			{
-				snd->m_iRePlayEndCount = Count;
-				break;
-			}
-			Count++;
-		}
-	}
-	//return SOUND_OK;
-}
-
-void CSoundManager::soundDataOGGLoad(OggVorbis_File* VorbisFile, IDirectSoundBuffer8 *m_pSoundBuffer, int LockPos, int Size, UINT flag)
-{
-	char  *Ptr1, *Ptr2;
-	DWORD Size1, Size2;
-
-	if (!Size)
-		return;
-
-	if (FAILED(m_pSoundBuffer->Lock(LockPos, Size, (void**)&Ptr1, &Size1, (void**)&Ptr2, &Size2, flag)))
-		return;
-
-	DWORD total_read = 0;
-	long bites_read;
-	int current_section = 0;
-
-	while (total_read < Size1)
-	{
-		bites_read = ov_read(VorbisFile, Ptr1 + total_read, Size1 - total_read, 0, SOUND_OGG_BITS_PER_SAMPLE_WORD, 1, &current_section);
-
-		//конец файла
-		if (bites_read == 0)
-			break;
-
-		if (bites_read > 0)
-		{
-			total_read += bites_read;
-		}
-		else if (bites_read == OV_EINVAL)
-		{
-			//ошибка при декодировании, нужно поставить заглушку
-			LibReport(REPORT_MSG_LEVEL_WARNING,"OV_EINVAL");
-		}
-		else
-			break;
-	}
-
-
-	if (Ptr2)
-	{
-		total_read = 0;
-		while (total_read < Size2)
-		{
-			bites_read = ov_read(VorbisFile, Ptr2 + total_read, Size2 - total_read, 0, SOUND_OGG_BITS_PER_SAMPLE_WORD, 1, &current_section);
-
-			if (bites_read == 0)
-				break;
-
-			if (bites_read > 0)
-			{
-				total_read += bites_read;
-			}
-			else if (bites_read == OV_EINVAL)
-			{
-				//ошибка при декодировании, нужно поставить заглушку
-				LibReport(REPORT_MSG_LEVEL_WARNING, "OV_EINVAL");
-			}
-			else
-				break;
-		}
-	}
-
-	m_pSoundBuffer->Unlock(Ptr1, Size1, Ptr2, Size2);
-}
-
-//#############################################################################
-
-ID CSoundManager::soundCreate2d(const char *szFile, ID idChannel, UINT uiSizeStream)
-{
-	if (!szFile)
-		return SOUND_FAIL_ID;
-
-	String sFileData = szFile;
-	float fDistAudibleData = -1.f;
-	float fVolumeData = -1.f;
-	Array<UINT> aDelaysData;
-
-	SndGetDataFromStr(szFile, sFileData, fDistAudibleData, fVolumeData, aDelaysData);
-
-	char fullpath[SOUND_MAX_SIZE_STDPATH + SOUND_MAX_SIZE_PATH];
-	sprintf(fullpath, "%s%s", Core_RStringGet(G_RI_STRING_PATH_GS_SOUNDS), sFileData.c_str());
-
-	if (!FileExistsFile(fullpath))
-	{
-		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - file not found [%s]", GEN_MSG_LOCATION, fullpath);
-		return SOUND_FAIL_ID;
-	}
-
-	SOUND_FILEFORMAT fmt = fileFormat(fullpath);
-
-	if (fmt == SOUND_FILEFORMAT_UNKNOWN)
-	{
-		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - unknown format [%s]", GEN_MSG_LOCATION, sFileData.c_str());
-		return SOUND_FAIL_ID;
-	}
-
-	channelAdd(idChannel);
-
-	CSound *pSnd = new CSound();
-
-	if (fDistAudibleData > 0.f)
-		pSnd->m_fDistAudible = fDistAudibleData;
-
-	if (fVolumeData > -1.f)
-		pSnd->m_fVolume = fVolumeData;
-
-	strcpy(pSnd->m_szRPath, szFile);
-	pSnd->m_format = fmt;
-
-	pSnd->m_uiStreamSize = 0;
-	if (uiSizeStream > 0)
-	{
-		if (uiSizeStream < SOUND_MIN_SIZE_STREAM)
-			pSnd->m_uiStreamSize = SOUND_MIN_SIZE_STREAM;
-		else
-			pSnd->m_uiStreamSize = uiSizeStream;
-	}
-	
-	if (uiSizeStream == 0 && aDelaysData.size() > 0)
-	{
-		soundInitPlayDelay(pSnd, &(aDelaysData[0]), aDelaysData.size());
-	}
-
-	load(pSnd, fullpath, fmt);
-
-	DWORD dwFrec;
-	pSnd->m_pSoundBuffer->GetFrequency(&dwFrec);
-	pSnd->m_uiFrecOrigin = dwFrec;
-	pSnd->m_id = addSound(pSnd);
-	pSnd->m_idChannel = idChannel;
-	pSnd->m_iCountLoad = 1;
-
-	return pSnd->m_id;
-}
-
-ID CSoundManager::soundCreate3d(const char *file, ID idChannel, UINT size_stream, float dist)
-{
-	ID idSnd = soundCreate2d(file, idChannel, size_stream);
-	CSound* snd = 0;
-
-	if (idSnd < 0)
-		return idSnd;
-
-	snd = m_aSounds[idSnd];
-
-	if (snd->m_fDistAudible <= 0.f)
-		snd->m_fDistAudible = dist;
-
-	snd->m_is3d = true;
-	snd->m_fShiftPan = SOUND_SHIFTPAN_3D;
-	snd->m_idChannel = idChannel;
-	
-	return idSnd;
-}
-
-ID CSoundManager::soundCreate2dInst(const char *file, ID idChannel)
-{
-	ID idSnd = soundFind2dInst(file, idChannel);
-
-	if (idSnd >= 0)
-	{
-		++(m_aSounds[idSnd]->m_iCountLoad);
-		return idSnd;
-	}
-
-	idSnd = soundCreate2d(file, idChannel);
-
-	char szStr[SOUND_MAX_SIZE_FULLPATH];
-	szStr[0] = 0;
-	SOUND_CREATE_NAME(szStr, idChannel, file);
-
-	m_a2dInst[szStr] = idSnd;
-	m_aSounds[idSnd]->m_isInst = true;
-	m_aSounds[idSnd]->m_idChannel = idChannel;
-	return idSnd;
-}
-
-ID CSoundManager::soundCreate3dInst(const char *file, ID idChannel, float dist)
-{
-	ID idSnd = soundFind3dInst(file, idChannel);
-
-	if (idSnd >= 0)
-	{
-		++(m_aSounds[idSnd]->m_iCountLoad);
-		return idSnd;
-	}
-
-	idSnd = soundCreate3d(file, idChannel, 0, dist);
-
-	char szStr[SOUND_MAX_SIZE_FULLPATH];
-	szStr[0] = 0;
-	SOUND_CREATE_NAME(szStr, idChannel, file);
-
-	m_a3dInst[szStr] = idSnd;
-	m_aSounds[idSnd]->m_isInst = true;
-	m_aSounds[idSnd]->m_idChannel = idChannel;
-
-	return idSnd;
-}
-
-ID CSoundManager::soundFind2dInst(const char *file, ID idChannel)
-{
-	char szStr[SOUND_MAX_SIZE_FULLPATH];
-	szStr[0] = 0;
-	SOUND_CREATE_NAME(szStr, idChannel, file);
-
-	ID id = SOUND_FAIL_ID;
-	const AssotiativeArray<AAStringNR, ID, false, 16>::Node* pNode = 0;
-	if (m_a2dInst.KeyExists(szStr, &pNode))
-		id = *(pNode->Val);
-
-	return id;
-}
-
-ID CSoundManager::soundFind3dInst(const char *file, ID idChannel)
-{
-	char szStr[SOUND_MAX_SIZE_FULLPATH];
-	szStr[0] = 0;
-	SOUND_CREATE_NAME(szStr, idChannel, file);
-
-	ID id = SOUND_FAIL_ID;
-	const AssotiativeArray<AAStringNR, ID, false, 16>::Node* pNode = 0;
-	if (m_a3dInst.KeyExists(szStr, &pNode))
-		id = *(pNode->Val);
-
-	return id;
-}
-
-ID CSoundManager::soundInstancePlay(ID idSound, bool isBlocked, bool isLooping, UINT *pArrDelay, int iSizeArrDelay, const float3 *pPos, float fVolume, float fPan)
-{
-	SOUND_PRECOND(idSound, SOUND_FAIL_ID);
-
-	CSound *pSnd = m_aSounds[idSound];
-
-	SOUND_CHANNEL_PLAYING(pSnd->m_idChannel, SOUND_FAIL_ID);
-
-	if (pSnd->m_uiStreamSize > 0)
-	{
-		LibReport(REPORT_MSG_LEVEL_WARNING, "%s - can not create sound instance for streaming [%s]", GEN_MSG_LOCATION, pSnd->m_szRPath);
-		return SOUND_FAIL_ID;
-	}
-
-	if (pSnd->m_is3d && !pPos)
-	{
-		LibReport(REPORT_MSG_LEVEL_WARNING, "%s - not send position for 3d sound instance [%s]", GEN_MSG_LOCATION, pSnd->m_szRPath);
-		return SOUND_FAIL_ID;
-	}
-
-	if (!(pSnd->m_is3d) && pPos)
-	{
-		LibReport(REPORT_MSG_LEVEL_WARNING, "%s - uresolved send position for 2d sound instance [%s]", GEN_MSG_LOCATION, pSnd->m_szRPath);
-		return SOUND_FAIL_ID;
-	}
-
-	ID idInstance = -1;
-	for (int i = 0; i < pSnd->m_aInstances.size(); ++i)
-	{
-		if (pSnd->m_aInstances[i].m_busy == SOUND_SNDINSTANCE_BUSY_FREE)
-		{
-			idInstance = i;
-			break;
-		}
-	}
-
-	if (idInstance < 0)
-	{
-		IDirectSoundBuffer* tsb;
-		IDirectSoundBuffer8* tsb8;
-		m_pDeviceSound->DuplicateSoundBuffer(pSnd->m_pSoundBuffer, &tsb);
-		if (!tsb)
-		{
-			LibReport(REPORT_MSG_LEVEL_WARNING, "%s - can not create sound instance [%s], this is big problem", GEN_MSG_LOCATION, pSnd->m_szRPath);
-			return SOUND_FAIL_ID;
-		}
-		tsb->QueryInterface(IID_IDirectSoundBuffer8, (void**)&tsb8);
-		pSnd->m_aInstances.push_back(CSoundInstance(tsb8, pSnd->m_uiBytesPerSec, (pPos ? &float3_t(*pPos) : 0), SOUND_SNDINSTANCE_BUSY_TEMP));
-		idInstance = pSnd->m_aInstances.size() - 1;
-	}
-
-	if (idInstance >= 0)
-	{
-		if (isBlocked || isLooping)
-			pSnd->m_aInstances[idInstance].m_busy = SOUND_SNDINSTANCE_BUSY_LOCKED;
-		else
-			pSnd->m_aInstances[idInstance].m_busy = SOUND_SNDINSTANCE_BUSY_TEMP;
-
-		//если установлены задержки воспроизведения
-		if (pArrDelay && iSizeArrDelay > 0 || iSizeArrDelay < 0)
-			soundInitPlayDelay(&(pSnd->m_aInstances[idInstance]), pArrDelay, iSizeArrDelay);
-
-		pSnd->m_aInstances[idInstance].m_fVolume = saturatef(fVolume);
-		
-		//если 3д звук
-		if (pSnd->m_is3d && pPos)
-		{
-			pSnd->m_aInstances[idInstance].m_pSoundBuffer->SetVolume(lerpf(-10000, 0, pSnd->m_aInstances[idInstance].m_fVolume * Snd3dComVolume((*pPos), m_vOldViewPos, pSnd->m_fDistAudible)));
-			pSnd->m_aInstances[idInstance].m_pSoundBuffer->SetPan(Snd3dComPan((*pPos), m_vOldViewPos, m_vOldViewDir, pSnd->m_fDistAudible, pSnd->m_fShiftPan));
-		}
-		//иначе фоновый
-		else
-		{
-			pSnd->m_aInstances[idInstance].m_pSoundBuffer->SetVolume(lerpf(-10000, 0, pSnd->m_aInstances[idInstance].m_fVolume));
-			pSnd->m_aInstances[idInstance].m_pSoundBuffer->SetPan((fPan > 0) ? (10000 - (fPan * 100)) - 10000 : 10000 - (10000 + (fPan * 100)));
-		}
-		
-		pSnd->m_aInstances[idInstance].m_pSoundBuffer->SetCurrentPosition(0);
-		pSnd->m_aInstances[idInstance].m_isLooping = isLooping;
-		
-		if (!(pArrDelay && iSizeArrDelay > 0))
-			pSnd->m_aInstances[idInstance].m_pSoundBuffer->Play(0, 0, ((pSnd->m_aInstances[idInstance].m_isLooping) ? DSBPLAY_LOOPING : 0));
-		
-		pSnd->m_aInstances[idInstance].m_state = SOUND_OBJSTATE_PLAY;
-
-		return idInstance;
-	}
-
-	return SOUND_FAIL_ID;
-}
-
-bool CSoundManager::soundInstancePlaying(ID idSound, ID idInstance)
-{
-	SOUND_PRECOND(idSound, false);
-
-	CSound* snd = m_aSounds[idSound];
-
-	if (idInstance >= 0)
-	{
-		/*DWORD dwStatus;
-		snd->m_aInstances[idInstance].m_pSoundBuffer->GetStatus(&dwStatus);
-		return (dwStatus & DSBSTATUS_PLAYING);*/
-		return (snd->m_aInstances[idInstance].m_state != SOUND_OBJSTATE_STOP);
-	}
-
-	return false;
-}
-
-void CSoundManager::soundInstanceStop(ID idSound, ID idInstance)
-{
-	SOUND_PRECOND(idSound, _VOID);
-
-	CSound* snd = m_aSounds[idSound];
-
-	if (idInstance >= 0)
-	{
-		snd->m_aInstances[idInstance].m_isLooping = false;
-		snd->m_aInstances[idInstance].m_pSoundBuffer->Stop();
-		snd->m_aInstances[idInstance].m_state = SOUND_OBJSTATE_STOP;
-	}
-}
-
-void CSoundManager::soundInstanceFree(ID idSound, ID idInstance)
-{
-	SOUND_PRECOND(idSound, _VOID);
-
-	CSound* snd = m_aSounds[idSound];
-
-	if (idInstance >= 0)
-	{
-		if (snd->m_aInstances[idInstance].m_busy == SOUND_SNDINSTANCE_BUSY_LOCKED)
-			snd->m_aInstances[idInstance].m_busy = SOUND_SNDINSTANCE_BUSY_TEMP;
-	}
-}
-
-ID CSoundManager::addSound(CSound* snd)
-{
-	for (int i = 0, l = m_aSounds.size(); i < l; ++i)
-	{
-		if (m_aSounds[i] == 0)
-		{
-			m_aSounds[i] = snd;
-			return i;
-		}
-	}
-
-	m_aSounds.push_back(snd);
-
-	return m_aSounds.size() - 1;
-}
-
-bool CSoundManager::soundIsInit(ID id)
-{
-	return ((ID)m_aSounds.size() > id && m_aSounds[id] != 0);
-}
-
-void CSoundManager::soundDelete(ID id)
-{
-	SOUND_PRECOND(id, _VOID);
-
-	CSound* snd = m_aSounds[id];
-	--(snd->m_iCountLoad);
-
-	if (snd->m_iCountLoad > 0)
-		return;
-
-	if (snd->m_isInst)
-	{
-		char szStr[SOUND_MAX_SIZE_FULLPATH];
-		szStr[0] = 0;
-		SOUND_CREATE_NAME(szStr, snd->m_idChannel, snd->m_szRPath);
-
-		if (snd->m_is3d)
-			m_a3dInst.erase(szStr);
-		else
-			m_a2dInst.erase(szStr);
-	}
-	mem_delete(m_aSounds[id]);
-}
-
-//#############################################################################
-
-void CSoundManager::soundPlay(ID id, bool isLooping, UINT *pArrDelay, int iSizeArrDelay)
-{
-	SOUND_PRECOND(id, _VOID);
-
-	CSound *pSnd = m_aSounds[id];
-
-	if (pSnd->m_uiStreamSize != 0 && pArrDelay && iSizeArrDelay > 0)
-	{
-		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - unresolved play delay for streming playing, file %s", GEN_MSG_LOCATION, pSnd->m_szRPath);
-		return;
-	}
-
-	if (!m_aChannels[pSnd->m_idChannel])
-		return;
-
-	if (pArrDelay && iSizeArrDelay > 0 || iSizeArrDelay < 0)
-		soundInitPlayDelay(pSnd, pArrDelay, iSizeArrDelay);
-
-	pSnd->m_isLooping = isLooping;
-
-	if (pSnd->m_pSoundBuffer)
-	{
-		if (pArrDelay && iSizeArrDelay > 0)
-			pSnd->m_pSoundBuffer->SetCurrentPosition(0);
-		else
-			pSnd->m_pSoundBuffer->Play(0, 0, (pSnd->m_uiStreamSize || pSnd->m_isLooping ? DSBPLAY_LOOPING : 0));
-
-		pSnd->m_state = SOUND_OBJSTATE_PLAY;
-	}
-}
-
-void CSoundManager::soundInitPlayDelay(CSoundBase *pSndbase, UINT *pArrDelay, int iSizeArrDelay)
-{
-	if (!pSndbase)
-		return;
-
-	if (iSizeArrDelay < 0)
-	{
-		if (pSndbase->oPlayDelay.m_aPlayDelay.size() <= 0)
-		{
-			LibReport(REPORT_MSG_LEVEL_ERROR, "%s - previous delay data not init", GEN_MSG_LOCATION);
-		}
-
-		pSndbase->oPlayDelay.m_iCurrPlayDelay = 0;
-		pSndbase->m_isPlayDelay = true;
-		return;
-	}
-
-	if (pArrDelay == 0 || iSizeArrDelay == 0)
-		return;
-
-	pSndbase->oPlayDelay.m_aPlayDelay.clearFast();
-	pSndbase->oPlayDelay.m_iCurrPlayDelay = 0;
-	pSndbase->m_isPlayDelay = true;
-	pSndbase->oPlayDelay.m_uiPlayDelayStart = GetTickCount();
-
-	bool isEven = true;
-	for (int i = 0, il = iSizeArrDelay; i < il; ++i)
-	{
-		pSndbase->oPlayDelay.m_aPlayDelay.push_back(CPlayDelay::CTimeDelay(pArrDelay[i], isEven));
-		isEven = !isEven;
-	}
-}
-
-void CSoundManager::soundPause(ID id)
-{
-	SOUND_PRECOND(id, _VOID);
-
-	CSound* snd = m_aSounds[id];
-
-	if (!m_aChannels[snd->m_idChannel])
-		return;
-
-	if (snd->m_pSoundBuffer)
-	{
-		snd->m_pSoundBuffer->Stop();
-		snd->m_state = SOUND_OBJSTATE_PAUSE;
-	}
-}
-
-void CSoundManager::soundStop(ID id)
-{
-	SOUND_PRECOND(id, _VOID);
-
-	CSound* snd = m_aSounds[id];
-
-	if (!m_aChannels[snd->m_idChannel])
-		return;
-
-	if (snd->m_pSoundBuffer)
-	{
-		snd->m_pSoundBuffer->Stop();
-		snd->m_pSoundBuffer->SetCurrentPosition(0);
-		snd->m_state = SOUND_OBJSTATE_STOP;
-		snd->m_isLooping = false;
-		snd->m_isPlayDelay = false;
-	}
-}
-
-void CSoundManager::soundSetState(ID id, SOUND_OBJSTATE state)
-{
-	SOUND_PRECOND(id, _VOID);
-
-	if (state == SOUND_OBJSTATE_PLAY)
-		soundPlay(id);
-	else if (state == SOUND_OBJSTATE_PAUSE)
-		soundPause(id);
-	else if (state == SOUND_OBJSTATE_STOP)
-		soundStop(id);
-}
-
-SOUND_OBJSTATE CSoundManager::soundGetState(ID id)
-{
-	SOUND_PRECOND(id, SOUND_OBJSTATE_STOP);
-
-	CSound* snd = m_aSounds[id];
-	return snd->m_state;
-}
-
-void CSoundManager::soundSetPosPlay(ID id, UINT pos)
-{
-	SOUND_PRECOND(id, _VOID);
-
-	CSound* snd = m_aSounds[id];
-
-	DWORD PosInBytes = 0;
-	if (snd->m_pSoundBuffer)
-	{
-		PosInBytes = pos * (snd->m_uiBytesPerSec / 1000);
-
-		if (snd->m_uiStreamSize)
-		{
-			WORD HowCountRePlay = 0;
-			for (WORD i = 0; i <= snd->m_iRePlayEndCount; i++)
-			{
-				if ((i * snd->m_uiStreamSize <= PosInBytes && (i + 1) * snd->m_uiStreamSize >= PosInBytes) || i * snd->m_uiStreamSize == PosInBytes)
-				{
-					HowCountRePlay = i;
-					break;
-				}
-			}
-
-			//wav
-			if (snd->m_format == SOUND_FILEFORMAT_WAV)
-				fseek(snd->m_pStream, sizeof(CSoundWaveHeader)+(HowCountRePlay  * snd->m_uiStreamSize), SEEK_SET);
-			//ogg
-			else if (snd->m_format == SOUND_FILEFORMAT_OGG)
-				ov_pcm_seek(snd->m_pVorbisFile, (HowCountRePlay  * snd->m_uiStreamSize) / (2 * snd->m_iChannelsCount));
-
-			DWORD SizeCountRePlay = PosInBytes - (snd->m_uiStreamSize * HowCountRePlay);
-
-			reLoadSplit(id, 0, snd->m_uiStreamSize);
-
-			snd->m_iRePlayCount = HowCountRePlay;
-			snd->m_pSoundBuffer->SetCurrentPosition(SizeCountRePlay);
-
-			for (WORD i = 0; i<4; i++)
-			{
-				if (SizeCountRePlay >= snd->m_uiSplit1Size * i && SizeCountRePlay < snd->m_uiSplit1Size * (i + 1))
-				{
-					snd->m_iSplitActive = i + 1;
-					break;
-				}
-			}
-
-			if (snd->m_iSplitActive > 1)
-				snd->m_isStarting = false;
-			else
-				snd->m_isStarting = true;
-
-			if (snd->m_iSplitActive - 2 > 0 && snd->m_iSplitActive - 2 < 5)
-			{
-				for (WORD i = 0; i<snd->m_iSplitActive - 2; i++)
-					reLoadSplit(id, snd->m_uiSplit1Size*i, snd->m_uiSplit1Size);
-			}
-
-			snd->m_isWork1 = snd->m_isWork2 = snd->m_isWork3 = snd->m_isWork4 = false;
-		}
-		else
-			snd->m_pSoundBuffer->SetCurrentPosition(PosInBytes);
-	}
-}
-
-UINT CSoundManager::soundGetPosPlay(ID id)
-{
-	SOUND_PRECOND(id, 0);
-
-	CSound* snd = m_aSounds[id];
-	DWORD dwPosBuff, dwBytes, dwPos = 0;
-	if (snd->m_pSoundBuffer)
-	{
-		snd->m_pSoundBuffer->GetCurrentPosition(&dwPosBuff, 0);
-
-		if (snd->m_uiStreamSize)
-			dwBytes = snd->m_iRePlayCount * snd->m_uiStreamSize + dwPosBuff;
-		else
-			dwBytes = dwPosBuff;
-
-		dwPos = dwBytes / (snd->m_uiBytesPerSec / 1000);
-	}
-	return dwPos;
-}
-
-void CSoundManager::soundSetVolume(ID id, float fVolume)
-{
-	SOUND_PRECOND(id, _VOID);
-
-	CSound *pSnd = m_aSounds[id];
-	pSnd->m_fVolume = saturatef(fVolume);
-
-	if (pSnd->m_pSoundBuffer)
-	{
-		int iVolume = -10000 + (pSnd->m_fVolume * 10000);
-
-		if (!pSnd->m_is3d)
-			pSnd->m_pSoundBuffer->SetVolume(iVolume);
-	}
-}
-
-float CSoundManager::soundGetVolume(ID id)
-{
-	SOUND_PRECOND(id, 0);
-
-	CSound *pSnd = m_aSounds[id];
-	return pSnd->m_fVolume;
-}
-
-
-void CSoundManager::soundSetPan(ID id, float fPan)
-{
-	SOUND_PRECOND(id, _VOID);
-
-	CSound *pSnd = m_aSounds[id];
-
-	if (pSnd->m_is3d)
-		return;
-
-	pSnd->m_fPan = clampf(fPan,-1.f,1.f);
-
-	if (pSnd->m_pSoundBuffer)
-	{
-		long lValue = (pSnd->m_fPan > 0) ? (10000 - (pSnd->m_fPan * 100)) - 10000 : 10000 - (10000 + (pSnd->m_fPan * 100));
-
-		pSnd->m_pSoundBuffer->SetPan(lValue);
-	}
-}
-
-float CSoundManager::soundGetPan(ID id)
-{
-	SOUND_PRECOND(id, 0);
-
-	CSound *pSnd = m_aSounds[id];
-
-	if (pSnd->m_is3d)
-		return 0;
-
-	return pSnd->m_fPan;
-}
-
-
-void CSoundManager::soundSetFreqCurr(ID id, UINT value)
-{
-	SOUND_PRECOND(id, _VOID);
-
-	CSound* snd = m_aSounds[id];
-	if (snd->m_pSoundBuffer)
-		snd->m_pSoundBuffer->SetFrequency(value);
-}
-
-UINT CSoundManager::soundGetFreqCurr(ID id)
-{
-	SOUND_PRECOND(id, 0);
-
-	CSound* snd = m_aSounds[id];
-	static DWORD Value = 0;
-	if (snd->m_pSoundBuffer)
-		snd->m_pSoundBuffer->GetFrequency(&Value);
-	return Value;
-}
-
-UINT CSoundManager::soundGetFreqOrigin(ID id)
-{
-	SOUND_PRECOND(id, 0);
-
-	CSound* snd = m_aSounds[id];
-	if (snd->m_pSoundBuffer)
-		return snd->m_uiFrecOrigin;
-
-	return 0;
-}
-
-void CSoundManager::soundSetPosWorld(ID id, const float3* pos)
-{
-	SOUND_PRECOND(id, _VOID);
-	if (pos)
-		m_aSounds[id]->m_vPosition = *pos;
-}
-
-void CSoundManager::soundGetPosWorld(ID id, float3* pos)
-{
-	SOUND_PRECOND(id, _VOID);
-	if (pos)
-		*pos = m_aSounds[id]->m_vPosition;
-}
-
-int CSoundManager::soundGetLengthSec(ID id)
-{
-	SOUND_PRECOND(id, 0);
-
-	return m_aSounds[id]->m_iLengthSec;
-}
-
-UINT CSoundManager::soundGetBytesPerSec(ID id)
-{
-	SOUND_PRECOND(id, 0);
-
-	return m_aSounds[id]->m_uiBytesPerSec;
-}
-
-UINT CSoundManager::soundGetSize(ID id)
-{
-	SOUND_PRECOND(id, 0);
-
-	return m_aSounds[id]->m_uiSizeFull;
-}
-
-void CSoundManager::soundGetFile(ID id, char* path)
-{
-	SOUND_PRECOND(id, _VOID);
-
-	if(path)
-		strcpy(path,m_aSounds[id]->m_szRPath);
-}
-
-
-float CSoundManager::soundGetDistAudible(ID id)
-{
-	SOUND_PRECOND(id, 0);
-
-	return m_aSounds[id]->m_fDistAudible;
-}
-
-void CSoundManager::soundSetDistAudible(ID id, float value)
-{
-	SOUND_PRECOND(id, _VOID);
-
-	m_aSounds[id]->m_fDistAudible = value;
-}
-
-//#############################################################################
-
-void CSoundManager::reLoadSplit(ID id, UINT Pos, UINT Size)
-{
-	SOUND_PRECOND(id, _VOID);
-
-	CSound* snd = m_aSounds[id];
-	if (snd->m_pSoundBuffer)
-	{
-		//wav
-		if (snd->m_format == SOUND_FILEFORMAT_WAV)
-			soundDataWAVLoad(snd->m_pSoundBuffer, Pos, snd->m_pStream, Size, 0);
-		//ogg
-		else if (snd->m_format == SOUND_FILEFORMAT_OGG)
-		{
-			soundDataOGGLoad(snd->m_pVorbisFile, snd->m_pSoundBuffer, Pos, Size, 0);
-		}
-	}
-}
-
-void CSoundManager::UpdatePlayDelay(CSoundBase *pSndBase)
-{
-	if (!pSndBase)
-		return;
-
-	DWORD dwStatus = 0;
-
-	//если вопроизведение с задержками
-	if (pSndBase->m_isPlayDelay)
-	{
-		if (pSndBase->m_state == SOUND_OBJSTATE_PLAY && pSndBase->m_isLooping && pSndBase->oPlayDelay.m_iCurrPlayDelay == -1 && SUCCEEDED(pSndBase->m_pSoundBuffer->GetStatus(&dwStatus)) && !(dwStatus & DSBSTATUS_PLAYING))
-		{
-			pSndBase->oPlayDelay.m_iCurrPlayDelay = 0;
-			pSndBase->oPlayDelay.m_uiPlayDelayStart = 0;
-			pSndBase->m_pSoundBuffer->SetCurrentPosition(0);
-			pSndBase->m_pSoundBuffer->Play(0, 0, 0);
-		}
-
-		dwStatus = 0;
-
-		DWORD dwCurrPos = 0;
-
-		pSndBase->m_pSoundBuffer->GetCurrentPosition(&dwCurrPos, 0);
-		dwCurrPos = dwCurrPos / (pSndBase->m_uiBytesPerSec / 1000);
-
-		//если текущий ключ в массиве задержек валиден
-		if (pSndBase->oPlayDelay.m_iCurrPlayDelay >= 0 && pSndBase->oPlayDelay.m_aPlayDelay.size() > pSndBase->oPlayDelay.m_iCurrPlayDelay)
-		{
-			if (
-				//если текущий ключ в массиве это не задержка и текущая время воспроизведения больше либо равно установленному
-				(!(pSndBase->oPlayDelay.m_aPlayDelay[pSndBase->oPlayDelay.m_iCurrPlayDelay].m_isDelay) && dwCurrPos >= pSndBase->oPlayDelay.m_aPlayDelay[pSndBase->oPlayDelay.m_iCurrPlayDelay].m_uiTime) ||
-
-				//если текущий ключ в массиве это задержка и время с засечки уже превысило установленное значение либо равно ему
-				(pSndBase->oPlayDelay.m_aPlayDelay[pSndBase->oPlayDelay.m_iCurrPlayDelay].m_isDelay && (GetTickCount() - pSndBase->oPlayDelay.m_uiPlayDelayStart) >= pSndBase->oPlayDelay.m_aPlayDelay[pSndBase->oPlayDelay.m_iCurrPlayDelay].m_uiTime)
-				)
-			{
-				//инкрементируем текущий ключ
-				++(pSndBase->oPlayDelay.m_iCurrPlayDelay);
-
-				//если следующий ключ валиден
-				if (pSndBase->oPlayDelay.m_aPlayDelay.size() > pSndBase->oPlayDelay.m_iCurrPlayDelay)
-				{
-					//если задержка
-					if (pSndBase->oPlayDelay.m_aPlayDelay[pSndBase->oPlayDelay.m_iCurrPlayDelay].m_isDelay)
-					{
-						//естанавливаем и засекаем время
-						pSndBase->m_pSoundBuffer->Stop();
-						pSndBase->oPlayDelay.m_uiPlayDelayStart = GetTickCount();
-					}
-					else
-					{
-						//воспроизводим и обнуляем засечку
-						pSndBase->m_pSoundBuffer->Play(0, 0, 0);
-						pSndBase->oPlayDelay.m_uiPlayDelayStart = 0;
-					}
-				}
-				//иначе ключ в массиве задержек невалиден
-				else
-				{
-					//воспроизводим остаток и обнуляем данные настроек
-					pSndBase->m_pSoundBuffer->Play(0, 0, 0);
-
-					if (!(pSndBase->m_isLooping))
-						pSndBase->m_isPlayDelay = false;
-
-					pSndBase->oPlayDelay.m_iCurrPlayDelay = -1;
-					pSndBase->oPlayDelay.m_uiPlayDelayStart = 0;
-				}
-			}
-		}
-	}
-}
-
-void CSoundManager::update(const float3* viewpos, const float3* viewdir)
-{
-	int tmpSoundsPlayCount = 0;
-	int tmpSoundsLoadCount = 0;
-
-	CSound *pSnd = 0;
-	DWORD dwStatus = 0;
-	for(UINT i = 0; i < m_aSounds.size(); ++i)
-	{
-		pSnd = m_aSounds[i];
-
-		//если есть звук и его канал вопроизводится
-		if (pSnd && m_aChannels[pSnd->m_idChannel])
-		{
-			//если вопроизведение с задержками
-			if (pSnd->m_state == SOUND_OBJSTATE_PLAY && pSnd->m_uiStreamSize == 0 && pSnd->m_isPlayDelay)
-			{
-				UpdatePlayDelay((CSoundBase*)pSnd);
-			}
-
-			dwStatus = 0;
-			
-			//если звук воспроизводится без задержек и буфер уже не прогирывается а состояние звука "проигрывается" тогда выключаем звук
-			if (!pSnd->m_isPlayDelay && SUCCEEDED(pSnd->m_pSoundBuffer->GetStatus(&dwStatus)) && !(dwStatus & DSBSTATUS_PLAYING) && pSnd->m_state == SOUND_OBJSTATE_PLAY)
-				soundSetState(i, SOUND_OBJSTATE_STOP);
-
-			++tmpSoundsLoadCount;
-			if(pSnd->m_state == SOUND_OBJSTATE_PLAY)
-				++tmpSoundsPlayCount;
-
-			//если анализируемый звук 3d
-			if(pSnd->m_is3d && pSnd->m_pSoundBuffer && viewpos && viewdir)
-			{
-				//устанавливаем ему параметры воспроизведения
-				pSnd->m_pSoundBuffer->SetVolume(lerpf(-10000, 0, pSnd->m_fVolume * Snd3dComVolume(pSnd->m_vPosition, (*viewpos), pSnd->m_fDistAudible)));
-				pSnd->m_pSoundBuffer->SetPan(Snd3dComPan(pSnd->m_vPosition, (*viewpos), (*viewdir), pSnd->m_fDistAudible, pSnd->m_fShiftPan));
-
-				//если есть инстансы
-				if(pSnd->m_aInstances.size() > 0)
-				{
-					//проходимся по всему массиву инстансов и устанавливаем параметры воспроизведения
-					for(int k = 0, l = pSnd->m_aInstances.size(); k < l; ++k)
-					{
-						pSnd->m_pSoundBuffer->SetVolume(lerpf(-10000, 0, pSnd->m_fVolume * Snd3dComVolume(pSnd->m_aInstances[k].m_vPos, (*viewpos), pSnd->m_fDistAudible)));
-						pSnd->m_pSoundBuffer->SetPan(Snd3dComPan(pSnd->m_aInstances[k].m_vPos, (*viewpos), (*viewdir), pSnd->m_fDistAudible, pSnd->m_fShiftPan));
-					}
-				}
-			}
-
-			for(int k = 0, kl = pSnd->m_aInstances.size(); k < kl; ++k)
-			{
-				//нужно ли это здесь?
-				/*if (pSnd->m_aInstances[k].m_state != SOUND_OBJSTATE_PLAY)
-					continue;*/
-
-				//если вопроизведение с задержками
-				if (pSnd->m_aInstances[k].m_isPlayDelay)
-				{
-					if (pSnd->m_aInstances[k].m_state == SOUND_OBJSTATE_PLAY)
-						UpdatePlayDelay(&(pSnd->m_aInstances[k]));
-				}
-				//иначе не установлено что звук воспроизводится с задержками
-				else
-				{
-					//обрабатываем состояния
-					dwStatus = 0;
-
-					//если буфер не проигрывается и состояние инстанса "временно блокирован", тогда освобождаем инстанс
-					if (SUCCEEDED(pSnd->m_aInstances[k].m_pSoundBuffer->GetStatus(&dwStatus)) && !(dwStatus & DSBSTATUS_PLAYING) && pSnd->m_aInstances[k].m_busy != SOUND_SNDINSTANCE_BUSY_LOCKED)
-						pSnd->m_aInstances[k].m_busy = SOUND_SNDINSTANCE_BUSY_FREE;
-
-					//если буфер инстанса не проигрывается а состояние инстанса "проигрывается", тогда устанавливаем состояние "непроигрывается"
-					if (pSnd->m_aInstances[k].m_state == SOUND_OBJSTATE_PLAY && !(dwStatus & DSBSTATUS_PLAYING))
-						pSnd->m_aInstances[k].m_state = SOUND_OBJSTATE_STOP;
-				}
-			}
-
-			if(pSnd->m_uiStreamSize && pSnd->m_pSoundBuffer != 0)
-			{
-				DWORD pos;
-				pSnd->m_pSoundBuffer->GetCurrentPosition(&pos, 0);
-
-				if (pos >= pSnd->m_uiSplit1Size && pos < pSnd->m_uiSplit2Size && !pSnd->m_isWork2)
-				{
-					reLoadSplit(i, 0, pSnd->m_uiSplit1Size);
-					pSnd->m_isWork2 = true;
-					pSnd->m_isWork1 = false; pSnd->m_isWork3 = false; pSnd->m_isWork4 = false;
-					pSnd->m_iSplitActive = 2;
-				}
-				else if (pos >= pSnd->m_uiSplit2Size && pos < pSnd->m_uiSplit3Size && !pSnd->m_isWork3)
-				{
-					pSnd->m_isWork3 = true;
-					pSnd->m_isWork1 = false; pSnd->m_isWork2 = false; pSnd->m_isWork4 = false;
-					reLoadSplit(i, pSnd->m_uiSplit1Size, pSnd->m_uiSplit1Size);
-					pSnd->m_iSplitActive = 3;
-				}
-				else if (pos >= pSnd->m_uiSplit3Size && pos < pSnd->m_uiStreamSize && !pSnd->m_isWork4)
-				{
-					pSnd->m_isWork4 = true;
-					pSnd->m_isWork1 = false; pSnd->m_isWork2 = false; pSnd->m_isWork3 = false;
-					reLoadSplit(i, pSnd->m_uiSplit2Size, pSnd->m_uiSplit1Size);
-					pSnd->m_iSplitActive = 4;
-				}
-				else if (pos < pSnd->m_uiSplit1Size && !pSnd->m_isWork1)
-				{
-					pSnd->m_isWork1 = true;
-					pSnd->m_isWork2 = false; pSnd->m_isWork3 = false; pSnd->m_isWork4 = false;
-					if(!pSnd->m_isStarting)
-					{
-						reLoadSplit(i, pSnd->m_uiSplit3Size, pSnd->m_uiSplit1Size);
-						pSnd->m_iRePlayCount++;
-					}
-					pSnd->m_iSplitActive = 1;
-					pSnd->m_isStarting = false;
-				}
-
-
-				if(pSnd->m_iRePlayCount + 1 == pSnd->m_iRePlayEndCount)
-				{
-					if(pSnd->m_uiSizeFull <= (pSnd->m_uiStreamSize * pSnd->m_iRePlayCount + pos))
-					{
-						if(!pSnd->m_isLooping)
-							soundStop(i);
-
-						//wav
-						if(pSnd->m_format == SOUND_FILEFORMAT_WAV)
-							fseek(pSnd->m_pStream, sizeof(CSoundWaveHeader), SEEK_SET);
-						//ogg
-						else if(pSnd->m_format == SOUND_FILEFORMAT_OGG)
-							ov_pcm_seek(pSnd->m_pVorbisFile, 0);
-
-						reLoadSplit(i, 0, pSnd->m_uiStreamSize);
-
-						pSnd->m_pSoundBuffer->SetCurrentPosition(0);
-
-						pSnd->m_iRePlayCount = 0;
-						pSnd->m_isStarting = true;
-
-						pSnd->m_isWork1 = false; pSnd->m_isWork2 = false; pSnd->m_isWork3 = false; pSnd->m_isWork4 = false;
-					}
-				}
-			}
-		}
-	}
-
-	m_iSoundsPlayCount = tmpSoundsPlayCount;
-	m_iSoundsLoadCount = tmpSoundsLoadCount;
-
-	m_vOldViewPos = *viewpos;
-	m_vOldViewDir = *viewdir;
-}
-
-int CSoundManager::soundsGetPlayCount()
-{
-	return m_iSoundsPlayCount;
-}
-
-int CSoundManager::soundsGetLoadCount()
-{
-	return m_iSoundsLoadCount;
-}
diff --git a/source/score/sound.h b/source/score/sound.h
deleted file mode 100644
index adf7d2bd1..000000000
--- a/source/score/sound.h
+++ /dev/null
@@ -1,639 +0,0 @@
-
-/***********************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
-See the license in LICENSE
-***********************************************************/
-
-#ifndef __SOUND_H
-#define __SOUND_H
-
-#pragma comment(lib, "dxguid.lib")
-#pragma comment(lib, "dsound.lib")
-#ifdef _DEBUG
-#pragma comment(lib, "libogg_static_d.lib")
-#pragma comment(lib, "libvorbis_static_d.lib")
-#pragma comment(lib, "libvorbisfile_d.lib")
-#else
-#pragma comment(lib, "libogg_static.lib")
-#pragma comment(lib, "libvorbis_static.lib")
-#pragma comment(lib, "libvorbisfile.lib")
-#endif
-#include <gdefines.h>
-#include <windows.h>
-#include <mmsystem.h>
-#include <dsound.h>
-#include <stdint.h>
-#include <vorbis/codec.h>
-#include <vorbis/vorbisfile.h>
-#include <common/aastring.h>
-#include <common/array.h>
-#include <common/string.h>
-#include <common/string_utils.h>
-#include <common/file_utils.h>
-#include <common/assotiativearray.h>
-#include "sxscore.h"
-
-//##########################################################################
-
-/*! проверка допустимости id звука, в случае провала вылет */
-#define SOUND_PRECOND(id, retval) \
-if ((UINT)id >= m_aSounds.size() || id < 0 || !(m_aSounds[id]))\
-{LibReport(REPORT_MSG_LEVEL_ERROR, "%s - unresolved address to sound %d", GEN_MSG_LOCATION, id); return retval; }
-
-/*! создание имени звука (нужно для разделения между каналами */
-#define SOUND_CREATE_NAME(szStr, szFile, idChannel) sprintf(szStr, "%d|%s", idChannel, szFile);
-
-/*! проверка допустимости id канала, в случае провала вылет */
-#define SOUND_CHANNEL_PRECOND(id, retval) \
-if (!(id >= 0 && id < SOUND_CHANNELS_COUNT)) \
-{LibReport(REPORT_MSG_LEVEL_ERROR, "%s - unresolved id channel %d", GEN_MSG_LOCATION, id); return retval; }
-
-/*! проверка проигрываемости канала */
-#define SOUND_CHANNEL_PLAYING(id, retval) \
-if (m_aChannels[id] != 1) \
-{return retval; }
-
-/*! проверка допустимости id набора звуков, в случае провала вылет */
-#define SOUND_SNDKIT_PRECOND(id, retval) \
-if (!(id >= 0 && (UINT)id < m_aSoundKits.size() && m_aSoundKits[id])) \
-{LibReport(REPORT_MSG_LEVEL_ERROR, "%s - unresolved id sound kit %d", GEN_MSG_LOCATION, id); return retval; }
-
-//##########################################################################
-
-//! просчет громкости звука, пределы [0, 1]
-inline float Snd3dComVolume(
-	const float3 &vSndPos,		//!< позиция звука
-	const float3 &vViewPos,		//!< позиция слушателя
-	const float fDistAudible	//!< дистанция слышимости
-	)
-{
-	float fVolume = 1.f - (SMVector3Distance(vSndPos, vViewPos) / fDistAudible);// *(-10000);
-
-	return saturatef(fVolume);
-}
-
-//! просчет смещения звука между ушами слушателя
-inline int Snd3dComPan(
-	const float3 &vSndPos,		//!< позиция звука
-	const float3 &vViewPos,		//!< позиция слушателя
-	const float3 &vViewDir,		//!< направление взгляда слушателя
-	const float fDistAudible,	//!< дистанция слышимости
-	const float fShiftPan		//!< коэфициент смещения между ушами слушателя
-	)
-{
-	float fDist = SMVector3Distance(vSndPos, vViewPos);
-	float3 fVec = vViewPos + vViewDir;
-
-	float str = (vSndPos.x - vViewPos.x)*(vSndPos.z - fVec.z) - (vSndPos.z - vViewPos.z)*(vSndPos.x - fVec.x);
-	return ((str * (fDist / fDistAudible)) * fShiftPan * float(-10000));
-}
-
-//! парсинг строки szSrcStr на составляющие элементы (если есть): путь до звука и параметры воспроизведения
-inline bool SndGetDataFromStr(const char *szSrcStr, String &sFile, float &fDistAudible, float &fVolume, Array<UINT> &aDelays)
-{
-	bool existsData = false;
-
-	Array<String> aStrConfig = StrExplode(szSrcStr, " ", false);
-
-	if (aStrConfig[0].length() == 0)
-	{
-		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - invalid file", GEN_MSG_LOCATION);
-		return false;
-	}
-
-	sFile = StrTrim(aStrConfig[0].c_str());
-
-	if (aStrConfig.size() >= 2)
-	{
-		if (aStrConfig[1][0] == 'd' || aStrConfig[1][0] == 'v')
-			existsData = true;
-
-		if (aStrConfig[1][0] == 'd')
-			sscanf(aStrConfig[1].c_str() + 1, "%f", &fDistAudible);
-		else if (aStrConfig[1][0] == 'v')
-			sscanf(aStrConfig[1].c_str() + 1, "%f", &fVolume);
-	}
-
-	if (aStrConfig.size() >= 3)
-	{
-		if (aStrConfig[2][0] == 'd' && fDistAudible > -2.f)
-		{
-			LibReport(REPORT_MSG_LEVEL_ERROR, "%s - unresolved double instruction for 'distance of audibility'", GEN_MSG_LOCATION);
-			return false;
-		}
-
-		if (aStrConfig[2][0] == 'v' && fVolume > -2.f)
-		{
-			LibReport(REPORT_MSG_LEVEL_ERROR, "%s - unresolved double instruction for 'volume'", GEN_MSG_LOCATION);
-			return false;
-		}
-
-		if (aStrConfig[2][0] == 'd' || aStrConfig[2][0] == 'v')
-			existsData = true;
-
-		if (aStrConfig[2][0] == 'd')
-			sscanf(aStrConfig[2].c_str() + 1, "%f", &fDistAudible);
-		else if (aStrConfig[2][0] == 'v')
-			sscanf(aStrConfig[2].c_str() + 1, "%f", &fVolume);
-	}
-
-	for (int k = 3, kl = aStrConfig.size(); k < kl; ++k)
-	{
-		String str = aStrConfig[k];
-		aDelays.push_back(aStrConfig[k].toUnsLongInt());
-	}
-
-	if (aDelays.size() > 0)
-		existsData = true;
-
-	return existsData;
-}
-
-//##########################################################################
-
-/*! \name Обработчики ogg
-@{*/
-
-//! чтение файла
-size_t OggCallbackRead(void *ptr, size_t size, size_t nmemb, void *datasource);
-
-//! закртытие файла
-int OggCallbackClose(void* datasource);
-
-//! позиционирование
-int OggCallbackSeek(void *datasource, ogg_int64_t offset, int whence);
-
-//! размер файла
-long OggCallbackTell(void* datasource);
-
-//!@}
-
-//##########################################################################
-
-//структура для загрузки wave файла
-struct CSoundWaveHeader
-{
-	char	RiffSig[4];
-	int32_t	ChunkSize;
-	char	Sig[4];
-	char	FormatSig[4];
-	int32_t	FormatChunkSize;
-	int16_t	FormatTag;
-	int16_t	Channels;
-	int32_t	SampleRate;
-	int32_t	BytesPerSec;
-	int16_t	BlockAlign;
-	int16_t	BitsPerSample;
-	char	DataSig[4];
-	int32_t	DataSize;
-};
-
-//##########################################################################
-
-//! менеджер звуков
-class CSoundManager
-{
-public:
-	CSoundManager();
-	~CSoundManager();
-
-	SX_ALIGNED_OP_MEM
-
-	void clear();
-
-	void init(HWND hWnd);
-
-	void setMainVolume(float fVolume);
-
-	//! структура данных для воспроизведения с задержками
-	struct CPlayDelay
-	{
-		CPlayDelay()
-		{
-			m_iCurrPlayDelay = 0;
-			m_uiPlayDelayStart = 0;
-		}
-
-		//! структура для хранения данных о текущей настройке проигрывания
-		struct CTimeDelay
-		{
-			CTimeDelay(){ m_uiTime = 0; m_isDelay = false; }
-			CTimeDelay(UINT uiTime, bool isDelay)
-			{
-				m_uiTime = uiTime; m_isDelay = isDelay;
-			}
-
-			//! время в млсек
-			UINT m_uiTime;
-
-			//! это время задержки в проигрывании или нет?
-			bool m_isDelay;
-		};
-
-		//! массив настроек прогирывания
-		Array<CTimeDelay> m_aPlayDelay;
-
-		//! текущий индекс в #m_aPlayDelay
-		int m_iCurrPlayDelay;
-
-		//! стартовое время задержки в млсек (если засекали время)
-		UINT m_uiPlayDelayStart;
-
-	};
-
-	//! структура данных базового понятия звука
-	struct CSoundBase
-	{
-		CSoundBase()
-		{ 
-			m_pSoundBuffer = 0; m_state = SOUND_OBJSTATE_STOP; m_isLooping = false; m_isPlayDelay = false; m_uiBytesPerSec = 0; m_fVolume = 1.f; m_fPan = 0;
-		}
-
-		~CSoundBase()
-		{
-			mem_release(m_pSoundBuffer);
-		}
-
-		//! звуковой буфер инстанса
-		IDirectSoundBuffer8 *m_pSoundBuffer;
-
-		//! количество байт в секунде
-		UINT m_uiBytesPerSec;
-
-		//! состояние воспроизведения
-		SOUND_OBJSTATE m_state;
-
-		//! зацикливать ли воспроизведение
-		bool m_isLooping;
-
-		//! используется ли воспроизведение с задержками
-		bool m_isPlayDelay;
-
-		//! объект с данными проигрывания
-		CPlayDelay oPlayDelay;
-
-		//! громкость [0, 1]
-		float m_fVolume;
-
-		//! смещение между ушами слушателя [-1, 1]
-		float m_fPan;
-	};
-
-	//! структура данных инстанса звука
-	struct CSoundInstance : public CSoundBase
-	{
-		CSoundInstance(){ m_pSoundBuffer = 0; m_uiBytesPerSec = 0; m_busy = SOUND_SNDINSTANCE_BUSY_FREE; m_state = SOUND_OBJSTATE_STOP; m_isPlayDelay = false; }
-		CSoundInstance(IDirectSoundBuffer8 *pBuffer, UINT uiBytesPerSec, const float3_t *vPos, SOUND_SNDINSTANCE_BUSY busy)
-		{
-			m_pSoundBuffer = pBuffer; 
-			m_uiBytesPerSec = uiBytesPerSec;
-			if (vPos) 
-				m_vPos = *vPos; 
-			m_busy = busy;
-			m_state = SOUND_OBJSTATE_STOP;
-			m_isPlayDelay = false;
-		}
-
-		//! позиция воспроизведения (если надо)
-		float3_t m_vPos;
-
-		//! занят ли инстанс в данный момент #SOUND_SNDINSTANCE_BUSY
-		SOUND_SNDINSTANCE_BUSY m_busy;
-	};
-
-	//! расширенное понятие звука
-	struct CSound : public CSoundBase
-	{
-		CSound();
-		~CSound();
-		SX_ALIGNED_OP_MEM
-
-		//! путь загруженного звука
-		char m_szRPath[SOUND_MAX_SIZE_PATH];
-
-		//! идентификатор (номер в общем массиве звуков)
-		ID m_id;
-
-		//! канал
-		ID m_idChannel;
-
-		//! 3д воспроизвдеение звука?
-		bool m_is3d;
-
-		/*! количество загрузок звука, в основном сделано для инстансовых, если один и тот же звук загружался несколько раз то он будет загружен единожды, но счетчик будет показывать колиество,
-		 и звук удалиться только тогда когда последний объект его удалит
-		*/
-		int m_iCountLoad;
-
-		//! изменение позиционирования звука, на сколько будет смещен звук при поворотах камеры к источнику звука, чем ближе к объекту тем меньше разница в позиционировании при поворотах
-		float m_fShiftPan;
-
-		//! дистанция слышимости
-		float m_fDistAudible;
-
-		//! разрешено ли создавать инстансы звука (false по дефолту)
-		bool m_isInst;
-
-		//! потом чтения файла
-		FILE *m_pStream;
-
-		//! поток для декодирования ogg
-		OggVorbis_File *m_pVorbisFile;		
-
-		//! массив инстансов
-		Array<CSoundInstance> m_aInstances;
-
-		//! формат файла
-		SOUND_FILEFORMAT m_format;		
-
-		//! полный размер в байтах (для wav исключая заголовочную структуру)
-		UINT m_uiSizeFull;				
-		
-		//! позиция источника звука (если используется без инстансов, хотя устанавливается главному и при инстансах)
-		float3 m_vPosition;	
-
-		//сброс громкости при отдалении на метр, т.е. count_volume = volume - dist * Damping %
-		//float Damping;	
-
-		//! оригинальная частота
-		UINT m_uiFrecOrigin;	
-
-		//! размер потока в байтах
-		UINT m_uiStreamSize;
-
-		//! длина звука в секундах
-		int m_iLengthSec;
-
-		//! количество каналов
-		int m_iChannelsCount;
-
-		//! частота дискретизации
-		int m_iSampleRate;
-
-		//! количество бит в сэмпле
-		int m_iBitsPerSample;
-
-		//размеры сплитов потока
-		UINT m_uiSplit1Size;
-		UINT m_uiSplit2Size;
-		UINT m_uiSplit3Size;
-
-		//заглушки для работы апдейта на каждый сплит в отдельности
-		bool m_isWork1;
-		bool m_isWork2;
-		bool m_isWork3;
-		bool m_isWork4;
-
-		//! воспроизведение только началось? (для потока)
-		bool m_isStarting;
-
-		//! номер текущего активного сплита
-		int m_iSplitActive;	
-
-		//! сколько раз был полностью перезагружен поток
-		int m_iRePlayCount;	
-
-		//! сколько раз нужно полностью перезагрузить поток чтоб дойти до конца
-		int	m_iRePlayEndCount;
-	};
-
-	//**********************************************************************
-
-	//! набор звуков, для случайного воспроизведения звуков из массива однотипных звуков
-	struct СSoundKit
-	{
-		СSoundKit();
-		~СSoundKit();
-		
-		//! имя набора
-		char m_szName[SOUND_MAX_SIZE_SNDKIT_NAME];
-
-		//! объект набора
-		struct CSoundKitObject
-		{
-			//! идентификатор звука
-			ID m_id;
-
-			//! массив задержек
-			Array<UINT> m_aDelays;
-
-			//! громкость звука [0,1]
-			float m_fVolume;
-		};
-
-		//! массив звуков
-		Array<CSoundKitObject> m_aSounds;
-
-		//! канал набора звуков
-		ID m_idChannel;
-
-		//! 3d (true) или 2d (false) набор?
-		bool m_is3D;
-
-		//! общая дистанция слышимости для 3д звуков
-		float m_fDistAudible;
-	};
-
-	//! создать набор
-	ID sndkitCreate(const char *szName, ID idChannel, bool is3D, float fDistAudible = SOUND_DIST_AUDIBLE_DEFAULT);
-
-	ID sndkitCreateFromList(const char *szName, ID idChannel, Array<String> aStrings, bool is3D, float fDistAudible = SOUND_DIST_AUDIBLE_DEFAULT, float fVolume = 1.f);
-
-	//! добавить звук в набор, если fDistAudible < 0 то будут задействованы настройки самого набора
-	void sndkitAddSound(ID idSndKit, const char *szFile, float fDistAudible, float fVolume = 1.f, UINT *pArrDelay = 0, int iSizeArrDelay = 0);
-
-	//! получить id по имени набора
-	ID sndkitGetID(const char *szName);
-
-	//! получить номер канала
-	ID sndkitGetChannel(ID idSndKit);
-
-	//! получить имя по id набора
-	void sndkitGetName(ID idSndKit, char *szName);
-
-	//! удалить набор
-	void sndkitDelete(ID idSndKit);
-
-	//! удалить все наборы
-	void sndkitDeleteAll();
-
-	/*! проиграть случайный звук
-	 \note если набор 3д звуков, то позиция обязательна
-	 \note id2 должен принимать либо #SOUND_SNDKIT_INSTANCE_BLOCK либо #SOUND_SNDKIT_INSTANCE_NOTBLOCK либо должен быть упакованным значением идентификаторов заблокированного инстанса звука
-	  если инстанс воспроизводимого звука заблокирован, то он не будет использоваться другими пока владелец его не разблокирует
-	 \return возвращает упакованные значения порядкового номера звука (в массиве набора) в 32 старших битах и id инстанса звука в 32 младших битах
-	*/
-	uint64_t sndkitPlay(ID idSndKit, uint64_t id2, const float3 *pPos = 0, float fVolume = -1.f, float fPan = 0.f);
-
-	//! остановить проигрывание звуков в наборе
-	void sndkitStop(ID idSndKit, uint64_t id2);
-
-	//**********************************************************************
-
-	//! добавить канал
-	void channelAdd(ID idChannel, bool isPlaying = false);
-
-	//! существует ил канал
-	bool channelExists(ID idChannel);
-
-	//! количество звуков в канале
-	int channelGetSndCount(ID idChannel);
-
-	//! проигрывать звуки канала
-	void channelPlay(ID idChannel);
-
-	//! проигрывается ли канал?
-	bool channelPlaying(ID idChannel);
-
-	//! остановить проигрывание звуков канала
-	void channelStop(ID idChannel);
-
-	//! проигрывать звуки только этого канала
-	void channelPlayOnly(ID idChannel);
-
-	//! воспроизвести звук канала (используется внутри функций каналов для воспроизведения каналов)
-	void channelSndPlay(ID idChannel, ID idSound);
-
-	//! остановить звук канала (используется внутри функций каналов для воспроизведения каналов)
-	void channelSndStop(ID idChannel, ID idSound);
-
-	//**********************************************************************
-
-	ID soundCreate2d(const char *szFile, ID idChannel, UINT uiSizeStream = 0);
-	ID soundCreate3d(const char *szFile, ID idChannel, UINT uiSizeStream, float fDist);
-
-	ID soundCreate2dInst(const char *szFile, ID idChannel);
-	ID soundCreate3dInst(const char *szFile, ID idChannel, float fDist);
-
-	ID soundFind2dInst(const char *szFile, ID idChannel);
-	ID soundFind3dInst(const char *szFile, ID idChannel);
-
-	/*! воспроизведение инстанса звука, если нужны задержки то надо их указывать в pArrDelay и iSizeArrDelay, иначе в обоих 0, 
-	если нужен 3д звук (если это на самом деле 3д звук) то надо указать pPos, иначе 0 и будет 2д, для 2д по желанию можно указать громкость iVolume и смещение между ушами iPan
-	*/
-	ID soundInstancePlay(ID idSound, bool isBlocked, bool isLooping, UINT *pArrDelay, int iSizeArrDelay, const float3 *pPos, float fVolume = 1.f, float fPan = 0.f);
-
-	bool soundInstancePlaying(ID idSound, ID idInstance);
-	void soundInstanceStop(ID idSound, ID idInstance);
-	void soundInstanceFree(ID idSound, ID idInstance);
-
-	bool soundIsInit(ID idSound);
-	void soundDelete(ID idSound);
-
-	//! проиграть
-	void soundPlay(ID idSound, bool isLooping = false, UINT *pArrDelay = 0, int iSizeArrDelay = 0);
-
-	//! инициализация масисва задержек для воспроизведения звука, если указать iSizeArrDelay = -1 тогда будут задействованы прошлые настройки
-	void soundInitPlayDelay(CSoundBase *pSndbase, UINT *pArrDelay, int iSizeArrDelay);
-
-	//! продолжить воспроизведение (с задержками) остановленного звука
-	void soundResumePlayDelay(CSoundBase *pSndBase);
-
-	//! приостановить
-	void soundPause(ID idSound);
-
-	//! остановить
-	void soundStop(ID idSound);
-
-	void soundSetState(ID idSound, SOUND_OBJSTATE state);
-	SOUND_OBJSTATE soundGetState(ID idSound);
-
-	//текащая позиция проигрывания
-	void soundSetPosPlay(ID idSound, UINT uiPos);
-	UINT soundGetPosPlay(ID idSound);
-
-	//громкость
-	void soundSetVolume(ID idSound, float fVolume);
-	float soundGetVolume(ID idSound);
-
-	//позиционирование между динамиками
-	void soundSetPan(ID idSound, float fPan);
-	float soundGetPan(ID idSound);
-
-	//частота
-	void soundSetFreqCurr(ID idSound, UINT uiFrec);
-	UINT soundGetFreqCurr(ID idSound);
-	UINT soundGetFreqOrigin(ID idSound);
-
-	void soundSetPosWorld(ID idSound, const float3 *pPos);
-	void soundGetPosWorld(ID idSound, float3 *pPos);
-
-
-	//длина в секундах
-	int soundGetLengthSec(ID idSound);
-
-	//байт в секунде
-	UINT soundGetBytesPerSec(ID idSound);
-
-	//размер в байтах PCM данных
-	UINT soundGetSize(ID idSound);
-
-	//путь до звукового файла
-	void soundGetFile(ID idSound, char *szPath);
-
-	float soundGetDistAudible(ID idSound);
-	void soundSetDistAudible(ID idSound, float fDistAudible);
-
-	void UpdatePlayDelay(CSoundBase *pSndBase);
-
-	void update(const float3 *pViewPos, const float3 *pViewDir);
-
-	SOUND_FILEFORMAT fileFormat(const char *szFile);
-
-	int soundsGetPlayCount();
-	int soundsGetLoadCount();
-
-private:
-
-	void load(CSound *pSnd, const char *szPath, SOUND_FILEFORMAT fmt);
-
-	void loadWAV(CSound *pSnd, const char *szPath);
-
-	void loadOGG(CSound *pSnd, const char *szPath);
-
-	IDirectSoundBuffer8* soundBufferCreate(CSoundWaveHeader *pHeader);
-
-	void soundDataWAVLoad(IDirectSoundBuffer8 *pBuffer, int iLockPos, FILE *pData, int iSize, UINT uiFlag = 0);
-	void soundDataOGGLoad(OggVorbis_File *pVorbisFile, IDirectSoundBuffer8 *pBuffer, int iLockPos, int iSize, UINT uiFlag);
-
-	void reLoadSplit(ID id, UINT Pos, UINT Size);
-
-	ID addSound(CSound *pSnd);
-
-	//**********************************************************************
-
-	//! массив со всеми звуковыми объектами
-	Array<CSound*> m_aSounds;
-
-	//! ассоциативный массив всех 2д звуков arr[name] = id;
-	AssotiativeArray<AAStringNR, ID, false, 16> m_a2dInst;
-
-	//! ассоциативный массив всех 3д звуков arr[name] = id;
-	AssotiativeArray<AAStringNR, ID, false, 16> m_a3dInst;
-
-	//! массив наборов звуков
-	Array<СSoundKit*> m_aSoundKits;
-
-	//! массив каналов
-	int m_aChannels[SOUND_CHANNELS_COUNT];
-	
-	//! звуковое устройство
-	IDirectSound8 *m_pDeviceSound;		
-
-	//! первичный буфер
-	IDirectSoundBuffer *m_pPrimaryBuffer;	
-
-	//! количество проигрываемых звуков
-	int m_iSoundsPlayCount;
-
-	//! количество загруженных звуков (с учетом как проигрывающихся так и простаивающих)
-	int m_iSoundsLoadCount;
-
-	//! предыдущая позиция наблюдателя
-	float3 m_vOldViewPos;
-
-	//! предыдущее направление взгляда наблюдателя
-	float3 m_vOldViewDir;
-};
-
-#endif
diff --git a/source/score/sxscore.cpp b/source/score/sxscore.cpp
deleted file mode 100644
index f22d61938..000000000
--- a/source/score/sxscore.cpp
+++ /dev/null
@@ -1,548 +0,0 @@
-
-/***********************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
-See the license in LICENSE
-***********************************************************/
-
-#define SXSCORE_VERSION 1
-
-#include "sxscore.h"
-#include "sound.h"
-
-#if !defined(DEF_STD_REPORT)
-#define DEF_STD_REPORT
-report_func g_fnReportf = DefReport;
-#endif
-
-CSoundManager *g_pManagerSound = 0;
-
-#define SCORE_PRECOND(retval) if(!g_pManagerSound){LibReport(-1, "%s - sxsound is not init", GEN_MSG_LOCATION); return retval;}
-
-//##########################################################################
-
-SX_LIB_API long SSCore_0GetVersion()
-{
-	return SXSCORE_VERSION;
-}
-
-SX_LIB_API void SSCore_Dbg_Set(report_func rf)
-{
-	g_fnReportf = rf;
-}
-
-SX_LIB_API void SSCore_0Create(const char *szName, HWND hWnd, bool isUnic)
-{
-	if (szName && strlen(szName) > 1)
-	{
-		if (isUnic)
-		{
-			HANDLE hMutex = CreateMutex(NULL, FALSE, szName);
-			if (GetLastError() == ERROR_ALREADY_EXISTS)
-			{
-				CloseHandle(hMutex);
-				LibReport(REPORT_MSG_LEVEL_ERROR, "%s - none unic name", GEN_MSG_LOCATION);
-			}
-			else
-			{
-				g_pManagerSound = new CSoundManager();
-				g_pManagerSound->init(hWnd);
-			}
-		}
-		else
-		{
-			g_pManagerSound = new CSoundManager();
-			g_pManagerSound->init(hWnd);
-		}
-	}
-	else
-		LibReport(REPORT_MSG_LEVEL_ERROR, "%s - not init argument [name]", GEN_MSG_LOCATION);
-}
-
-SX_LIB_API void SSCore_AKill()
-{
-	mem_delete(g_pManagerSound);
-}
-
-//#############################################################################
-
-SX_LIB_API void SSCore_Clear()
-{
-	SCORE_PRECOND(_VOID);
-
-	g_pManagerSound->clear();
-}
-
-
-SX_LIB_API void SSCore_Update(const float3 *pViewPos, const float3 *pViewDir)
-{
-	SCORE_PRECOND(_VOID);
-
-	g_pManagerSound->update(pViewPos, pViewDir);
-}
-
-SX_LIB_API void SSCore_SetMainVolume(float fVolume)
-{
-	SCORE_PRECOND(_VOID);
-
-	g_pManagerSound->setMainVolume(fVolume);
-}
-
-SX_LIB_API int SSCore_SndsGetCountPlay()
-{
-	SCORE_PRECOND(0);
-
-	return g_pManagerSound->soundsGetPlayCount();
-}
-
-SX_LIB_API int SSCore_SndsGetCountLoad()
-{
-	SCORE_PRECOND(0);
-
-	return g_pManagerSound->soundsGetLoadCount();
-}
-
-//##########################################################################
-
-SX_LIB_API void SSCore_ChannelAdd(ID idChannel, bool isPlaying)
-{
-	SCORE_PRECOND(_VOID);
-
-	g_pManagerSound->channelAdd(idChannel, isPlaying);
-}
-
-SX_LIB_API bool SSCore_ChannelExists(ID idChannel)
-{
-	SCORE_PRECOND(false);
-
-	return g_pManagerSound->channelExists(idChannel);
-}
-
-SX_LIB_API int SSCore_ChannelGetSndCount(ID idChannel)
-{
-	SCORE_PRECOND(-1);
-
-	return g_pManagerSound->channelGetSndCount(idChannel);
-}
-
-SX_LIB_API void SSCore_ChannelPlay(ID idChannel)
-{
-	SCORE_PRECOND(_VOID);
-
-	g_pManagerSound->channelPlay(idChannel);
-}
-
-SX_LIB_API void SSCore_ChannelPlayOnly(ID idChannel)
-{
-	SCORE_PRECOND(_VOID);
-
-	g_pManagerSound->channelPlayOnly(idChannel);
-}
-
-SX_LIB_API bool SSCore_ChannelPlaying(ID idChannel)
-{
-	SCORE_PRECOND(false);
-
-	return g_pManagerSound->channelPlaying(idChannel);
-}
-
-SX_LIB_API void SSCore_ChannelStop(ID idChannel)
-{
-	SCORE_PRECOND(_VOID);
-
-	g_pManagerSound->channelStop(idChannel);
-}
-
-//##########################################################################
-
-SX_LIB_API ID SSCore_SndCreate2d(const char *szFile, ID idChannel, UINT uiSizeStream)
-{
-	SCORE_PRECOND(-1);
-
-	return g_pManagerSound->soundCreate2d(szFile, idChannel, uiSizeStream);
-}
-
-SX_LIB_API ID SSCore_SndCreate3d(const char *szFile, ID idChannel, UINT uiSizeStream, float fDist)
-{
-	SCORE_PRECOND(-1);
-
-	return g_pManagerSound->soundCreate3d(szFile, idChannel, uiSizeStream, fDist);
-}
-
-SX_LIB_API ID SSCore_SndCreate2dInst(const char *szFile, ID idChannel)
-{
-	SCORE_PRECOND(-1);
-
-	return  g_pManagerSound->soundCreate2dInst(szFile, idChannel);
-}
-
-SX_LIB_API ID SSCore_SndCreate3dInst(const char *szFile, ID idChannel, float fDist)
-{
-	SCORE_PRECOND(-1);
-
-	return  g_pManagerSound->soundCreate3dInst(szFile, idChannel, fDist);
-}
-
-SX_LIB_API ID SSCore_SndFind2dInst(const char *szFile, ID idChannel)
-{
-	SCORE_PRECOND(-1);
-
-	return g_pManagerSound->soundFind2dInst(szFile, idChannel);
-}
-
-SX_LIB_API ID SSCore_SndFind3dInst(const char *szFile, ID idChannel)
-{
-	SCORE_PRECOND(-1);
-
-	return g_pManagerSound->soundFind3dInst(szFile, idChannel);
-}
-
-
-SX_LIB_API ID SSCore_SndInstancePlay(ID idSound, bool isBlocked, bool isLooping, UINT *pArrDelay, int iSizeArrDelay, const float3 *pPos, float fVolume, float fPan)
-{
-	SCORE_PRECOND(-1);
-
-	return g_pManagerSound->soundInstancePlay(idSound, isBlocked, isLooping, pArrDelay, iSizeArrDelay, pPos, fVolume, fPan);
-}
-
-/*SX_LIB_API ID SSCore_SndInstancePlay2d(ID idSound, bool isBlocked, bool isLooping, int iVolume, int iPan)
-{
-	SCORE_PRECOND(-1);
-
-	return g_pManagerSound->soundInstancePlay(idSound, isBlocked, isLooping, 0, 0, 0, iVolume, iPan);
-}
-
-SX_LIB_API ID SSCore_SndInstancePlayDelay2d(ID idSound, bool isBlocked, bool isLooping, UINT *pArrDelay, int iSizeArrDelay, int iVolume, int iPan)
-{
-	SCORE_PRECOND(-1);
-
-	return g_pManagerSound->soundInstancePlay(idSound, isBlocked, isLooping, pArrDelay, iSizeArrDelay, 0, iVolume, iPan);
-}
-
-SX_LIB_API ID SSCore_SndInstancePlay3d(ID idSound, bool isBlocked, bool isLooping, const float3 *pPos)
-{
-	SCORE_PRECOND(-1);
-
-	return g_pManagerSound->soundInstancePlay(idSound, isBlocked, isLooping, 0, 0, pPos);
-}
-
-SX_LIB_API ID SSCore_SndInstancePlayDelay3d(ID idSound, bool isBlocked, bool isLooping, UINT *pArrDelay, int iSizeArrDelay, const float3 *pPos)
-{
-	SCORE_PRECOND(-1);
-
-	return g_pManagerSound->soundInstancePlay(idSound, isBlocked, isLooping, pArrDelay, iSizeArrDelay, pPos);
-}*/
-
-
-SX_LIB_API bool SSCore_SndInstancePlaying(ID idSound, ID idInstance)
-{
-	SCORE_PRECOND(false);
-
-	return g_pManagerSound->soundInstancePlaying(idSound, idInstance);
-}
-
-SX_LIB_API void SSCore_SndInstanceStop(ID idSound, ID idInstance)
-{
-	SCORE_PRECOND(_VOID);
-
-	g_pManagerSound->soundInstanceStop(idSound, idInstance);
-}
-
-SX_LIB_API void SSCore_SndInstanceFree(ID idSound, ID idInstance)
-{
-	SCORE_PRECOND(_VOID);
-
-	g_pManagerSound->soundInstanceStop(idSound, idInstance);
-}
-
-
-SX_LIB_API bool SSCore_SndIsInit(ID idSound)
-{
-	SCORE_PRECOND(false);
-
-	return g_pManagerSound->soundIsInit(idSound);
-}
-
-SX_LIB_API void SSCore_SndDelete(ID idSound)
-{
-	SCORE_PRECOND(_VOID);
-
-	g_pManagerSound->soundDelete(idSound);
-}
-
-
-SX_LIB_API void SSCore_SndPlay(ID idSound, bool isLooping, UINT *pArrDelay, int iSizeArrDelay)
-{
-	SCORE_PRECOND(_VOID);
-
-	g_pManagerSound->soundPlay(idSound, isLooping, pArrDelay, iSizeArrDelay);
-}
-
-/*SX_LIB_API void SSCore_SndPlayDelay(ID idSound, bool isLooping, UINT *pArrDelay, int iSizeArrDelay)
-{
-	SCORE_PRECOND(_VOID);*/
-
-	/*Array<UINT> aValues;
-	
-	UINT uiCurrVal = 0;
-	va_list va;
-	va_start(va, isLooping);
-
-	uiCurrVal = va_arg(va, UINT);
-	while (uiCurrVal > 0)
-	{
-		aValues.push_back(uiCurrVal);
-		uiCurrVal = va_arg(va, UINT);
-	}
-
-	va_end(va);*/
-
-	/*g_pManagerSound->soundPlayDelay(idSound, isLooping, pArrDelay, iSizeArrDelay);
-}*/
-
-SX_LIB_API void SSCore_SndPause(ID idSound)
-{
-	SCORE_PRECOND(_VOID);
-
-	g_pManagerSound->soundPause(idSound);
-}
-
-SX_LIB_API void SSCore_SndStop(ID idSound)
-{
-	SCORE_PRECOND(_VOID);
-
-	g_pManagerSound->soundStop(idSound);
-}
-
-
-SX_LIB_API void SSCore_SndSetState(ID idSound, SOUND_OBJSTATE state)
-{
-	SCORE_PRECOND(_VOID);
-
-	g_pManagerSound->soundSetState(idSound, state);
-}
-
-SX_LIB_API SOUND_OBJSTATE SSCore_SndGetState(ID idSound)
-{
-	SCORE_PRECOND(SOUND_OBJSTATE_STOP);
-
-	return g_pManagerSound->soundGetState(idSound);
-}
-
-SX_LIB_API void SSCore_SndSetPosPlay(ID idSound, UINT uiPosMls)
-{
-	SCORE_PRECOND(_VOID);
-
-	g_pManagerSound->soundSetPosPlay(idSound, uiPosMls);
-}
-
-SX_LIB_API UINT SSCore_SndGetPosPlay(ID idSound)
-{
-	SCORE_PRECOND(0);
-
-	return g_pManagerSound->soundGetPosPlay(idSound);
-}
-
-
-SX_LIB_API void SSCore_SndSetVolume(ID idSound, float fVolume)
-{
-	SCORE_PRECOND(_VOID);
-
-	g_pManagerSound->soundSetVolume(idSound, fVolume);
-}
-
-SX_LIB_API float SSCore_SndGetVolume(ID idSound)
-{
-	SCORE_PRECOND(0);
-
-	return g_pManagerSound->soundGetVolume(idSound);
-}
-
-
-SX_LIB_API void SSCore_SndSetPan(ID idSound, float fValue)
-{
-	SCORE_PRECOND(_VOID);
-
-	g_pManagerSound->soundSetPan(idSound, fValue);
-}
-
-SX_LIB_API float SSCore_SndGetPan(ID idSound)
-{
-	SCORE_PRECOND(0);
-
-	return g_pManagerSound->soundGetPan(idSound);
-}
-
-
-SX_LIB_API void SSCore_SndSetCurrFreq(ID idSound, UINT fValue)
-{
-	SCORE_PRECOND(_VOID);
-
-	g_pManagerSound->soundSetFreqCurr(idSound, fValue);
-}
-
-SX_LIB_API UINT SSCore_SndGetCurrFreq(ID idSound)
-{
-	SCORE_PRECOND(0);
-
-	return g_pManagerSound->soundGetFreqCurr(idSound);
-}
-
-SX_LIB_API UINT SSCore_SndGetOriginFreq(ID idSound)
-{
-	SCORE_PRECOND(0);
-
-	return g_pManagerSound->soundGetFreqOrigin(idSound);
-}
-
-SX_LIB_API void SSCore_SndSetPosWorld(ID idSound, const float3 *pPos)
-{
-	SCORE_PRECOND(_VOID);
-
-	g_pManagerSound->soundSetPosWorld(idSound, pPos);
-}
-
-SX_LIB_API void SSCore_SndGetPosWorld(ID idSound, float3 *pPos)
-{
-	SCORE_PRECOND(_VOID);
-
-	g_pManagerSound->soundGetPosWorld(idSound, pPos);
-}
-
-
-SX_LIB_API int SSCore_SndGetLengthSec(ID idSound)
-{
-	SCORE_PRECOND(0);
-
-	return g_pManagerSound->soundGetLengthSec(idSound);
-}
-
-SX_LIB_API UINT SSCore_SndGetBytesPerSec(ID idSound)
-{
-	SCORE_PRECOND(0);
-
-	return g_pManagerSound->soundGetBytesPerSec(idSound);
-}
-
-SX_LIB_API UINT SSCore_SndGetSize(ID idSound)
-{
-	SCORE_PRECOND(0);
-
-	return g_pManagerSound->soundGetSize(idSound);
-}
-
-SX_LIB_API void SSCore_SndGetFile(ID idSound, char *szPath)
-{
-	SCORE_PRECOND(_VOID);
-
-	g_pManagerSound->soundGetFile(idSound, szPath);
-}
-
-
-SX_LIB_API float SSCore_SndGetDistAudible(ID idSound)
-{
-	SCORE_PRECOND(0);
-
-	return g_pManagerSound->soundGetDistAudible(idSound);
-}
-
-SX_LIB_API void SSCore_SndSetDistAudible(ID idSound, float fValue)
-{
-	SCORE_PRECOND(_VOID);
-
-	g_pManagerSound->soundSetDistAudible(idSound, fValue);
-}
-
-//##########################################################################
-
-SX_LIB_API ID SSCore_SndkitCreate(const char *szName, ID idChannel, bool is3D, float fDistAudible)
-{
-	SCORE_PRECOND(-1);
-
-	return g_pManagerSound->sndkitCreate(szName, idChannel, is3D, fDistAudible);
-}
-
-SX_LIB_API ID SSCore_SndkitCreateFromList(const char *szName, ID idChannel, bool is3D, float fDistAudible, float fVolume, const char *szFileOrList, ...)
-{
-	SCORE_PRECOND(-1);
-
-	Array<String> aStrings;
-	// если в первой строке есть запятые тогда будем парсить строку
-	if (strstr(szFileOrList, ","))
-	{
-		aStrings = StrExplode(szFileOrList, ",");
-	}
-	// иначе считываем все строчные аргументы
-	else if (szFileOrList)
-	{
-		const char *szStrCurr = 0;
-		va_list va;
-		va_start(va, szFileOrList);
-
-		szStrCurr = szFileOrList;
-		while (szStrCurr)
-		{
-			aStrings.push_back(szStrCurr);
-			szStrCurr = va_arg(va, const char *);
-		}
-
-		va_end(va);
-	}
-
-	return g_pManagerSound->sndkitCreateFromList(szName, idChannel, aStrings, is3D, fDistAudible, fVolume);
-}
-
-SX_LIB_API void SSCore_SndkitAddSound(ID idSndKit, const char *szFile, float fDistAudible, float fVolume, UINT *pArrDelay, int iSizeArrDelay)
-{
-	SCORE_PRECOND(_VOID);
-
-	g_pManagerSound->sndkitAddSound(idSndKit, szFile, fDistAudible, fVolume, pArrDelay, iSizeArrDelay);
-}
-
-SX_LIB_API uint64_t SSCore_SndkitPlay(ID idSndKit, uint64_t id2, const float3 *pPos, float fVolume, float fPan)
-{
-	SCORE_PRECOND(-1);
-
-	return g_pManagerSound->sndkitPlay(idSndKit, id2, pPos, fVolume, fPan);
-}
-
-SX_LIB_API void SSCore_SndkitStop(ID idSndKit, uint64_t id2)
-{
-	SCORE_PRECOND(_VOID);
-
-	g_pManagerSound->sndkitStop(idSndKit, id2);
-}
-
-SX_LIB_API ID SSCore_SndkitGetID(const char *szName)
-{
-	SCORE_PRECOND(-1);
-
-	return g_pManagerSound->sndkitGetID(szName);
-}
-
-SX_LIB_API ID SSCore_SndkitGetChannel(ID idSndKit)
-{
-	SCORE_PRECOND(-1);
-
-	return g_pManagerSound->sndkitGetChannel(idSndKit);
-}
-
-SX_LIB_API void SSCore_SndkitGetName(ID idSndKit, char *szName)
-{
-	SCORE_PRECOND(_VOID);
-
-	g_pManagerSound->sndkitGetName(idSndKit, szName);
-}
-
-SX_LIB_API void SSCore_SndkitDelete(ID idSndKit)
-{
-	SCORE_PRECOND(_VOID);
-
-	g_pManagerSound->sndkitDelete(idSndKit);
-}
-
-SX_LIB_API void SSCore_SndkitDeleteAll()
-{
-	SCORE_PRECOND(_VOID);
-
-	g_pManagerSound->sndkitDeleteAll();
-}
\ No newline at end of file
diff --git a/source/score/sxscore.h b/source/score/sxscore.h
deleted file mode 100644
index c9f5ebdd5..000000000
--- a/source/score/sxscore.h
+++ /dev/null
@@ -1,507 +0,0 @@
-
-/***********************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
-See the license in LICENSE
-***********************************************************/
-
-/*!
-\file
-Заголовочный файл sxscore - звукового ядра
-*/
-
-/*! \defgroup sxscore sxscore - звуковое ядро
-
- \note Звуковое ядро работает на технологиях:
- - "DirectInput8"
- - "Ogg Vorbis" (загрузка ogg файлов).
- \note Загружаемые звуки wav и ogg формата (автоматическое определение и загрузка нужных данных).
- \note Поддерживаются 2d и 3d звуки, полная загрузка и потоковое воспроизвдение.
- \note Также для полностью загруженных (не потоковое воспроизведение) доступно воспроизвдение инстансов (копий), без выделения дополнительной равноценной памяти, и без дополнительных возможностей управления инстансом.
-Однако источник выдачи инстансов должен быть создан одной из функций #SSCore_SndInstancePlay2d #SSCore_SndInstancePlay3d
- \note Идентификация звука происходит на основании его числового идентификатора выдаваемого создаваемыми функциями (#SSCore_SndCreate2d/#SSCore_SndCreate2dInst #SSCore_SndCreate3d/#SSCore_SndCreate3dInst) и является константной, идентификатор является порядковым номером
- \note каждый звук, который проигрывается не потоково, может проигрываться с задержками
- \note каждый звук может загружаться с настройками прямо в строке, при этом настройки в строке будут приоритетными, формат строки следующий:
-путь_до_файла_без_пробелов  dдистанция_слышимости_в_метрах vгромкость_от_0_до_1 задержка_перед_проигрыванием_в_млсек задержка2_в_млсек ... \n
-данные громкости и дальности должны быть первыми (но между собой у них нет правила), и только после них идут задержки \n
-на пример: messages/artefact_lead.ogg d100 v1.0 300 300 300 \n
-парсинг строки осуществляется на основании пробелов, то есть в имени файла недопустимы пробелы
-@{*/
-
-#ifndef __SXSCORE_H
-#define __SXSCORE_H
-
-#if 1
-
-#define SSCore_SndInstancePlay3d(...)
-#define SSCore_SndPlay(...)
-#define SSCore_SndCreate3dInst(...) (-1)
-#define SSCore_SndCreate3d(...) (-1)
-#define SSCore_SndSetPosWorld(...)
-#define SSCore_ChannelPlay(...)
-#define SSCore_ChannelStop(...)
-
-
-#else
-#include <gdefines.h>
-#include <GRegisterIndex.h>
-
-#if defined(_DEBUG)
-#pragma comment(lib, "sxcore_d.lib")
-#else
-#pragma comment(lib, "sxcore.lib")
-#endif
-
-#undef SX_LIB_API
-#define SX_LIB_API extern "C" __declspec (dllimport)
-#include <core/sxcore.h>
-
-#ifdef SX_DLL
-#undef SX_LIB_API
-#define SX_LIB_API extern "C" __declspec (dllexport)
-#endif
-
-//##########################################################################
-
-/*! \name Стандартные функции библиотеки
-@{*/
-
-//! возвращает версию подсистемы геометрии
-SX_LIB_API long SSCore_0GetVersion();			
-
-//! установить новую функцию вывода сообщений
-SX_LIB_API void SSCore_Dbg_Set(report_func fnFunc);	
-
-//! инициализация подсистемы
-SX_LIB_API void SSCore_0Create(	
-	const char *szName,	//!< имя
-	HWND hWnd,			//!< хэндл окна к которому привязывается звук
-	bool isUnic = true	//!< должна ли подсистема быть уникальной по имени
-	);
-
-//! уничтожение подсистемы
-SX_LIB_API void SSCore_AKill();	
-
-//!@}
-#endif
-//#############################################################################
-
-/*! размер абсолюного пути до директории с файлами */
-#define SOUND_MAX_SIZE_STDPATH	256	
-
-/*! размер относительного пути до файла со звуком */
-#define SOUND_MAX_SIZE_PATH		128	
-
-/*! размер полного пути до файла со звуком */
-#define SOUND_MAX_SIZE_FULLPATH	(SOUND_MAX_SIZE_STDPATH + SOUND_MAX_SIZE_PATH)
-
-/*! минимально возможный размер потока для воспроизведения */
-#define SOUND_MIN_SIZE_STREAM	(1024*64 )
-
-/*! ошибочный идентификатор */
-#define SOUND_FAIL_ID	-1
-
-
-/*! коэффициент смещения между ушами слушателя для 3d звуков */
-#define SOUND_SHIFTPAN_3D	0.1f
-
-/*! дистанция слышимости по умолчанию, в метрах */
-#define SOUND_DIST_AUDIBLE_DEFAULT	100
-
-
-/*! максимальное количество каналов */
-#define SOUND_CHANNELS_COUNT	100
-
-
-/*! упаковка двух int32_t в uint64_t */
-#define SOUND_ENCODE2ID(id1, id2)( (((uint64_t)((uint32_t)id1))<<32) | (uint32_t)id2 )
-
-/*! извлечение первого int32_t из uint64_t из старших битов */
-#define SOUND_DECODE2ID_HI(id)( (int32_t)(uint32_t)(((uint64_t)id) >> 32) )
-
-/*! извлечение первого int32_t из uint64_t из младших битов */
-#define SOUND_DECODE2ID_LO(id)( (int32_t)(uint32_t)(((uint64_t)id) & 0xFFFFFFFF) )
-
-
-/*! масимальная длина имени набора звуков */
-#define SOUND_MAX_SIZE_SNDKIT_NAME	128	
-
-/*! блокировать инстанс набора */
-#define SOUND_SNDKIT_INSTANCE_BLOCK		-1
-
-/*! не блокировать инстанс набора */
-#define SOUND_SNDKIT_INSTANCE_NOTBLOCK	-2
-
-//**************************************************************************
-
-/*! \name Данные для первичного буфера
-@{*/
-
-/*! количество каналов */
-#define SOUND_G_CHANELS_COUNT	2		
-
-/*! количество бит в секунду */
-#define SOUND_G_BITS_PER_SEC	48000	
-
-/*! количество бит в семпле */
-#define SOUND_G_BITS_PER_SAMPLE	32		
-
-//!@}
-
-/*! количество бит на сэмпл для ogg, возможно 8 или 16 */
-#define SOUND_OGG_BITS_PER_SAMPLE	16	
-
-/*! тип количества бит на сэмпл для ogg, 1 - для 8 бит, 2 - для 16 */
-#define SOUND_OGG_BITS_PER_SAMPLE_WORD SOUND_OGG_BITS_PER_SAMPLE/8
-
-//#############################################################################
-
-//! форматы звукрвых файлов
-enum SOUND_FILEFORMAT
-{
-	SOUND_FILEFORMAT_UNKNOWN,	//!< не известный формат
-	SOUND_FILEFORMAT_WAV,		//!< wave формат
-	SOUND_FILEFORMAT_OGG,		//!< ogg формат
-};
-
-//! состояния воспроизведения звукового объекта
-enum SOUND_OBJSTATE
-{
-	SOUND_OBJSTATE_STOP,	//!< остановлен
-	SOUND_OBJSTATE_PAUSE,	//!< приостановлен
-	SOUND_OBJSTATE_PLAY,	//!< проигрывается
-};
-
-//! остояние занятости инстансов
-enum SOUND_SNDINSTANCE_BUSY
-{
-	SOUND_SNDINSTANCE_BUSY_FREE,	/*!< свободный */
-	SOUND_SNDINSTANCE_BUSY_TEMP,	/*!< времено занятый */
-	SOUND_SNDINSTANCE_BUSY_LOCKED,	/*!< заблокированный владельцем */
-};
-
-//! значения каналов
-enum SOUND_CHANNEL
-{
-	SOUND_CHANNEL_NONE = -1,	/*!< значение не инициализованного канала */
-	SOUND_CHANNEL_STOP = 0,		/*!< значение не проигрывающегося в данный момент канала */
-	SOUND_CHANNEL_PLAY = 1,		/*!< значение проигрывающегося в данный момент канала */
-};
-
-//#############################################################################
-#if 0
-//! очистка всего списка звуков (полное их удаление)
-SX_LIB_API void SSCore_Clear();	
-
-//! обновление состояний всех звуков
-SX_LIB_API void SSCore_Update(
-	const float3 *pViewPpos,//!< текущая позиция наблюдателя
-	const float3 *pViewDir	//!< текущее направление взгляда
-	);
-
-//! установка общей громкости
-SX_LIB_API void SSCore_SetMainVolume(float fVolume);
-
-//! количество проигрываемых на данный момент звуков
-SX_LIB_API int SSCore_SndsGetCountPlay();
-
-//! количество загруженных на данный момент звуков
-SX_LIB_API int SSCore_SndsGetCountLoad();
-
-//##########################################################################
-
-//! добавить канал
-SX_LIB_API void SSCore_ChannelAdd(ID idChannel, bool isPlaying = false);
-
-//! существует ли канал
-SX_LIB_API bool SSCore_ChannelExists(ID idChannel);
-
-//! количество звуков в канале
-SX_LIB_API int SSCore_ChannelGetSndCount(ID idChannel);
-
-//! проигрывать звуки канала
-SX_LIB_API void SSCore_ChannelPlay(ID idChannel);
-
-//! проигрывать звуки только этого канала
-SX_LIB_API void SSCore_ChannelPlayOnly(ID idChannel);
-
-//! проигрывается ли канал?
-SX_LIB_API bool SSCore_ChannelPlaying(ID idChannel);
-
-//! остановить проигрывание звуков канала
-SX_LIB_API void SSCore_ChannelStop(ID idChannel);
-
-//###############################################################################
-
-//! загрузка 2d (фонового) звука
-SX_LIB_API ID SSCore_SndCreate2d(
-	const char *szFile,		//!< путь до файла, относительно стандартного
-	ID idChannel,			//!< идентификатор канала
-	UINT uiSizeStream = 0	//!< размер потока в байтах для потокового воспроизведения, если 0 тогда полностью грузить в память
-	);
-
-//! загрузка 3d звука
-SX_LIB_API ID SSCore_SndCreate3d(
-	const char *szFile,		//!< путь до файла, относительно стандартного
-	ID idChannel,			//!< идентификатор канала
-	UINT uiSizeStream,		//!< размер потока в байтах для потокового воспроизведения, если 0 тогда полностью грузить в память
-	float fDist				//!< радиус слышимости в метрах
-	);
-
-//###############################################################################
-
-//! загрузка 2d звукового файла и пометка его как объект выдающий инстансы, аргументы аналогичны #SSCore_SndCreate2d
-SX_LIB_API ID SSCore_SndCreate2dInst(const char *szFile, ID idChannel);
-
-//! загрузка 3d звукового файла и пометка его как объект выдающий инстансы, аргументы аналогичны #SSCore_SndCreate3d
-SX_LIB_API ID SSCore_SndCreate3dInst(const char *szFile, ID idChannel, float fDist);
-
-//**************************************************************************
-
-//! поиск 2d звука (выдающего инстансы) по относительному пути загрузки,возвращает его ID (в случае успеха) иначе <0
-SX_LIB_API ID SSCore_SndFind2dInst(const char *szFile, ID idChannel);
-
-//! поиск 3d звука (выдающего инстансы) по относительному пути загрузки,возвращает его ID (в случае успеха) иначе <0
-SX_LIB_API ID SSCore_SndFind3dInst(const char *szFile, ID idChannel);
-
-//**************************************************************************
-
-/*! воспроизведение инстанса звука, если нужны задержки то надо их указывать в pArrDelay и iSizeArrDelay, иначе в обоих 0, если указать iSizeArrDelay = -1 тогда будут задействованы предыдущие настройки
-если нужен 3д звук (если это на самом деле 3д звук) то надо указать pPos, иначе 0 и будет 2д, для 2д по желанию можно указать громкость iVolume и смещение между ушами iPan
-*/
-SX_LIB_API ID SSCore_SndInstancePlay(
-	ID idSound,				//!< идентификатор звука
-	bool isBlocked,			//!< блокировать ли файл? если true то вернет id который будет занят до тех пор пока его не освободит владалец через #SSCore_SndInstanceFree
-	bool isLooping,			//!< зацикливать ли воспроизведение звука? если да то звук будет заблокирован, а возвращенный id будет приндалежать вызывавшему и именно он несет ответсвенность за остановку и освобождение инстанса
-	UINT *pArrDelay,		//!< массив задержек в млсек, первое значение задержка перед воспроизведением
-	int iSizeArrDelay,		//!< размер #pArrDelay
-	const float3 *pPos,		//!< если это 3д звук то позиция обязательна, если 2д то нужно указать NULL
-	float fVolume = 1.f,	//!< громкость [0, 1]
-	float fPan = 0.f		//!< смещение между ушами [-1, 1]
-	);
-
-//! воспроизведение инстанса 2d звука, аргументы аналогичны #SSCore_SndInstancePlay
-#define SSCore_SndInstancePlay2d(idSound, isBlocked, isLooping, iVolume, iPan) (SSCore_SndInstancePlay(idSound, isBlocked, isLooping, 0, 0, 0, iVolume, iPan))
-
-//! воспроизведение инстанса 2d звука с задержками, аргументы аналогичны #SSCore_SndInstancePlay
-#define SSCore_SndInstancePlayDelay2d(idSound, isBlocked, isLooping, pArrDelay, iSizeArrDelay, iVolume, iPan) (SSCore_SndInstancePlay(idSound, isBlocked, isLooping, pArrDelay, iSizeArrDelay, 0, iVolume, iPan))
-
-//! воспроизведение инстанса 3d звука, аргументы аналогичны #SSCore_SndInstancePlay
-#define SSCore_SndInstancePlay3d(idSound, isBlocked, isLooping, pPos) (SSCore_SndInstancePlay(idSound, isBlocked, isLooping, 0, 0, pPos))
-
-//! воспроизведение инстанса 3d звука с задержками, аргументы аналогичны #SSCore_SndInstancePlay
-#define SSCore_SndInstancePlayDelay3d(idSound, isBlocked, isLooping, pArrDelay, iSizeArrDelay, pPos) (SSCore_SndInstancePlay(idSound, isBlocked, isLooping, pArrDelay, iSizeArrDelay, pPos))
-
-//**************************************************************************
-
-//! проигрывается ли инстанс звука с id idInstance
-SX_LIB_API bool SSCore_SndInstancePlaying(
-	ID idSound,		//!< идентификатор звука
-	ID idInstance	//!< идентификатор инстанса звука который был возвращен функцией #SSCore_SndInstancePlay2d или #SSCore_SndInstancePlay3d
-	);
-
-//! остановка инстанса звука с id idInstance
-SX_LIB_API void SSCore_SndInstanceStop(ID idSound, ID idInstance);
-
-//! освобождает инстанс звука с id idInstance, будет иметь статус занятости #SOUND_SNDINSTANCE_BUSY_TEMP если был #SOUND_SNDINSTANCE_BUSY_LOCKED, а при следующем обновлении если инстанс не проигрывается статус поменяется на #SOUND_SNDINSTANCE_BUSY_FREE
-SX_LIB_API void SSCore_SndInstanceFree(ID idSound, ID idInstance);
-
-//###############################################################################
-
-//! инициализирован ли звук с идентификатором id
-SX_LIB_API bool SSCore_SndIsInit(ID idSound);
-
-//! удалить звук по его id
-SX_LIB_API void SSCore_SndDelete(ID idSound);
-
-//###############################################################################
-
-//! воспроизвести звук, isLooping зацикливать ли воспроизведение
-SX_LIB_API void	SSCore_SndPlay(
-	ID idSound,				//!< идентификатор звука
-	bool isLooping = false,	//!< зацикливать ли воспроизведение?
-	UINT *pArrDelay = 0,	//!< массив задержек в млсек, первое значение задержка перед воспроизведением
-	int iSizeArrDelay = 0	//!< размер массива pArrDelay, если указать iSizeArrDelay = -1 тогда будут задействованы предыдущие настройки
-	);
-
-//! приостановить
-SX_LIB_API void	SSCore_SndPause(ID idSound);
-
-//! остановить
-SX_LIB_API void	SSCore_SndStop(ID idSound);
-
-
-//! устанавливает состояние проигрывания звука
-SX_LIB_API void SSCore_SndSetState(ID idSound, SOUND_OBJSTATE state);
-
-//! возвращает состояние проигрывания звука на данный момент
-SX_LIB_API SOUND_OBJSTATE SSCore_SndGetState(ID idSound);
-
-//**************************************************************************
-
-//! устанавить позицию проигрывания
-SX_LIB_API void SSCore_SndSetPosPlay(
-	ID idSound,		//!< идентификатор звука
-	UINT uiPosMls	//!< значение позиции в млсек
-	);	
-
-//! возвращает позицию проигрывания
-SX_LIB_API UINT SSCore_SndGetPosPlay(ID idSound);
-
-//! устанавить громкость
-SX_LIB_API void SSCore_SndSetVolume(
-	ID idSound,		//!< идентификатор звука
-	float fVolume	//!< значение громкости [0, 1]
-	);
-
-//! возвращает громкость [0, 1]
-SX_LIB_API float SSCore_SndGetVolume(ID idSound);
-
-//! установка позиционирования между ушами
-SX_LIB_API void SSCore_SndSetPan(
-	ID idSound,		//!< идентификатор звука
-	float fValue	//!< значение позиционирования [-1, 1]
-	);
-
-//! возвращает позиционирование между ушами [-1, 1]
-SX_LIB_API float SSCore_SndGetPan(ID idSound);
-
-
-//! установка частоты воспроизведения
-SX_LIB_API void SSCore_SndSetCurrFreq(ID idSound, UINT uiValue);
-
-//! возвращает текущую частоту воспроизведения
-SX_LIB_API UINT SSCore_SndGetCurrFreq(ID idSound);
-
-//! возвращает оригинальную частоту воспроизведения
-SX_LIB_API UINT SSCore_SndGetOriginFreq(ID idSound);
-
-
-//! установка мировой позиции звука (только для 3d звуков)
-SX_LIB_API void SSCore_SndSetPosWorld(ID idSound, const float3 *pPos);
-
-//! возвращает мировую позицию звука (только для 3d звуков)
-SX_LIB_API void SSCore_SndGetPosWorld(ID idSound, float3 *pPos);
-
-
-//! длина в секундах
-SX_LIB_API int SSCore_SndGetLengthSec(ID idSound);
-
-//! количество байт в секунде
-SX_LIB_API UINT SSCore_SndGetBytesPerSec(ID idSound);
-
-//! размер в байтах PCM данных
-SX_LIB_API UINT SSCore_SndGetSize(ID idSound);
-
-//! относительный путь до звукового файла
-SX_LIB_API void SSCore_SndGetFile(ID idSound, char *szPath);
-
-
-//! возвращает дистанцию слышимости
-SX_LIB_API float SSCore_SndGetDistAudible(ID idSound);
-
-//! установка дистанции слышимости в метрах
-SX_LIB_API void SSCore_SndSetDistAudible(ID idSound, float fVfalue);
-
-//!@}
-
-//###############################################################################
-
-/*! \name Наборы звуков для воспроизведения случайного звука из набора
- \note Все звуки создаются инстансовыми
-@{*/
-
-//! создать набор звуков
-SX_LIB_API ID SSCore_SndkitCreate(
-	const char *szName,			//!< имя набора
-	ID idChannel,				//!< id канала
-	bool is3D,					//!< набор 3д звуков?
-	float fDistAudible = SOUND_DIST_AUDIBLE_DEFAULT	//!< дистанция слышимости
-	);
-
-//! загрузить список звуков (с настройками) из строки либо из строк
-SX_LIB_API ID SSCore_SndkitCreateFromList(
-	const char *szName,			//!< имя набора
-	ID idChannel,				//!< id канала
-	bool is3D,					//!< набор 3д звуков?
-	float fDistAudible,			//!< дистанция слышимости
-	float fVolume,				//!< громкость [0, 1]
-	const char *szFileOrList,	//!< строка с первым файлом и настройками (последующие аргументы учитываются), либо строка со всеми файлами (через запятую) и настройками (последующие аргументы не учитываются)
-	...							//!< если #szFileOrList один файл тогда здесь должны быть строки с файлами до звуков (с настройками)
-	);
-
-//**************************************************************************
-
-//! добавить звук в набор
-SX_LIB_API void SSCore_SndkitAddSound(
-	ID idSndKit,			//!< id набора
-	const char *szFile,		//!< путь к файлу звука
-	float fDistAudible,		//!< дистанция слышимости для 3d звуков, для 2d можно просто 0, если < 0 тогда установит то значение которое было передано в #SSCore_SndkitCreate
-	float fVolume = 1.f,	//!< громскость [0, 1]
-	UINT *pArrDelay = 0,	//!< массив задержек
-	int iSizeArrDelay = 0	//!< количество элементов в #pArrDelay
-	);
-
-//! добавить в набор 2d звук
-#define SSCore_SndkitAddSound2d(idSndKit, szFile, fVolume) (SSCore_SndkitAddSound(idSndKit, szFile, 0, fVolume, 0, 0))
-
-//! добавить в набор 2d звук с задержками при воспроизведении
-#define SSCore_SndkitAddSoundDelay2d(idSndKit, szFile, fVolume, pArrDelay, iSizeArrDelay) (SSCore_SndkitAddSound(idSndKit, szFile, 0, fVolume, pArrDelay, iSizeArrDelay))
-
-//! добавить в набор 3d звук
-#define SSCore_SndkitAddSound3d(idSndKit, szFile, fDistAudible, fVolume) (SSCore_SndkitAddSound(idSndKit, szFile, fDistAudible, fVolume, 0, 0))
-
-//! добавить в набор 3d звук с задержками при воспроизведении
-#define SSCore_SndkitAddSoundDelay3d(idSndKit, szFile, fDistAudible, fVolume, pArrDelay, iSizeArrDelay) (SSCore_SndkitAddSound(idSndKit, szFile, fDistAudible, fVolume, pArrDelay, iSizeArrDelay))
-
-//**************************************************************************
-
-/*! проиграть случайны звук
- \note если набор 3д звуков, то позиция обязательна
- \note id2 должен принимать либо #SOUND_SNDKIT_INSTANCE_BLOCK либо #SOUND_SNDKIT_INSTANCE_NOTBLOCK либо должен быть упакованным значением идентификаторов заблокированного инстанса звука
-если инстанс воспроизводимого звука заблокирован, то он не будет использоваться другими пока владелец его не разблокирует
-если было передано упакованное значение, и инстанс уже отыграл свое, значит он разблокируется и будет воспроизведен другой инстанс и заблокируется
- \return возвращает упакованные значения порядкового номера звука (в массиве набора) в 32 старших битах и id инстанса звука в 32 младших битах
-*/
-SX_LIB_API uint64_t SSCore_SndkitPlay(
-	ID idSndKit,			//!< id набора 
-	uint64_t id2,			//!< либо #SOUND_SNDKIT_INSTANCE_BLOCK либо #SOUND_SNDKIT_INSTANCE_NOTBLOCK либо должен быть упакованным значением идентификаторов заблокированного инстанса звука
-	const float3 *pPos = 0, //!< если 3d, позиция звука в пространстве
-	float fVolume = -1.f,	//!< громкость [0, 1], если <0 тогда будет использовано ранее заданное значение
-	float fPan = 0.f		//!< если 2d, смещение между ушами [-1, 1]
-	);
-
-//! проиграть случайны звук из 2d набора, аргументы аналогичны #SSCore_SndkitPlay
-#define SSCore_SndkitPlay2d(idSndKit, id2, fVolume, fPan) (SSCore_SndkitPlay(idSndKit, id2, 0, fVolume, fPan))
-
-//! проиграть случайны звук из 3d набора, аргументы аналогичны #SSCore_SndkitPlay
-#define SSCore_SndkitPlay3d(idSndKit, id2, pPos) (SSCore_SndkitPlay(idSndKit, id2, pPos))
-
-//! остановить проигрывание звуков в наборе 
-SX_LIB_API void SSCore_SndkitStop(
-	ID idSndKit,	//!< id набора 
-	uint64_t id2	//!< результат SSCore_SndkitPlay если параметр id2 имел значение отличное от #SOUND_SNDKIT_INSTANCE_NOTBLOCK
-	);
-
-//**************************************************************************
-
-//! получить id по имени набора
-SX_LIB_API ID SSCore_SndkitGetID(const char *szName);
-
-//! получить номер канала
-SX_LIB_API ID SSCore_SndkitGetChannel(ID idSndKit);
-
-//! получить имя по id набора
-SX_LIB_API void SSCore_SndkitGetName(ID idSndKit, char *szName);
-
-//! удалить набор
-SX_LIB_API void SSCore_SndkitDelete(ID idSndKit);
-
-//! удалить все наборы
-SX_LIB_API void SSCore_SndkitDeleteAll();
-
-//!@}
-#endif
-
-#endif
-
-//!@} sxscore
diff --git a/source/score/sxscore_dll.cpp b/source/score/sxscore_dll.cpp
deleted file mode 100644
index a34ff74f6..000000000
--- a/source/score/sxscore_dll.cpp
+++ /dev/null
@@ -1,24 +0,0 @@
-
-/***********************************************************
-Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
-See the license in LICENSE
-***********************************************************/
-
-#include <windows.h>
-
-BOOL APIENTRY DllMain(HMODULE hModule,
-	DWORD  ul_reason_for_call,
-	LPVOID lpReserved
-	)
-{
-	switch (ul_reason_for_call)
-	{
-	case DLL_PROCESS_ATTACH:
-	case DLL_THREAD_ATTACH:
-	case DLL_THREAD_DETACH:
-	case DLL_PROCESS_DETACH:
-		break;
-	}
-	return TRUE;
-}
-
-- 
GitLab