mirror of
https://foundry.openuru.org/gitblit/r/CWE-ou-minkata.git
synced 2025-07-15 10:54:18 +00:00
Compare commits
73 Commits
launcherst
...
hoikas/new
Author | SHA1 | Date | |
---|---|---|---|
b77f98c0ae | |||
115d308d10 | |||
34a800333f | |||
d1f28306fe | |||
60b108a6b7 | |||
e86e5c8bdd | |||
638682ee39 | |||
beb715ba6e | |||
078e2f075c | |||
eb483b7c1b | |||
c8ef3908ef | |||
89619674a8 | |||
f8841b8264 | |||
ec654905ee | |||
f1ed7f4b7d | |||
ab400f11a7 | |||
b187b8fc59 | |||
c99bf23af4 | |||
f0f7377c48 | |||
8c089f6cc9 | |||
340a538c96 | |||
906cebbd25 | |||
9e1d8446ca | |||
d0d7912ba6 | |||
91f9948e2f | |||
7aec3d5b13 | |||
516c0f7ed0 | |||
651ca61b4c | |||
cc9e2331ee | |||
73895318e9 | |||
3a62c231d2 | |||
4239d7a046 | |||
d173a5230f | |||
8706a86725 | |||
8418dd54a5 | |||
4ab5fe5fed | |||
148e81b6e9 | |||
06a696c725 | |||
a49cb6eb1f | |||
0d518e3465 | |||
92e95d5a99 | |||
8960d0b406 | |||
c888e43c73 | |||
947a64c05f | |||
627825dab2 | |||
207bf3d62e | |||
791886bdab | |||
1ab6781402 | |||
d8a5f03e9c | |||
2abd744ba6 | |||
2e73c3667a | |||
4eb7810d81 | |||
0b9bcc3e91 | |||
343c6ffbda | |||
c68640f76c | |||
ce5719c83f | |||
c71e8fbee0 | |||
21e2a6de7b | |||
8b62863419 | |||
9c609b9fd8 | |||
d1c86267b3 | |||
6b2dedf547 | |||
192e4a252c | |||
c0b63e4237 | |||
020f8a1ba0 | |||
39ff487ca8 | |||
a0bbef1819 | |||
3825317e5e | |||
c6016223f2 | |||
b343e389ab | |||
e02141055a | |||
1f0277e3e0 | |||
db5e451622 |
8
.editorconfig
Normal file
8
.editorconfig
Normal file
@ -0,0 +1,8 @@
|
||||
# Indicate there is no need to continue trawling
|
||||
root = true
|
||||
|
||||
# Cyan's source files use tabs... mostly...
|
||||
[*]
|
||||
end_of_line = crlf
|
||||
indent_style = tab
|
||||
indent_size = 4
|
@ -13,4 +13,6 @@ syntax: regexp
|
||||
^MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/Apps/plClient/external/render/
|
||||
^MOULOpenSourceClientPlugin/Plasma20/test/
|
||||
^MOULOpenSourceClientPlugin/Plasma20/tools/
|
||||
^MOULOpenSourceClientPlugin/Plasma20/Doxy/
|
||||
^MOULOpenSourceClientPlugin/StaticSDKs/
|
||||
^patch/
|
||||
|
@ -170,8 +170,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pfLocalizationMgr", "..\..\
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pfSecurePreloader", "..\..\FeatureLib\pfSecurePreloader\pfSecurePreloader.vcxproj", "{C28B9838-04AE-4EBD-A93F-A94A64230887}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pfCCR", "..\..\FeatureLib\pfCCR\pfCCR.vcxproj", "{1599855E-CC20-4C3A-A382-5290C40BE08E}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "plPhysX", "..\..\PubUtilLib\plPhysX\plPhysX.vcxproj", "{5CB24835-47C1-4AE7-900E-70CBD1CC1DEA}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pnGameMgr", "..\..\NucleusLib\pnGameMgr\pnGameMgr.vcxproj", "{D97E0E20-0502-4E63-BD05-41B42EED695F}"
|
||||
@ -194,6 +192,36 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "plClipboard", "..\..\PubUti
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "plClientResMgr", "..\..\PubUtilLib\plClientResMgr\plClientResMgr.vcxproj", "{D005F6EF-6A43-1957-7458-10ED3CA39F02}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "plFileEncrypt", "..\plFileEncrypt\plFileEncrypt.vcxproj", "{F0536413-4B24-ED69-8BA4-4CA869F6DC38}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{FE69F407-565E-4C33-A91A-FBA622D59C18} = {FE69F407-565E-4C33-A91A-FBA622D59C18}
|
||||
{EEFE2438-9F93-4C5C-B85D-6FDD431A1CF1} = {EEFE2438-9F93-4C5C-B85D-6FDD431A1CF1}
|
||||
{4054C94F-866A-4AA7-874B-2AFCFEF23A71} = {4054C94F-866A-4AA7-874B-2AFCFEF23A71}
|
||||
{89316659-F4A9-4E92-8200-C36288A61B9B} = {89316659-F4A9-4E92-8200-C36288A61B9B}
|
||||
{CA208971-6C77-47F6-AA4B-FB6ECC071132} = {CA208971-6C77-47F6-AA4B-FB6ECC071132}
|
||||
{83A96477-BAEF-4DB7-8134-AEADF4B2E63F} = {83A96477-BAEF-4DB7-8134-AEADF4B2E63F}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "plFileSecure", "..\plFileSecure\plFileSecure.vcxproj", "{E5F40B98-A55E-486D-9A93-8008BF153495}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{FE69F407-565E-4C33-A91A-FBA622D59C18} = {FE69F407-565E-4C33-A91A-FBA622D59C18}
|
||||
{EEFE2438-9F93-4C5C-B85D-6FDD431A1CF1} = {EEFE2438-9F93-4C5C-B85D-6FDD431A1CF1}
|
||||
{4054C94F-866A-4AA7-874B-2AFCFEF23A71} = {4054C94F-866A-4AA7-874B-2AFCFEF23A71}
|
||||
{89316659-F4A9-4E92-8200-C36288A61B9B} = {89316659-F4A9-4E92-8200-C36288A61B9B}
|
||||
{CA208971-6C77-47F6-AA4B-FB6ECC071132} = {CA208971-6C77-47F6-AA4B-FB6ECC071132}
|
||||
{83A96477-BAEF-4DB7-8134-AEADF4B2E63F} = {83A96477-BAEF-4DB7-8134-AEADF4B2E63F}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "plPythonPack", "..\plPythonPack\plPythonPack.vcxproj", "{84868043-5563-435A-A176-76A059653D5C}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{FE69F407-565E-4C33-A91A-FBA622D59C18} = {FE69F407-565E-4C33-A91A-FBA622D59C18}
|
||||
{EEFE2438-9F93-4C5C-B85D-6FDD431A1CF1} = {EEFE2438-9F93-4C5C-B85D-6FDD431A1CF1}
|
||||
{4054C94F-866A-4AA7-874B-2AFCFEF23A71} = {4054C94F-866A-4AA7-874B-2AFCFEF23A71}
|
||||
{83A96477-BAEF-4DB7-8134-AEADF4B2E63F} = {83A96477-BAEF-4DB7-8134-AEADF4B2E63F}
|
||||
{A32201A8-0255-4863-97B8-4A569C18C624} = {A32201A8-0255-4863-97B8-4A569C18C624}
|
||||
{797721D5-0EFE-4912-8F4F-953A71A69B04} = {797721D5-0EFE-4912-8F4F-953A71A69B04}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug_Internal|Win32 = Debug_Internal|Win32
|
||||
@ -218,20 +246,20 @@ Global
|
||||
{83A96477-BAEF-4DB7-8134-AEADF4B2E63F}.Release_Internal|Win32.Build.0 = Release_Internal|Win32
|
||||
{83A96477-BAEF-4DB7-8134-AEADF4B2E63F}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{83A96477-BAEF-4DB7-8134-AEADF4B2E63F}.Release|Win32.Build.0 = Release|Win32
|
||||
{388CE878-5E8A-8BF6-1F6A-51FE9B099904}.Debug_Internal|Win32.ActiveCfg = Debug|Win32
|
||||
{388CE878-5E8A-8BF6-1F6A-51FE9B099904}.Debug_Internal|Win32.Build.0 = Debug|Win32
|
||||
{388CE878-5E8A-8BF6-1F6A-51FE9B099904}.Debug_Internal|Win32.ActiveCfg = Debug_Internal|Win32
|
||||
{388CE878-5E8A-8BF6-1F6A-51FE9B099904}.Debug_Internal|Win32.Build.0 = Debug_Internal|Win32
|
||||
{388CE878-5E8A-8BF6-1F6A-51FE9B099904}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{388CE878-5E8A-8BF6-1F6A-51FE9B099904}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{388CE878-5E8A-8BF6-1F6A-51FE9B099904}.Release_Internal|Win32.ActiveCfg = Release|Win32
|
||||
{388CE878-5E8A-8BF6-1F6A-51FE9B099904}.Release_Internal|Win32.Build.0 = Release|Win32
|
||||
{388CE878-5E8A-8BF6-1F6A-51FE9B099904}.Release_Internal|Win32.ActiveCfg = Release_Internal|Win32
|
||||
{388CE878-5E8A-8BF6-1F6A-51FE9B099904}.Release_Internal|Win32.Build.0 = Release_Internal|Win32
|
||||
{388CE878-5E8A-8BF6-1F6A-51FE9B099904}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{388CE878-5E8A-8BF6-1F6A-51FE9B099904}.Release|Win32.Build.0 = Release|Win32
|
||||
{2AE01802-DBAE-45FF-B9EF-1DB9C8AF6909}.Debug_Internal|Win32.ActiveCfg = Debug|Win32
|
||||
{2AE01802-DBAE-45FF-B9EF-1DB9C8AF6909}.Debug_Internal|Win32.Build.0 = Debug|Win32
|
||||
{2AE01802-DBAE-45FF-B9EF-1DB9C8AF6909}.Debug_Internal|Win32.ActiveCfg = Debug_Internal|Win32
|
||||
{2AE01802-DBAE-45FF-B9EF-1DB9C8AF6909}.Debug_Internal|Win32.Build.0 = Debug_Internal|Win32
|
||||
{2AE01802-DBAE-45FF-B9EF-1DB9C8AF6909}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{2AE01802-DBAE-45FF-B9EF-1DB9C8AF6909}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{2AE01802-DBAE-45FF-B9EF-1DB9C8AF6909}.Release_Internal|Win32.ActiveCfg = Release|Win32
|
||||
{2AE01802-DBAE-45FF-B9EF-1DB9C8AF6909}.Release_Internal|Win32.Build.0 = Release|Win32
|
||||
{2AE01802-DBAE-45FF-B9EF-1DB9C8AF6909}.Release_Internal|Win32.ActiveCfg = Release_Internal|Win32
|
||||
{2AE01802-DBAE-45FF-B9EF-1DB9C8AF6909}.Release_Internal|Win32.Build.0 = Release_Internal|Win32
|
||||
{2AE01802-DBAE-45FF-B9EF-1DB9C8AF6909}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{2AE01802-DBAE-45FF-B9EF-1DB9C8AF6909}.Release|Win32.Build.0 = Release|Win32
|
||||
{5AFA4598-E766-1997-9D8D-EA680F077F44}.Debug_Internal|Win32.ActiveCfg = Debug_Internal|Win32
|
||||
@ -882,14 +910,6 @@ Global
|
||||
{C28B9838-04AE-4EBD-A93F-A94A64230887}.Release_Internal|Win32.Build.0 = Release_Internal|Win32
|
||||
{C28B9838-04AE-4EBD-A93F-A94A64230887}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{C28B9838-04AE-4EBD-A93F-A94A64230887}.Release|Win32.Build.0 = Release|Win32
|
||||
{1599855E-CC20-4C3A-A382-5290C40BE08E}.Debug_Internal|Win32.ActiveCfg = Debug_Internal|Win32
|
||||
{1599855E-CC20-4C3A-A382-5290C40BE08E}.Debug_Internal|Win32.Build.0 = Debug_Internal|Win32
|
||||
{1599855E-CC20-4C3A-A382-5290C40BE08E}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{1599855E-CC20-4C3A-A382-5290C40BE08E}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{1599855E-CC20-4C3A-A382-5290C40BE08E}.Release_Internal|Win32.ActiveCfg = Release_Internal|Win32
|
||||
{1599855E-CC20-4C3A-A382-5290C40BE08E}.Release_Internal|Win32.Build.0 = Release_Internal|Win32
|
||||
{1599855E-CC20-4C3A-A382-5290C40BE08E}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{1599855E-CC20-4C3A-A382-5290C40BE08E}.Release|Win32.Build.0 = Release|Win32
|
||||
{5CB24835-47C1-4AE7-900E-70CBD1CC1DEA}.Debug_Internal|Win32.ActiveCfg = Debug_Internal|Win32
|
||||
{5CB24835-47C1-4AE7-900E-70CBD1CC1DEA}.Debug_Internal|Win32.Build.0 = Debug_Internal|Win32
|
||||
{5CB24835-47C1-4AE7-900E-70CBD1CC1DEA}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
@ -978,6 +998,30 @@ Global
|
||||
{D005F6EF-6A43-1957-7458-10ED3CA39F02}.Release_Internal|Win32.Build.0 = Release_Internal|Win32
|
||||
{D005F6EF-6A43-1957-7458-10ED3CA39F02}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{D005F6EF-6A43-1957-7458-10ED3CA39F02}.Release|Win32.Build.0 = Release|Win32
|
||||
{F0536413-4B24-ED69-8BA4-4CA869F6DC38}.Debug_Internal|Win32.ActiveCfg = Debug_Internal|Win32
|
||||
{F0536413-4B24-ED69-8BA4-4CA869F6DC38}.Debug_Internal|Win32.Build.0 = Debug_Internal|Win32
|
||||
{F0536413-4B24-ED69-8BA4-4CA869F6DC38}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{F0536413-4B24-ED69-8BA4-4CA869F6DC38}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{F0536413-4B24-ED69-8BA4-4CA869F6DC38}.Release_Internal|Win32.ActiveCfg = Release_Internal|Win32
|
||||
{F0536413-4B24-ED69-8BA4-4CA869F6DC38}.Release_Internal|Win32.Build.0 = Release_Internal|Win32
|
||||
{F0536413-4B24-ED69-8BA4-4CA869F6DC38}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{F0536413-4B24-ED69-8BA4-4CA869F6DC38}.Release|Win32.Build.0 = Release|Win32
|
||||
{E5F40B98-A55E-486D-9A93-8008BF153495}.Debug_Internal|Win32.ActiveCfg = Debug_Internal|Win32
|
||||
{E5F40B98-A55E-486D-9A93-8008BF153495}.Debug_Internal|Win32.Build.0 = Debug_Internal|Win32
|
||||
{E5F40B98-A55E-486D-9A93-8008BF153495}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{E5F40B98-A55E-486D-9A93-8008BF153495}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{E5F40B98-A55E-486D-9A93-8008BF153495}.Release_Internal|Win32.ActiveCfg = Release_Internal|Win32
|
||||
{E5F40B98-A55E-486D-9A93-8008BF153495}.Release_Internal|Win32.Build.0 = Release_Internal|Win32
|
||||
{E5F40B98-A55E-486D-9A93-8008BF153495}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{E5F40B98-A55E-486D-9A93-8008BF153495}.Release|Win32.Build.0 = Release|Win32
|
||||
{84868043-5563-435A-A176-76A059653D5C}.Debug_Internal|Win32.ActiveCfg = Debug_Internal|Win32
|
||||
{84868043-5563-435A-A176-76A059653D5C}.Debug_Internal|Win32.Build.0 = Debug_Internal|Win32
|
||||
{84868043-5563-435A-A176-76A059653D5C}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{84868043-5563-435A-A176-76A059653D5C}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{84868043-5563-435A-A176-76A059653D5C}.Release_Internal|Win32.ActiveCfg = Release_Internal|Win32
|
||||
{84868043-5563-435A-A176-76A059653D5C}.Release_Internal|Win32.Build.0 = Release_Internal|Win32
|
||||
{84868043-5563-435A-A176-76A059653D5C}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{84868043-5563-435A-A176-76A059653D5C}.Release|Win32.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
@ -106,7 +106,7 @@
|
||||
<StringPooling>true</StringPooling>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>winhttp.lib;ws2_32.lib;strmiids.lib;vfw32.lib;version.lib;Rpcrt4.lib;d3dx9.lib;dinput8.lib;dxerr9.lib;dxguid.lib;dsound.lib;OpenAL32.lib;libeay32.lib;NxCharacter.lib;PhysXLoader.lib;libogg_static.lib;libvorbis_static.lib;libvorbisfile_static.lib;libspeex.lib;libjpeg.lib;zlibd.lib;libpngd.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalDependencies>winhttp.lib;ws2_32.lib;strmiids.lib;vfw32.lib;version.lib;Rpcrt4.lib;d3dx9.lib;dinput8.lib;dxerr9.lib;dxguid.lib;dsound.lib;OpenAL32.lib;libeay32.lib;NxCharacter.lib;PhysXLoader.lib;libogg_static.lib;libvorbis_static.lib;libvorbisfile_static.lib;libspeex.lib;libjpeg.lib;zlibd.lib;libpngd.lib;NxCooking.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<AdditionalLibraryDirectories>..\..\..\..\..\StaticSDKs\Win32\DX9.0c\Lib\x86;..\..\..\..\..\StaticSDKs\Win32\OpenAL 1.1 with EFX SDK\libs\Win32;..\..\..\..\..\StaticSDKs\Win32\OpenSSL\lib;..\..\..\..\..\StaticSDKs\Win32\PhysX\lib\win32;..\..\..\..\..\StaticSDKs\Win32\xiph\lib\Debug;..\..\..\..\..\StaticSDKs\XPlatform\expat-1.95.7\StaticLibs\Win32;..\..\..\..\..\StaticSDKs\XPlatform\jpeg-8c-rgba;..\..\..\..\..\StaticSDKs\XPlatform\zlib\lib;..\..\..\..\..\StaticSDKs\XPlatform\png\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
@ -158,7 +158,7 @@
|
||||
<StringPooling>true</StringPooling>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>winhttp.lib;ws2_32.lib;strmiids.lib;vfw32.lib;version.lib;Rpcrt4.lib;d3dx9.lib;dinput8.lib;dxerr9.lib;dxguid.lib;dsound.lib;OpenAL32.lib;libeay32.lib;NxCharacter.lib;PhysXLoader.lib;libogg_static.lib;libvorbis_static.lib;libvorbisfile_static.lib;libspeex.lib;libjpeg.lib;zlibd.lib;libpngd.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalDependencies>winhttp.lib;ws2_32.lib;strmiids.lib;vfw32.lib;version.lib;Rpcrt4.lib;d3dx9.lib;dinput8.lib;dxerr9.lib;dxguid.lib;dsound.lib;OpenAL32.lib;libeay32.lib;NxCharacter.lib;PhysXLoader.lib;libogg_static.lib;libvorbis_static.lib;libvorbisfile_static.lib;libspeex.lib;libjpeg.lib;zlibd.lib;libpngd.lib;NxCooking.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<AdditionalLibraryDirectories>..\..\..\..\..\StaticSDKs\Win32\DX9.0c\Lib\x86;..\..\..\..\..\StaticSDKs\Win32\OpenAL 1.1 with EFX SDK\libs\Win32;..\..\..\..\..\StaticSDKs\Win32\OpenSSL\lib;..\..\..\..\..\StaticSDKs\Win32\PhysX\lib\win32;..\..\..\..\..\StaticSDKs\Win32\xiph\lib\Debug;..\..\..\..\..\StaticSDKs\XPlatform\expat-1.95.7\StaticLibs\Win32;..\..\..\..\..\StaticSDKs\XPlatform\jpeg-8c-rgba;..\..\..\..\..\StaticSDKs\XPlatform\zlib\lib;..\..\..\..\..\StaticSDKs\XPlatform\png\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
@ -214,7 +214,7 @@
|
||||
<BufferSecurityCheck>true</BufferSecurityCheck>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>winhttp.lib;ws2_32.lib;strmiids.lib;vfw32.lib;version.lib;Rpcrt4.lib;d3dx9.lib;dinput8.lib;dxerr9.lib;dxguid.lib;dsound.lib;OpenAL32.lib;libeay32.lib;NxCharacter.lib;PhysXLoader.lib;libogg_static.lib;libvorbis_static.lib;libvorbisfile_static.lib;libspeex.lib;libjpeg.lib;zlib.lib;libpng.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalDependencies>winhttp.lib;ws2_32.lib;strmiids.lib;vfw32.lib;version.lib;Rpcrt4.lib;d3dx9.lib;dinput8.lib;dxerr9.lib;dxguid.lib;dsound.lib;OpenAL32.lib;libeay32.lib;NxCharacter.lib;PhysXLoader.lib;libogg_static.lib;libvorbis_static.lib;libvorbisfile_static.lib;libspeex.lib;libjpeg.lib;zlib.lib;libpng.lib;NxCooking.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<AdditionalLibraryDirectories>..\..\..\..\..\StaticSDKs\Win32\DX9.0c\Lib\x86;..\..\..\..\..\StaticSDKs\Win32\OpenAL 1.1 with EFX SDK\libs\Win32;..\..\..\..\..\StaticSDKs\Win32\OpenSSL\lib;..\..\..\..\..\StaticSDKs\Win32\PhysX\lib\win32;..\..\..\..\..\StaticSDKs\Win32\xiph\lib\Release;..\..\..\..\..\StaticSDKs\XPlatform\expat-1.95.7\StaticLibs\Win32;..\..\..\..\..\StaticSDKs\XPlatform\jpeg-8c-rgba;..\..\..\..\..\StaticSDKs\XPlatform\zlib\lib;..\..\..\..\..\StaticSDKs\XPlatform\png\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
@ -274,7 +274,7 @@
|
||||
<BufferSecurityCheck>true</BufferSecurityCheck>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>winhttp.lib;ws2_32.lib;strmiids.lib;vfw32.lib;version.lib;Rpcrt4.lib;d3dx9.lib;dinput8.lib;dxerr9.lib;dxguid.lib;dsound.lib;OpenAL32.lib;libeay32.lib;NxCharacter.lib;PhysXLoader.lib;libogg_static.lib;libvorbis_static.lib;libvorbisfile_static.lib;libspeex.lib;libjpeg.lib;zlib.lib;libpng.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalDependencies>winhttp.lib;ws2_32.lib;strmiids.lib;vfw32.lib;version.lib;Rpcrt4.lib;d3dx9.lib;dinput8.lib;dxerr9.lib;dxguid.lib;dsound.lib;OpenAL32.lib;libeay32.lib;NxCharacter.lib;PhysXLoader.lib;libogg_static.lib;libvorbis_static.lib;libvorbisfile_static.lib;libspeex.lib;libjpeg.lib;zlib.lib;libpng.lib;NxCooking.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<AdditionalLibraryDirectories>..\..\..\..\..\StaticSDKs\Win32\DX9.0c\Lib\x86;..\..\..\..\..\StaticSDKs\Win32\OpenAL 1.1 with EFX SDK\libs\Win32;..\..\..\..\..\StaticSDKs\Win32\OpenSSL\lib;..\..\..\..\..\StaticSDKs\Win32\PhysX\lib\win32;..\..\..\..\..\StaticSDKs\Win32\xiph\lib\Release;..\..\..\..\..\StaticSDKs\XPlatform\expat-1.95.7\StaticLibs\Win32;..\..\..\..\..\StaticSDKs\XPlatform\jpeg-8c-rgba;..\..\..\..\..\StaticSDKs\XPlatform\zlib\lib;..\..\..\..\..\StaticSDKs\XPlatform\png\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
@ -403,6 +403,7 @@
|
||||
<ClInclude Include="..\..\..\..\Sources\Plasma\Apps\PlClient\plClient.h" />
|
||||
<ClInclude Include="..\..\..\..\Sources\Plasma\Apps\plClient\plClientCreatable.h" />
|
||||
<ClInclude Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\resource.h" />
|
||||
<ClInclude Include="..\..\..\..\Sources\Plasma\Apps\plClient\loginfix.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\banner.bmp" />
|
||||
@ -448,10 +449,6 @@
|
||||
<Project>{097a0c82-946c-92d5-fc98-da5d9fd7ab35}</Project>
|
||||
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\FeatureLib\pfCCR\pfCCR.vcxproj">
|
||||
<Project>{1599855e-cc20-4c3a-a382-5290c40be08e}</Project>
|
||||
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\FeatureLib\pfCharacter\pfCharacter.vcxproj">
|
||||
<Project>{b881425c-57be-6591-67c5-276c2e4cb073}</Project>
|
||||
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||
|
@ -1,4 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<Filter Include="Source Files">
|
||||
@ -45,6 +45,9 @@
|
||||
<ClInclude Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\resource.h">
|
||||
<Filter>Resource Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\Sources\Plasma\Apps\plClient\loginfix.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\banner.bmp">
|
||||
|
@ -1,10 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug_Internal|Win32">
|
||||
<Configuration>Debug_Internal</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release_Internal|Win32">
|
||||
<Configuration>Release_Internal</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
@ -22,30 +30,53 @@
|
||||
<UseOfMfc>false</UseOfMfc>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseOfMfc>false</UseOfMfc>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseOfMfc>false</UseOfMfc>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseOfMfc>false</UseOfMfc>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'" 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>
|
||||
<_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
|
||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</OutDir>
|
||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">$(Configuration)\</OutDir>
|
||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</IntDir>
|
||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">$(Configuration)\</IntDir>
|
||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
|
||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">false</LinkIncremental>
|
||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</OutDir>
|
||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">$(Configuration)\</OutDir>
|
||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</IntDir>
|
||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">$(Configuration)\</IntDir>
|
||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
|
||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">false</LinkIncremental>
|
||||
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_dbg</TargetName>
|
||||
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">$(ProjectName)_dbg</TargetName>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
@ -93,6 +124,52 @@
|
||||
<Message>Copy to Tools directory</Message>
|
||||
</PostBuildEvent>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">
|
||||
<ClCompile>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<AdditionalIncludeDirectories>../../../../Sources/Plasma/CoreLib;../../../../Sources/Plasma/PubUtilLib/inc;../../../../Sources/Plasma/NucleusLib/inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;PLASMA_EXTERNAL_RELEASE;BUILD_TYPE=BUILD_TYPE_LIVE;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||
<ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope>
|
||||
<PrecompiledHeaderOutputFile>
|
||||
</PrecompiledHeaderOutputFile>
|
||||
<AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
|
||||
<ObjectFileName>$(IntDir)</ObjectFileName>
|
||||
<ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
<CompileAs>Default</CompileAs>
|
||||
<StringPooling>true</StringPooling>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>rpcrt4.lib;CoreLib.lib;CoreLibExe.lib;plFile.lib;plUnifiedTime.lib;pnProduct.lib;pnUtils.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<ProgramDatabaseFile>$(OutDir)$(TargetName).pdb</ProgramDatabaseFile>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<TargetMachine>MachineX86</TargetMachine>
|
||||
<AdditionalLibraryDirectories>../../NucleusLib/pnUtils/Debug_Internal;../../NucleusLib/pnProduct/Debug_Internal;../../CoreLibExe/Debug_Internal;../../CoreLib/Debug_Internal;../../PubUtilLib/plUnifiedTime/Debug_Internal;../../PubUtilLib/plFile/Debug_Internal</AdditionalLibraryDirectories>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
</Link>
|
||||
<Midl>
|
||||
<TypeLibraryName>.\Debug/plFileEncrypt.tlb</TypeLibraryName>
|
||||
<HeaderFileName>
|
||||
</HeaderFileName>
|
||||
</Midl>
|
||||
<ResourceCompile>
|
||||
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<Culture>0x0409</Culture>
|
||||
</ResourceCompile>
|
||||
<PostBuildEvent>
|
||||
<Command>xcopy /Y /I "$(TargetPath)" ..\..\..\..\tools\</Command>
|
||||
</PostBuildEvent>
|
||||
<PostBuildEvent>
|
||||
<Message>Copy to Tools directory</Message>
|
||||
</PostBuildEvent>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<Optimization>Full</Optimization>
|
||||
@ -141,15 +218,70 @@
|
||||
<Message>Copy to Tools directory</Message>
|
||||
</PostBuildEvent>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">
|
||||
<ClCompile>
|
||||
<Optimization>Full</Optimization>
|
||||
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
|
||||
<AdditionalIncludeDirectories>../../../../Sources/Plasma/CoreLib;../../../../Sources/Plasma/PubUtilLib/inc;../../../../Sources/Plasma/NucleusLib/inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;PLASMA_EXTERNAL_RELEASE;BUILD_TYPE=BUILD_TYPE_LIVE;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<StringPooling>true</StringPooling>
|
||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||
<FunctionLevelLinking>
|
||||
</FunctionLevelLinking>
|
||||
<ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope>
|
||||
<PrecompiledHeaderOutputFile>
|
||||
</PrecompiledHeaderOutputFile>
|
||||
<AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
|
||||
<ObjectFileName>$(IntDir)</ObjectFileName>
|
||||
<ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<CompileAs>Default</CompileAs>
|
||||
<DebugInformationFormat>
|
||||
</DebugInformationFormat>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>rpcrt4.lib;CoreLib.lib;CoreLibExe.lib;plFile.lib;plUnifiedTime.lib;pnProduct.lib;pnUtils.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<ProgramDatabaseFile>
|
||||
</ProgramDatabaseFile>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<TargetMachine>MachineX86</TargetMachine>
|
||||
<AdditionalLibraryDirectories>../../NucleusLib/pnUtils/Release_Internal;../../NucleusLib/pnProduct/Release_Internal;../../CoreLibExe/Release_Internal;../../CoreLib/Release_Internal;../../PubUtilLib/plUnifiedTime/Release_Internal;../../PubUtilLib/plFile/Release_Internal</AdditionalLibraryDirectories>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
</Link>
|
||||
<Midl>
|
||||
<TypeLibraryName>.\Release/plFileEncrypt.tlb</TypeLibraryName>
|
||||
<HeaderFileName>
|
||||
</HeaderFileName>
|
||||
</Midl>
|
||||
<ResourceCompile>
|
||||
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<Culture>0x0409</Culture>
|
||||
</ResourceCompile>
|
||||
<PostBuildEvent>
|
||||
<Command>xcopy /Y /I "$(TargetPath)" ..\..\..\..\tools\</Command>
|
||||
<Message>Copy to Tools directory</Message>
|
||||
</PostBuildEvent>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\..\..\..\Sources\Plasma\Apps\plFileEncrypt\main.cpp">
|
||||
<Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
|
||||
<Optimization Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">Disabled</Optimization>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
|
||||
<BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">EnableFastChecks</BasicRuntimeChecks>
|
||||
<Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
|
||||
<Optimization Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">MaxSpeed</Optimization>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
|
@ -1,10 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug_Internal|Win32">
|
||||
<Configuration>Debug_Internal</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release_Internal|Win32">
|
||||
<Configuration>Release_Internal</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
@ -21,30 +29,53 @@
|
||||
<UseOfMfc>false</UseOfMfc>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseOfMfc>false</UseOfMfc>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseOfMfc>false</UseOfMfc>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseOfMfc>false</UseOfMfc>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'" 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>
|
||||
<_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
|
||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</OutDir>
|
||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">$(Configuration)\</OutDir>
|
||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</IntDir>
|
||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">$(Configuration)\</IntDir>
|
||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
|
||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">false</LinkIncremental>
|
||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</OutDir>
|
||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">$(Configuration)\</OutDir>
|
||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</IntDir>
|
||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">$(Configuration)\</IntDir>
|
||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
|
||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">false</LinkIncremental>
|
||||
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_dbg</TargetName>
|
||||
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">$(ProjectName)_dbg</TargetName>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
@ -92,6 +123,52 @@
|
||||
<Message>Copy to Tools directory</Message>
|
||||
</PostBuildEvent>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">
|
||||
<ClCompile>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<AdditionalIncludeDirectories>../../../../Sources/Plasma/CoreLib;../../../../Sources/Plasma/PubUtilLib/inc;../../../../Sources/Plasma/NucleusLib/inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;PLASMA_EXTERNAL_RELEASE;BUILD_TYPE=BUILD_TYPE_LIVE;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||
<ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope>
|
||||
<PrecompiledHeaderOutputFile>
|
||||
</PrecompiledHeaderOutputFile>
|
||||
<AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
|
||||
<ObjectFileName>$(IntDir)</ObjectFileName>
|
||||
<ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
<CompileAs>Default</CompileAs>
|
||||
<StringPooling>true</StringPooling>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>rpcrt4.lib;CoreLib.lib;CoreLibExe.lib;plFile.lib;plUnifiedTime.lib;pnProduct.lib;pnUtils.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<ProgramDatabaseFile>$(OutDir)$(TargetName).pdb</ProgramDatabaseFile>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<TargetMachine>MachineX86</TargetMachine>
|
||||
<AdditionalLibraryDirectories>../../NucleusLib/pnUtils/Debug_Internal;../../NucleusLib/pnProduct/Debug_Internal;../../CoreLibExe/Debug_Internal;../../CoreLib/Debug_Internal;../../PubUtilLib/plUnifiedTime/Debug_Internal;../../PubUtilLib/plFile/Debug_Internal;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
</Link>
|
||||
<Midl>
|
||||
<TypeLibraryName>.\Debug/plFileSecure.tlb</TypeLibraryName>
|
||||
<HeaderFileName>
|
||||
</HeaderFileName>
|
||||
</Midl>
|
||||
<ResourceCompile>
|
||||
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<Culture>0x0409</Culture>
|
||||
</ResourceCompile>
|
||||
<PostBuildEvent>
|
||||
<Command>xcopy /Y /I "$(TargetPath)" ..\..\..\..\tools\</Command>
|
||||
</PostBuildEvent>
|
||||
<PostBuildEvent>
|
||||
<Message>Copy to Tools directory</Message>
|
||||
</PostBuildEvent>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<Optimization>Full</Optimization>
|
||||
@ -142,15 +219,72 @@
|
||||
<Message>Copy to Tools directory</Message>
|
||||
</PostBuildEvent>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">
|
||||
<ClCompile>
|
||||
<Optimization>Full</Optimization>
|
||||
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
|
||||
<AdditionalIncludeDirectories>../../../../Sources/Plasma/CoreLib;../../../../Sources/Plasma/PubUtilLib/inc;../../../../Sources/Plasma/NucleusLib/inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;PLASMA_EXTERNAL_RELEASE;BUILD_TYPE=BUILD_TYPE_LIVE;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<StringPooling>true</StringPooling>
|
||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||
<FunctionLevelLinking>
|
||||
</FunctionLevelLinking>
|
||||
<ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope>
|
||||
<PrecompiledHeaderOutputFile>
|
||||
</PrecompiledHeaderOutputFile>
|
||||
<AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
|
||||
<ObjectFileName>$(IntDir)</ObjectFileName>
|
||||
<ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<CompileAs>Default</CompileAs>
|
||||
<DebugInformationFormat>
|
||||
</DebugInformationFormat>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>rpcrt4.lib;CoreLib.lib;CoreLibExe.lib;plFile.lib;plUnifiedTime.lib;pnProduct.lib;pnUtils.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<AdditionalLibraryDirectories>../../NucleusLib/pnUtils/Release_Internal;../../NucleusLib/pnProduct/Release_Internal;../../CoreLibExe/Release_Internal;../../CoreLib/Release_Internal;../../PubUtilLib/plUnifiedTime/Release_Internal;../../PubUtilLib/plFile/Release_Internal;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
<ProgramDatabaseFile>
|
||||
</ProgramDatabaseFile>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<TargetMachine>MachineX86</TargetMachine>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
</Link>
|
||||
<Midl>
|
||||
<TypeLibraryName>.\Release/plFileSecure.tlb</TypeLibraryName>
|
||||
<HeaderFileName>
|
||||
</HeaderFileName>
|
||||
</Midl>
|
||||
<ResourceCompile>
|
||||
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<Culture>0x0409</Culture>
|
||||
</ResourceCompile>
|
||||
<PostBuildEvent>
|
||||
<Command>xcopy /Y /I "$(TargetPath)" ..\..\..\..\tools\</Command>
|
||||
</PostBuildEvent>
|
||||
<PostBuildEvent>
|
||||
<Message>Copy to Tools directory</Message>
|
||||
</PostBuildEvent>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\..\..\..\Sources\Plasma\Apps\plFileSecure\main.cpp">
|
||||
<Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
|
||||
<Optimization Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">Disabled</Optimization>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
|
||||
<BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">EnableFastChecks</BasicRuntimeChecks>
|
||||
<Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
|
||||
<Optimization Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">MaxSpeed</Optimization>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
|
@ -61,7 +61,7 @@
|
||||
<StringPooling>true</StringPooling>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>CoreLib.lib;CoreLibExe.lib;pfAnimation.lib;pfAudio.lib;pfCamera.lib;pfCharacter.lib;pfConditional.lib;pfGameGUIMgr.lib;pfGameMgr.lib;pfGameScoreMgr.lib;pfJournalBook.lib;pfLocalizationMgr.lib;pfMessage.lib;pfPython.lib;pfSurface.lib;pnAddrInfo.lib;pnAsyncCore.lib;pnAsyncCoreExe.lib;pnDispatch.lib;pnFactory.lib;pnGameMgr.lib;pnIni.lib;pnIniExe.lib;pnInputCore.lib;pnKeyedObject.lib;pnMessage.lib;pnModifier.lib;pnNetBase.lib;pnNetCli.lib;pnNetCommon.lib;pnNetProtocol.lib;pnNucleusInc.lib;pnProduct.lib;pnSceneObject.lib;pnTimer.lib;pnUtils.lib;pnUtilsExe.lib;plAgeDescription.lib;plAgeLoader.lib;plAudible.lib;plAudio.lib;plAudioCore.lib;plAvatar.lib;plClientResMgr.lib;plCompression.lib;plContainer.lib;plDrawable.lib;plEncryption.lib;plFile.lib;plGImage.lib;plGLight.lib;plInputCore.lib;plInterp.lib;plIntersect.lib;plJPEG.lib;plMath.lib;plMessage.lib;plModifier.lib;plNetClient.lib;plNetClientComm.lib;plNetClientRecorder.lib;plNetCommon.lib;plNetGameLib.lib;plNetMessage.lib;plNetTransport.lib;plParticleSystem.lib;plPhysical.lib;plPhysX.lib;plPipeline.lib;plProgressMgr.lib;plResMgr.lib;plScene.lib;plSDL.lib;plStatusLog.lib;plSurface.lib;plTransform.lib;plUnifiedTime.lib;plUUID.lib;plVault.lib;winhttp.lib;ws2_32.lib;strmiids.lib;vfw32.lib;Rpcrt4.lib;pythoncore_static.lib;d3dx9.lib;dinput8.lib;dxerr9.lib;dxguid.lib;dsound.lib;OpenAL32.lib;libeay32.lib;NxCharacter.lib;PhysXLoader.lib;libogg_static.lib;libvorbis_static.lib;libvorbisfile_static.lib;libspeex.lib;libjpeg.lib;libpngd.lib;zlibd.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalDependencies>CoreLib.lib;CoreLibExe.lib;pfAnimation.lib;pfAudio.lib;pfCamera.lib;pfCharacter.lib;pfConditional.lib;pfGameGUIMgr.lib;pfGameMgr.lib;pfGameScoreMgr.lib;pfJournalBook.lib;pfLocalizationMgr.lib;pfMessage.lib;pfPython.lib;pfSurface.lib;pnAddrInfo.lib;pnAsyncCore.lib;pnAsyncCoreExe.lib;pnDispatch.lib;pnFactory.lib;pnGameMgr.lib;pnIni.lib;pnIniExe.lib;pnInputCore.lib;pnKeyedObject.lib;pnMessage.lib;pnModifier.lib;pnNetBase.lib;pnNetCli.lib;pnNetCommon.lib;pnNetProtocol.lib;pnNucleusInc.lib;pnProduct.lib;pnSceneObject.lib;pnTimer.lib;pnUtils.lib;pnUtilsExe.lib;plAgeDescription.lib;plAgeLoader.lib;plAudible.lib;plAudio.lib;plAudioCore.lib;plAvatar.lib;plClientResMgr.lib;plCompression.lib;plContainer.lib;plDrawable.lib;plEncryption.lib;plFile.lib;plGImage.lib;plGLight.lib;plInputCore.lib;plInterp.lib;plIntersect.lib;plJPEG.lib;plMath.lib;plMessage.lib;plModifier.lib;plNetClient.lib;plNetClientComm.lib;plNetClientRecorder.lib;plNetCommon.lib;plNetGameLib.lib;plNetMessage.lib;plNetTransport.lib;plParticleSystem.lib;plPhysical.lib;plPhysX.lib;plPipeline.lib;plProgressMgr.lib;plResMgr.lib;plScene.lib;plSDL.lib;plStatusLog.lib;plSurface.lib;plTransform.lib;plUnifiedTime.lib;plUUID.lib;plVault.lib;winhttp.lib;ws2_32.lib;strmiids.lib;vfw32.lib;Rpcrt4.lib;pythoncore_static.lib;d3dx9.lib;dinput8.lib;dxerr9.lib;dxguid.lib;dsound.lib;OpenAL32.lib;libeay32.lib;NxCharacter.lib;PhysXLoader.lib;libogg_static.lib;libvorbis_static.lib;libvorbisfile_static.lib;libspeex.lib;libjpeg.lib;libpngd.lib;zlibd.lib;NxCooking.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
|
||||
<AdditionalLibraryDirectories>..\..\CoreLib\Debug;..\..\CoreLibExe\Debug;..\..\FeatureLib\pfAnimation\Debug;..\..\FeatureLib\pfAudio\Debug;..\..\FeatureLib\pfCamera\Debug;..\..\FeatureLib\pfCharacter\Debug;..\..\FeatureLib\pfConditional\Debug;..\..\FeatureLib\pfGameGUIMgr\Debug;..\..\FeatureLib\pfGameMgr\Debug;..\..\FeatureLib\pfGameScoreMgr\Debug;..\..\FeatureLib\pfJournalBook\Debug;..\..\FeatureLib\pfLocalizationMgr\Debug;..\..\FeatureLib\pfMessage\Debug;..\..\FeatureLib\pfPython\Debug;..\..\FeatureLib\pfSurface\Debug;..\..\NucleusLib\pnAddrInfo\Debug;..\..\NucleusLib\pnAsyncCore\Debug;..\..\NucleusLib\pnAsyncCoreExe\Debug;..\..\NucleusLib\pnDispatch\Debug;..\..\NucleusLib\pnFactory\Debug;..\..\NucleusLib\pnGameMgr\Debug;..\..\NucleusLib\pnIni\Debug;..\..\NucleusLib\pnIniExe\Debug;..\..\NucleusLib\pnInputCore\Debug;..\..\NucleusLib\pnKeyedObject\Debug;..\..\NucleusLib\pnMessage\Debug;..\..\NucleusLib\pnModifier\Debug;..\..\NucleusLib\pnNetBase\Debug;..\..\NucleusLib\pnNetCli\Debug;..\..\NucleusLib\pnNetCommon\Debug;..\..\NucleusLib\pnNetProtocol\Debug;..\..\NucleusLib\pnNucleusInc\Debug;..\..\NucleusLib\pnProduct\Debug;..\..\NucleusLib\pnSceneObject\Debug;..\..\NucleusLib\pnTimer\Debug;..\..\NucleusLib\pnUtils\Debug;..\..\NucleusLib\pnUtilsExe\Debug;..\..\PubUtilLib\plAgeDescription\Debug;..\..\PubUtilLib\plAgeLoader\Debug;..\..\PubUtilLib\plAudible\Debug;..\..\PubUtilLib\plAudio\Debug;..\..\PubUtilLib\plAudioCore\Debug;..\..\PubUtilLib\plAvatar\Debug;..\..\PubUtilLib\plClientResMgr\Debug;..\..\PubUtilLib\plCompression\Debug;..\..\PubUtilLib\plContainer\Debug;..\..\PubUtilLib\plDrawable\Debug;..\..\PubUtilLib\plEncryption\Debug;..\..\PubUtilLib\plFile\Debug;..\..\PubUtilLib\plGImage\Debug;..\..\PubUtilLib\plGLight\Debug;..\..\PubUtilLib\plInputCore\Debug;..\..\PubUtilLib\plInterp\Debug;..\..\PubUtilLib\plIntersect\Debug;..\..\PubUtilLib\plJPEG\Debug;..\..\PubUtilLib\plMath\Debug;..\..\PubUtilLib\plMessage\Debug;..\..\PubUtilLib\plModifier\Debug;..\..\PubUtilLib\plNetClient\Debug;..\..\PubUtilLib\plNetClientComm\Debug;..\..\PubUtilLib\plNetClientRecorder\Debug;..\..\PubUtilLib\plNetCommon\Debug;..\..\PubUtilLib\plNetGameLib\Debug;..\..\PubUtilLib\plNetMessage\Debug;..\..\PubUtilLib\plNetTransport\Debug;..\..\PubUtilLib\plParticleSystem\Debug;..\..\PubUtilLib\plPhysical\Debug;..\..\PubUtilLib\plPhysX\Debug;..\..\PubUtilLib\plPipeline\Debug;..\..\PubUtilLib\plProgressMgr\Debug;..\..\PubUtilLib\plResMgr\Debug;..\..\PubUtilLib\plScene\Debug;..\..\PubUtilLib\plSDL\Debug;..\..\PubUtilLib\plStatusLog\Debug;..\..\PubUtilLib\plSurface\Debug;..\..\PubUtilLib\plTransform\Debug;..\..\PubUtilLib\plUnifiedTime\Debug;..\..\PubUtilLib\plUUID\Debug;..\..\PubUtilLib\plVault\Debug;..\..\..\..\SDKs\XPlatform\Cypython-2.3.3\PCbuild\Debug;..\..\..\..\..\StaticSDKs\Win32\DX9.0c\Lib\x86;..\..\..\..\..\StaticSDKs\Win32\OpenAL 1.1 with EFX SDK\libs\Win32;..\..\..\..\..\StaticSDKs\Win32\OpenSSL\lib;..\..\..\..\..\StaticSDKs\Win32\PhysX\lib\win32;..\..\..\..\..\StaticSDKs\Win32\xiph\lib\Debug;..\..\..\..\..\StaticSDKs\XPlatform\expat-1.95.7\StaticLibs\Win32;..\..\..\..\..\StaticSDKs\XPlatform\jpeg-8c-rgba;..\..\..\..\..\StaticSDKs\XPlatform\png\lib;..\..\..\..\..\StaticSDKs\XPlatform\zlib\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
<IgnoreSpecificDefaultLibraries>libc.lib;libcd.lib;libci.lib;libcid.lib;libcmt.lib;libcmtd.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
|
||||
@ -95,7 +95,7 @@
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>CoreLib.lib;CoreLibExe.lib;pfAnimation.lib;pfAudio.lib;pfCamera.lib;pfCharacter.lib;pfConditional.lib;pfGameGUIMgr.lib;pfGameMgr.lib;pfGameScoreMgr.lib;pfJournalBook.lib;pfLocalizationMgr.lib;pfMessage.lib;pfPython.lib;pfSurface.lib;pnAddrInfo.lib;pnAsyncCore.lib;pnAsyncCoreExe.lib;pnDispatch.lib;pnFactory.lib;pnGameMgr.lib;pnIni.lib;pnIniExe.lib;pnInputCore.lib;pnKeyedObject.lib;pnMessage.lib;pnModifier.lib;pnNetBase.lib;pnNetCli.lib;pnNetCommon.lib;pnNetProtocol.lib;pnNucleusInc.lib;pnProduct.lib;pnSceneObject.lib;pnTimer.lib;pnUtils.lib;pnUtilsExe.lib;plAgeDescription.lib;plAgeLoader.lib;plAudible.lib;plAudio.lib;plAudioCore.lib;plAvatar.lib;plClientResMgr.lib;plCompression.lib;plContainer.lib;plDrawable.lib;plEncryption.lib;plFile.lib;plGImage.lib;plGLight.lib;plInputCore.lib;plInterp.lib;plIntersect.lib;plJPEG.lib;plMath.lib;plMessage.lib;plModifier.lib;plNetClient.lib;plNetClientComm.lib;plNetClientRecorder.lib;plNetCommon.lib;plNetGameLib.lib;plNetMessage.lib;plNetTransport.lib;plParticleSystem.lib;plPhysical.lib;plPhysX.lib;plPipeline.lib;plProgressMgr.lib;plResMgr.lib;plScene.lib;plSDL.lib;plStatusLog.lib;plSurface.lib;plTransform.lib;plUnifiedTime.lib;plUUID.lib;plVault.lib;winhttp.lib;ws2_32.lib;strmiids.lib;vfw32.lib;Rpcrt4.lib;pythoncore_static.lib;d3dx9.lib;dinput8.lib;dxerr9.lib;dxguid.lib;dsound.lib;OpenAL32.lib;libeay32.lib;NxCharacter.lib;PhysXLoader.lib;libogg_static.lib;libvorbis_static.lib;libvorbisfile_static.lib;libspeex.lib;libjpeg.lib;libpng.lib;zlib.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalDependencies>CoreLib.lib;CoreLibExe.lib;pfAnimation.lib;pfAudio.lib;pfCamera.lib;pfCharacter.lib;pfConditional.lib;pfGameGUIMgr.lib;pfGameMgr.lib;pfGameScoreMgr.lib;pfJournalBook.lib;pfLocalizationMgr.lib;pfMessage.lib;pfPython.lib;pfSurface.lib;pnAddrInfo.lib;pnAsyncCore.lib;pnAsyncCoreExe.lib;pnDispatch.lib;pnFactory.lib;pnGameMgr.lib;pnIni.lib;pnIniExe.lib;pnInputCore.lib;pnKeyedObject.lib;pnMessage.lib;pnModifier.lib;pnNetBase.lib;pnNetCli.lib;pnNetCommon.lib;pnNetProtocol.lib;pnNucleusInc.lib;pnProduct.lib;pnSceneObject.lib;pnTimer.lib;pnUtils.lib;pnUtilsExe.lib;plAgeDescription.lib;plAgeLoader.lib;plAudible.lib;plAudio.lib;plAudioCore.lib;plAvatar.lib;plClientResMgr.lib;plCompression.lib;plContainer.lib;plDrawable.lib;plEncryption.lib;plFile.lib;plGImage.lib;plGLight.lib;plInputCore.lib;plInterp.lib;plIntersect.lib;plJPEG.lib;plMath.lib;plMessage.lib;plModifier.lib;plNetClient.lib;plNetClientComm.lib;plNetClientRecorder.lib;plNetCommon.lib;plNetGameLib.lib;plNetMessage.lib;plNetTransport.lib;plParticleSystem.lib;plPhysical.lib;plPhysX.lib;plPipeline.lib;plProgressMgr.lib;plResMgr.lib;plScene.lib;plSDL.lib;plStatusLog.lib;plSurface.lib;plTransform.lib;plUnifiedTime.lib;plUUID.lib;plVault.lib;winhttp.lib;ws2_32.lib;strmiids.lib;vfw32.lib;Rpcrt4.lib;pythoncore_static.lib;d3dx9.lib;dinput8.lib;dxerr9.lib;dxguid.lib;dsound.lib;OpenAL32.lib;libeay32.lib;NxCharacter.lib;PhysXLoader.lib;libogg_static.lib;libvorbis_static.lib;libvorbisfile_static.lib;libspeex.lib;libjpeg.lib;libpng.lib;zlib.lib;NxCooking.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
|
||||
<AdditionalLibraryDirectories>..\..\CoreLib\Release;..\..\CoreLibExe\Release;..\..\FeatureLib\pfAnimation\Release;..\..\FeatureLib\pfAudio\Release;..\..\FeatureLib\pfCamera\Release;..\..\FeatureLib\pfCharacter\Release;..\..\FeatureLib\pfConditional\Release;..\..\FeatureLib\pfGameGUIMgr\Release;..\..\FeatureLib\pfGameMgr\Release;..\..\FeatureLib\pfGameScoreMgr\Release;..\..\FeatureLib\pfJournalBook\Release;..\..\FeatureLib\pfLocalizationMgr\Release;..\..\FeatureLib\pfMessage\Release;..\..\FeatureLib\pfPython\Release;..\..\FeatureLib\pfSurface\Release;..\..\NucleusLib\pnAddrInfo\Release;..\..\NucleusLib\pnAsyncCore\Release;..\..\NucleusLib\pnAsyncCoreExe\Release;..\..\NucleusLib\pnDispatch\Release;..\..\NucleusLib\pnFactory\Release;..\..\NucleusLib\pnGameMgr\Release;..\..\NucleusLib\pnIni\Release;..\..\NucleusLib\pnIniExe\Release;..\..\NucleusLib\pnInputCore\Release;..\..\NucleusLib\pnKeyedObject\Release;..\..\NucleusLib\pnMessage\Release;..\..\NucleusLib\pnModifier\Release;..\..\NucleusLib\pnNetBase\Release;..\..\NucleusLib\pnNetCli\Release;..\..\NucleusLib\pnNetCommon\Release;..\..\NucleusLib\pnNetProtocol\Release;..\..\NucleusLib\pnNucleusInc\Release;..\..\NucleusLib\pnProduct\Release;..\..\NucleusLib\pnSceneObject\Release;..\..\NucleusLib\pnTimer\Release;..\..\NucleusLib\pnUtils\Release;..\..\NucleusLib\pnUtilsExe\Release;..\..\PubUtilLib\plAgeDescription\Release;..\..\PubUtilLib\plAgeLoader\Release;..\..\PubUtilLib\plAudible\Release;..\..\PubUtilLib\plAudio\Release;..\..\PubUtilLib\plAudioCore\Release;..\..\PubUtilLib\plAvatar\Release;..\..\PubUtilLib\plClientResMgr\Release;..\..\PubUtilLib\plCompression\Release;..\..\PubUtilLib\plContainer\Release;..\..\PubUtilLib\plDrawable\Release;..\..\PubUtilLib\plEncryption\Release;..\..\PubUtilLib\plFile\Release;..\..\PubUtilLib\plGImage\Release;..\..\PubUtilLib\plGLight\Release;..\..\PubUtilLib\plInputCore\Release;..\..\PubUtilLib\plInterp\Release;..\..\PubUtilLib\plIntersect\Release;..\..\PubUtilLib\plJPEG\Release;..\..\PubUtilLib\plMath\Release;..\..\PubUtilLib\plMessage\Release;..\..\PubUtilLib\plModifier\Release;..\..\PubUtilLib\plNetClient\Release;..\..\PubUtilLib\plNetClientComm\Release;..\..\PubUtilLib\plNetClientRecorder\Release;..\..\PubUtilLib\plNetCommon\Release;..\..\PubUtilLib\plNetGameLib\Release;..\..\PubUtilLib\plNetMessage\Release;..\..\PubUtilLib\plNetTransport\Release;..\..\PubUtilLib\plParticleSystem\Release;..\..\PubUtilLib\plPhysical\Release;..\..\PubUtilLib\plPhysX\Release;..\..\PubUtilLib\plPipeline\Release;..\..\PubUtilLib\plProgressMgr\Release;..\..\PubUtilLib\plResMgr\Release;..\..\PubUtilLib\plScene\Release;..\..\PubUtilLib\plSDL\Release;..\..\PubUtilLib\plStatusLog\Release;..\..\PubUtilLib\plSurface\Release;..\..\PubUtilLib\plTransform\Release;..\..\PubUtilLib\plUnifiedTime\Release;..\..\PubUtilLib\plUUID\Release;..\..\PubUtilLib\plVault\Release;..\..\..\..\SDKs\XPlatform\Cypython-2.3.3\PCbuild\Release;..\..\..\..\..\StaticSDKs\Win32\DX9.0c\Lib\x86;..\..\..\..\..\StaticSDKs\Win32\OpenAL 1.1 with EFX SDK\libs\Win32;..\..\..\..\..\StaticSDKs\Win32\OpenSSL\lib;..\..\..\..\..\StaticSDKs\Win32\PhysX\lib\win32;..\..\..\..\..\StaticSDKs\Win32\xiph\lib\Release;..\..\..\..\..\StaticSDKs\XPlatform\expat-1.95.7\StaticLibs\Win32;..\..\..\..\..\StaticSDKs\XPlatform\jpeg-8c-rgba;..\..\..\..\..\StaticSDKs\XPlatform\png\lib;..\..\..\..\..\StaticSDKs\XPlatform\zlib\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
<IgnoreSpecificDefaultLibraries>libc.lib;libci.lib;libcmt.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
|
||||
|
@ -1,10 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug_Internal|Win32">
|
||||
<Configuration>Debug_Internal</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release_Internal|Win32">
|
||||
<Configuration>Release_Internal</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
@ -21,30 +29,53 @@
|
||||
<UseOfMfc>false</UseOfMfc>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseOfMfc>false</UseOfMfc>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseOfMfc>false</UseOfMfc>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseOfMfc>false</UseOfMfc>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'" 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>
|
||||
<_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
|
||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</OutDir>
|
||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">$(Configuration)\</OutDir>
|
||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</IntDir>
|
||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">$(Configuration)\</IntDir>
|
||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
|
||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">false</LinkIncremental>
|
||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</OutDir>
|
||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">$(Configuration)\</OutDir>
|
||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</IntDir>
|
||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">$(Configuration)\</IntDir>
|
||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
|
||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">false</LinkIncremental>
|
||||
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_dbg</TargetName>
|
||||
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">$(ProjectName)_dbg</TargetName>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
@ -95,6 +126,55 @@
|
||||
<Culture>0x0409</Culture>
|
||||
</ResourceCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">
|
||||
<ClCompile>
|
||||
<Optimization>Full</Optimization>
|
||||
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
|
||||
<AdditionalIncludeDirectories>../../../../Sources/Plasma/CoreLib;../../../../Sources/Plasma/PubUtilLib/inc;../../../../Sources/Plasma/FeatureLib/inc;../../../../SDKs/XPlatform/Cypython-2.3.3/Include;../../../../SDKs/XPlatform/Cypython-2.3.3/PC;../../../../SDKs/XPlatform/Cypython-2.3.3/pyconfig_static;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;PLASMA_EXTERNAL_RELEASE;BUILD_TYPE=BUILD_TYPE_LIVE;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;MS_NO_COREDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<StringPooling>true</StringPooling>
|
||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||
<FunctionLevelLinking>
|
||||
</FunctionLevelLinking>
|
||||
<ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<PrecompiledHeaderOutputFile>
|
||||
</PrecompiledHeaderOutputFile>
|
||||
<AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
|
||||
<ObjectFileName>$(IntDir)</ObjectFileName>
|
||||
<ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<CompileAs>Default</CompileAs>
|
||||
<DebugInformationFormat>
|
||||
</DebugInformationFormat>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>CoreLib.lib;CoreLibExe.lib;pfPython.lib;plFile.lib;plUnifiedTime.lib;pythoncore_static.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<AdditionalLibraryDirectories>../../CoreLib/Release_Internal;../../CoreLibExe/Release_Internal;../../FeatureLib/pfPython/Release_Internal;../../PubUtilLib/plFile/Release_Internal;../../PubUtilLib/plUnifiedTime/Release_Internal;../../../../SDKs/XPlatform/Cypython-2.3.3/PCbuild/Release_Internal;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
<ProgramDatabaseFile>
|
||||
</ProgramDatabaseFile>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<TargetMachine>MachineX86</TargetMachine>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
</Link>
|
||||
<Midl>
|
||||
<TypeLibraryName>.\Release/plPythonPack.tlb</TypeLibraryName>
|
||||
<HeaderFileName>
|
||||
</HeaderFileName>
|
||||
</Midl>
|
||||
<PostBuildEvent>
|
||||
<Message>Copy to Tools directory</Message>
|
||||
<Command>xcopy /Y /I "$(TargetPath)" ..\..\..\..\tools\</Command>
|
||||
</PostBuildEvent>
|
||||
<ResourceCompile>
|
||||
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<Culture>0x0409</Culture>
|
||||
</ResourceCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<Optimization>Disabled</Optimization>
|
||||
@ -140,24 +220,83 @@
|
||||
<Culture>0x0409</Culture>
|
||||
</ResourceCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">
|
||||
<ClCompile>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<AdditionalIncludeDirectories>../../../../Sources/Plasma/CoreLib;../../../../Sources/Plasma/PubUtilLib/inc;../../../../Sources/Plasma/FeatureLib/inc;../../../../SDKs/XPlatform/Cypython-2.3.3/Include;../../../../SDKs/XPlatform/Cypython-2.3.3/PC;../../../../SDKs/XPlatform/Cypython-2.3.3/pyconfig_static;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;PLASMA_EXTERNAL_RELEASE;BUILD_TYPE=BUILD_TYPE_LIVE;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;MS_NO_COREDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||
<ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<PrecompiledHeaderOutputFile>
|
||||
</PrecompiledHeaderOutputFile>
|
||||
<AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
|
||||
<ObjectFileName>$(IntDir)</ObjectFileName>
|
||||
<ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
<CompileAs>Default</CompileAs>
|
||||
<StringPooling>true</StringPooling>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>CoreLib.lib;CoreLibExe.lib;pfPython.lib;plFile.lib;plUnifiedTime.lib;pythoncore_static.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<AdditionalLibraryDirectories>../../CoreLib/Debug_Internal;../../CoreLibExe/Debug_Internal;../../FeatureLib/pfPython/Debug_Internal;../../PubUtilLib/plFile/Debug_Internal;../../PubUtilLib/plUnifiedTime/Debug_Internal;../../../../SDKs/XPlatform/Cypython-2.3.3/PCbuild/Debug_Internal;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<ProgramDatabaseFile>$(OutDir)$(TargetName).pdb</ProgramDatabaseFile>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<TargetMachine>MachineX86</TargetMachine>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
</Link>
|
||||
<Midl>
|
||||
<TypeLibraryName>.\Debug/plPythonPack.tlb</TypeLibraryName>
|
||||
<HeaderFileName>
|
||||
</HeaderFileName>
|
||||
</Midl>
|
||||
<PostBuildEvent>
|
||||
<Message>Copy to Tools directory</Message>
|
||||
<Command>xcopy /Y /I "$(TargetPath)" ..\..\..\..\tools\</Command>
|
||||
</PostBuildEvent>
|
||||
<ResourceCompile>
|
||||
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<Culture>0x0409</Culture>
|
||||
</ResourceCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\..\..\..\Sources\Plasma\Apps\plPythonPack\main.cpp">
|
||||
<Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
|
||||
<Optimization Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">Disabled</Optimization>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
|
||||
<BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">EnableFastChecks</BasicRuntimeChecks>
|
||||
<Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
|
||||
<Optimization Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">MaxSpeed</Optimization>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\Sources\Plasma\Apps\plPythonPack\PythonInterface.cpp">
|
||||
<Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
|
||||
<Optimization Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">Disabled</Optimization>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
|
||||
<BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">EnableFastChecks</BasicRuntimeChecks>
|
||||
<Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
|
||||
<Optimization Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">MaxSpeed</Optimization>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
@ -1,10 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug_Internal|Win32">
|
||||
<Configuration>Debug_Internal</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release_Internal|Win32">
|
||||
<Configuration>Release_Internal</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
@ -22,26 +30,44 @@
|
||||
<ConfigurationType>Utility</ConfigurationType>
|
||||
<UseOfMfc>false</UseOfMfc>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Utility</ConfigurationType>
|
||||
<UseOfMfc>false</UseOfMfc>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Utility</ConfigurationType>
|
||||
<UseOfMfc>false</UseOfMfc>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Utility</ConfigurationType>
|
||||
<UseOfMfc>false</UseOfMfc>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'" 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>
|
||||
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
|
||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</OutDir>
|
||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">$(Configuration)\</OutDir>
|
||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</IntDir>
|
||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">$(Configuration)\</IntDir>
|
||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</OutDir>
|
||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">$(Configuration)\</OutDir>
|
||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</IntDir>
|
||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">$(Configuration)\</IntDir>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Midl>
|
||||
@ -50,6 +76,13 @@
|
||||
</HeaderFileName>
|
||||
</Midl>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">
|
||||
<Midl>
|
||||
<TypeLibraryName>.\Release/FeatureLibInc.tlb</TypeLibraryName>
|
||||
<HeaderFileName>
|
||||
</HeaderFileName>
|
||||
</Midl>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Midl>
|
||||
<TypeLibraryName>.\Debug/FeatureLibInc.tlb</TypeLibraryName>
|
||||
@ -57,6 +90,13 @@
|
||||
</HeaderFileName>
|
||||
</Midl>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">
|
||||
<Midl>
|
||||
<TypeLibraryName>.\Debug/FeatureLibInc.tlb</TypeLibraryName>
|
||||
<HeaderFileName>
|
||||
</HeaderFileName>
|
||||
</Midl>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\..\..\..\Sources\Plasma\FeatureLib\inc\pfAllCreatables.h" />
|
||||
</ItemGroup>
|
||||
|
@ -1,240 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug_Internal|Win32">
|
||||
<Configuration>Debug_Internal</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release_Internal|Win32">
|
||||
<Configuration>Release_Internal</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{1599855E-CC20-4C3A-A382-5290C40BE08E}</ProjectGuid>
|
||||
<SccProjectName />
|
||||
<SccLocalPath />
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<UseOfMfc>false</UseOfMfc>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
<WholeProgramOptimization>false</WholeProgramOptimization>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<UseOfMfc>false</UseOfMfc>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
<WholeProgramOptimization>false</WholeProgramOptimization>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<UseOfMfc>false</UseOfMfc>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<UseOfMfc>false</UseOfMfc>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" 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>
|
||||
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
|
||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">$(Configuration)\</OutDir>
|
||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</OutDir>
|
||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">$(Configuration)\</IntDir>
|
||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</IntDir>
|
||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">$(Configuration)\</OutDir>
|
||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</OutDir>
|
||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">$(Configuration)\</IntDir>
|
||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</IntDir>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">
|
||||
<ClCompile>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<AdditionalIncludeDirectories>../../../../Sources/Plasma/FeatureLib/inc;../../../../Sources/Plasma/NucleusLib/inc;../../../../Sources/Plasma/PubUtilLib/inc;../../../../Sources/Plasma/CoreLib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;BUILD_TYPE=BUILD_TYPE_LIVE;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||
<ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope>
|
||||
<PrecompiledHeaderOutputFile>
|
||||
</PrecompiledHeaderOutputFile>
|
||||
<AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
|
||||
<ObjectFileName>$(IntDir)</ObjectFileName>
|
||||
<ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
<CompileAs>Default</CompileAs>
|
||||
<StringPooling>true</StringPooling>
|
||||
</ClCompile>
|
||||
<Lib>
|
||||
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
</Lib>
|
||||
<ResourceCompile>
|
||||
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<Culture>0x0409</Culture>
|
||||
</ResourceCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<AdditionalIncludeDirectories>../../../../Sources/Plasma/FeatureLib/inc;../../../../Sources/Plasma/NucleusLib/inc;../../../../Sources/Plasma/PubUtilLib/inc;../../../../Sources/Plasma/CoreLib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;PLASMA_EXTERNAL_RELEASE;BUILD_TYPE=BUILD_TYPE_LIVE;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||
<ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope>
|
||||
<PrecompiledHeaderOutputFile>
|
||||
</PrecompiledHeaderOutputFile>
|
||||
<AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
|
||||
<ObjectFileName>$(IntDir)</ObjectFileName>
|
||||
<ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
<CompileAs>Default</CompileAs>
|
||||
<StringPooling>true</StringPooling>
|
||||
</ClCompile>
|
||||
<Lib>
|
||||
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
</Lib>
|
||||
<ResourceCompile>
|
||||
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<Culture>0x0409</Culture>
|
||||
</ResourceCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">
|
||||
<ClCompile>
|
||||
<Optimization>Full</Optimization>
|
||||
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
|
||||
<AdditionalIncludeDirectories>../../../../Sources/Plasma/FeatureLib/inc;../../../../Sources/Plasma/NucleusLib/inc;../../../../Sources/Plasma/PubUtilLib/inc;../../../../Sources/Plasma/CoreLib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;BUILD_TYPE=BUILD_TYPE_LIVE;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<StringPooling>true</StringPooling>
|
||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||
<FunctionLevelLinking>
|
||||
</FunctionLevelLinking>
|
||||
<ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope>
|
||||
<PrecompiledHeaderOutputFile>
|
||||
</PrecompiledHeaderOutputFile>
|
||||
<AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
|
||||
<ObjectFileName>$(IntDir)</ObjectFileName>
|
||||
<ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<DebugInformationFormat>
|
||||
</DebugInformationFormat>
|
||||
<CompileAs>Default</CompileAs>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<BufferSecurityCheck>true</BufferSecurityCheck>
|
||||
</ClCompile>
|
||||
<Lib>
|
||||
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
</Lib>
|
||||
<ResourceCompile>
|
||||
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<Culture>0x0409</Culture>
|
||||
</ResourceCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<Optimization>Full</Optimization>
|
||||
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
|
||||
<AdditionalIncludeDirectories>../../../../Sources/Plasma/FeatureLib/inc;../../../../Sources/Plasma/NucleusLib/inc;../../../../Sources/Plasma/PubUtilLib/inc;../../../../Sources/Plasma/CoreLib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;PLASMA_EXTERNAL_RELEASE;BUILD_TYPE=BUILD_TYPE_LIVE;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<StringPooling>true</StringPooling>
|
||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||
<FunctionLevelLinking>
|
||||
</FunctionLevelLinking>
|
||||
<ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope>
|
||||
<PrecompiledHeaderOutputFile>
|
||||
</PrecompiledHeaderOutputFile>
|
||||
<AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
|
||||
<ObjectFileName>$(IntDir)</ObjectFileName>
|
||||
<ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<DebugInformationFormat>
|
||||
</DebugInformationFormat>
|
||||
<CompileAs>Default</CompileAs>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<BufferSecurityCheck>true</BufferSecurityCheck>
|
||||
</ClCompile>
|
||||
<Lib>
|
||||
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
</Lib>
|
||||
<ResourceCompile>
|
||||
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<Culture>0x0409</Culture>
|
||||
</ResourceCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\..\..\..\Sources\Plasma\FeatureLib\pfCCR\plCCRMgr.cpp">
|
||||
<Optimization Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">Disabled</Optimization>
|
||||
<Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">EnableFastChecks</BasicRuntimeChecks>
|
||||
<BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
|
||||
<Optimization Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">MaxSpeed</Optimization>
|
||||
<Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\Sources\Plasma\FeatureLib\pfCCR\plCCRVault.cpp">
|
||||
<Optimization Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">Disabled</Optimization>
|
||||
<Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">EnableFastChecks</BasicRuntimeChecks>
|
||||
<BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
|
||||
<Optimization Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">MaxSpeed</Optimization>
|
||||
<Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\..\..\..\Sources\Plasma\FeatureLib\pfCCR\plCCRCreatable.h" />
|
||||
<ClInclude Include="..\..\..\..\Sources\Plasma\FeatureLib\pfCCR\plCCRMgr.h" />
|
||||
<ClInclude Include="..\..\..\..\Sources\Plasma\FeatureLib\pfCCR\plCCRVault.h" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
@ -1,32 +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>{5382957f-6574-4e48-8435-c3d3716a4c13}</UniqueIdentifier>
|
||||
<Extensions>cpp;c;cxx;rc;def;r;odl;idl;hpj;bat</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Header Files">
|
||||
<UniqueIdentifier>{0b57ada9-3ee3-4369-8c9a-c08226658d7e}</UniqueIdentifier>
|
||||
<Extensions>h;hpp;hxx;hm;inl</Extensions>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\..\..\..\Sources\Plasma\FeatureLib\pfCCR\plCCRMgr.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\Sources\Plasma\FeatureLib\pfCCR\plCCRVault.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\..\..\..\Sources\Plasma\FeatureLib\pfCCR\plCCRCreatable.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\Sources\Plasma\FeatureLib\pfCCR\plCCRMgr.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\Sources\Plasma\FeatureLib\pfCCR\plCCRVault.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
</Project>
|
@ -1,10 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug_Internal|Win32">
|
||||
<Configuration>Debug_Internal</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release_Internal|Win32">
|
||||
<Configuration>Release_Internal</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
@ -21,26 +29,44 @@
|
||||
<ConfigurationType>Utility</ConfigurationType>
|
||||
<UseOfMfc>false</UseOfMfc>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Utility</ConfigurationType>
|
||||
<UseOfMfc>false</UseOfMfc>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Utility</ConfigurationType>
|
||||
<UseOfMfc>false</UseOfMfc>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Utility</ConfigurationType>
|
||||
<UseOfMfc>false</UseOfMfc>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'" 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>
|
||||
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
|
||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</OutDir>
|
||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">$(Configuration)\</OutDir>
|
||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</IntDir>
|
||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">$(Configuration)\</IntDir>
|
||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</OutDir>
|
||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">$(Configuration)\</OutDir>
|
||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</IntDir>
|
||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">$(Configuration)\</IntDir>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Midl>
|
||||
@ -49,6 +75,13 @@
|
||||
</HeaderFileName>
|
||||
</Midl>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">
|
||||
<Midl>
|
||||
<TypeLibraryName>.\Release/PubUtilInc.tlb</TypeLibraryName>
|
||||
<HeaderFileName>
|
||||
</HeaderFileName>
|
||||
</Midl>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Midl>
|
||||
<TypeLibraryName>.\Debug/PubUtilInc.tlb</TypeLibraryName>
|
||||
@ -56,6 +89,13 @@
|
||||
</HeaderFileName>
|
||||
</Midl>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">
|
||||
<Midl>
|
||||
<TypeLibraryName>.\Debug/PubUtilInc.tlb</TypeLibraryName>
|
||||
<HeaderFileName>
|
||||
</HeaderFileName>
|
||||
</Midl>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\..\..\..\Sources\Plasma\PubUtilLib\inc\plAllCreatables.h" />
|
||||
</ItemGroup>
|
||||
|
@ -71,7 +71,7 @@
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">
|
||||
<ClCompile>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<AdditionalIncludeDirectories>../../../../Sources/Plasma/CoreLib;../../../../Sources/Plasma/NucleusLib/inc;../../../../Sources/Plasma/PubUtilLib/inc;../../../../../StaticSDKs/Win32/PhysX/Physics/include;../../../../../StaticSDKs/Win32/PhysX/PhysXLoader/include;../../../../../StaticSDKs/Win32/PhysX/Foundation/include;../../../../../StaticSDKs/Win32/PhysX/NxCharacter/include;../../../../../StaticSDKs/Win32/OpenSSL/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>../../../../Sources/Plasma/CoreLib;../../../../Sources/Plasma/NucleusLib/inc;../../../../Sources/Plasma/PubUtilLib/inc;../../../../../StaticSDKs/Win32/PhysX/Physics/include;../../../../../StaticSDKs/Win32/PhysX/PhysXLoader/include;../../../../../StaticSDKs/Win32/PhysX/Cooking/include;../../../../../StaticSDKs/Win32/PhysX/Foundation/include;../../../../../StaticSDKs/Win32/PhysX/NxCharacter/include;../../../../../StaticSDKs/Win32/OpenSSL/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;BUILD_TYPE=BUILD_TYPE_LIVE;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<MinimalRebuild>false</MinimalRebuild>
|
||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||
@ -94,7 +94,7 @@
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<AdditionalIncludeDirectories>../../../../Sources/Plasma/CoreLib;../../../../Sources/Plasma/NucleusLib/inc;../../../../Sources/Plasma/PubUtilLib/inc;../../../../../StaticSDKs/Win32/PhysX/Physics/include;../../../../../StaticSDKs/Win32/PhysX/PhysXLoader/include;../../../../../StaticSDKs/Win32/PhysX/Foundation/include;../../../../../StaticSDKs/Win32/PhysX/NxCharacter/include;../../../../../StaticSDKs/Win32/OpenSSL/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>../../../../Sources/Plasma/CoreLib;../../../../Sources/Plasma/NucleusLib/inc;../../../../Sources/Plasma/PubUtilLib/inc;../../../../../StaticSDKs/Win32/PhysX/Physics/include;../../../../../StaticSDKs/Win32/PhysX/PhysXLoader/include;../../../../../StaticSDKs/Win32/PhysX/Cooking/include;../../../../../StaticSDKs/Win32/PhysX/Foundation/include;../../../../../StaticSDKs/Win32/PhysX/NxCharacter/include;../../../../../StaticSDKs/Win32/OpenSSL/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;PLASMA_EXTERNAL_RELEASE;BUILD_TYPE=BUILD_TYPE_LIVE;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<MinimalRebuild>false</MinimalRebuild>
|
||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||
@ -116,7 +116,7 @@
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">
|
||||
<ClCompile>
|
||||
<AdditionalIncludeDirectories>../../../../Sources/Plasma/CoreLib;../../../../Sources/Plasma/NucleusLib/inc;../../../../Sources/Plasma/PubUtilLib/inc;../../../../../StaticSDKs/Win32/PhysX/Physics/include;../../../../../StaticSDKs/Win32/PhysX/PhysXLoader/include;../../../../../StaticSDKs/Win32/PhysX/Foundation/include;../../../../../StaticSDKs/Win32/PhysX/NxCharacter/include;../../../../../StaticSDKs/Win32/OpenSSL/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>../../../../Sources/Plasma/CoreLib;../../../../Sources/Plasma/NucleusLib/inc;../../../../Sources/Plasma/PubUtilLib/inc;../../../../../StaticSDKs/Win32/PhysX/Physics/include;../../../../../StaticSDKs/Win32/PhysX/PhysXLoader/include;../../../../../StaticSDKs/Win32/PhysX/Cooking/include;../../../../../StaticSDKs/Win32/PhysX/Foundation/include;../../../../../StaticSDKs/Win32/PhysX/NxCharacter/include;../../../../../StaticSDKs/Win32/OpenSSL/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;BUILD_TYPE=BUILD_TYPE_LIVE;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||
<ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope>
|
||||
@ -141,7 +141,7 @@
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<AdditionalIncludeDirectories>../../../../Sources/Plasma/CoreLib;../../../../Sources/Plasma/NucleusLib/inc;../../../../Sources/Plasma/PubUtilLib/inc;../../../../../StaticSDKs/Win32/PhysX/Physics/include;../../../../../StaticSDKs/Win32/PhysX/PhysXLoader/include;../../../../../StaticSDKs/Win32/PhysX/Foundation/include;../../../../../StaticSDKs/Win32/PhysX/NxCharacter/include;../../../../../StaticSDKs/Win32/OpenSSL/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>../../../../Sources/Plasma/CoreLib;../../../../Sources/Plasma/NucleusLib/inc;../../../../Sources/Plasma/PubUtilLib/inc;../../../../../StaticSDKs/Win32/PhysX/Physics/include;../../../../../StaticSDKs/Win32/PhysX/PhysXLoader/include;../../../../../StaticSDKs/Win32/PhysX/Cooking/include;../../../../../StaticSDKs/Win32/PhysX/Foundation/include;../../../../../StaticSDKs/Win32/PhysX/NxCharacter/include;../../../../../StaticSDKs/Win32/OpenSSL/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;PLASMA_EXTERNAL_RELEASE;BUILD_TYPE=BUILD_TYPE_LIVE;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||
<ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope>
|
||||
|
@ -353,6 +353,9 @@ xcopy /Y ..\..\..\..\Sources\Plasma\Apps\plClient\external\resource.dat ..\..\..
|
||||
<File
|
||||
RelativePath="..\..\..\..\Sources\Plasma\Apps\plClient\plClientUpdateFormat.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\..\..\Sources\Plasma\Apps\PlClient\loginfix.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\..\..\Sources\Tools\MaxSceneViewer\plPluginClient.h">
|
||||
</File>
|
||||
@ -421,6 +424,9 @@ xcopy /Y ..\..\..\..\Sources\Plasma\Apps\plClient\external\resource.dat ..\..\..
|
||||
<File
|
||||
RelativePath="..\..\..\..\..\StaticSDKs\Win32\PhysX\lib\win32\NxCharacter.lib">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\..\..\..\StaticSDKs\Win32\PhysX\lib\win32\NxCooking.lib">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\..\..\..\StaticSDKs\Win32\PhysX\lib\win32\PhysXLoader.lib">
|
||||
</File>
|
||||
|
@ -33,7 +33,7 @@
|
||||
Name="VCCustomBuildTool"/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="ogg_static.lib vorbis_static.lib vorbisfile_static.lib ksproxy.lib strmiids.lib wininet.lib vfw32.lib winmm.lib libeay32.lib ws2_32.lib version.lib odbc32.lib odbccp32.lib d3dx9.lib dinput8.lib dplayx.lib dsound.lib dxerr9.lib dxguid.lib libpngd.lib zlibd.lib Rpcrt4.lib NxCharacter.lib PhysXLoader.lib libspeex.lib OpenAL32.lib libjpeg.lib"
|
||||
AdditionalDependencies="ogg_static.lib vorbis_static.lib vorbisfile_static.lib ksproxy.lib strmiids.lib wininet.lib vfw32.lib winmm.lib libeay32.lib ws2_32.lib version.lib odbc32.lib odbccp32.lib d3dx9.lib dinput8.lib dplayx.lib dsound.lib dxerr9.lib dxguid.lib libpngd.lib zlibd.lib Rpcrt4.lib NxCharacter.lib PhysXLoader.lib libspeex.lib OpenAL32.lib libjpeg.lib NxCooking.lib"
|
||||
OutputFile="$(OutDir)/plPageOptimizer.exe"
|
||||
LinkIncremental="2"
|
||||
AdditionalLibraryDirectories="..\..\..\..\..\StaticSDKs\Win32\eax\lib;..\..\..\..\..\StaticSDKs\Win32\oggvorbis\lib;..\..\..\..\..\StaticSDKs\Win32\WMSDK\lib;..\..\..\..\..\StaticSDKs\Win32\OpenSSL\lib;..\..\..\..\..\StaticSDKs\Win32\dx8.1sdk\lib;..\..\..\..\SDKs\XPlatform\ODE\lib\win32;"..\..\..\..\..\StaticSDKs\XPlatform\expat-1.95.7\StaticLibs";..\..\..\..\..\StaticSDKs\XPlatform\png\lib;..\..\..\..\..\StaticSDKs\XPlatform\zlib\lib;..\..\..\..\..\StaticSDKs\Win32\PhysX\lib\win32;"..\..\..\..\..\StaticSDKs\XPlatform\expat-1.95.7\StaticLibs\Win32";"..\..\..\..\..\StaticSDKs\Win32\speex-1.0.1\Win32\libspeex\Debug";"..\..\..\..\..\StaticSDKs\Win32\OpenAL 1.1 with EFX SDK\libs\Win32";..\..\..\..\..\StaticSDKs\Win32\dx9.0c\lib;..\..\..\..\..\StaticSDKs\Win32\dx9.0c\lib\x86;"../../../../../StaticSDKs/XPlatform/jpeg-8c-rgba""
|
||||
@ -83,7 +83,7 @@
|
||||
Name="VCCustomBuildTool"/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="ogg_static.lib vorbis_static.lib vorbisfile_static.lib strmiids.lib wininet.lib vfw32.lib winmm.lib libeay32.lib ws2_32.lib version.lib odbc32.lib odbccp32.lib d3dx9.lib dinput8.lib dplayx.lib dsound.lib dxerr9.lib dxguid.lib libpng.lib zlib.lib libspeex.lib OpenAL32.lib Rpcrt4.lib NxCharacter.lib PhysXLoader.lib libjpeg.lib"
|
||||
AdditionalDependencies="ogg_static.lib vorbis_static.lib vorbisfile_static.lib strmiids.lib wininet.lib vfw32.lib winmm.lib libeay32.lib ws2_32.lib version.lib odbc32.lib odbccp32.lib d3dx9.lib dinput8.lib dplayx.lib dsound.lib dxerr9.lib dxguid.lib libpng.lib zlib.lib libspeex.lib OpenAL32.lib Rpcrt4.lib NxCharacter.lib PhysXLoader.lib libjpeg.lib NxCooking.lib"
|
||||
OutputFile="$(OutDir)/plPageOptimizer.exe"
|
||||
LinkIncremental="1"
|
||||
AdditionalLibraryDirectories="..\..\..\..\..\StaticSDKs\Win32\eax\lib;..\..\..\..\..\StaticSDKs\Win32\oggvorbis\lib;..\..\..\..\..\StaticSDKs\Win32\WMSDK\lib;..\..\..\..\..\StaticSDKs\Win32\OpenSSL\lib;..\..\..\..\..\StaticSDKs\Win32\dx9.0c\lib;..\..\..\..\..\StaticSDKs\Win32\dx9.0c\lib\x86;..\..\..\..\SDKs\XPlatform\ODE\lib\win32;"..\..\..\..\..\StaticSDKs\XPlatform\expat-1.95.7\StaticLibs";..\..\..\..\..\StaticSDKs\XPlatform\png\lib;..\..\..\..\..\StaticSDKs\XPlatform\zlib\lib;"..\..\..\..\..\StaticSDKs\Win32\speex-1.0.1\Win32\libspeex\Release";"..\..\..\..\..\StaticSDKs\Win32\OpenAL 1.1 with EFX SDK\libs\Win32";"..\..\..\..\..\StaticSDKs\XPlatform\expat-1.95.7\StaticLibs\Win32";..\..\..\..\..\StaticSDKs\Win32\PhysX\lib\win32;"../../../../../StaticSDKs/XPlatform/jpeg-8c-rgba""
|
||||
|
@ -0,0 +1,91 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// The stuff below seems to be missing fron WinIoCtl.h in MSVC2003 but is
|
||||
// probably present in later versions. This was robbed from MSDN to fill
|
||||
// the gap.
|
||||
|
||||
#if (_MSC_VER < 1500) // For VS2005 and earlier only (might need to make it VS2003 only (1310))
|
||||
|
||||
#define IOCTL_STORAGE_QUERY_PROPERTY CTL_CODE(IOCTL_STORAGE_BASE, 0x0500, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
|
||||
// retrieve the storage device descriptor data for a device.
|
||||
typedef struct _STORAGE_DEVICE_DESCRIPTOR {
|
||||
ULONG Version;
|
||||
ULONG Size;
|
||||
UCHAR DeviceType;
|
||||
UCHAR DeviceTypeModifier;
|
||||
BOOLEAN RemovableMedia;
|
||||
BOOLEAN CommandQueueing;
|
||||
ULONG VendorIdOffset;
|
||||
ULONG ProductIdOffset;
|
||||
ULONG ProductRevisionOffset;
|
||||
ULONG SerialNumberOffset;
|
||||
STORAGE_BUS_TYPE BusType;
|
||||
ULONG RawPropertiesLength;
|
||||
UCHAR RawDeviceProperties[1];
|
||||
} STORAGE_DEVICE_DESCRIPTOR, *PSTORAGE_DEVICE_DESCRIPTOR;
|
||||
|
||||
// retrieve the properties of a storage device or adapter.
|
||||
typedef enum _STORAGE_QUERY_TYPE {
|
||||
PropertyStandardQuery = 0,
|
||||
PropertyExistsQuery,
|
||||
PropertyMaskQuery,
|
||||
PropertyQueryMaxDefined
|
||||
} STORAGE_QUERY_TYPE, *PSTORAGE_QUERY_TYPE;
|
||||
|
||||
// retrieve the properties of a storage device or adapter.
|
||||
typedef enum _STORAGE_PROPERTY_ID {
|
||||
StorageDeviceProperty = 0,
|
||||
StorageAdapterProperty,
|
||||
StorageDeviceIdProperty
|
||||
} STORAGE_PROPERTY_ID, *PSTORAGE_PROPERTY_ID;
|
||||
|
||||
// retrieve the properties of a storage device or adapter.
|
||||
typedef struct _STORAGE_PROPERTY_QUERY {
|
||||
STORAGE_PROPERTY_ID PropertyId;
|
||||
STORAGE_QUERY_TYPE QueryType;
|
||||
UCHAR AdditionalParameters[1];
|
||||
} STORAGE_PROPERTY_QUERY, *PSTORAGE_PROPERTY_QUERY;
|
||||
#endif
|
||||
// End of stuff taken from MSDN
|
@ -114,9 +114,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
#include "../plStatusLog/plStatusLog.h"
|
||||
#include "../plProgressMgr/plProgressMgr.h"
|
||||
#include "../plPipeline/plDTProgressMgr.h"
|
||||
#ifdef USE_BINK_SDK
|
||||
#include "../plPipeline/plBinkPlayer.h"
|
||||
#endif
|
||||
#include "../plMessage/plMovieMsg.h"
|
||||
|
||||
#include "../plSDL/plSDL.h"
|
||||
@ -271,10 +269,8 @@ hsBool plClient::Shutdown()
|
||||
// Let the resmanager know we're going to be shutting down.
|
||||
hsgResMgr::ResMgr()->BeginShutdown();
|
||||
|
||||
#ifdef USE_BINK_SDK
|
||||
// Must kill off all movies before shutting down audio.
|
||||
IKillMovies();
|
||||
#endif
|
||||
|
||||
plgAudioSys::Activate(false);
|
||||
#ifdef USE_BINK_SDK
|
||||
@ -822,13 +818,11 @@ hsBool plClient::MsgReceive(plMessage* msg)
|
||||
}
|
||||
return true;
|
||||
}
|
||||
#ifdef USE_BINK_SDK
|
||||
plMovieMsg* mov = plMovieMsg::ConvertNoRef(msg);
|
||||
if( mov )
|
||||
{
|
||||
return IHandleMovieMsg(mov);
|
||||
}
|
||||
#endif // USE_BINK_SDK
|
||||
|
||||
plLinkEffectsTriggerMsg* linkFX = plLinkEffectsTriggerMsg::ConvertNoRef(msg);
|
||||
if (linkFX)
|
||||
@ -875,7 +869,6 @@ hsBool plClient::MsgReceive(plMessage* msg)
|
||||
return hsKeyedObject::MsgReceive(msg);
|
||||
}
|
||||
|
||||
#ifdef USE_BINK_SDK
|
||||
//============================================================================
|
||||
hsBool plClient::IHandleMovieMsg(plMovieMsg* mov)
|
||||
{
|
||||
@ -956,7 +949,6 @@ hsBool plClient::IHandleMovieMsg(plMovieMsg* mov)
|
||||
|
||||
return true;
|
||||
}
|
||||
#endif // USE_BINK_SDK
|
||||
|
||||
int plClient::IFindRoomByLoc(const plLocation& loc)
|
||||
{
|
||||
@ -1529,8 +1521,8 @@ hsBool plClient::StartInit()
|
||||
//if( GetDone() ) return false;
|
||||
IPlayIntroBink("avi/intro1.bik", 0.f, 0.f, 0.f, 1.f, 1.f, 0.75);
|
||||
if( GetDone() ) return false;
|
||||
plgDispatch::Dispatch()->RegisterForExactType(plMovieMsg::Index(), GetKey());
|
||||
#endif // USE_BINK_SDK
|
||||
plgDispatch::Dispatch()->RegisterForExactType(plMovieMsg::Index(), GetKey());
|
||||
|
||||
//
|
||||
// Init Net before loading things
|
||||
@ -1936,11 +1928,9 @@ hsBool plClient::IDraw()
|
||||
IProcessPostRenderRequests();
|
||||
plProfile_EndTiming(PostRender);
|
||||
|
||||
#ifdef USE_BINK_SDK
|
||||
plProfile_BeginTiming(Movies);
|
||||
IServiceMovies();
|
||||
plProfile_EndTiming(Movies);
|
||||
#endif // USE_BINK_SDK
|
||||
|
||||
#ifndef PLASMA_EXTERNAL_RELEASE
|
||||
plProfile_BeginTiming(Console);
|
||||
@ -1971,7 +1961,6 @@ hsBool plClient::IDraw()
|
||||
return false;
|
||||
}
|
||||
|
||||
#ifdef USE_BINK_SDK
|
||||
void plClient::IServiceMovies()
|
||||
{
|
||||
int i;
|
||||
@ -1986,9 +1975,7 @@ void plClient::IServiceMovies()
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif // USE_BINK_SDK
|
||||
|
||||
#ifdef USE_BINK_SDK
|
||||
void plClient::IKillMovies()
|
||||
{
|
||||
int i;
|
||||
@ -1996,7 +1983,6 @@ void plClient::IKillMovies()
|
||||
delete fMovies[i];
|
||||
fMovies.Reset();
|
||||
}
|
||||
#endif // USE_BINK_SDK
|
||||
|
||||
#ifdef USE_BINK_SDK
|
||||
hsBool plClient::IPlayIntroBink(const char* movieName, hsScalar endDelay, hsScalar posX, hsScalar posY, hsScalar scaleX, hsScalar scaleY, hsScalar volume /* = 1.0 */)
|
||||
|
@ -78,9 +78,7 @@ class plFontCache;
|
||||
class plClientMsg;
|
||||
class plLocation;
|
||||
class plMovieMsg;
|
||||
#ifdef USE_BINK_SDK
|
||||
class plBinkPlayer;
|
||||
#endif
|
||||
class plPreloaderMsg;
|
||||
class plNetCommAuthMsg;
|
||||
class plAgeLoaded2Msg;
|
||||
@ -152,9 +150,7 @@ protected:
|
||||
int fQuality;
|
||||
|
||||
hsBool fQuitIntro;
|
||||
#ifdef USE_BINK_SDK
|
||||
hsTArray<plBinkPlayer*> fMovies;
|
||||
#endif
|
||||
|
||||
hsBool fPatchGlobalAges;
|
||||
|
||||
@ -197,10 +193,10 @@ protected:
|
||||
|
||||
#ifdef USE_BINK_SDK
|
||||
hsBool IPlayIntroBink(const char* movieName, hsScalar endDelay, hsScalar posX, hsScalar posY, hsScalar scaleX, hsScalar scaleY, hsScalar volume = 1.0);
|
||||
#endif // USE_BINK_SDK
|
||||
hsBool IHandleMovieMsg(plMovieMsg* mov);
|
||||
void IKillMovies();
|
||||
void IServiceMovies();
|
||||
#endif // USE_BINK_SDK
|
||||
|
||||
void IStartProgress( const char *title, hsScalar len );
|
||||
void IIncProgress( hsScalar byHowMuch, const char *text );
|
||||
|
@ -76,6 +76,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
|
||||
#include <shellapi.h>
|
||||
#include "WinHttp.h"
|
||||
#include "loginfix.h"
|
||||
//
|
||||
// Defines
|
||||
//
|
||||
@ -90,9 +91,10 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
#if BUILD_TYPE == BUILD_TYPE_DEV
|
||||
#define STATUS_PATH L"www2.cyanworlds.com"
|
||||
#else
|
||||
#define STATUS_PATH L"support.cyanworlds.com"
|
||||
#define STATUS_PATH L"account.mystonline.com"
|
||||
#endif
|
||||
|
||||
|
||||
//
|
||||
// Globals
|
||||
//
|
||||
@ -198,11 +200,25 @@ struct LoginDialogParam {
|
||||
wchar accountName[kMaxAccountNameLength];
|
||||
};
|
||||
|
||||
// List of hash styles we are going to test against the server
|
||||
// ... this method of trying multiple hashes against the server has risks of being more compromised than just testing one hash.
|
||||
// ... So, if you know your unique client is only going to connect to your server then it would be wise to limit the testing to one hash.
|
||||
// ... Which can be done simply by setting FIRST_PASSWORD_HASH and LAST_PASSWORD_HASH to the hash that you use.
|
||||
enum
|
||||
{
|
||||
kPasswordHashSHA0,
|
||||
kPasswordHashSHA1
|
||||
};
|
||||
static const int FIRST_PASSWORD_HASH = kPasswordHashSHA1;
|
||||
static const int LAST_PASSWORD_HASH = kPasswordHashSHA0;
|
||||
|
||||
bool AuthenticateNetClientComm(ENetError* result, HWND parentWnd);
|
||||
bool IsExpired();
|
||||
bool GetDisksProperty(HANDLE hDevice, PSTORAGE_DEVICE_DESCRIPTOR pDevDesc);
|
||||
void GetOldCryptKey(UInt32* cryptKey, unsigned size);
|
||||
void GetCryptKey(UInt32* cryptKey, unsigned size);
|
||||
static void SaveUserPass (char *username, char *password, ShaDigest *pNamePassHash, bool remember_password,
|
||||
bool fromGT);
|
||||
int whichHash);
|
||||
static void LoadUserPass (const wchar *accountName, char *username, ShaDigest *pNamePassHash, bool *pRemember,
|
||||
bool fromGT, int *pFocus);
|
||||
static void AuthFailedStrings (ENetError authError, bool fromGT,
|
||||
@ -318,11 +334,22 @@ static bool TGRunLoginDialog (const wchar *accountName, bool fromGT)
|
||||
if (Remember[0] == 'y')
|
||||
bRemember = true;
|
||||
|
||||
SaveUserPass (Username, Password, &NamePassHash, bRemember, fromGT);
|
||||
|
||||
// Do login & see if it failed
|
||||
// cycle through the hash types until we find one that matches or errors out
|
||||
ENetError auth;
|
||||
bool cancelled = AuthenticateNetClientComm(&auth, NULL);
|
||||
bool cancelled;
|
||||
for (int whichHash=FIRST_PASSWORD_HASH; whichHash >= LAST_PASSWORD_HASH; whichHash-- )
|
||||
{
|
||||
SaveUserPass (Username, Password, &NamePassHash, bRemember, whichHash);
|
||||
|
||||
// Do login & see if it failed
|
||||
cancelled = AuthenticateNetClientComm(&auth, NULL);
|
||||
// if the password was successful then go to the end processing
|
||||
if (IS_NET_SUCCESS(auth) && !cancelled)
|
||||
break;
|
||||
// if it was cancelled or any error other than wrong password then go to end processing
|
||||
if (cancelled || auth != kNetErrAuthenticationFailed)
|
||||
break;
|
||||
}
|
||||
|
||||
if (IS_NET_SUCCESS (auth) && !cancelled)
|
||||
break;
|
||||
@ -929,18 +956,6 @@ void DebugMsgF(const char* format, ...)
|
||||
#endif
|
||||
}
|
||||
|
||||
static bool IsMachineLittleEndian() {
|
||||
int i = 1;
|
||||
char *p = (char *) &i;
|
||||
if (p[0] == 1) // Lowest address contains the least significant byte
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
inline static dword ToBigEndian (dword value) {
|
||||
return ((value) << 24) | ((value & 0x0000ff00) << 8) | ((value & 0x00ff0000) >> 8) | ((value) >> 24);
|
||||
}
|
||||
|
||||
static void AuthFailedStrings (ENetError authError, bool fromGT,
|
||||
const char **ppStr1, const char **ppStr2,
|
||||
@ -1077,7 +1092,7 @@ BOOL CALLBACK UruTOSDialogProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l
|
||||
}
|
||||
|
||||
static void SaveUserPass (char *username, char *password, ShaDigest *pNamePassHash, bool remember_password,
|
||||
bool fromGT)
|
||||
int whichHash)
|
||||
{
|
||||
UInt32 cryptKey[4];
|
||||
ZeroMemory(cryptKey, sizeof(cryptKey));
|
||||
@ -1094,27 +1109,30 @@ static void SaveUserPass (char *username, char *password, ShaDigest *pNamePassHa
|
||||
{
|
||||
StrToUnicode(wpassword, password, arrsize(wpassword));
|
||||
|
||||
wchar domain[15];
|
||||
PathSplitEmail(wusername, nil, 0, domain, arrsize(domain), nil, 0, nil, 0, 0);
|
||||
switch( whichHash )
|
||||
{
|
||||
case kPasswordHashSHA1:
|
||||
CryptDigest(
|
||||
kCryptSha1,
|
||||
pNamePassHash,
|
||||
StrLen(password) * sizeof(password[0]),
|
||||
password
|
||||
);
|
||||
|
||||
if (StrLen(domain) == 0 || StrCmpI(domain, L"gametap") == 0) {
|
||||
CryptDigest(
|
||||
kCryptSha1,
|
||||
pNamePassHash,
|
||||
StrLen(password) * sizeof(password[0]),
|
||||
password
|
||||
);
|
||||
// switch the endianness of the hash to big endian
|
||||
// NOTE: this is legacy from GameTap days to match GameTap's endianness
|
||||
pNamePassHash->data[0] = hsUNSWAP32(pNamePassHash->data[0]);
|
||||
pNamePassHash->data[1] = hsUNSWAP32(pNamePassHash->data[1]);
|
||||
pNamePassHash->data[2] = hsUNSWAP32(pNamePassHash->data[2]);
|
||||
pNamePassHash->data[3] = hsUNSWAP32(pNamePassHash->data[3]);
|
||||
pNamePassHash->data[4] = hsUNSWAP32(pNamePassHash->data[4]);
|
||||
break;
|
||||
|
||||
if (IsMachineLittleEndian()) {
|
||||
pNamePassHash->data[0] = ToBigEndian(pNamePassHash->data[0]);
|
||||
pNamePassHash->data[1] = ToBigEndian(pNamePassHash->data[1]);
|
||||
pNamePassHash->data[2] = ToBigEndian(pNamePassHash->data[2]);
|
||||
pNamePassHash->data[3] = ToBigEndian(pNamePassHash->data[3]);
|
||||
pNamePassHash->data[4] = ToBigEndian(pNamePassHash->data[4]);
|
||||
}
|
||||
case kPasswordHashSHA0:
|
||||
default:
|
||||
CryptHashPassword(wusername, wpassword, pNamePassHash);
|
||||
break;
|
||||
}
|
||||
else
|
||||
CryptHashPassword(wusername, wpassword, pNamePassHash);
|
||||
}
|
||||
|
||||
NetCommSetAccountUsernamePassword(wusername, *pNamePassHash);
|
||||
@ -1123,28 +1141,26 @@ static void SaveUserPass (char *username, char *password, ShaDigest *pNamePassHa
|
||||
else
|
||||
NetCommSetAuthTokenAndOS(nil, L"win");
|
||||
|
||||
if (!fromGT) {
|
||||
wchar fileAndPath[MAX_PATH];
|
||||
PathGetInitDirectory(fileAndPath, arrsize(fileAndPath));
|
||||
PathAddFilename(fileAndPath, fileAndPath, L"login.dat", arrsize(fileAndPath));
|
||||
wchar fileAndPath[MAX_PATH];
|
||||
PathGetInitDirectory(fileAndPath, arrsize(fileAndPath));
|
||||
PathAddFilename(fileAndPath, fileAndPath, L"login.dat", arrsize(fileAndPath));
|
||||
#ifndef PLASMA_EXTERNAL_RELEASE
|
||||
// internal builds can use the local init directory
|
||||
wchar localFileAndPath[MAX_PATH];
|
||||
StrCopy(localFileAndPath, L"init\\login.dat", arrsize(localFileAndPath));
|
||||
if (PathDoesFileExist(localFileAndPath))
|
||||
StrCopy(fileAndPath, localFileAndPath, arrsize(localFileAndPath));
|
||||
// internal builds can use the local init directory
|
||||
wchar localFileAndPath[MAX_PATH];
|
||||
StrCopy(localFileAndPath, L"init\\login.dat", arrsize(localFileAndPath));
|
||||
if (PathDoesFileExist(localFileAndPath))
|
||||
StrCopy(fileAndPath, localFileAndPath, arrsize(localFileAndPath));
|
||||
#endif
|
||||
hsStream* stream = plEncryptedStream::OpenEncryptedFileWrite(fileAndPath, cryptKey);
|
||||
if (stream)
|
||||
{
|
||||
stream->Write(sizeof(cryptKey), cryptKey);
|
||||
stream->WriteSafeString(username);
|
||||
stream->Writebool(remember_password);
|
||||
if (remember_password)
|
||||
stream->Write(sizeof(pNamePassHash->data), pNamePassHash->data);
|
||||
stream->Close();
|
||||
delete stream;
|
||||
}
|
||||
hsStream* stream = plEncryptedStream::OpenEncryptedFileWrite(fileAndPath, cryptKey);
|
||||
if (stream)
|
||||
{
|
||||
stream->Write(sizeof(cryptKey), cryptKey);
|
||||
stream->WriteSafeString(username);
|
||||
stream->Writebool(remember_password);
|
||||
if (remember_password)
|
||||
stream->Write(sizeof(pNamePassHash->data), pNamePassHash->data);
|
||||
stream->Close();
|
||||
delete stream;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1155,10 +1171,15 @@ static void LoadUserPass (const wchar *accountName, char *username, ShaDigest *p
|
||||
UInt32 cryptKey[4];
|
||||
ZeroMemory(cryptKey, sizeof(cryptKey));
|
||||
GetCryptKey(cryptKey, arrsize(cryptKey));
|
||||
UInt32 cryptKeyOld[4]; // The old cryptKey stuff
|
||||
ZeroMemory(cryptKeyOld, sizeof(cryptKeyOld));
|
||||
GetOldCryptKey(cryptKeyOld, arrsize(cryptKeyOld));
|
||||
|
||||
char* temp;
|
||||
*pRemember = false;
|
||||
username[0] = '\0';
|
||||
bool cryptKeyOk = false;
|
||||
bool cryptKeyOldOk = false;
|
||||
|
||||
if (!fromGT)
|
||||
{
|
||||
@ -1186,6 +1207,42 @@ static void LoadUserPass (const wchar *accountName, char *username, ShaDigest *p
|
||||
{
|
||||
StrCopy(username, temp, kMaxAccountNameLength);
|
||||
delete temp;
|
||||
cryptKeyOk = true;
|
||||
}
|
||||
else
|
||||
username[0] = '\0';
|
||||
|
||||
*pRemember = stream->Readbool();
|
||||
|
||||
if (*pRemember)
|
||||
{
|
||||
stream->Read(sizeof(pNamePassHash->data), pNamePassHash->data);
|
||||
*pFocus = IDOK;
|
||||
}
|
||||
else
|
||||
*pFocus = IDC_URULOGIN_PASSWORD;
|
||||
}
|
||||
|
||||
stream->Close();
|
||||
delete stream;
|
||||
}
|
||||
if (!cryptKeyOk) // Try the old cryptKey
|
||||
{
|
||||
hsStream* stream = plEncryptedStream::OpenEncryptedFile(fileAndPath, true, cryptKeyOld);
|
||||
if (stream && !stream->AtEnd())
|
||||
{
|
||||
UInt32 savedKey[4];
|
||||
stream->Read(sizeof(savedKey), savedKey);
|
||||
|
||||
if (memcmp(cryptKeyOld, savedKey, sizeof(savedKey)) == 0)
|
||||
{
|
||||
temp = stream->ReadSafeString();
|
||||
|
||||
if (temp)
|
||||
{
|
||||
StrCopy(username, temp, kMaxAccountNameLength);
|
||||
delete temp;
|
||||
cryptKeyOldOk = true;
|
||||
}
|
||||
else
|
||||
username[0] = '\0';
|
||||
@ -1203,6 +1260,21 @@ static void LoadUserPass (const wchar *accountName, char *username, ShaDigest *p
|
||||
|
||||
stream->Close();
|
||||
delete stream;
|
||||
} // Done trying the old cryptKey
|
||||
}
|
||||
if (cryptKeyOldOk) // We need to re-write the login.dat file
|
||||
{
|
||||
hsStream* stream = plEncryptedStream::OpenEncryptedFileWrite(fileAndPath, cryptKey);
|
||||
if (stream)
|
||||
{
|
||||
stream->Write(sizeof(cryptKey), cryptKey);
|
||||
stream->WriteSafeString(username);
|
||||
stream->Writebool(*pRemember);
|
||||
if (*pRemember)
|
||||
stream->Write(sizeof(pNamePassHash->data), pNamePassHash->data);
|
||||
stream->Close();
|
||||
delete stream;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -1250,20 +1322,24 @@ void StatusCallback(void *param)
|
||||
{
|
||||
static char data[256] = {0};
|
||||
DWORD bytesRead;
|
||||
WinHttpSendRequest(
|
||||
hRequest,
|
||||
WINHTTP_NO_ADDITIONAL_HEADERS,
|
||||
0,
|
||||
WINHTTP_NO_REQUEST_DATA,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
);
|
||||
WinHttpReceiveResponse(hRequest, 0);
|
||||
WinHttpReadData(hRequest, data, 255, &bytesRead);
|
||||
data[bytesRead] = 0;
|
||||
if(bytesRead)
|
||||
if(
|
||||
WinHttpSendRequest(
|
||||
hRequest,
|
||||
WINHTTP_NO_ADDITIONAL_HEADERS,
|
||||
0,
|
||||
WINHTTP_NO_REQUEST_DATA,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
)
|
||||
&& WinHttpReceiveResponse(hRequest, 0)
|
||||
&& WinHttpReadData(hRequest, data, 255, &bytesRead)
|
||||
&& bytesRead
|
||||
)
|
||||
{
|
||||
data[bytesRead] = 0;
|
||||
PostMessage(hwnd, WM_USER_SETSTATUSMSG, 0, (LPARAM) data);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1375,11 +1451,22 @@ BOOL CALLBACK UruLoginDialogProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM
|
||||
GetDlgItemText(hwndDlg, IDC_URULOGIN_PASSWORD, password, kMaxPasswordLength);
|
||||
remember_password = (IsDlgButtonChecked(hwndDlg, IDC_URULOGIN_REMEMBERPASS) == BST_CHECKED);
|
||||
|
||||
SaveUserPass (username, password, &namePassHash, remember_password, loginParam->fromGT);
|
||||
|
||||
// cycle through the hash types until we find one that matches or errors out
|
||||
LoginDialogParam loginParam;
|
||||
MemSet(&loginParam, 0, sizeof(loginParam));
|
||||
bool cancelled = AuthenticateNetClientComm(&loginParam.authError, hwndDlg);
|
||||
bool cancelled;
|
||||
for (int whichHash=FIRST_PASSWORD_HASH; whichHash >= LAST_PASSWORD_HASH; whichHash-- )
|
||||
{
|
||||
SaveUserPass (username, password, &namePassHash, remember_password, whichHash);
|
||||
|
||||
MemSet(&loginParam, 0, sizeof(loginParam));
|
||||
cancelled = AuthenticateNetClientComm(&loginParam.authError, hwndDlg);
|
||||
// if the password was successful then go to the end processing
|
||||
if (IS_NET_SUCCESS(loginParam.authError) && !cancelled)
|
||||
break;
|
||||
// if it was cancelled or any error other than wrong password then go to end processing
|
||||
if (cancelled || loginParam.authError != kNetErrAuthenticationFailed)
|
||||
break;
|
||||
}
|
||||
|
||||
if (IS_NET_SUCCESS(loginParam.authError) && !cancelled)
|
||||
EndDialog(hwndDlg, ok);
|
||||
@ -1878,6 +1965,9 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nC
|
||||
if( !gClient->StartInit() )
|
||||
break;
|
||||
|
||||
// Reestablish exception handler after PhysX stole it
|
||||
SetUnhandledExceptionFilter( plCustomUnhandledExceptionFilter );
|
||||
|
||||
// I want it on top! I mean it!
|
||||
BringWindowToTop( gClient->GetWindowHandle() );
|
||||
|
||||
@ -2017,7 +2107,7 @@ bool IsExpired()
|
||||
return expired;
|
||||
}
|
||||
|
||||
void GetCryptKey(UInt32* cryptKey, unsigned numElements)
|
||||
void GetOldCryptKey(UInt32* cryptKey, unsigned numElements)
|
||||
{
|
||||
char volName[] = "C:\\";
|
||||
int index = 0;
|
||||
@ -2048,3 +2138,99 @@ void GetCryptKey(UInt32* cryptKey, unsigned numElements)
|
||||
}
|
||||
}
|
||||
|
||||
void GetCryptKey(UInt32* cryptKey, unsigned numElements)
|
||||
{
|
||||
char volName[] = "C:\\";
|
||||
char volID[] = "\\\\.\\C:"; // Need the drive ID in \\.\C: format for CreateFile()
|
||||
int index = 0;
|
||||
DWORD logicalDrives = GetLogicalDrives();
|
||||
PSTORAGE_DEVICE_DESCRIPTOR pDevDesc;
|
||||
|
||||
for (int i = 2; i < 26; ++i) // Drives A: B: prove nothing
|
||||
{
|
||||
if (logicalDrives & (1 << i))
|
||||
{
|
||||
volName[0] = ('A' + i); // Previous base drive letter of C: was incorrect
|
||||
|
||||
UINT driveType = GetDriveType(
|
||||
volName //LPCTSTR lpRootPathName
|
||||
);
|
||||
|
||||
if (driveType != DRIVE_FIXED)
|
||||
{
|
||||
continue; // next i
|
||||
}
|
||||
|
||||
// We've got "Fixed" drive but still need to check
|
||||
// that it's not a USB (i.e. removable) drive.
|
||||
HANDLE hDevice;
|
||||
volID[4] = 'A' + i;
|
||||
hDevice = CreateFile(
|
||||
volID,
|
||||
GENERIC_READ,
|
||||
FILE_SHARE_READ | FILE_SHARE_WRITE,
|
||||
NULL,
|
||||
OPEN_EXISTING,
|
||||
NULL,
|
||||
NULL
|
||||
);
|
||||
|
||||
if (hDevice != INVALID_HANDLE_VALUE)
|
||||
{
|
||||
pDevDesc = (PSTORAGE_DEVICE_DESCRIPTOR)new BYTE[sizeof(STORAGE_DEVICE_DESCRIPTOR) + 512 - 1];
|
||||
if(pDevDesc != NULL)
|
||||
{
|
||||
pDevDesc->Size = sizeof(STORAGE_DEVICE_DESCRIPTOR) + 512 - 1;
|
||||
|
||||
if (GetDisksProperty(hDevice, pDevDesc))
|
||||
{
|
||||
if (pDevDesc->BusType == BusTypeUsb) // This is the <20>Check Point<6E>!!! ;-)
|
||||
continue; // next i
|
||||
}
|
||||
delete pDevDesc;
|
||||
}
|
||||
CloseHandle(hDevice);
|
||||
}
|
||||
|
||||
DWORD volSerialNum = 0;
|
||||
BOOL result = GetVolumeInformation(
|
||||
volName, //LPCTSTR lpRootPathName,
|
||||
NULL, //LPTSTR lpVolumeNameBuffer,
|
||||
0, //DWORD nVolumeNameSize,
|
||||
&volSerialNum, //LPDWORD lpVolumeSerialNumber,
|
||||
NULL, //LPDWORD lpMaximumComponentLength,
|
||||
NULL, //LPDWORD lpFileSystemFlags,
|
||||
NULL, //LPTSTR lpFileSystemNameBuffer,
|
||||
0 //DWORD nFileSystemNameSize
|
||||
);
|
||||
|
||||
if (!result)
|
||||
continue; // next i
|
||||
|
||||
cryptKey[index] = (cryptKey[index] ^ volSerialNum);
|
||||
index = (++index) % numElements;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool GetDisksProperty(HANDLE hDevice, PSTORAGE_DEVICE_DESCRIPTOR pDevDesc)
|
||||
{
|
||||
STORAGE_PROPERTY_QUERY Query; // input param for query
|
||||
DWORD dwOutBytes; // IOCTL output length
|
||||
BOOL bResult; // IOCTL return val
|
||||
|
||||
// specify the query type
|
||||
Query.PropertyId = StorageDeviceProperty;
|
||||
Query.QueryType = PropertyStandardQuery;
|
||||
|
||||
// Query using IOCTL_STORAGE_QUERY_PROPERTY
|
||||
bResult = ::DeviceIoControl(hDevice, // device handle
|
||||
IOCTL_STORAGE_QUERY_PROPERTY, // info of device property
|
||||
&Query, sizeof(STORAGE_PROPERTY_QUERY), // input data buffer
|
||||
pDevDesc, pDevDesc->Size, // output data buffer
|
||||
&dwOutBytes, // out's length
|
||||
(LPOVERLAPPED)NULL);
|
||||
|
||||
return bResult;
|
||||
}
|
||||
|
||||
|
@ -58,7 +58,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
#if BUILD_TYPE == BUILD_TYPE_DEV
|
||||
#define STATUS_PATH L"www2.cyanworlds.com"
|
||||
#else
|
||||
#define STATUS_PATH L"support.cyanworlds.com"
|
||||
#define STATUS_PATH L"account.mystonline.com"
|
||||
#endif
|
||||
|
||||
|
||||
@ -157,13 +157,12 @@ static long s_terminationIssued;
|
||||
static bool s_terminated;
|
||||
static plLauncherInfo s_launcherInfo;
|
||||
static HANDLE s_thread;
|
||||
static HANDLE s_event;
|
||||
static CEvent s_shutdownDesiredEvent(kEventManualReset);
|
||||
static HINSTANCE s_hInstance;
|
||||
static HWND s_dialog;
|
||||
static CEvent s_dialogCreateEvent(kEventManualReset);
|
||||
static CCritSect s_critsect;
|
||||
static LISTDECL(WndEvent, link) s_eventQ;
|
||||
static CEvent s_shutdownEvent(kEventManualReset);
|
||||
static CEvent s_shutdownDialogEvent(kEventManualReset);
|
||||
static wchar s_workingDir[MAX_PATH];
|
||||
static CEvent s_statusEvent(kEventManualReset);
|
||||
|
||||
@ -311,7 +310,7 @@ static void TerminateGame () {
|
||||
|
||||
//============================================================================
|
||||
static void Recv_SetProgress (HWND hwnd, const SetProgressEvent &event) {
|
||||
SendMessage(GetDlgItem(s_dialog, IDC_PROGRESS), PBM_SETPOS, event.progress, NULL);
|
||||
SendMessage(GetDlgItem(s_launcherInfo.dialog, IDC_PROGRESS), PBM_SETPOS, event.progress, NULL);
|
||||
|
||||
if (pTGApp)
|
||||
{
|
||||
@ -329,7 +328,7 @@ static void Recv_SetProgress (HWND hwnd, const SetProgressEvent &event) {
|
||||
|
||||
//============================================================================
|
||||
static void Recv_SetText (HWND hwnd, const SetTextEvent &event) {
|
||||
bool b = SendMessage(GetDlgItem(s_dialog, IDC_TEXT), WM_SETTEXT, 0, (LPARAM) event.text);
|
||||
bool b = SendMessage(GetDlgItem(s_launcherInfo.dialog, IDC_TEXT), WM_SETTEXT, 0, (LPARAM) event.text);
|
||||
|
||||
if (pTGApp)
|
||||
{
|
||||
@ -347,7 +346,7 @@ static void Recv_SetText (HWND hwnd, const SetTextEvent &event) {
|
||||
|
||||
//============================================================================
|
||||
static void Recv_SetStatusText (HWND hwnd, const SetStatusTextEvent &event) {
|
||||
bool b = SendMessage(GetDlgItem(s_dialog, IDC_STATUS_TEXT), WM_SETTEXT, 0, (LPARAM) event.text);
|
||||
bool b = SendMessage(GetDlgItem(s_launcherInfo.dialog, IDC_STATUS_TEXT), WM_SETTEXT, 0, (LPARAM) event.text);
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
@ -359,7 +358,7 @@ static void Recv_SetTimeRemaining (HWND hwnd, const SetTimeRemainingEvent &event
|
||||
|
||||
if(event.seconds == 0xffffffff)
|
||||
{
|
||||
SendMessage(GetDlgItem(s_dialog, IDC_TIMEREMAINING), WM_SETTEXT, 0, (LPARAM) "estimating...");
|
||||
SendMessage(GetDlgItem(s_launcherInfo.dialog, IDC_TIMEREMAINING), WM_SETTEXT, 0, (LPARAM) "...");
|
||||
return;
|
||||
}
|
||||
|
||||
@ -392,7 +391,7 @@ static void Recv_SetTimeRemaining (HWND hwnd, const SetTimeRemainingEvent &event
|
||||
StrPrintf(text, arrsize(text), "%s%d min ", text, minutes);
|
||||
if( seconds || !text[0])
|
||||
StrPrintf(text, arrsize(text), "%s%d sec", text, seconds);
|
||||
bool b = SendMessage(GetDlgItem(s_dialog, IDC_TIMEREMAINING), WM_SETTEXT, 0, (LPARAM) text);
|
||||
bool b = SendMessage(GetDlgItem(s_launcherInfo.dialog, IDC_TIMEREMAINING), WM_SETTEXT, 0, (LPARAM) text);
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
@ -402,6 +401,11 @@ static void Recv_SetBytesRemaining (HWND hwnd, const SetBytesRemainingEvent &eve
|
||||
unsigned decimal;
|
||||
unsigned bytes = event.bytes;
|
||||
|
||||
if (bytes == 0xffffffff) {
|
||||
SendMessage(GetDlgItem(s_launcherInfo.dialog, IDC_BYTESREMAINING), WM_SETTEXT, 0, (LPARAM) "...");
|
||||
return;
|
||||
}
|
||||
|
||||
unsigned GB = bytes / 1000000000;
|
||||
if(GB)
|
||||
{
|
||||
@ -416,7 +420,7 @@ static void Recv_SetBytesRemaining (HWND hwnd, const SetBytesRemainingEvent &eve
|
||||
decimal = bytes / 100000; // to one decimal place
|
||||
StrPrintf(text, arrsize(text), "%d.%d MB", MB, decimal);
|
||||
}
|
||||
bool b = SendMessage(GetDlgItem(s_dialog, IDC_BYTESREMAINING), WM_SETTEXT, 0, (LPARAM) text);
|
||||
bool b = SendMessage(GetDlgItem(s_launcherInfo.dialog, IDC_BYTESREMAINING), WM_SETTEXT, 0, (LPARAM) text);
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
@ -462,19 +466,19 @@ static void MessagePump (HWND hwnd) {
|
||||
// wait for a message or the shutdown event
|
||||
const DWORD result = MsgWaitForMultipleObjects(
|
||||
1,
|
||||
&s_event,
|
||||
&s_shutdownDesiredEvent.Handle(),
|
||||
false,
|
||||
INFINITE,
|
||||
QS_ALLEVENTS
|
||||
);
|
||||
if (result == WAIT_OBJECT_0)
|
||||
return;
|
||||
if (result == WAIT_OBJECT_0)
|
||||
PostQuitMessage(0);
|
||||
|
||||
// process windows messages
|
||||
MSG msg;
|
||||
|
||||
while (PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) {
|
||||
if (!IsDialogMessage(s_dialog, &msg)) {
|
||||
if (!IsDialogMessage(s_launcherInfo.dialog, &msg)) {
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
}
|
||||
@ -503,8 +507,8 @@ BOOL CALLBACK SplashDialogProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l
|
||||
if(!s_shutdown)
|
||||
{
|
||||
s_shutdown = true;
|
||||
SendMessage(GetDlgItem(s_dialog, IDC_TEXT), WM_SETTEXT, 0, (LPARAM) "Shutting Down...");
|
||||
EnableWindow(GetDlgItem(s_dialog, IDCANCEL), false);
|
||||
SendMessage(GetDlgItem(s_launcherInfo.dialog, IDC_TEXT), WM_SETTEXT, 0, (LPARAM) "Shutting Down...");
|
||||
EnableWindow(GetDlgItem(s_launcherInfo.dialog, IDCANCEL), false);
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -538,12 +542,6 @@ BOOL CALLBACK SplashDialogProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l
|
||||
static void WindowThreadProc(void *) {
|
||||
|
||||
InitCommonControls();
|
||||
s_event = CreateEvent(
|
||||
(LPSECURITY_ATTRIBUTES) 0,
|
||||
false, // auto reset
|
||||
false, // initial state off
|
||||
(LPCTSTR) 0 // name
|
||||
);
|
||||
|
||||
if (TGIsCider)
|
||||
{
|
||||
@ -553,22 +551,22 @@ static void WindowThreadProc(void *) {
|
||||
pTGApp = pTGLaunchUNIXApp (TG_OLD_DIALOG_POPEN_PATH, "w");
|
||||
}
|
||||
|
||||
s_dialog = ::CreateDialog( s_hInstance, MAKEINTRESOURCE( IDD_DIALOG ), NULL, SplashDialogProc );
|
||||
SetWindowText(s_dialog, "URU Launcher");
|
||||
s_launcherInfo.dialog = ::CreateDialog( s_hInstance, MAKEINTRESOURCE( IDD_DIALOG ), NULL, SplashDialogProc );
|
||||
SetWindowText(s_launcherInfo.dialog, "URU Launcher");
|
||||
|
||||
|
||||
::SetDlgItemText( s_dialog, IDC_TEXT, "Initializing patcher...");
|
||||
SetTimer(s_dialog, kEventTimer, 250, 0);
|
||||
::SetDlgItemText( s_launcherInfo.dialog, IDC_TEXT, "Initializing patcher...");
|
||||
SetTimer(s_launcherInfo.dialog, kEventTimer, 250, 0);
|
||||
|
||||
char productString[256];
|
||||
wchar productStringW[256];
|
||||
ProductString(productStringW, arrsize(productStringW));
|
||||
StrToAnsi(productString, productStringW, arrsize(productString));
|
||||
SendMessage(GetDlgItem(s_dialog, IDC_PRODUCTSTRING), WM_SETTEXT, 0, (LPARAM) productString);
|
||||
SendMessage(GetDlgItem(s_launcherInfo.dialog, IDC_PRODUCTSTRING), WM_SETTEXT, 0, (LPARAM) productString);
|
||||
|
||||
s_dialogCreateEvent.Signal();
|
||||
|
||||
MessagePump(s_dialog);
|
||||
MessagePump(s_launcherInfo.dialog);
|
||||
|
||||
if (pTGApp)
|
||||
{
|
||||
@ -577,9 +575,9 @@ static void WindowThreadProc(void *) {
|
||||
pTGApp = NULL;
|
||||
}
|
||||
|
||||
s_dialog = 0;
|
||||
s_launcherInfo.dialog = 0;
|
||||
s_shutdown = true;
|
||||
s_shutdownEvent.Signal();
|
||||
s_shutdownDialogEvent.Signal();
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
@ -712,7 +710,7 @@ static void StatusCallback(void *)
|
||||
HINTERNET hConnect = 0;
|
||||
|
||||
// update while we are running
|
||||
while(!s_shutdown)
|
||||
do
|
||||
{
|
||||
if(BuildTypeServerStatusPath())
|
||||
{
|
||||
@ -745,11 +743,9 @@ static void StatusCallback(void *)
|
||||
WinHttpCloseHandle(hSession);
|
||||
}
|
||||
|
||||
for(unsigned i = 0; i < UPDATE_STATUSMSG_SECONDS && !s_shutdown; ++i)
|
||||
{
|
||||
Sleep(1000);
|
||||
}
|
||||
}
|
||||
if (s_shutdownDesiredEvent.Wait(UPDATE_STATUSMSG_SECONDS * 1000))
|
||||
break;
|
||||
} while (!s_shutdown);
|
||||
|
||||
s_statusEvent.Signal();
|
||||
}
|
||||
@ -1062,16 +1058,17 @@ int __stdcall WinMain (
|
||||
}
|
||||
|
||||
ShutdownAsyncCore();
|
||||
|
||||
|
||||
// Signal teardown of our junk and stuff.
|
||||
s_shutdownDesiredEvent.Signal();
|
||||
|
||||
// Wait for the hwnd and status event to shutdown
|
||||
s_statusEvent.Wait(kEventWaitForever);
|
||||
|
||||
PostMessage(s_dialog, WM_QUIT, 0, 0); // tell our window to shutdown
|
||||
s_shutdownEvent.Wait(kEventWaitForever); // wait for our window to shutdown
|
||||
s_shutdownDialogEvent.Wait(kEventWaitForever);
|
||||
|
||||
SetConsoleCtrlHandler(CtrlHandler, FALSE);
|
||||
|
||||
if (s_event)
|
||||
CloseHandle(s_event);
|
||||
|
||||
s_eventQ.Clear();
|
||||
break;
|
||||
}
|
||||
|
@ -52,6 +52,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
|
||||
#include <process.h>
|
||||
#include <time.h>
|
||||
#include "hsThread.h"
|
||||
#include "pnUtils/pnUtils.h"
|
||||
#include "pnNetBase/pnNetBase.h"
|
||||
#include "pnAsyncCore/pnAsyncCore.h"
|
||||
|
@ -48,6 +48,13 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
#include "Pch.h"
|
||||
#pragma hdrstop
|
||||
|
||||
#ifndef SEE_MASK_NOASYNC
|
||||
#define SEE_MASK_NOASYNC 0x00000100
|
||||
#endif
|
||||
|
||||
#define PATCHER_FLAG_INSTALLER 0x10
|
||||
|
||||
typedef bool(*FVerifyReturnCode)(DWORD);
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
@ -61,22 +68,118 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
static const wchar s_manifest[] = L"ExternalPatcher";
|
||||
#endif
|
||||
|
||||
static const wchar s_depManifest[] = L"DependencyPatcher";
|
||||
|
||||
class SelfPatcherStream : public plZlibStream {
|
||||
public:
|
||||
public:
|
||||
SelfPatcherStream();
|
||||
virtual UInt32 Write(UInt32 byteCount, const void* buffer);
|
||||
static plLauncherInfo *info;
|
||||
static unsigned totalBytes;
|
||||
static unsigned progress;
|
||||
static DWORD startTime;
|
||||
};
|
||||
|
||||
unsigned SelfPatcherStream::totalBytes = 0;
|
||||
unsigned SelfPatcherStream::progress = 0;
|
||||
DWORD SelfPatcherStream::startTime = 0;
|
||||
|
||||
static bool s_downloadComplete;
|
||||
static long s_numFiles;
|
||||
static ENetError s_patchResult;
|
||||
static bool s_updated;
|
||||
static wchar s_newPatcherFile[MAX_PATH];
|
||||
//============================================================================
|
||||
class plSelfPatcher : public hsThread
|
||||
{
|
||||
enum RequestType
|
||||
{
|
||||
kUndefined = -1,
|
||||
kQuit,
|
||||
|
||||
kRequestManifest,
|
||||
kHash,
|
||||
kDownload,
|
||||
kVerify,
|
||||
kInstall,
|
||||
};
|
||||
|
||||
enum RequestFlags
|
||||
{
|
||||
kRequestBlocked = (1<<0),
|
||||
kRequestOptionalManifest = (1<<1),
|
||||
kRequestNewPatcher = (1<<2),
|
||||
};
|
||||
|
||||
class PatcherWork
|
||||
{
|
||||
public:
|
||||
LINK(PatcherWork) link;
|
||||
|
||||
RequestType fType;
|
||||
UInt32 fFlags;
|
||||
union
|
||||
{
|
||||
NetCliFileManifestEntry fEntry;
|
||||
wchar fFileName[MAX_PATH];
|
||||
};
|
||||
|
||||
PatcherWork() : fType(kUndefined), fFlags(0) { }
|
||||
PatcherWork(RequestType type, const PatcherWork* cpy)
|
||||
: fType(type), fFlags(0)
|
||||
{
|
||||
memcpy(&fEntry, &cpy->fEntry, sizeof(fEntry));
|
||||
}
|
||||
};
|
||||
|
||||
LISTDECL(PatcherWork, link) fReqs;
|
||||
CEvent fQueueEvent;
|
||||
CCritSect fMutex;
|
||||
ENetError fResult;
|
||||
wchar fNewPatcherFileName[MAX_PATH];
|
||||
UInt32 fInstallerCount;
|
||||
UInt32 fInstallersExecuted;
|
||||
|
||||
// Any thread
|
||||
void IEnqueueFile(const NetCliFileManifestEntry& file);
|
||||
void IEnqueueWork(PatcherWork*& wk, bool priority=false);
|
||||
void IDequeueWork(PatcherWork*& wk);
|
||||
void IFatalError(const wchar* msg);
|
||||
void IReportServerBusy();
|
||||
|
||||
// This worker thread
|
||||
void ICheckAndRequest(PatcherWork*& wk);
|
||||
void IDownloadFile(PatcherWork*& wk);
|
||||
void IVerifyFile(PatcherWork*& wk);
|
||||
void IIssueManifestRequest(PatcherWork*& wk);
|
||||
|
||||
HANDLE ICreateProcess(const wchar* path, const wchar* args, bool forceShell=false) const;
|
||||
void IInstallDep(PatcherWork*& wk);
|
||||
bool IWaitProcess(HANDLE hProcess, FVerifyReturnCode verify);
|
||||
static bool IValidateExeReturnCode(DWORD returncode);
|
||||
static bool IValidateMsiReturnCode(DWORD returncode);
|
||||
|
||||
void IRun();
|
||||
void IQuit();
|
||||
|
||||
public:
|
||||
plSelfPatcher();
|
||||
|
||||
bool Active() const { return GetQuit() == 0; }
|
||||
const wchar* GetNewPatcherFileName() const { return fNewPatcherFileName; }
|
||||
ENetError GetResult() const { return fResult; }
|
||||
|
||||
void IssueManifestRequests();
|
||||
|
||||
void Start(); // override;
|
||||
hsError Run(); // override;
|
||||
void Stop(); // override;
|
||||
|
||||
public:
|
||||
plLauncherInfo* fLauncherInfo;
|
||||
|
||||
public:
|
||||
// NetCli callbacks
|
||||
static void NetErrorHandler(ENetProtocol protocol, ENetError error);
|
||||
static void OnFileSrvIP(ENetError result, void* param, const wchar addr[]);
|
||||
static void OnFileSrvManifest(ENetError result, void* param, const wchar group[], const NetCliFileManifestEntry manifest[], unsigned entryCount);
|
||||
static void OnFileSrvDownload(ENetError result, void* param, const wchar filename[], hsStream* writer);
|
||||
|
||||
} s_selfPatcher;
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
@ -86,181 +189,64 @@ static wchar s_newPatcherFile[MAX_PATH];
|
||||
***/
|
||||
|
||||
//============================================================================
|
||||
static void NetErrorHandler (ENetProtocol protocol, ENetError error) {
|
||||
REF(protocol);
|
||||
LogMsg(kLogError, L"NetErr: %s", NetErrorToString(error));
|
||||
if (IS_NET_SUCCESS(s_patchResult))
|
||||
s_patchResult = error;
|
||||
s_downloadComplete = true;
|
||||
static bool CheckMD5(const wchar* path, const wchar* hash)
|
||||
{
|
||||
plMD5Checksum localMD5;
|
||||
plMD5Checksum remoteMD5;
|
||||
|
||||
switch(error) {
|
||||
case kNetErrServerBusy:
|
||||
MessageBox(0, "Due to the high demand, the server is currently busy. Please try again later, or for alternative download options visit: http://www.mystonline.com/play/", "UruLauncher", MB_OK);
|
||||
s_patchResult = kNetErrServerBusy;
|
||||
s_downloadComplete = true;
|
||||
break;
|
||||
}
|
||||
hsUNIXStream s;
|
||||
s.Open(path);
|
||||
localMD5.CalcFromStream(&s);
|
||||
s.Close();
|
||||
|
||||
// Some silly goose decided to send an md5 hash as UCS-2 instead of ASCII
|
||||
char ansi[33];
|
||||
StrToAnsi(ansi, hash, arrsize(ansi));
|
||||
remoteMD5.SetFromHexString(ansi);
|
||||
|
||||
return localMD5 == remoteMD5;
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
static void DownloadCallback (
|
||||
ENetError result,
|
||||
void * param,
|
||||
const wchar filename[],
|
||||
hsStream * writer
|
||||
) {
|
||||
REF(param);
|
||||
REF(filename);
|
||||
|
||||
if(IS_NET_ERROR(result)) {
|
||||
switch (result) {
|
||||
case kNetErrTimeout:
|
||||
writer->Rewind();
|
||||
NetCliFileDownloadRequest(filename, writer, DownloadCallback, param);
|
||||
break;
|
||||
|
||||
default:
|
||||
LogMsg(kLogError, L"Error getting patcher file: %s", NetErrorToString(result));
|
||||
if (IS_NET_SUCCESS(s_patchResult))
|
||||
s_patchResult = result;
|
||||
break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
writer->Close();
|
||||
delete writer;
|
||||
AtomicAdd(&s_numFiles, -1);
|
||||
|
||||
if(!s_numFiles) {
|
||||
s_downloadComplete = true;
|
||||
s_updated = true;
|
||||
}
|
||||
static wchar* FormatSystemError()
|
||||
{
|
||||
wchar* error;
|
||||
FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
|
||||
NULL,
|
||||
GetLastError(),
|
||||
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
|
||||
(LPWSTR)& error,
|
||||
0,
|
||||
NULL);
|
||||
return error;
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
static bool MD5Check (const char filename[], const wchar md5[]) {
|
||||
// Do md5 check
|
||||
char md5copy[MAX_PATH];
|
||||
plMD5Checksum existingMD5(filename);
|
||||
plMD5Checksum latestMD5;
|
||||
|
||||
StrToAnsi(md5copy, md5, arrsize(md5copy));
|
||||
latestMD5.SetFromHexString(md5copy);
|
||||
return (existingMD5 == latestMD5);
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
static void ManifestCallback (
|
||||
ENetError result,
|
||||
void * param,
|
||||
const wchar group[],
|
||||
const NetCliFileManifestEntry manifest[],
|
||||
unsigned entryCount
|
||||
) {
|
||||
REF(param);
|
||||
REF(group);
|
||||
|
||||
if(IS_NET_ERROR(result)) {
|
||||
switch (result) {
|
||||
case kNetErrTimeout:
|
||||
NetCliFileManifestRequest(ManifestCallback, nil, s_manifest);
|
||||
break;
|
||||
|
||||
default:
|
||||
LogMsg(kLogError, L"Error getting patcher manifest: %s", NetErrorToString(result));
|
||||
if (IS_NET_SUCCESS(s_patchResult))
|
||||
s_patchResult = result;
|
||||
break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
char ansi[MAX_PATH];
|
||||
|
||||
// MD5 check current patcher against value in manifest
|
||||
ASSERT(entryCount == 1);
|
||||
wchar curPatcherFile[MAX_PATH];
|
||||
PathGetProgramName(curPatcherFile, arrsize(curPatcherFile));
|
||||
StrToAnsi(ansi, curPatcherFile, arrsize(ansi));
|
||||
if (!MD5Check(ansi, manifest[0].md5)) {
|
||||
// MessageBox(GetTopWindow(nil), "MD5 failed", "Msg", MB_OK);
|
||||
SelfPatcherStream::totalBytes += manifest[0].zipSize;
|
||||
|
||||
AtomicAdd(&s_numFiles, 1);
|
||||
SetText("Downloading new patcher...");
|
||||
|
||||
StrToAnsi(ansi, s_newPatcherFile, arrsize(ansi));
|
||||
SelfPatcherStream * stream = NEWZERO(SelfPatcherStream);
|
||||
if (!stream->Open(ansi, "wb"))
|
||||
ErrorFatal(__LINE__, __FILE__, "Failed to create file: %s, errno: %u", ansi, errno);
|
||||
|
||||
NetCliFileDownloadRequest(manifest[0].downloadName, stream, DownloadCallback, nil);
|
||||
}
|
||||
else {
|
||||
s_downloadComplete = true;
|
||||
}
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
static void FileSrvIpAddressCallback (
|
||||
ENetError result,
|
||||
void * param,
|
||||
const wchar addr[]
|
||||
) {
|
||||
REF(param);
|
||||
|
||||
NetCliGateKeeperDisconnect();
|
||||
|
||||
if (IS_NET_ERROR(result)) {
|
||||
LogMsg(kLogDebug, L"FileSrvIpAddressRequest failed: %s", NetErrorToString(result));
|
||||
s_patchResult = result;
|
||||
s_downloadComplete = true;
|
||||
}
|
||||
|
||||
// Start connecting to the server
|
||||
NetCliFileStartConnect(&addr, 1, true);
|
||||
|
||||
PathGetProgramDirectory(s_newPatcherFile, arrsize(s_newPatcherFile));
|
||||
GetTempFileNameW(s_newPatcherFile, kPatcherExeFilename, 0, s_newPatcherFile);
|
||||
PathDeleteFile(s_newPatcherFile);
|
||||
|
||||
NetCliFileManifestRequest(ManifestCallback, nil, s_manifest);
|
||||
static bool IsPatcherFile(const wchar* filename)
|
||||
{
|
||||
wchar progPath[MAX_PATH];
|
||||
PathGetProgramName(progPath, arrsize(progPath));
|
||||
wchar* progFilename = PathFindFilename(progPath);
|
||||
return StrCmpI(filename, progFilename) == 0;
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
static bool SelfPatcherProc (bool * abort, plLauncherInfo *info) {
|
||||
|
||||
bool patched = false;
|
||||
s_downloadComplete = false;
|
||||
s_patchResult = kNetSuccess;
|
||||
|
||||
NetClientInitialize();
|
||||
NetClientSetErrorHandler(NetErrorHandler);
|
||||
|
||||
const wchar ** addrs;
|
||||
unsigned count;
|
||||
|
||||
count = GetGateKeeperSrvHostnames(&addrs);
|
||||
|
||||
// Start connecting to the server
|
||||
NetCliGateKeeperStartConnect(addrs, count);
|
||||
|
||||
// request a file server ip address
|
||||
NetCliGateKeeperFileSrvIpAddressRequest(FileSrvIpAddressCallback, nil, true);
|
||||
|
||||
while(!s_downloadComplete && !*abort) {
|
||||
s_selfPatcher.fLauncherInfo = info;
|
||||
s_selfPatcher.Start();
|
||||
while(s_selfPatcher.Active() && !*abort) {
|
||||
NetClientUpdate();
|
||||
AsyncSleep(10);
|
||||
}
|
||||
s_selfPatcher.Stop();
|
||||
|
||||
NetCliFileDisconnect();
|
||||
NetClientUpdate();
|
||||
if (s_selfPatcher.GetResult() == kNetPending)
|
||||
*abort = true;
|
||||
|
||||
// Shutdown the client/server networking subsystem
|
||||
NetClientDestroy();
|
||||
|
||||
if (s_downloadComplete && !*abort && s_updated && IS_NET_SUCCESS(s_patchResult)) {
|
||||
if (!*abort && *s_selfPatcher.GetNewPatcherFileName() && IS_NET_SUCCESS(s_selfPatcher.GetResult())) {
|
||||
|
||||
// launch new patcher
|
||||
STARTUPINFOW si;
|
||||
@ -270,7 +256,7 @@ static bool SelfPatcherProc (bool * abort, plLauncherInfo *info) {
|
||||
si.cb = sizeof(si);
|
||||
|
||||
wchar cmdline[MAX_PATH];
|
||||
StrPrintf(cmdline, arrsize(cmdline), L"%s %s", s_newPatcherFile, info->cmdLine);
|
||||
StrPrintf(cmdline, arrsize(cmdline), L"%s %s", s_selfPatcher.GetNewPatcherFileName(), info->cmdLine);
|
||||
|
||||
// we have only successfully patched if we actually launch the new version of the patcher
|
||||
patched = CreateProcessW(
|
||||
@ -301,14 +287,623 @@ static bool SelfPatcherProc (bool * abort, plLauncherInfo *info) {
|
||||
*
|
||||
***/
|
||||
|
||||
//============================================================================
|
||||
SelfPatcherStream::SelfPatcherStream()
|
||||
: plZlibStream()
|
||||
{
|
||||
if (startTime == 0)
|
||||
startTime = TimeGetSecondsSince2001Utc();
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
UInt32 SelfPatcherStream::Write(UInt32 byteCount, const void* buffer) {
|
||||
progress += byteCount;
|
||||
float p = (float)progress / (float)totalBytes * 100; // progress
|
||||
float p = (float)progress / (float)totalBytes * 1000; // progress
|
||||
SetProgress( (int)p );
|
||||
|
||||
if (progress >= totalBytes) {
|
||||
SetBytesRemaining(0);
|
||||
SetTimeRemaining(0);
|
||||
} else {
|
||||
SetBytesRemaining(totalBytes - progress);
|
||||
DWORD bytesPerSec = (progress) / max(TimeGetSecondsSince2001Utc() - startTime, 1);
|
||||
SetTimeRemaining((totalBytes - progress) / max(bytesPerSec, 1));
|
||||
}
|
||||
|
||||
return plZlibStream::Write(byteCount, buffer);
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* SelfPatcher Methods
|
||||
*
|
||||
***/
|
||||
|
||||
//============================================================================
|
||||
plSelfPatcher::plSelfPatcher()
|
||||
: fQueueEvent(kEventAutoReset), fResult(kNetPending), fLauncherInfo(nil),
|
||||
fInstallerCount(0), fInstallersExecuted(0)
|
||||
{
|
||||
memset(fNewPatcherFileName, 0, sizeof(fNewPatcherFileName));
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
void plSelfPatcher::IEnqueueFile(const NetCliFileManifestEntry& file)
|
||||
{
|
||||
LogMsg(kLogDebug, L"plSelfPatcher::IEnqueueFile: Enqueueing hash check of '%s'", file.downloadName);
|
||||
|
||||
PatcherWork* wk = NEW(PatcherWork);
|
||||
wk->fType = kHash;
|
||||
memcpy(&wk->fEntry, &file, sizeof(NetCliFileManifestEntry));
|
||||
|
||||
// Are we the patcher? If not, any other exe or msi should be installed.
|
||||
if (IsPatcherFile(wk->fEntry.clientName)) {
|
||||
wk->fFlags |= kRequestNewPatcher;
|
||||
} else {
|
||||
const wchar* extension = PathFindExtension(file.clientName);
|
||||
if (extension && (StrCmpI(extension, L".exe") == 0 || StrCmpI(extension, L".msi") == 0))
|
||||
wk->fEntry.flags |= PATCHER_FLAG_INSTALLER;
|
||||
}
|
||||
|
||||
IEnqueueWork(wk);
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
void plSelfPatcher::IEnqueueWork(PatcherWork*& wk, bool priority)
|
||||
{
|
||||
fMutex.Enter();
|
||||
wk->fFlags &= ~kRequestBlocked;
|
||||
fReqs.Link(wk, priority ? kListHead : kListTail);
|
||||
fMutex.Leave();
|
||||
fQueueEvent.Signal();
|
||||
|
||||
// WHY?! You ask?
|
||||
// If we don't, IRun() will reblock any reused requests. Also, from an ownership standpoint,
|
||||
// the worker queue now owns the work, not whoever enqueued it.
|
||||
wk = NULL;
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
void plSelfPatcher::IDequeueWork(PatcherWork*& wk)
|
||||
{
|
||||
ASSERT(wk->link.IsLinked());
|
||||
|
||||
fMutex.Enter();
|
||||
fReqs.Unlink(wk);
|
||||
fMutex.Leave();
|
||||
fQueueEvent.Signal();
|
||||
|
||||
DEL(wk);
|
||||
wk = NULL;
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
void plSelfPatcher::IFatalError(const wchar* msg)
|
||||
{
|
||||
#ifdef PLASMA_EXTERNAL_RELEASE
|
||||
MessageBoxW(NULL, msg, L"URU Launcher", MB_OK | MB_ICONERROR);
|
||||
IQuit();
|
||||
#else
|
||||
wchar finalmsg[1024];
|
||||
StrPrintf(finalmsg, arrsize(finalmsg), L"%s Continue?", msg);
|
||||
if (MessageBoxW(NULL, finalmsg, L"URU Launcher", MB_YESNO | MB_ICONERROR) == IDNO) {
|
||||
IQuit();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
void plSelfPatcher::IReportServerBusy()
|
||||
{
|
||||
MessageBoxA(NULL,
|
||||
"Due to the high demand, the server is currently busy. Please try again later, or for alternative download options visit: http://www.mystonline.com/play/",
|
||||
"URU Launcher",
|
||||
MB_OK | MB_ICONINFORMATION);
|
||||
fResult = kNetPending; // Don't show the unhandled error box.
|
||||
IQuit();
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
void plSelfPatcher::IssueManifestRequests()
|
||||
{
|
||||
{
|
||||
PatcherWork* wk = NEW(PatcherWork);
|
||||
wk->fType = kRequestManifest;
|
||||
StrCopy(wk->fFileName, s_manifest, arrsize(wk->fFileName));
|
||||
IEnqueueWork(wk);
|
||||
}
|
||||
|
||||
{
|
||||
PatcherWork* wk = NEW(PatcherWork);
|
||||
wk->fType = kRequestManifest;
|
||||
wk->fFlags |= kRequestOptionalManifest;
|
||||
StrCopy(wk->fFileName, s_depManifest, arrsize(wk->fFileName));
|
||||
IEnqueueWork(wk);
|
||||
}
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
void plSelfPatcher::ICheckAndRequest(PatcherWork*& wk)
|
||||
{
|
||||
// Patcher thread, can be as slow as molasses.
|
||||
if (PathDoesFileExist(wk->fEntry.clientName)) {
|
||||
if (CheckMD5(wk->fEntry.clientName, wk->fEntry.md5)) {
|
||||
LogMsg(kLogDebug, L"plSelfPatcher::ICheckAndRequest: File '%s' appears to be up-to-date.", wk->fEntry.clientName);
|
||||
IDequeueWork(wk);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
LogMsg(kLogDebug, L"plSelfPatcher::ICheckAndRequest: File '%s' needs to be downloaded.", wk->fEntry.clientName);
|
||||
SelfPatcherStream::totalBytes += (wk->fEntry.zipSize != 0) ? wk->fEntry.zipSize : wk->fEntry.fileSize;
|
||||
wk->fType = kDownload;
|
||||
IEnqueueWork(wk);
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
void plSelfPatcher::IDownloadFile(PatcherWork*& wk)
|
||||
{
|
||||
// The patcher downloads to a temporary file.
|
||||
if (wk->fFlags & kRequestNewPatcher) {
|
||||
PathGetProgramDirectory(fNewPatcherFileName, arrsize(fNewPatcherFileName));
|
||||
GetTempFileNameW(fNewPatcherFileName, kPatcherExeFilename, 0, fNewPatcherFileName);
|
||||
PathDeleteFile(fNewPatcherFileName);
|
||||
StrCopy(wk->fEntry.clientName, fNewPatcherFileName, arrsize(wk->fEntry.clientName));
|
||||
|
||||
SetText("Downloading new patcher...");
|
||||
LogMsg(kLogDebug, L"plSelfPatcher::IDownloadFile: New patcher will be downloaded as '%s'", fNewPatcherFileName);
|
||||
} else {
|
||||
if (wk->fEntry.flags & PATCHER_FLAG_INSTALLER)
|
||||
SetText("Downloading update installer...");
|
||||
else
|
||||
SetText("Downloading update...");
|
||||
}
|
||||
|
||||
SelfPatcherStream* s = NEWZERO(SelfPatcherStream);
|
||||
if (!s->Open(wk->fEntry.clientName, L"wb")) {
|
||||
LogMsg(kLogError, L"plSelfPatcher::IDownloadFile: Failed to create file: %s, errno: %u", wk->fEntry.clientName, errno);
|
||||
IFatalError(L"Failed to create file.");
|
||||
} else {
|
||||
LogMsg(kLogDebug, L"plSelfPatcher::IDownloadFile: Downloading file '%s'.", wk->fEntry.downloadName);
|
||||
NetCliFileDownloadRequest(wk->fEntry.downloadName, s, OnFileSrvDownload, wk);
|
||||
}
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
void plSelfPatcher::IVerifyFile(PatcherWork*& wk)
|
||||
{
|
||||
if (!CheckMD5(wk->fEntry.clientName, wk->fEntry.md5)) {
|
||||
LogMsg(kLogError, L"plSelfPatcher::IVerifyFile: Hash mismatch on file '%s'. Expected: %s",
|
||||
wk->fEntry.clientName, wk->fEntry.md5);
|
||||
IFatalError(L"File download verification failed.");
|
||||
return;
|
||||
}
|
||||
|
||||
// If this is a redistributable dependency, it needs to be installed.
|
||||
if (wk->fEntry.flags & PATCHER_FLAG_INSTALLER) {
|
||||
LogMsg(kLogPerf, L"plSelfPatcher::IVerifyFile: Downloaded valid dependency installer '%s'", wk->fEntry.clientName);
|
||||
s_selfPatcher.fInstallerCount++;
|
||||
|
||||
wk->fType = kInstall;
|
||||
s_selfPatcher.IEnqueueWork(wk);
|
||||
} else {
|
||||
LogMsg(kLogPerf, L"plSelfPatcher::IVerifyFile: Downloaded valid standard file '%s'", wk->fEntry.clientName);
|
||||
s_selfPatcher.IDequeueWork(wk);
|
||||
}
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
void plSelfPatcher::IIssueManifestRequest(PatcherWork*& wk)
|
||||
{
|
||||
LogMsg(kLogDebug, L"plSelfPatcher::IIssueManifestRequest: Issuing manifest request '%s'.", wk->fFileName);
|
||||
NetCliFileManifestRequest(OnFileSrvManifest, wk, wk->fFileName);
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
HANDLE plSelfPatcher::ICreateProcess(const wchar* path, const wchar* args, bool forceShell) const
|
||||
{
|
||||
// Generally speaking, we would *like* to use CreateProcessW. Unfortunately, we cannot do that
|
||||
// becuase on Windows Vista and above (read: what the world SHOULD be using...) CreateProcessW
|
||||
// will not handle UAC split tokens and can fail with ERROR_ELEVATION_REQUIRED. For bonus fun,
|
||||
// that error isn't even defined in the Platform SDK we're using here. The "official" solution
|
||||
// is to use ShellExecuteEx with the verb "runas" so there you go. (See also: "runas.exe")
|
||||
// Bonus chatter: on Windows XP, there is no "runas" feature because there are no split tokens
|
||||
// or UAC. Also, Windows XP does not have the SEE_MASK_NOASYNC flag (it does have the DDEWAIT flag
|
||||
// whose value is the same but functions slightly differently), which causes any dialogs
|
||||
// launched by Windows (such as errors) to deadlock the UI quite horribly. Further,
|
||||
// ShellExecuteExW pops up that weird "do you want to run this file you downloaded from the internet?"
|
||||
// box, which we can't actually interact with due to the above.
|
||||
if (!forceShell) {
|
||||
STARTUPINFOW si;
|
||||
PROCESS_INFORMATION pi;
|
||||
memset(&si, 0, sizeof(si));
|
||||
memset(&pi, 0, sizeof(pi));
|
||||
si.cb = sizeof(si);
|
||||
|
||||
wchar cmdline[MAX_PATH];
|
||||
StrPrintf(cmdline, arrsize(cmdline), L"\"%s\" %s", path, args);
|
||||
BOOL result = CreateProcessW(path,
|
||||
cmdline,
|
||||
NULL,
|
||||
NULL,
|
||||
FALSE,
|
||||
DETACHED_PROCESS,
|
||||
NULL,
|
||||
NULL,
|
||||
&si,
|
||||
&pi);
|
||||
CloseHandle(pi.hThread);
|
||||
if (result != FALSE) {
|
||||
return pi.hProcess;
|
||||
} else {
|
||||
wchar* error = FormatSystemError();
|
||||
LogMsg(kLogError, L"plSelfPatcher::ICreateProcess: CreateProcessW failed for '%s': %u %s",
|
||||
path, GetLastError(), error);
|
||||
LocalFree(error);
|
||||
// Purposefully falling through to ShellExecuteExW
|
||||
}
|
||||
}
|
||||
|
||||
SHELLEXECUTEINFOW info;
|
||||
memset(&info, 0, sizeof(info));
|
||||
info.cbSize = sizeof(info);
|
||||
info.fMask = SEE_MASK_NOCLOSEPROCESS | SEE_MASK_NOASYNC | SEE_MASK_FLAG_NO_UI;
|
||||
info.hwnd = fLauncherInfo->dialog;
|
||||
// Not explicitly setting lpVerb to L"runas" because this seemingly breaks msiexec.
|
||||
info.lpFile = path;
|
||||
info.lpParameters = args;
|
||||
|
||||
if (ShellExecuteExW(&info) == FALSE) {
|
||||
wchar* error = FormatSystemError();
|
||||
LogMsg(kLogError, L"plSelfPatcher::ICreateProcess: ShellExecuteExW failed for '%s': %u %s",
|
||||
path, GetLastError(), error);
|
||||
LocalFree(error);
|
||||
}
|
||||
return info.hProcess;
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
void plSelfPatcher::IInstallDep(PatcherWork*& wk)
|
||||
{
|
||||
// Due to our dependence on Visual Studio .NET 2003, we cannot use the indeterminate/marquee
|
||||
// progress bar from there. So, we'll have to dome some skullduggery to guesstimate a really
|
||||
// crummy progress meter.
|
||||
fInstallersExecuted++;
|
||||
float progress = (float)fInstallersExecuted / ((float)fInstallerCount + 1.f) * 1000.f;
|
||||
SetProgress((unsigned)progress);
|
||||
|
||||
// Best I can do for indeterminant progress.
|
||||
SetTimeRemaining(-1);
|
||||
SetBytesRemaining(-1);
|
||||
|
||||
// We are about to do something that MAY cause a UAC dialog to appear.
|
||||
// So, let's at least pretend to be a good citizen and write something in the UI about that...
|
||||
SetText("Installing updates...");
|
||||
AsyncSleep(100);
|
||||
|
||||
wchar process[MAX_PATH];
|
||||
PathGetCurrentDirectory(process, arrsize(process));
|
||||
PathAddFilename(process, process, wk->fFileName, arrsize(process));
|
||||
wchar* extension = PathFindExtension(wk->fFileName);
|
||||
wchar args[MAX_PATH];
|
||||
args[0] = 0;
|
||||
|
||||
bool forceShell = false;
|
||||
FVerifyReturnCode validateptr = NULL;
|
||||
|
||||
// Apply arguments to the process to ensure it doesn't do weird stuff like start a big UI
|
||||
// Creative OpenAL (oalinst.exe) uses '/s' for silent.
|
||||
// The small DirectX 9.0c web installer (dxwebsetup.exe) uses "/q" and pops up an error on invalid args.
|
||||
// The full monty DirectX 9.0c isntaller (dxsetup.exe) uses "/silent" and pops up an error on invalid args.
|
||||
// The Visual C++ redist (vcredist_x86.exe and vcredist_x64.exe) may optionally restart the
|
||||
// computer WITHOUT prompting when in quiet mode.
|
||||
if (extension && StrCmpI(extension, L".exe") == 0) {
|
||||
wchar* filename = PathFindFilename(wk->fFileName);
|
||||
if (StrCmpI(filename, L"oalinst.exe") == 0)
|
||||
StrPack(args, L"/s", arrsize(args));
|
||||
else if (StrCmpI(filename, L"dxsetup.exe") == 0)
|
||||
StrPack(args, L"/silent", arrsize(args));
|
||||
else
|
||||
StrPack(args, L"/q", arrsize(args));
|
||||
|
||||
if (StrStrI(filename, L"vcredist") || StrStrI(filename, L"vc_redist"))
|
||||
StrPack(args, L" /norestart", arrsize(args));
|
||||
validateptr = IValidateExeReturnCode;
|
||||
} else if (extension && StrCmpI(extension, L".msi") == 0) {
|
||||
StrPrintf(args, arrsize(args), L"/i \"%s\" /qr /norestart", process);
|
||||
StrCopy(process, L"msiexec", arrsize(process));
|
||||
validateptr = IValidateMsiReturnCode;
|
||||
forceShell = true;
|
||||
} else {
|
||||
LogMsg(kLogError, L"plSelfPatcher::IInstallDep: Invalid extension '%s' for installer '%s'",
|
||||
extension ? extension : L"(NULL)", wk->fFileName);
|
||||
IDequeueWork(wk);
|
||||
return;
|
||||
}
|
||||
|
||||
LogMsg(kLogDebug, L"plSelfPatcher::IInstallDep: Installing '%s %s'.", process, args);
|
||||
HANDLE hProcess = ICreateProcess(process, args, forceShell);
|
||||
if (hProcess) {
|
||||
if (IWaitProcess(hProcess, validateptr)) {
|
||||
IDequeueWork(wk);
|
||||
} else {
|
||||
PathDeleteFile(wk->fFileName);
|
||||
IFatalError(L"Failed to install update.");
|
||||
}
|
||||
CloseHandle(hProcess);
|
||||
} else {
|
||||
IFatalError(L"Failed to run installer.");
|
||||
}
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
bool plSelfPatcher::IWaitProcess(HANDLE hProcess, FVerifyReturnCode verify)
|
||||
{
|
||||
// Since we have taken over the worker thread, we need to listen for any very very important
|
||||
// requests added to the queue. The only one we care about is quit, the rest can just go to
|
||||
// HEY HEY! and we're safe to just swallow the notifies. We delete our own request to resume
|
||||
// the main proc.
|
||||
enum { kWaitQueue, kWaitProcess };
|
||||
HANDLE waitH[] = { fQueueEvent.Handle(), hProcess };
|
||||
do {
|
||||
DWORD waitStatus = WaitForMultipleObjects(arrsize(waitH), waitH, FALSE, INFINITE);
|
||||
ASSERT(waitStatus != WAIT_FAILED);
|
||||
|
||||
if (waitStatus >= WAIT_OBJECT_0 && waitStatus <= (WAIT_OBJECT_0 + arrsize(waitH))) {
|
||||
DWORD idx = waitStatus - WAIT_OBJECT_0;
|
||||
if (idx == kWaitQueue) {
|
||||
fMutex.Enter();
|
||||
PatcherWork* quitWk = fReqs.Head();
|
||||
fMutex.Leave();
|
||||
if (quitWk->fType == kQuit) {
|
||||
LogMsg(kLogPerf, "plSelfPatcher::IWaitProcess: Got shutdown during wait, attempting to terminate process.");
|
||||
TerminateProcess(hProcess, 1);
|
||||
return false;
|
||||
}
|
||||
} else if (idx == kWaitProcess) {
|
||||
if (verify) {
|
||||
DWORD returncode = 0;
|
||||
GetExitCodeProcess(hProcess, &returncode);
|
||||
return verify(returncode);
|
||||
}
|
||||
return true;
|
||||
} else {
|
||||
FATAL("Invalid wait index");
|
||||
return false;
|
||||
}
|
||||
} else if (waitStatus == WAIT_FAILED) {
|
||||
wchar* error = FormatSystemError();
|
||||
LogMsg(kLogError, L"plSelfPatcher::IWaitProcess: WaitForMultipleObjects failed! %s", error);
|
||||
LocalFree(error);
|
||||
IFatalError(L"Internal Error.");
|
||||
return false;
|
||||
} else {
|
||||
LogMsg(kLogError, "plSelfPatcher::IWaitProcess: Unhandled WaitForMultipleObjects result 0x%x", waitStatus);
|
||||
return false;
|
||||
}
|
||||
|
||||
AsyncSleep(10);
|
||||
} while (1);
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
bool plSelfPatcher::IValidateExeReturnCode(DWORD returncode)
|
||||
{
|
||||
if (returncode != 1) {
|
||||
LogMsg(kLogDebug, "plSelfPatcher::IValidateExeReturnCode: Process finished successfully! Returncode: %u", returncode);
|
||||
return true;
|
||||
} else {
|
||||
LogMsg(kLogError, "plSelfPatcher::IValidateExeReturnCode: Process failed! Returncode: %u", returncode);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
bool plSelfPatcher::IValidateMsiReturnCode(DWORD returncode)
|
||||
{
|
||||
switch (returncode) {
|
||||
case ERROR_SUCCESS:
|
||||
case ERROR_PRODUCT_VERSION:
|
||||
case ERROR_SUCCESS_REBOOT_INITIATED:
|
||||
case ERROR_SUCCESS_REBOOT_REQUIRED:
|
||||
LogMsg(kLogDebug, "plSelfPatcher::IValidateMsiReturnCode: Process finished successfully!");
|
||||
return true;
|
||||
default:
|
||||
LogMsg(kLogError, "plSelfPatcher::IValidateMsiReturnCode: Process failed! Returncode: %u", returncode);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
hsError plSelfPatcher::Run()
|
||||
{
|
||||
do {
|
||||
fQueueEvent.Wait(-1);
|
||||
IRun();
|
||||
} while (Active());
|
||||
return hsOK;
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
void plSelfPatcher::IRun()
|
||||
{
|
||||
do {
|
||||
fMutex.Enter();
|
||||
PatcherWork* wk = fReqs.Head();
|
||||
fMutex.Leave();
|
||||
|
||||
if (!wk) {
|
||||
LogMsg(kLogDebug, "plSelfPatcher::IRun: No work in queue, exiting.");
|
||||
if (!IS_NET_ERROR(fResult))
|
||||
fResult = kNetSuccess;
|
||||
SetQuit(1);
|
||||
return;
|
||||
}
|
||||
|
||||
if (wk->fFlags & kRequestBlocked)
|
||||
return;
|
||||
|
||||
switch (wk->fType) {
|
||||
case kQuit:
|
||||
LogMsg(kLogDebug, "plSelfPatcher::IRun: Explicit quit request.");
|
||||
// An explicit quit should manage its own result code.
|
||||
SetQuit(1);
|
||||
return;
|
||||
|
||||
case kRequestManifest:
|
||||
IIssueManifestRequest(wk);
|
||||
break;
|
||||
case kHash:
|
||||
ICheckAndRequest(wk);
|
||||
break;
|
||||
case kDownload:
|
||||
IDownloadFile(wk);
|
||||
break;
|
||||
case kInstall:
|
||||
IInstallDep(wk);
|
||||
break;
|
||||
case kVerify:
|
||||
IVerifyFile(wk);
|
||||
break;
|
||||
|
||||
DEFAULT_FATAL(wk.fType);
|
||||
}
|
||||
|
||||
if (wk) {
|
||||
// this "blocks" the worker thread on a dependent task like a file download that is
|
||||
// completing asyncrhonously, do not remove this request... The block is removed
|
||||
// by some callback calling IDequeueWork() or, worse case, DEL(wk).
|
||||
LogMsg(kLogDebug, L"plSelfPatcher::IRun: Worker thread is now blocked on '%s'.", wk->fFileName);
|
||||
wk->fFlags |= kRequestBlocked;
|
||||
break;
|
||||
}
|
||||
} while (1);
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
void plSelfPatcher::IQuit()
|
||||
{
|
||||
PatcherWork* wk = NEW(PatcherWork);
|
||||
wk->fType = kQuit;
|
||||
IEnqueueWork(wk, true);
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
void plSelfPatcher::Start()
|
||||
{
|
||||
NetClientInitialize();
|
||||
NetClientSetErrorHandler(NetErrorHandler);
|
||||
|
||||
const wchar** addrs;
|
||||
unsigned count;
|
||||
count = GetGateKeeperSrvHostnames(&addrs);
|
||||
NetCliGateKeeperStartConnect(addrs, count);
|
||||
|
||||
// request a file server ip address
|
||||
NetCliGateKeeperFileSrvIpAddressRequest(OnFileSrvIP, NULL, true);
|
||||
|
||||
hsThread::Start();
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
void plSelfPatcher::Stop()
|
||||
{
|
||||
// Post a quit message and wait for the thread to stop.
|
||||
if (Active())
|
||||
IQuit();
|
||||
hsThread::Stop();
|
||||
|
||||
NetCliFileDisconnect();
|
||||
NetClientUpdate();
|
||||
|
||||
// Shutdown the client/server networking subsystem
|
||||
NetClientDestroy();
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
void plSelfPatcher::NetErrorHandler(ENetProtocol protocol, ENetError error)
|
||||
{
|
||||
REF(protocol);
|
||||
|
||||
LogMsg(kLogError, L"plSelfPatcher::NetErrorHandler: %s", NetErrorToString(error));
|
||||
if (IS_NET_SUCCESS(s_selfPatcher.fResult))
|
||||
s_selfPatcher.fResult = error;
|
||||
if (error == kNetErrServerBusy)
|
||||
s_selfPatcher.IReportServerBusy();
|
||||
else
|
||||
s_selfPatcher.IQuit();
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
void plSelfPatcher::OnFileSrvIP(ENetError error, void* param, const wchar addr[])
|
||||
{
|
||||
NetCliGateKeeperDisconnect();
|
||||
if (IS_NET_ERROR(error)) {
|
||||
LogMsg(kLogError, L"plSelfPatcher::OnFileSrvIP: %s", NetErrorToString(error));
|
||||
s_selfPatcher.fResult = error;
|
||||
s_selfPatcher.IQuit();
|
||||
return;
|
||||
}
|
||||
|
||||
NetCliFileStartConnect(&addr, 1, true);
|
||||
s_selfPatcher.IssueManifestRequests();
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
void plSelfPatcher::OnFileSrvManifest(ENetError result, void* param, const wchar group[],
|
||||
const NetCliFileManifestEntry manifest[], unsigned entryCount)
|
||||
{
|
||||
PatcherWork* wk = (PatcherWork*)param;
|
||||
|
||||
switch (result) {
|
||||
case kNetErrTimeout:
|
||||
NetCliFileManifestRequest(OnFileSrvManifest, param, group);
|
||||
return;
|
||||
case kNetErrServerBusy:
|
||||
s_selfPatcher.IReportServerBusy();
|
||||
return;
|
||||
}
|
||||
|
||||
if (IS_NET_ERROR(result) && !(wk->fFlags & kRequestOptionalManifest)) {
|
||||
s_selfPatcher.fResult = result;
|
||||
s_selfPatcher.IQuit();
|
||||
return;
|
||||
}
|
||||
|
||||
for (unsigned i = 0; i < entryCount; ++i)
|
||||
s_selfPatcher.IEnqueueFile(manifest[i]);
|
||||
s_selfPatcher.IDequeueWork(wk);
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
void plSelfPatcher::OnFileSrvDownload(ENetError result, void* param,
|
||||
const wchar filename[], hsStream* writer)
|
||||
{
|
||||
switch (result) {
|
||||
case kNetErrTimeout:
|
||||
writer->Rewind();
|
||||
NetCliFileDownloadRequest(filename, writer, OnFileSrvDownload, param);
|
||||
return;
|
||||
case kNetErrServerBusy:
|
||||
s_selfPatcher.IReportServerBusy();
|
||||
writer->Close();
|
||||
DEL(writer);
|
||||
return;
|
||||
}
|
||||
|
||||
writer->Close();
|
||||
DEL(writer);
|
||||
|
||||
if (IS_NET_ERROR(result)) {
|
||||
LogMsg(kLogError, L"plSelfPatcher::OnFileSrvDownload: Error downloading '%s': %s", filename, NetErrorToString(result));
|
||||
s_selfPatcher.fResult = result;
|
||||
s_selfPatcher.IQuit();
|
||||
} else {
|
||||
PatcherWork* wk = (PatcherWork*)param;
|
||||
wk->fType = kVerify;
|
||||
s_selfPatcher.IEnqueueWork(wk);
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
@ -324,7 +919,7 @@ bool SelfPatch (bool noSelfPatch, bool * abort, ENetError * result, plLauncherIn
|
||||
SetText("Checking for patcher update...");
|
||||
patched = SelfPatcherProc(abort, info);
|
||||
}
|
||||
*result = s_patchResult;
|
||||
*result = s_selfPatcher.GetResult();
|
||||
return patched;
|
||||
}
|
||||
|
||||
|
@ -87,6 +87,7 @@ struct plLauncherInfo {
|
||||
PatchInfo patchInfo;
|
||||
bool IsTGCider;
|
||||
DWORD returnCode; // used so we can pass a new process id back to gametap. That way gametap wont think uru has exited when the patcher quits.
|
||||
HWND dialog;
|
||||
};
|
||||
|
||||
|
||||
|
@ -71,6 +71,7 @@ struct hsColorRGBA {
|
||||
|
||||
hsColorRGBA& FromARGB32(UInt32 c);
|
||||
UInt32 ToARGB32() const;
|
||||
UInt32 ToARGB32Premultiplied() const;
|
||||
|
||||
void Read(hsStream *stream);
|
||||
void Write(hsStream *stream) const;
|
||||
@ -109,6 +110,14 @@ inline UInt32 hsColorRGBA::ToARGB32() const
|
||||
| (UInt32(b * 255.99f) << 0);
|
||||
}
|
||||
|
||||
inline UInt32 hsColorRGBA::ToARGB32Premultiplied() const
|
||||
{
|
||||
return (UInt32(a * 255.0f + 0.5f) << 24)
|
||||
| (UInt32(a * r * 255.0f + 0.5f) << 16)
|
||||
| (UInt32(a * g * 255.0f + 0.5f) << 8)
|
||||
| (UInt32(a * b * 255.0f + 0.5f) << 0);
|
||||
}
|
||||
|
||||
inline hsColorRGBA operator+(const hsColorRGBA& s, const hsColorRGBA& t)
|
||||
{
|
||||
hsColorRGBA res;
|
||||
|
@ -766,3 +766,31 @@ char** DisplaySystemVersion()
|
||||
return nil;
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef HS_BUILD_FOR_WIN32
|
||||
static RTL_OSVERSIONINFOW s_WinVer;
|
||||
|
||||
const RTL_OSVERSIONINFOW& hsGetWindowsVersion()
|
||||
{
|
||||
static bool done = false;
|
||||
if (!done) {
|
||||
memset(&s_WinVer, 0, sizeof(RTL_OSVERSIONINFOW));
|
||||
HMODULE ntdll = LoadLibraryW(L"ntdll.dll");
|
||||
hsAssert(ntdll, "Failed to LoadLibrary on ntdll???");
|
||||
|
||||
if (ntdll) {
|
||||
s_WinVer.dwOSVersionInfoSize = sizeof(RTL_OSVERSIONINFOW);
|
||||
typedef LONG(WINAPI* RtlGetVersionPtr)(RTL_OSVERSIONINFOW*);
|
||||
RtlGetVersionPtr getVersion = (RtlGetVersionPtr)GetProcAddress(ntdll, "RtlGetVersion");
|
||||
hsAssert(getVersion, "Could not find RtlGetVersion in ntdll");
|
||||
if (getVersion) {
|
||||
getVersion(&s_WinVer);
|
||||
done = true;
|
||||
}
|
||||
}
|
||||
FreeLibrary(ntdll);
|
||||
}
|
||||
return s_WinVer;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -55,4 +55,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
#include <Windows.h>
|
||||
#endif // __AFX_H__
|
||||
|
||||
|
||||
const RTL_OSVERSIONINFOW& hsGetWindowsVersion();
|
||||
|
||||
#endif // HS_BUILD_FOR_WIN32
|
||||
|
@ -1683,7 +1683,7 @@ void plVirtualCam1::PushCamera(plCameraModifier1* pCam, hsBool bDefault)
|
||||
|
||||
void plVirtualCam1::PopCamera(plCameraModifier1* pCam)
|
||||
{
|
||||
// sanity / new default camera check
|
||||
// sanity / new default camera check
|
||||
if (fCameraStack.Count() <= 1)
|
||||
return;
|
||||
|
||||
|
@ -151,6 +151,7 @@ void pfMarkerInfo::Show(bool show)
|
||||
plEnableMsg* msg = TRACKED_NEW plEnableMsg;
|
||||
msg->SetBCastFlag(plMessage::kPropagateToChildren);
|
||||
msg->SetCmd(plEnableMsg::kDrawable);
|
||||
msg->SetCmd(plEnableMsg::kPhysical);
|
||||
msg->SetCmd(show ? plEnableMsg::kEnable : plEnableMsg::kDisable);
|
||||
msg->SetSender(pfMarkerMgr::Instance()->GetKey());
|
||||
msg->Send(fKey);
|
||||
@ -263,4 +264,4 @@ void pfMarkerInfo::IPlaySound(bool place)
|
||||
msg->SetSender(pfMarkerMgr::Instance()->GetKey());
|
||||
msg->Send(ai->GetKey());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -56,6 +56,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
#include "../pnMessage/plRefMsg.h"
|
||||
#include "../pnMessage/plEnableMsg.h"
|
||||
#include "../pfMessage/pfGameGUIMsg.h"
|
||||
#include "../plMessage/plDeviceRecreateMsg.h"
|
||||
#include "../pnSceneObject/plDrawInterface.h"
|
||||
#include "../pnSceneObject/plCoordinateInterface.h"
|
||||
#include "../pnSceneObject/plAudioInterface.h"
|
||||
@ -584,14 +585,16 @@ plProfile_CreateTimer("Gui", "RenderSetup", GUITime);
|
||||
hsBool pfGUIControlMod::MsgReceive( plMessage *msg )
|
||||
{
|
||||
plRenderMsg* rend = plRenderMsg::ConvertNoRef( msg );
|
||||
plDeviceRecreateMsg* device = plDeviceRecreateMsg::ConvertNoRef(msg);
|
||||
if (rend || device) {
|
||||
plPipeline* pipe = rend ? rend->Pipeline() : device->Pipeline();
|
||||
|
||||
if( rend )
|
||||
{
|
||||
plProfile_BeginLap(GUITime, this->GetKey()->GetUoid().GetObjectName());
|
||||
// Only need it once
|
||||
if( ISetUpDynTextMap( rend->Pipeline() ) )
|
||||
plgDispatch::Dispatch()->UnRegisterForExactType( plRenderMsg::Index(), GetKey() );
|
||||
ISetUpDynTextMap(pipe);
|
||||
plProfile_EndLap(GUITime, this->GetKey()->GetUoid().GetObjectName());
|
||||
|
||||
if (rend)
|
||||
plgDispatch::Dispatch()->UnRegisterForExactType(plRenderMsg::Index(), GetKey());
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -603,12 +606,16 @@ hsBool pfGUIControlMod::MsgReceive( plMessage *msg )
|
||||
if( refMsg->GetContext() & ( plRefMsg::kOnCreate | plRefMsg::kOnRequest | plRefMsg::kOnReplace ) )
|
||||
{
|
||||
fDynTextMap = plDynamicTextMap::ConvertNoRef( refMsg->GetRef() );
|
||||
// Register for a render msg so we can leech the material when we finally
|
||||
// have a pipeline to work with
|
||||
|
||||
// These tell us when we need to (re-)initialize the DTM
|
||||
plgDispatch::Dispatch()->RegisterForExactType( plRenderMsg::Index(), GetKey() );
|
||||
plgDispatch::Dispatch()->RegisterForExactType( plDeviceRecreateMsg::Index(), GetKey() );
|
||||
}
|
||||
else
|
||||
{
|
||||
fDynTextMap = nil;
|
||||
plgDispatch::Dispatch()->UnRegisterForExactType( plDeviceRecreateMsg::Index(), GetKey() );
|
||||
}
|
||||
return true;
|
||||
}
|
||||
else if( refMsg->fType == kRefDynTextLayer )
|
||||
@ -688,7 +695,7 @@ hsBool pfGUIControlMod::ISetUpDynTextMap( plPipeline *pipe )
|
||||
extraH -= height;
|
||||
|
||||
fDynTextMap->Reset();
|
||||
fDynTextMap->Create( width, height, HasFlag( kXparentBgnd ), extraW, extraH );
|
||||
fDynTextMap->Create( width, height, HasFlag( kXparentBgnd ), extraW, extraH, true );
|
||||
|
||||
fDynTextMap->SetFont( GetColorScheme()->fFontFace, GetColorScheme()->fFontSize, GetColorScheme()->fFontFlags,
|
||||
HasFlag( kXparentBgnd ) ? false : true );
|
||||
@ -699,6 +706,7 @@ hsBool pfGUIControlMod::ISetUpDynTextMap( plPipeline *pipe )
|
||||
// out with 1:1 mapping from textel to pixel
|
||||
plLayer *layer = (plLayer *)fDynTextLayer;
|
||||
layer->SetTransform( fDynTextMap->GetLayerTransform() );
|
||||
layer->SetBlendFlags( layer->GetBlendFlags() | hsGMatState::kBlendAlphaPremultiplied );
|
||||
|
||||
// Let the derived classes do their things
|
||||
IPostSetUpDynTextMap();
|
||||
|
@ -247,6 +247,8 @@ class pfGUIControlMod : public plSingleModifier
|
||||
virtual void SetColorScheme( pfGUIColorScheme *newScheme );
|
||||
pfGUIColorScheme *GetColorScheme( void ) const;
|
||||
|
||||
virtual void UpdateColorScheme() { IPostSetUpDynTextMap(); IUpdate(); }
|
||||
|
||||
// should be override by specific GUIcontrol
|
||||
virtual void PurgeDynaTextMapImage() {;}
|
||||
|
||||
|
@ -197,9 +197,9 @@ void pfGUIEditBoxMod::IUpdate( void )
|
||||
oldCursorPos = cursorPos;
|
||||
cursorPos -= (Int16)fScrollPos;
|
||||
|
||||
if( 4 + cursorPos > fDynTextMap->GetVisibleWidth() - 18 )
|
||||
if( 4 + cursorPos > fDynTextMap->GetVisibleWidth() - 4 - 2 )
|
||||
{
|
||||
fScrollPos += ( 4 + cursorPos ) - ( fDynTextMap->GetVisibleWidth() - 18 );
|
||||
fScrollPos += ( 4 + cursorPos ) - ( fDynTextMap->GetVisibleWidth() - 4 - 2 );
|
||||
}
|
||||
else if( 4 + cursorPos < 4 )
|
||||
{
|
||||
|
@ -180,6 +180,10 @@ hsBool pfGUIListBoxMod::MsgReceive( plMessage *msg )
|
||||
|
||||
void pfGUIListBoxMod::IPostSetUpDynTextMap( void )
|
||||
{
|
||||
pfGUIColorScheme *scheme = GetColorScheme();
|
||||
fDynTextMap->SetFont( scheme->fFontFace, scheme->fFontSize, scheme->fFontFlags,
|
||||
!HasFlag( kXparentBgnd ));
|
||||
|
||||
ICalcWrapStarts();
|
||||
ICalcScrollRange();
|
||||
fReadyToRoll = true;
|
||||
|
@ -308,6 +308,13 @@ void pfGUIMultiLineEditCtrl::SetScrollPosition( Int32 topLine )
|
||||
fDialog->GetHandler()->DoSomething(this);
|
||||
}
|
||||
|
||||
//// GetScrollPosition ///////////////////////////////////////////////////////
|
||||
|
||||
Int32 pfGUIMultiLineEditCtrl::GetScrollPosition()
|
||||
{
|
||||
return fScrollPos;
|
||||
}
|
||||
|
||||
//// MoveCursor - by direction command////////////////////////////////////////////////
|
||||
void pfGUIMultiLineEditCtrl::MoveCursor( Direction dir )
|
||||
{
|
||||
@ -2064,4 +2071,4 @@ void pfGUIMultiLineEditCtrl::DeleteLinesFromTop(int numLines)
|
||||
SetBuffer(buffer, bufferLen);
|
||||
delete [] buffer;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -216,6 +216,8 @@ class pfGUIMultiLineEditCtrl : public pfGUIControlMod
|
||||
|
||||
virtual void PurgeDynaTextMapImage();
|
||||
|
||||
virtual void UpdateColorScheme() { fFontFlagsSet = 0; pfGUIControlMod::UpdateColorScheme(); }
|
||||
|
||||
// Extended event types
|
||||
enum ExtendedEvents
|
||||
{
|
||||
@ -225,6 +227,7 @@ class pfGUIMultiLineEditCtrl : public pfGUIControlMod
|
||||
};
|
||||
|
||||
void SetScrollPosition( Int32 topLine );
|
||||
Int32 GetScrollPosition();
|
||||
void MoveCursor( Direction dir );
|
||||
|
||||
void InsertChar( char c );
|
||||
|
@ -102,8 +102,6 @@ class pfGUITextBoxMod : public pfGUIControlMod
|
||||
void SetLocalizationPath(const wchar_t* path);
|
||||
void SetLocalizationPath(const char* path);
|
||||
void SetUseLocalizationPath(bool use);
|
||||
|
||||
virtual void UpdateColorScheme() { IPostSetUpDynTextMap(); IUpdate(); }
|
||||
};
|
||||
|
||||
#endif // _pfGUITextBoxMod_h
|
||||
|
@ -491,4 +491,10 @@ void pyDynamicText::AddPlasmaConstantsClasses(PyObject *m)
|
||||
PYTHON_ENUM_ELEMENT(PtJustify, kLeftJustify, plDynamicTextMap::Justify::kLeftJustify);
|
||||
PYTHON_ENUM_ELEMENT(PtJustify, kRightJustify, plDynamicTextMap::Justify::kRightJustify);
|
||||
PYTHON_ENUM_END(m, PtJustify);
|
||||
|
||||
PYTHON_ENUM_START(PtFontFlags);
|
||||
PYTHON_ENUM_ELEMENT(PtFontFlags, kFontBold, plDynamicTextMap::kFontBold);
|
||||
PYTHON_ENUM_ELEMENT(PtFontFlags, kFontItalic, plDynamicTextMap::kFontItalic);
|
||||
PYTHON_ENUM_ELEMENT(PtFontFlags, kFontShadowed, plDynamicTextMap::kFontShadowed);
|
||||
PYTHON_ENUM_END(m, PtFontFlags);
|
||||
}
|
@ -278,7 +278,7 @@ PyObject* pyGUIControl::GetOwnerDlg( void )
|
||||
}
|
||||
|
||||
// get color schemes
|
||||
PyObject* pyGUIControl::GetForeColor()
|
||||
PyObject* pyGUIControl::GetForeColor() const
|
||||
{
|
||||
if ( fGCkey )
|
||||
{
|
||||
@ -292,7 +292,7 @@ PyObject* pyGUIControl::GetForeColor()
|
||||
PYTHON_RETURN_NONE;
|
||||
}
|
||||
|
||||
PyObject* pyGUIControl::GetSelColor()
|
||||
PyObject* pyGUIControl::GetSelColor() const
|
||||
{
|
||||
if ( fGCkey )
|
||||
{
|
||||
@ -306,7 +306,7 @@ PyObject* pyGUIControl::GetSelColor()
|
||||
PYTHON_RETURN_NONE;
|
||||
}
|
||||
|
||||
PyObject* pyGUIControl::GetBackColor()
|
||||
PyObject* pyGUIControl::GetBackColor() const
|
||||
{
|
||||
if ( fGCkey )
|
||||
{
|
||||
@ -320,7 +320,7 @@ PyObject* pyGUIControl::GetBackColor()
|
||||
PYTHON_RETURN_NONE;
|
||||
}
|
||||
|
||||
PyObject* pyGUIControl::GetBackSelColor()
|
||||
PyObject* pyGUIControl::GetBackSelColor() const
|
||||
{
|
||||
if ( fGCkey )
|
||||
{
|
||||
@ -334,7 +334,7 @@ PyObject* pyGUIControl::GetBackSelColor()
|
||||
PYTHON_RETURN_NONE;
|
||||
}
|
||||
|
||||
UInt32 pyGUIControl::GetFontSize()
|
||||
UInt32 pyGUIControl::GetFontSize() const
|
||||
{
|
||||
if ( fGCkey )
|
||||
{
|
||||
@ -444,3 +444,34 @@ void pyGUIControl::SetFontSize(UInt32 fontsize)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void pyGUIControl::SetFontFlags(UInt8 fontFlags)
|
||||
{
|
||||
if (fGCkey)
|
||||
{
|
||||
// get the pointer to the modifier
|
||||
pfGUIControlMod* pdmod = pfGUIControlMod::ConvertNoRef(fGCkey->ObjectIsLoaded());
|
||||
if (pdmod)
|
||||
{
|
||||
pfGUIColorScheme* colorscheme = pdmod->GetColorScheme();
|
||||
colorscheme->fFontFlags = fontFlags;
|
||||
pdmod->UpdateColorScheme();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
UInt8 pyGUIControl::GetFontFlags() const
|
||||
{
|
||||
if (fGCkey)
|
||||
{
|
||||
// get the pointer to the modifier
|
||||
pfGUIControlMod* pdmod = pfGUIControlMod::ConvertNoRef(fGCkey->ObjectIsLoaded());
|
||||
if (pdmod)
|
||||
{
|
||||
pfGUIColorScheme* colorscheme = pdmod->GetColorScheme();
|
||||
return colorscheme->fFontFlags;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -116,17 +116,19 @@ public:
|
||||
virtual PyObject* GetOwnerDlg( void ); // returns pyGUIDialog
|
||||
|
||||
// get color schemes
|
||||
virtual PyObject* GetForeColor(); // returns pyColor
|
||||
virtual PyObject* GetSelColor(); // returns pyColor
|
||||
virtual PyObject* GetBackColor(); // returns pyColor
|
||||
virtual PyObject* GetBackSelColor(); // returns pyColor
|
||||
virtual UInt32 GetFontSize();
|
||||
virtual PyObject* GetForeColor() const; // returns pyColor
|
||||
virtual PyObject* GetSelColor() const; // returns pyColor
|
||||
virtual PyObject* GetBackColor() const; // returns pyColor
|
||||
virtual PyObject* GetBackSelColor() const; // returns pyColor
|
||||
virtual UInt32 GetFontSize() const;
|
||||
virtual UInt8 GetFontFlags() const;
|
||||
// set color scheme
|
||||
virtual void SetForeColor( hsScalar r, hsScalar g, hsScalar b, hsScalar a );
|
||||
virtual void SetSelColor( hsScalar r, hsScalar g, hsScalar b, hsScalar a );
|
||||
virtual void SetBackColor( hsScalar r, hsScalar g, hsScalar b, hsScalar a );
|
||||
virtual void SetBackSelColor( hsScalar r, hsScalar g, hsScalar b, hsScalar a );
|
||||
virtual void SetFontSize(UInt32 fontsize);
|
||||
virtual void SetFontFlags(UInt8 fontflags);
|
||||
|
||||
};
|
||||
|
||||
|
@ -244,6 +244,23 @@ PYTHON_METHOD_DEFINITION_NOARGS(ptGUIControl, getFontSize)
|
||||
return PyLong_FromUnsignedLong(self->fThis->GetFontSize());
|
||||
}
|
||||
|
||||
PYTHON_METHOD_DEFINITION_NOARGS(ptGUIControl, getFontFlags)
|
||||
{
|
||||
return PyInt_FromLong(self->fThis->GetFontFlags());
|
||||
}
|
||||
|
||||
PYTHON_METHOD_DEFINITION(ptGUIControl, setFontFlags, args)
|
||||
{
|
||||
unsigned char fontflags;
|
||||
if (!PyArg_ParseTuple(args, "b", &fontflags))
|
||||
{
|
||||
PyErr_SetString(PyExc_TypeError, "setFontFlags expects an unsigned 8-bit int");
|
||||
PYTHON_RETURN_ERROR;
|
||||
}
|
||||
self->fThis->SetFontFlags(fontflags);
|
||||
PYTHON_RETURN_NONE;
|
||||
}
|
||||
|
||||
PYTHON_METHOD_DEFINITION(ptGUIControl, setForeColor, args)
|
||||
{
|
||||
float r, g, b, a;
|
||||
@ -329,11 +346,13 @@ PYTHON_START_METHODS_TABLE(ptGUIControl)
|
||||
PYTHON_METHOD_NOARGS(ptGUIControl, getBackColor, "Returns the background color"),
|
||||
PYTHON_METHOD_NOARGS(ptGUIControl, getBackSelectColor, "Returns the background selection color"),
|
||||
PYTHON_METHOD_NOARGS(ptGUIControl, getFontSize, "Returns the font size"),
|
||||
PYTHON_METHOD_NOARGS(ptGUIControl, getFontFlags, "Returns the current fontflags"),
|
||||
PYTHON_METHOD(ptGUIControl, setForeColor, "Params: r,g,b,a\nSets the foreground color"),
|
||||
PYTHON_METHOD(ptGUIControl, setSelectColor, "Params: r,g,b,a\nSets the selection color"),
|
||||
PYTHON_METHOD(ptGUIControl, setBackColor, "Params: r,g,b,a\nSets the background color"),
|
||||
PYTHON_METHOD(ptGUIControl, setBackSelectColor, "Params: r,g,b,a\nSets the selection background color"),
|
||||
PYTHON_METHOD(ptGUIControl, setFontSize, "Params: fontSize\nSets the font size"),
|
||||
PYTHON_METHOD(ptGUIControl, setFontFlags, "Params: fontflags\nSets current fontflags"),
|
||||
PYTHON_END_METHODS_TABLE;
|
||||
|
||||
// Type structure definition
|
||||
|
@ -80,6 +80,30 @@ void pyGUIControlMultiLineEdit::SetScrollPosition( Int32 topLine )
|
||||
}
|
||||
}
|
||||
|
||||
Int32 pyGUIControlMultiLineEdit::GetScrollPosition()
|
||||
{
|
||||
if ( fGCkey )
|
||||
{
|
||||
// get the pointer to the modifier
|
||||
pfGUIMultiLineEditCtrl* pbmod = pfGUIMultiLineEditCtrl::ConvertNoRef(fGCkey->ObjectIsLoaded());
|
||||
if ( pbmod )
|
||||
return pbmod->GetScrollPosition();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
hsBool pyGUIControlMultiLineEdit::IsAtEnd()
|
||||
{
|
||||
if ( fGCkey )
|
||||
{
|
||||
// get the pointer to the modifier
|
||||
pfGUIMultiLineEditCtrl* pbmod = pfGUIMultiLineEditCtrl::ConvertNoRef(fGCkey->ObjectIsLoaded());
|
||||
if ( pbmod )
|
||||
return pbmod->ShowingEndOfBuffer();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void pyGUIControlMultiLineEdit::MoveCursor( Int32 dir)
|
||||
{
|
||||
if ( fGCkey )
|
||||
@ -557,4 +581,4 @@ void pyGUIControlMultiLineEdit::SetFontSize( UInt32 fontsize )
|
||||
if ( pbmod )
|
||||
pbmod->SetFontSize((UInt8)fontsize);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -80,6 +80,8 @@ public:
|
||||
virtual void Clickable( void );
|
||||
virtual void Unclickable( void );
|
||||
virtual void SetScrollPosition( Int32 topLine );
|
||||
virtual Int32 GetScrollPosition();
|
||||
virtual hsBool IsAtEnd();
|
||||
virtual void MoveCursor( Int32 dir );
|
||||
virtual void ClearBuffer( void );
|
||||
virtual void SetText( const char *asciiText );
|
||||
|
@ -87,6 +87,16 @@ PYTHON_METHOD_DEFINITION(ptGUIControlMultiLineEdit, setScrollPosition, args)
|
||||
PYTHON_RETURN_NONE;
|
||||
}
|
||||
|
||||
PYTHON_METHOD_DEFINITION_NOARGS(ptGUIControlMultiLineEdit, getScrollPosition)
|
||||
{
|
||||
return PyLong_FromLong(self->fThis->GetScrollPosition());
|
||||
}
|
||||
|
||||
PYTHON_METHOD_DEFINITION_NOARGS(ptGUIControlMultiLineEdit, isAtEnd)
|
||||
{
|
||||
PYTHON_RETURN_BOOL(self->fThis->IsAtEnd());
|
||||
}
|
||||
|
||||
PYTHON_METHOD_DEFINITION(ptGUIControlMultiLineEdit, moveCursor, args)
|
||||
{
|
||||
long dir;
|
||||
@ -394,6 +404,8 @@ PYTHON_START_METHODS_TABLE(ptGUIControlMultiLineEdit)
|
||||
PYTHON_BASIC_METHOD(ptGUIControlMultiLineEdit, unclickable, "Makes this listbox not clickable by the user.\n"
|
||||
"Useful when just displaying a list that is not really selectable."),
|
||||
PYTHON_METHOD(ptGUIControlMultiLineEdit, setScrollPosition, "Params: topLine\nSets the what line is the top line."),
|
||||
PYTHON_METHOD_NOARGS(ptGUIControlMultiLineEdit, getScrollPosition, "Gets what line is the top line."),
|
||||
PYTHON_METHOD_NOARGS(ptGUIControlMultiLineEdit, isAtEnd, "Returns true if the end of the buffer has been reached."),
|
||||
PYTHON_METHOD(ptGUIControlMultiLineEdit, moveCursor, "Params: direction\nMove the cursor in the specified direction (see PtGUIMultiLineDirection)"),
|
||||
PYTHON_BASIC_METHOD(ptGUIControlMultiLineEdit, clearBuffer, "Clears all text from the multi-line edit control."),
|
||||
PYTHON_METHOD(ptGUIControlMultiLineEdit, setString, "Params: asciiText\nSets the multi-line edit control string."),
|
||||
|
@ -214,3 +214,4 @@ UInt8 pyGUIControlTextBox::GetJustify()
|
||||
}
|
||||
return pfGUIListText::kLeftJustify;
|
||||
}
|
||||
|
||||
|
@ -88,6 +88,7 @@ public:
|
||||
virtual void SetForeColor( pyColor& color );
|
||||
virtual void SetBackColor( pyColor& color );
|
||||
virtual void SetJustify( UInt8 justify );
|
||||
|
||||
virtual UInt8 GetJustify();
|
||||
virtual PyObject* GetForeColor(); // returns pyColor
|
||||
};
|
||||
|
@ -185,6 +185,8 @@ PYTHON_METHOD_DEFINITION(ptGUIControlTextBox, setStringJustify, args)
|
||||
PYTHON_RETURN_NONE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
PYTHON_METHOD_DEFINITION_NOARGS(ptGUIControlTextBox, getStringJustify)
|
||||
{
|
||||
return PyInt_FromLong(self->fThis->GetJustify());
|
||||
|
@ -664,6 +664,11 @@ bool pyVault::SetAgePublic( const pyAgeInfoStruct * ageInfo, bool makePublic )
|
||||
return VaultSetOwnedAgePublicAndWait(ageInfo->GetAgeInfo(), makePublic);
|
||||
}
|
||||
|
||||
bool pyVault::SetAgePublic( const pyVaultAgeInfoNode * ageInfoNode, bool makePublic )
|
||||
{
|
||||
return VaultSetAgePublicAndWait(ageInfoNode->GetNode(), makePublic);
|
||||
}
|
||||
|
||||
|
||||
PyObject* pyVault::GetGlobalInbox( void )
|
||||
{
|
||||
|
@ -176,6 +176,8 @@ public:
|
||||
void CreateNeighborhood();
|
||||
// set an age's public status. will fail if you aren't czar of age.
|
||||
bool SetAgePublic( const pyAgeInfoStruct * ageInfo, bool makePublic );
|
||||
// set an age's public status, also works for non-owners
|
||||
bool SetAgePublic( const pyVaultAgeInfoNode * ageInfoNode, bool makePublic );
|
||||
|
||||
PyObject* GetGlobalInbox( void ); // returns pyVaultFolderNode
|
||||
#ifdef GlobalInboxTestCode
|
||||
|
@ -43,6 +43,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
#include "pyEnum.h"
|
||||
#include "pyAgeInfoStruct.h"
|
||||
#include "pyVaultNode.h"
|
||||
#include "pyVaultAgeInfoNode.h"
|
||||
#include "pySDL.h"
|
||||
#include "pyAgeLinkStruct.h"
|
||||
|
||||
@ -451,16 +452,21 @@ PYTHON_METHOD_DEFINITION(ptVault, setAgePublic, args)
|
||||
char makePublic;
|
||||
if (!PyArg_ParseTuple(args, "Ob", &ageInfoObj, &makePublic))
|
||||
{
|
||||
PyErr_SetString(PyExc_TypeError, "setAgePublic expects a ptAgeInfoStruct and a boolean");
|
||||
PyErr_SetString(PyExc_TypeError, "setAgePublic expects a ptAgeInfoStruct or ptVaultAgeInfoNode and a boolean");
|
||||
PYTHON_RETURN_ERROR;
|
||||
}
|
||||
if (!pyAgeInfoStruct::Check(ageInfoObj))
|
||||
if (pyAgeInfoStruct::Check(ageInfoObj))
|
||||
{
|
||||
PyErr_SetString(PyExc_TypeError, "setAgePublic expects a ptAgeInfoStruct and a boolean");
|
||||
PYTHON_RETURN_ERROR;
|
||||
pyAgeInfoStruct* ageInfo = pyAgeInfoStruct::ConvertFrom(ageInfoObj);
|
||||
PYTHON_RETURN_BOOL(self->fThis->SetAgePublic(ageInfo, makePublic != 0));
|
||||
}
|
||||
pyAgeInfoStruct* ageInfo = pyAgeInfoStruct::ConvertFrom(ageInfoObj);
|
||||
PYTHON_RETURN_BOOL(self->fThis->SetAgePublic(ageInfo, makePublic != 0));
|
||||
else if (pyVaultAgeInfoNode::Check(ageInfoObj))
|
||||
{
|
||||
pyVaultAgeInfoNode* ageInfoNode = pyVaultAgeInfoNode::ConvertFrom(ageInfoObj);
|
||||
PYTHON_RETURN_BOOL(self->fThis->SetAgePublic(ageInfoNode, makePublic != 0));
|
||||
}
|
||||
PyErr_SetString(PyExc_TypeError, "setAgePublic expects a ptAgeInfoStruct or ptVaultAgeInfoNode and a boolean");
|
||||
PYTHON_RETURN_ERROR;
|
||||
}
|
||||
|
||||
PYTHON_START_METHODS_TABLE(ptVault)
|
||||
|
@ -85,7 +85,8 @@ enum hsGMatBlendFlags {
|
||||
kBlendEnvBumpNext = 0x800000,
|
||||
kBlendSubtract = 0x1000000,
|
||||
kBlendRevSubtract = 0x2000000,
|
||||
kBlendAlphaTestHigh = 0x4000000
|
||||
kBlendAlphaTestHigh = 0x4000000,
|
||||
kBlendAlphaPremultiplied = 0x8000000
|
||||
};
|
||||
enum hsGMatClampFlags {
|
||||
|
||||
|
@ -649,6 +649,7 @@ void plArmatureMod::IInitDefaults()
|
||||
fStealthLevel = 0;
|
||||
fMouseFrameTurnStrength = 0.f;
|
||||
fSuspendInputCount = 0;
|
||||
fIsLinkedIn = false;
|
||||
fMidLink = false;
|
||||
fAlreadyPanicLinking = false;
|
||||
fReverseFBOnIdle = false;
|
||||
@ -1374,19 +1375,32 @@ hsBool plArmatureMod::MsgReceive(plMessage* msg)
|
||||
plLinkInDoneMsg *doneMsg = plLinkInDoneMsg::ConvertNoRef(msg);
|
||||
if (doneMsg)
|
||||
{
|
||||
fIsLinkedIn = true;
|
||||
IFireBehaviorNotify(plHBehavior::kBehaviorTypeLinkIn, false);
|
||||
return true;
|
||||
}
|
||||
|
||||
plAgeLoadedMsg *ageLoadMsg = plAgeLoadedMsg::ConvertNoRef(msg);
|
||||
if (ageLoadMsg && ageLoadMsg->fLoaded)
|
||||
if (ageLoadMsg)
|
||||
{
|
||||
// only the local player gets these
|
||||
NetworkSynch(hsTimer::GetSysSeconds(), true);
|
||||
EnablePhysics(true);
|
||||
if (ageLoadMsg->fLoaded)
|
||||
{
|
||||
// only the local player gets these
|
||||
NetworkSynch(hsTimer::GetSysSeconds(), true);
|
||||
} else
|
||||
fIsLinkedIn = false;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
plAgeLoaded2Msg *agePreLoadMsg = plAgeLoaded2Msg::ConvertNoRef(msg);
|
||||
if (agePreLoadMsg)
|
||||
{
|
||||
// all the age data is loaded -- add our physical controller to the age
|
||||
ValidatePhysics();
|
||||
EnablePhysics(true);
|
||||
return true;
|
||||
}
|
||||
|
||||
plAnimCmdMsg *cmdMsg = plAnimCmdMsg::ConvertNoRef(msg);
|
||||
if (cmdMsg)
|
||||
{
|
||||
@ -1662,7 +1676,9 @@ void plArmatureMod::AddTarget(plSceneObject* so)
|
||||
// non-players will unregister when they learn the truth.
|
||||
if (IsLocallyOwned())
|
||||
plgDispatch::Dispatch()->RegisterForExactType(plAgeLoadedMsg::Index(), GetKey());
|
||||
|
||||
|
||||
plgDispatch::Dispatch()->RegisterForType(plAgeLoaded2Msg::Index(), GetKey());
|
||||
|
||||
// attach a clothingSDLModifier to handle clothing saveState
|
||||
delete fClothingSDLMod;
|
||||
fClothingSDLMod = TRACKED_NEW plClothingSDLModifier;
|
||||
@ -2517,6 +2533,11 @@ bool plArmatureMod::IsMidLink()
|
||||
return fMidLink;
|
||||
}
|
||||
|
||||
bool plArmatureMod::IsLinkedIn()
|
||||
{
|
||||
return fIsLinkedIn;
|
||||
}
|
||||
|
||||
hsBool plArmatureMod::ConsumeJump()
|
||||
{
|
||||
if (!GetInputFlag(B_CONTROL_CONSUMABLE_JUMP))
|
||||
|
@ -318,6 +318,7 @@ public:
|
||||
int GetStealthLevel() const { return fStealthLevel; }
|
||||
|
||||
bool IsOpaque();
|
||||
bool IsLinkedIn();
|
||||
bool IsMidLink();
|
||||
hsBool ConsumeJump(); // returns true if the jump keypress was available to consume
|
||||
|
||||
@ -401,6 +402,7 @@ protected:
|
||||
plArmatureUpdateMsg *fUpdateMsg;
|
||||
|
||||
// Trying to be a good lad here and align all our bools and UInt8s...
|
||||
bool fIsLinkedIn; // We have finished playing the LinkEffects and are properly in the age
|
||||
bool fMidLink; // We're in between a LeaveAge and an EnterAge
|
||||
bool fAlreadyPanicLinking; // Cleared when you enter an age. Prevents spamming the server with panic link requests.
|
||||
bool fUnconsumedJump; // We've pressed the jump key, but haven't jumped yet
|
||||
|
@ -68,7 +68,7 @@ plPhysicalControllerCore::plPhysicalControllerCore(plKey OwnerSceneObject, hsSca
|
||||
fMovementStrategy(nil),
|
||||
fSimLength(0.0f),
|
||||
fLocalRotation(0.0f, 0.0f, 0.0f, 1.0f),
|
||||
fLocalPosition(0.0f, 0.0f, 0.0f),
|
||||
fLocalPosition(0.0f, 0.0f, -2000.0f),
|
||||
fLastLocalPosition(0.0f, 0.0f, 0.0f),
|
||||
fLinearVelocity(0.0f, 0.0f, 0.0f),
|
||||
fAchievedLinearVelocity(0.0f, 0.0f, 0.0f),
|
||||
|
@ -90,33 +90,45 @@ plMD5Checksum::plMD5Checksum( const char *fileName )
|
||||
CalcFromFile( fileName );
|
||||
}
|
||||
|
||||
plMD5Checksum::plMD5Checksum( hsStream* stream )
|
||||
{
|
||||
CalcFromStream(stream);
|
||||
}
|
||||
|
||||
void plMD5Checksum::Clear()
|
||||
{
|
||||
memset( fChecksum, 0, sizeof( fChecksum ) );
|
||||
fValid = false;
|
||||
}
|
||||
|
||||
void plMD5Checksum::CalcFromFile( const char *fileName)
|
||||
void plMD5Checksum::CalcFromFile( const char *fileName )
|
||||
{
|
||||
FILE *fp;
|
||||
hsUNIXStream s;
|
||||
fValid = false;
|
||||
|
||||
if( fp = fopen(fileName, "rb" ) )
|
||||
if( s.Open(fileName) )
|
||||
{
|
||||
unsigned loadLen = 1024 * 1024;
|
||||
Start();
|
||||
|
||||
UInt8 *buf = TRACKED_NEW UInt8[loadLen];
|
||||
|
||||
while(int read = fread(buf, sizeof(UInt8), loadLen, fp))
|
||||
AddTo( read, buf );
|
||||
delete[] buf;
|
||||
|
||||
Finish();
|
||||
fclose(fp);
|
||||
CalcFromStream(&s);
|
||||
s.Close();
|
||||
}
|
||||
}
|
||||
|
||||
void plMD5Checksum::CalcFromStream( hsStream* stream )
|
||||
{
|
||||
UInt32 sPos = stream->GetPosition();
|
||||
unsigned loadLen = 1024 * 1024;
|
||||
Start();
|
||||
|
||||
UInt8 *buf = TRACKED_NEW UInt8[loadLen];
|
||||
|
||||
while(int read = stream->Read(loadLen, buf))
|
||||
AddTo( read, buf );
|
||||
delete[] buf;
|
||||
|
||||
Finish();
|
||||
stream->SetPosition(sPos);
|
||||
}
|
||||
|
||||
void plMD5Checksum::Start( void )
|
||||
{
|
||||
MD5_Init( &fContext );
|
||||
|
@ -58,6 +58,8 @@ public:
|
||||
SumStorage GetChecksum() { return fSum; }
|
||||
};
|
||||
|
||||
class hsStream;
|
||||
|
||||
class plMD5Checksum
|
||||
{
|
||||
protected:
|
||||
@ -74,11 +76,13 @@ class plMD5Checksum
|
||||
plMD5Checksum();
|
||||
plMD5Checksum( const plMD5Checksum &rhs );
|
||||
plMD5Checksum( const char *fileName );
|
||||
plMD5Checksum( hsStream* stream );
|
||||
|
||||
hsBool IsValid( void ) const { return fValid; }
|
||||
void Clear();
|
||||
|
||||
void CalcFromFile( const char *fileName );
|
||||
void CalcFromStream( hsStream* stream );
|
||||
|
||||
void Start( void );
|
||||
void AddTo( UInt32 size, const UInt8 *buffer );
|
||||
|
@ -113,7 +113,8 @@ UInt32 plBitmap::Read( hsStream *s )
|
||||
fFlags = s->ReadSwap16();
|
||||
fCompressionType = s->ReadByte();
|
||||
|
||||
if(( fCompressionType == kUncompressed )||( fCompressionType == kJPEGCompression ))
|
||||
if( fCompressionType == kUncompressed || fCompressionType == kJPEGCompression ||
|
||||
fCompressionType == kPNGCompression )
|
||||
{
|
||||
fUncompressedInfo.fType = s->ReadByte();
|
||||
read++;
|
||||
@ -145,7 +146,8 @@ UInt32 plBitmap::Write( hsStream *s )
|
||||
s->WriteSwap16( fFlags );
|
||||
s->WriteByte( fCompressionType );
|
||||
|
||||
if(( fCompressionType == kUncompressed )||(fCompressionType == kJPEGCompression ))
|
||||
if( fCompressionType == kUncompressed || fCompressionType == kJPEGCompression ||
|
||||
fCompressionType == kPNGCompression )
|
||||
{
|
||||
s->WriteByte( fUncompressedInfo.fType );
|
||||
written++;
|
||||
|
@ -104,7 +104,8 @@ class plBitmap : public hsKeyedObject
|
||||
{
|
||||
kUncompressed = 0x0,
|
||||
kDirectXCompression = 0x1,
|
||||
kJPEGCompression = 0x2
|
||||
kJPEGCompression = 0x2,
|
||||
kPNGCompression = 0x3
|
||||
};
|
||||
|
||||
struct DirectXInfo
|
||||
|
@ -75,20 +75,12 @@ plProfile_Extern(MemMipmaps);
|
||||
|
||||
//// Constructor & Destructor /////////////////////////////////////////////////
|
||||
|
||||
plDynamicTextMap::plDynamicTextMap() : plMipmap()
|
||||
plDynamicTextMap::plDynamicTextMap()
|
||||
: fVisWidth(0), fVisHeight(0), fHasAlpha(false), fPremultipliedAlpha(false), fJustify(kLeftJustify),
|
||||
fInitBuffer(nil), fFontFace(nil), fFontSize(0), fFontFlags(0),
|
||||
fFontAntiAliasRGB(false), fFontBlockRGB(false), fHasCreateBeenCalled(false)
|
||||
{
|
||||
fVisWidth = fVisHeight = 0;
|
||||
fHasAlpha = false;
|
||||
fJustify = kLeftJustify;
|
||||
fInitBuffer = nil;
|
||||
fFontFace = nil;
|
||||
fFontSize = 0;
|
||||
fFontFlags = 0;
|
||||
fFontAntiAliasRGB = false;
|
||||
fFontColor.Set( 0, 0, 0, 1 );
|
||||
fFontBlockRGB = false;
|
||||
fHasCreateBeenCalled = false;
|
||||
|
||||
fFontColor.Set(0, 0, 0, 1);
|
||||
}
|
||||
|
||||
plDynamicTextMap::~plDynamicTextMap()
|
||||
@ -96,11 +88,10 @@ plDynamicTextMap::~plDynamicTextMap()
|
||||
Reset();
|
||||
}
|
||||
|
||||
plDynamicTextMap::plDynamicTextMap( UInt32 width, UInt32 height, hsBool hasAlpha, UInt32 extraWidth, UInt32 extraHeight ) : plMipmap()
|
||||
plDynamicTextMap::plDynamicTextMap( UInt32 width, UInt32 height, hsBool hasAlpha, UInt32 extraWidth, UInt32 extraHeight, hsBool premultipliedAlpha )
|
||||
: fInitBuffer(nil), fFontFace(nil)
|
||||
{
|
||||
fInitBuffer = nil;
|
||||
fFontFace = nil;
|
||||
Create( width, height, hasAlpha, extraWidth, extraHeight );
|
||||
Create( width, height, hasAlpha, extraWidth, extraHeight, premultipliedAlpha );
|
||||
}
|
||||
|
||||
//// SetNoCreate //////////////////////////////////////////////////////////////
|
||||
@ -122,7 +113,7 @@ void plDynamicTextMap::SetNoCreate( UInt32 width, UInt32 height, hsBool hasAlpha
|
||||
|
||||
//// Create ///////////////////////////////////////////////////////////////////
|
||||
|
||||
void plDynamicTextMap::Create( UInt32 width, UInt32 height, hsBool hasAlpha, UInt32 extraWidth, UInt32 extraHeight )
|
||||
void plDynamicTextMap::Create( UInt32 width, UInt32 height, hsBool hasAlpha, UInt32 extraWidth, UInt32 extraHeight, hsBool premultipliedAlpha )
|
||||
{
|
||||
SetConfig( hasAlpha ? kARGB32Config : kRGB32Config );
|
||||
|
||||
@ -130,6 +121,7 @@ void plDynamicTextMap::Create( UInt32 width, UInt32 height, hsBool hasAlpha, UIn
|
||||
fVisWidth = (UInt16)width;
|
||||
fVisHeight = (UInt16)height;
|
||||
fHasAlpha = hasAlpha;
|
||||
fPremultipliedAlpha = premultipliedAlpha;
|
||||
|
||||
for( fWidth = 1; fWidth < width + extraWidth; fWidth <<= 1 );
|
||||
for( fHeight = 1; fHeight < height + extraHeight; fHeight <<= 1 );
|
||||
@ -388,6 +380,17 @@ void plDynamicTextMap::IClearFromBuffer( UInt32 *clearBuffer )
|
||||
}
|
||||
}
|
||||
|
||||
//// IPropagateFlags //////////////////////////////////////////////////////////
|
||||
|
||||
void plDynamicTextMap::IPropagateFlags()
|
||||
{
|
||||
SetJustify(fJustify);
|
||||
fCurrFont->SetRenderFlag(plFont::kRenderShadow, fFontFlags & kFontShadowed);
|
||||
fCurrFont->SetRenderFlag(plFont::kRenderIntoAlpha, fFontBlockRGB);
|
||||
fCurrFont->SetRenderFlag(plFont::kRenderAlphaPremultiplied, fPremultipliedAlpha);
|
||||
fCurrFont->SetRenderColor(fFontColor.ToARGB32());
|
||||
}
|
||||
|
||||
//// ClearToColor /////////////////////////////////////////////////////////////
|
||||
|
||||
void plDynamicTextMap::ClearToColor( hsColorRGBA &color )
|
||||
@ -395,7 +398,7 @@ void plDynamicTextMap::ClearToColor( hsColorRGBA &color )
|
||||
if( !IIsValid() )
|
||||
return;
|
||||
|
||||
UInt32 i, hex = color.ToARGB32();
|
||||
UInt32 i, hex = fPremultipliedAlpha ? color.ToARGB32Premultiplied() : color.ToARGB32();
|
||||
UInt32 *data = (UInt32 *)fImage;
|
||||
|
||||
// Buffer is of size fVisWidth x fVisHeight, so we need a bit of work to do this right
|
||||
@ -462,6 +465,8 @@ void plDynamicTextMap::SetFont( const char *face, UInt16 size, UInt8 fontFlags,
|
||||
// This will be nil if we're just running the page optimizer.
|
||||
if (fCurrFont)
|
||||
{
|
||||
if (fFontFlags & kFontShadowed)
|
||||
fCurrFont->SetRenderFlag(plFont::kRenderShadow, true);
|
||||
fCurrFont->SetRenderYJustify( plFont::kRenderJustYTop );
|
||||
SetJustify( fJustify );
|
||||
}
|
||||
@ -515,10 +520,9 @@ void plDynamicTextMap::DrawString( UInt16 x, UInt16 y, const wchar_t *text )
|
||||
if( !IIsValid() )
|
||||
return;
|
||||
|
||||
SetJustify( fJustify );
|
||||
IPropagateFlags();
|
||||
fCurrFont->SetRenderFlag( plFont::kRenderWrap | plFont::kRenderClip, false );
|
||||
fCurrFont->SetRenderColor( fFontColor.ToARGB32() );
|
||||
fCurrFont->SetRenderFlag( plFont::kRenderIntoAlpha, fFontBlockRGB );
|
||||
fCurrFont->SetRenderClipRect( 0, 0, fVisWidth, fVisHeight );
|
||||
fCurrFont->RenderString( this, x, y, text );
|
||||
}
|
||||
|
||||
@ -536,10 +540,8 @@ void plDynamicTextMap::DrawClippedString( Int16 x, Int16 y, const wchar_t *text,
|
||||
if( !IIsValid() )
|
||||
return;
|
||||
|
||||
SetJustify( fJustify );
|
||||
IPropagateFlags();
|
||||
fCurrFont->SetRenderClipping( x, y, width, height );
|
||||
fCurrFont->SetRenderColor( fFontColor.ToARGB32() );
|
||||
fCurrFont->SetRenderFlag( plFont::kRenderIntoAlpha, fFontBlockRGB );
|
||||
fCurrFont->RenderString( this, x, y, text );
|
||||
}
|
||||
|
||||
@ -557,9 +559,8 @@ void plDynamicTextMap::DrawClippedString( Int16 x, Int16 y, const wchar_t *text,
|
||||
if( !IIsValid() )
|
||||
return;
|
||||
|
||||
SetJustify( fJustify );
|
||||
IPropagateFlags();
|
||||
fCurrFont->SetRenderClipping( clipX, clipY, width, height );
|
||||
fCurrFont->SetRenderColor( fFontColor.ToARGB32() );
|
||||
fCurrFont->RenderString( this, x, y, text );
|
||||
}
|
||||
|
||||
@ -577,10 +578,8 @@ void plDynamicTextMap::DrawWrappedString( UInt16 x, UInt16 y, const wchar_t *tex
|
||||
if( !IIsValid() )
|
||||
return;
|
||||
|
||||
SetJustify( fJustify );
|
||||
IPropagateFlags();
|
||||
fCurrFont->SetRenderWrapping( x, y, width, height );
|
||||
fCurrFont->SetRenderColor( fFontColor.ToARGB32() );
|
||||
fCurrFont->SetRenderFlag( plFont::kRenderIntoAlpha, fFontBlockRGB );
|
||||
fCurrFont->RenderString( this, x, y, text, lastX, lastY );
|
||||
}
|
||||
|
||||
@ -664,7 +663,7 @@ void plDynamicTextMap::FillRect( UInt16 x, UInt16 y, UInt16 width, UInt16 height
|
||||
width = (UInt16)(fWidth - x);
|
||||
|
||||
// Gee, how hard can it REALLY be?
|
||||
UInt32 i, hex = color.ToARGB32();
|
||||
UInt32 i, hex = fPremultipliedAlpha ? color.ToARGB32Premultiplied() : color.ToARGB32();
|
||||
height += y;
|
||||
if( height > fHeight )
|
||||
height = (UInt16)fHeight;
|
||||
@ -689,7 +688,7 @@ void plDynamicTextMap::FrameRect( UInt16 x, UInt16 y, UInt16 width, UInt16 heigh
|
||||
height = (UInt16)(fHeight - y);
|
||||
|
||||
// Shouldn't be much harder
|
||||
UInt32 i, hex = color.ToARGB32();
|
||||
UInt32 i, hex = fPremultipliedAlpha ? color.ToARGB32Premultiplied() : color.ToARGB32();
|
||||
UInt32 *dest1, *dest2;
|
||||
|
||||
dest1 = GetAddr32( x, y );
|
||||
@ -724,6 +723,9 @@ void plDynamicTextMap::DrawImage( UInt16 x, UInt16 y, plMipmap *image, DrawMetho
|
||||
else if( method == kImgSprite )
|
||||
opts.fFlags = plMipmap::kCopySrcAlpha;
|
||||
|
||||
if( fPremultipliedAlpha )
|
||||
opts.fFlags |= plMipmap::kDestPremultiplied;
|
||||
|
||||
Composite( image, x, y, &opts );
|
||||
|
||||
/// HACK for now, since the alpha in the mipmap gets copied straight into the
|
||||
@ -762,6 +764,9 @@ void plDynamicTextMap::DrawClippedImage( UInt16 x, UInt16 y, plMipmap *image,
|
||||
else if( method == kImgSprite )
|
||||
opts.fFlags = plMipmap::kCopySrcAlpha;
|
||||
|
||||
if( fPremultipliedAlpha )
|
||||
opts.fFlags |= plMipmap::kDestPremultiplied;
|
||||
|
||||
opts.fSrcClipX = srcClipX;
|
||||
opts.fSrcClipY = srcClipY;
|
||||
opts.fSrcClipWidth = srcClipWidth;
|
||||
@ -908,6 +913,7 @@ void plDynamicTextMap::Swap( plDynamicTextMap *other )
|
||||
|
||||
// Swap DTMap info
|
||||
SWAP_ME( hsBool, fHasAlpha, other->fHasAlpha );
|
||||
SWAP_ME( hsBool, fPremultipliedAlpha, other->fPremultipliedAlpha );
|
||||
SWAP_ME( hsBool, fShadowed, other->fShadowed );
|
||||
|
||||
SWAP_ME( Justify, fJustify, other->fJustify );
|
||||
|
@ -113,14 +113,14 @@ class plDynamicTextMap : public plMipmap
|
||||
|
||||
|
||||
plDynamicTextMap();
|
||||
plDynamicTextMap( UInt32 width, UInt32 height, hsBool hasAlpha = false, UInt32 extraWidth = 0, UInt32 extraHeight = 0 );
|
||||
plDynamicTextMap( UInt32 width, UInt32 height, hsBool hasAlpha = false, UInt32 extraWidth = 0, UInt32 extraHeight = 0, hsBool premultipliedAlpha = false );
|
||||
virtual ~plDynamicTextMap();
|
||||
|
||||
CLASSNAME_REGISTER( plDynamicTextMap );
|
||||
GETINTERFACE_ANY( plDynamicTextMap, plMipmap );
|
||||
|
||||
|
||||
void Create( UInt32 width, UInt32 height, hsBool hasAlpha, UInt32 extraWidth = 0, UInt32 extraHeight = 0 );
|
||||
void Create( UInt32 width, UInt32 height, hsBool hasAlpha, UInt32 extraWidth = 0, UInt32 extraHeight = 0, hsBool premultipliedAlpha = false );
|
||||
void SetNoCreate( UInt32 width, UInt32 height, hsBool hasAlpha );
|
||||
|
||||
virtual void Reset( void );
|
||||
@ -222,7 +222,9 @@ class plDynamicTextMap : public plMipmap
|
||||
UInt32 *IAllocateOSSurface( UInt16 width, UInt16 height );
|
||||
void IDestroyOSSurface( void );
|
||||
|
||||
hsBool fHasAlpha, fShadowed;
|
||||
void IPropagateFlags();
|
||||
|
||||
hsBool fHasAlpha, fPremultipliedAlpha, fShadowed;
|
||||
|
||||
Justify fJustify;
|
||||
char *fFontFace;
|
||||
|
@ -345,7 +345,14 @@ void plFont::IRenderString( plMipmap *mip, UInt16 x, UInt16 y, const wchar_t *st
|
||||
{
|
||||
if( fRenderInfo.fFlags & kRenderIntoAlpha )
|
||||
{
|
||||
if( ( fRenderInfo.fColor & 0xff000000 ) != 0xff000000 )
|
||||
if( fRenderInfo.fFlags & kRenderAlphaPremultiplied )
|
||||
{
|
||||
if (fRenderInfo.fFlags & kRenderShadow)
|
||||
fRenderInfo.fRenderFunc = &plFont::IRenderChar8To32AlphaPremShadow;
|
||||
else
|
||||
fRenderInfo.fRenderFunc = &plFont::IRenderChar8To32AlphaPremultiplied;
|
||||
}
|
||||
else if( ( fRenderInfo.fColor & 0xff000000 ) != 0xff000000 )
|
||||
fRenderInfo.fRenderFunc = &plFont::IRenderChar8To32Alpha;
|
||||
else
|
||||
fRenderInfo.fRenderFunc = &plFont::IRenderChar8To32FullAlpha;
|
||||
@ -659,24 +666,27 @@ void plFont::IRenderString( plMipmap *mip, UInt16 x, UInt16 y, const wchar_t *st
|
||||
// Advance left past any clipping area
|
||||
CharRenderFunc oldFunc = fRenderInfo.fRenderFunc;
|
||||
fRenderInfo.fRenderFunc = &plFont::IRenderCharNull;
|
||||
while( fRenderInfo.fX < fRenderInfo.fClipRect.fX && *string != 0 )
|
||||
Int16 prevX;
|
||||
do
|
||||
{
|
||||
prevX = fRenderInfo.fX;
|
||||
IRenderLoop( string, 1 );
|
||||
string++;
|
||||
}
|
||||
while( fRenderInfo.fX <= fRenderInfo.fClipRect.fX && *++string != 0 );
|
||||
fRenderInfo.fMaxWidth += fRenderInfo.fX - prevX;
|
||||
fRenderInfo.fDestPtr -= (fRenderInfo.fX - prevX) * fRenderInfo.fDestBPP;
|
||||
fRenderInfo.fX = prevX;
|
||||
fRenderInfo.fRenderFunc = oldFunc;
|
||||
}
|
||||
|
||||
// Adjust for left kern
|
||||
if( ( fRenderInfo.fFlags & kRenderJustXMask ) == kRenderJustXForceLeft )
|
||||
{
|
||||
// See note at top of file
|
||||
plCharacter &ch = fCharacters[ (UInt16)string[ 0 ] - fFirstChar ];
|
||||
Int32 newX = x - (Int16)ch.fLeftKern;
|
||||
if( newX < 0 )
|
||||
newX = 0;
|
||||
fRenderInfo.fX = fRenderInfo.fFarthestX = (Int16)newX;
|
||||
}
|
||||
// There used to be an adjustment of the X coordinate by -ch.fLeftKern for the case
|
||||
// of kRenderJustXForceLeft here, but it was buggy in that it neglected to adjust
|
||||
// fRenderInfo.fDestPtr and therefore had no visible effect (or almost none - only
|
||||
// at the end of the line). Fixing the bug however (making kRenderJustXForceLeft
|
||||
// work as intended) causes the text shadow to be cut off in some places. To ensure
|
||||
// enough space for the shadow, and considering that all content was developed and
|
||||
// visually optimized with the bug in place, it seems better to preserve the buggy
|
||||
// behavior and make kRenderJustXForceLeft work exactly like kRenderJustXLeft.
|
||||
|
||||
fRenderInfo.fVolatileStringPtr = string; // Just so we can keep track of when we clip
|
||||
IRenderLoop( string, -1 );
|
||||
@ -715,9 +725,6 @@ void plFont::IRenderLoop( const wchar_t *string, Int32 maxCount )
|
||||
if( fRenderInfo.fFlags & kRenderScaleAA )
|
||||
thisWidth >>= 1;
|
||||
|
||||
if( thisWidth >= fRenderInfo.fMaxWidth )
|
||||
break;
|
||||
|
||||
(this->*(fRenderInfo.fRenderFunc))( fCharacters[ c ] );
|
||||
|
||||
fRenderInfo.fX += thisWidth;
|
||||
@ -848,8 +855,8 @@ void plFont::IRenderChar8To32( const plFont::plCharacter &c )
|
||||
{
|
||||
UInt8 *src = fBMapData + c.fBitmapOff;
|
||||
UInt32 *destPtr, *destBasePtr = (UInt32 *)( fRenderInfo.fDestPtr - c.fBaseline * fRenderInfo.fDestStride );
|
||||
UInt16 x, y;
|
||||
UInt32 srcAlpha, oneMinusAlpha, r, g, b, dR, dG, dB, destAlpha, thisWidth;
|
||||
Int16 x, y, thisHeight, xstart, thisWidth;
|
||||
UInt32 srcAlpha, oneMinusAlpha, r, g, b, dR, dG, dB, destAlpha;
|
||||
UInt8 srcR, srcG, srcB;
|
||||
|
||||
|
||||
@ -860,19 +867,35 @@ void plFont::IRenderChar8To32( const plFont::plCharacter &c )
|
||||
// difference, especially since the dest pixels that we end up overlapping
|
||||
// should already be in the cache. If it does, time to upgrade the font
|
||||
// format (again)
|
||||
thisWidth = fWidth;// + (Int32)c.fRightKern;
|
||||
thisWidth = (Int16)fWidth;// + (Int32)c.fRightKern;
|
||||
if( thisWidth >= fRenderInfo.fMaxWidth )
|
||||
thisWidth = fRenderInfo.fMaxWidth;
|
||||
|
||||
if( (Int32)c.fHeight - (Int32)c.fBaseline >= fRenderInfo.fMaxHeight || thisWidth >= fRenderInfo.fMaxWidth || c.fBaseline > fRenderInfo.fY )
|
||||
return;
|
||||
xstart = fRenderInfo.fClipRect.fX - fRenderInfo.fX;
|
||||
if( xstart < 0 )
|
||||
xstart = 0;
|
||||
|
||||
srcR = (UInt8)(( fRenderInfo.fColor >> 16 ) & 0x000000ff);
|
||||
srcG = (UInt8)(( fRenderInfo.fColor >> 8 ) & 0x000000ff);
|
||||
srcB = (UInt8)(( fRenderInfo.fColor ) & 0x000000ff);
|
||||
|
||||
for( y = 0; y < c.fHeight; y++ )
|
||||
y = fRenderInfo.fClipRect.fY - fRenderInfo.fY + (Int16)c.fBaseline;
|
||||
if( y < 0 )
|
||||
y = 0;
|
||||
else
|
||||
{
|
||||
destBasePtr = (UInt32 *)( (UInt8 *)destBasePtr + y*fRenderInfo.fDestStride );
|
||||
src += y*fRenderInfo.fNumCols;
|
||||
}
|
||||
|
||||
thisHeight = fRenderInfo.fMaxHeight + (Int16)c.fBaseline;
|
||||
if( thisHeight > (Int16)c.fHeight )
|
||||
thisHeight = (Int16)c.fHeight;
|
||||
|
||||
for( ; y < thisHeight; y++ )
|
||||
{
|
||||
destPtr = destBasePtr;
|
||||
for( x = 0; x < thisWidth; x++ )
|
||||
for( x = xstart; x < thisWidth; x++ )
|
||||
{
|
||||
if( src[ x ] == 255 )
|
||||
destPtr[ x ] = fRenderInfo.fColor;
|
||||
@ -907,8 +930,8 @@ void plFont::IRenderChar8To32FullAlpha( const plFont::plCharacter &c )
|
||||
{
|
||||
UInt8 *src = fBMapData + c.fBitmapOff;
|
||||
UInt32 *destPtr, *destBasePtr = (UInt32 *)( fRenderInfo.fDestPtr - c.fBaseline * fRenderInfo.fDestStride );
|
||||
UInt16 x, y;
|
||||
UInt32 destColorOnly, thisWidth;
|
||||
Int16 x, y, thisHeight, xstart, thisWidth;
|
||||
UInt32 destColorOnly;
|
||||
|
||||
|
||||
// Unfortunately for some fonts, their right kern value actually is
|
||||
@ -918,17 +941,33 @@ void plFont::IRenderChar8To32FullAlpha( const plFont::plCharacter &c )
|
||||
// difference, especially since the dest pixels that we end up overlapping
|
||||
// should already be in the cache. If it does, time to upgrade the font
|
||||
// format (again)
|
||||
thisWidth = fWidth;// + (Int32)c.fRightKern;
|
||||
thisWidth = (Int16)fWidth;// + (Int32)c.fRightKern;
|
||||
if( thisWidth >= fRenderInfo.fMaxWidth )
|
||||
thisWidth = fRenderInfo.fMaxWidth;
|
||||
|
||||
if( (Int32)c.fHeight - (Int32)c.fBaseline >= fRenderInfo.fMaxHeight || thisWidth >= fRenderInfo.fMaxWidth || c.fBaseline > fRenderInfo.fY )
|
||||
return;
|
||||
xstart = fRenderInfo.fClipRect.fX - fRenderInfo.fX;
|
||||
if( xstart < 0 )
|
||||
xstart = 0;
|
||||
|
||||
destColorOnly = fRenderInfo.fColor & 0x00ffffff;
|
||||
|
||||
for( y = 0; y < c.fHeight; y++ )
|
||||
y = fRenderInfo.fClipRect.fY - fRenderInfo.fY + (Int16)c.fBaseline;
|
||||
if( y < 0 )
|
||||
y = 0;
|
||||
else
|
||||
{
|
||||
destBasePtr = (UInt32 *)( (UInt8 *)destBasePtr + y*fRenderInfo.fDestStride );
|
||||
src += y*fRenderInfo.fNumCols;
|
||||
}
|
||||
|
||||
thisHeight = fRenderInfo.fMaxHeight + (Int16)c.fBaseline;
|
||||
if( thisHeight > (Int16)c.fHeight )
|
||||
thisHeight = (Int16)c.fHeight;
|
||||
|
||||
for( ; y < thisHeight; y++ )
|
||||
{
|
||||
destPtr = destBasePtr;
|
||||
for( x = 0; x < thisWidth; x++ )
|
||||
for( x = xstart; x < thisWidth; x++ )
|
||||
{
|
||||
if( src[ x ] != 0 )
|
||||
destPtr[ x ] = ( src[ x ] << 24 ) | destColorOnly;
|
||||
@ -942,8 +981,8 @@ void plFont::IRenderChar8To32Alpha( const plFont::plCharacter &c )
|
||||
{
|
||||
UInt8 val, *src = fBMapData + c.fBitmapOff;
|
||||
UInt32 *destPtr, *destBasePtr = (UInt32 *)( fRenderInfo.fDestPtr - c.fBaseline * fRenderInfo.fDestStride );
|
||||
UInt16 x, y;
|
||||
UInt32 destColorOnly, alphaMult, fullAlpha, thisWidth;
|
||||
Int16 x, y, thisHeight, xstart, thisWidth;
|
||||
UInt32 destColorOnly, alphaMult, fullAlpha;
|
||||
|
||||
|
||||
// Unfortunately for some fonts, their right kern value actually is
|
||||
@ -953,10 +992,13 @@ void plFont::IRenderChar8To32Alpha( const plFont::plCharacter &c )
|
||||
// difference, especially since the dest pixels that we end up overlapping
|
||||
// should already be in the cache. If it does, time to upgrade the font
|
||||
// format (again)
|
||||
thisWidth = fWidth;// + (Int32)c.fRightKern;
|
||||
thisWidth = (Int16)fWidth;// + (Int32)c.fRightKern;
|
||||
if( thisWidth >= fRenderInfo.fMaxWidth )
|
||||
thisWidth = fRenderInfo.fMaxWidth;
|
||||
|
||||
if( (Int32)c.fHeight - (Int32)c.fBaseline >= fRenderInfo.fMaxHeight || thisWidth >= fRenderInfo.fMaxWidth || c.fBaseline > fRenderInfo.fY )
|
||||
return;
|
||||
xstart = fRenderInfo.fClipRect.fX - fRenderInfo.fX;
|
||||
if( xstart < 0 )
|
||||
xstart = 0;
|
||||
|
||||
destColorOnly = fRenderInfo.fColor & 0x00ffffff;
|
||||
// alphaMult should come out to be a value to satisfy (fontAlpha * alphaMult >> 8) as the right alpha,
|
||||
@ -964,10 +1006,23 @@ void plFont::IRenderChar8To32Alpha( const plFont::plCharacter &c )
|
||||
fullAlpha = fRenderInfo.fColor & 0xff000000;
|
||||
alphaMult = fullAlpha / 255;
|
||||
|
||||
for( y = 0; y < c.fHeight; y++ )
|
||||
y = fRenderInfo.fClipRect.fY - fRenderInfo.fY + (Int16)c.fBaseline;
|
||||
if( y < 0 )
|
||||
y = 0;
|
||||
else
|
||||
{
|
||||
destBasePtr = (UInt32 *)( (UInt8 *)destBasePtr + y*fRenderInfo.fDestStride );
|
||||
src += y*fRenderInfo.fNumCols;
|
||||
}
|
||||
|
||||
thisHeight = fRenderInfo.fMaxHeight + (Int16)c.fBaseline;
|
||||
if( thisHeight > (Int16)c.fHeight )
|
||||
thisHeight = (Int16)c.fHeight;
|
||||
|
||||
for( ; y < thisHeight; y++ )
|
||||
{
|
||||
destPtr = destBasePtr;
|
||||
for( x = 0; x < thisWidth; x++ )
|
||||
for( x = xstart; x < thisWidth; x++ )
|
||||
{
|
||||
val = src[ x ];
|
||||
if( val == 0xff )
|
||||
@ -982,6 +1037,145 @@ void plFont::IRenderChar8To32Alpha( const plFont::plCharacter &c )
|
||||
}
|
||||
}
|
||||
|
||||
void plFont::IRenderChar8To32AlphaPremultiplied( const plFont::plCharacter &c )
|
||||
{
|
||||
UInt8 *src = fBMapData + c.fBitmapOff;
|
||||
UInt32 *destPtr, *destBasePtr = (UInt32 *)( fRenderInfo.fDestPtr - c.fBaseline * fRenderInfo.fDestStride );
|
||||
Int16 x, y, thisHeight, xstart, thisWidth;
|
||||
UInt8 srcA, srcR, srcG, srcB;
|
||||
|
||||
|
||||
// Unfortunately for some fonts, their right kern value actually is
|
||||
// farther left than the right edge of the bitmap (think of overlapping
|
||||
// script fonts). Ideally, we should store the actual width of each char's
|
||||
// bitmap and use that here. However, it really shouldn't make too big of a
|
||||
// difference, especially since the dest pixels that we end up overlapping
|
||||
// should already be in the cache. If it does, time to upgrade the font
|
||||
// format (again)
|
||||
thisWidth = (Int16)fWidth;// + (Int32)c.fRightKern;
|
||||
if( thisWidth >= fRenderInfo.fMaxWidth )
|
||||
thisWidth = fRenderInfo.fMaxWidth;
|
||||
|
||||
xstart = fRenderInfo.fClipRect.fX - fRenderInfo.fX;
|
||||
if( xstart < 0 )
|
||||
xstart = 0;
|
||||
|
||||
srcA = (UInt8)(( fRenderInfo.fColor >> 24 ) & 0x000000ff);
|
||||
srcR = (UInt8)(( fRenderInfo.fColor >> 16 ) & 0x000000ff);
|
||||
srcG = (UInt8)(( fRenderInfo.fColor >> 8 ) & 0x000000ff);
|
||||
srcB = (UInt8)(( fRenderInfo.fColor ) & 0x000000ff);
|
||||
|
||||
y = fRenderInfo.fClipRect.fY - fRenderInfo.fY + (Int16)c.fBaseline;
|
||||
if( y < 0 )
|
||||
y = 0;
|
||||
else
|
||||
{
|
||||
destBasePtr = (UInt32 *)( (UInt8 *)destBasePtr + y*fRenderInfo.fDestStride );
|
||||
src += y*fRenderInfo.fNumCols;
|
||||
}
|
||||
|
||||
thisHeight = fRenderInfo.fMaxHeight + (Int16)c.fBaseline;
|
||||
if( thisHeight > (Int16)c.fHeight )
|
||||
thisHeight = (Int16)c.fHeight;
|
||||
|
||||
for( ; y < thisHeight; y++ )
|
||||
{
|
||||
destPtr = destBasePtr;
|
||||
for( x = xstart; x < thisWidth; x++ )
|
||||
{
|
||||
UInt32 a = src[ x ];
|
||||
if (a != 0)
|
||||
{
|
||||
if (srcA != 0xff)
|
||||
a = (srcA*a + 127)/255;
|
||||
destPtr[ x ] = ( a << 24 ) | (((srcR*a + 127)/255) << 16) | (((srcG*a + 127)/255) << 8) | ((srcB*a + 127)/255);
|
||||
}
|
||||
}
|
||||
destBasePtr = (UInt32 *)( (UInt8 *)destBasePtr + fRenderInfo.fDestStride );
|
||||
src += fWidth;
|
||||
}
|
||||
}
|
||||
|
||||
void plFont::IRenderChar8To32AlphaPremShadow( const plFont::plCharacter &c )
|
||||
{
|
||||
UInt32 *destPtr, *destBasePtr = (UInt32 *)( fRenderInfo.fDestPtr - c.fBaseline * fRenderInfo.fDestStride );
|
||||
Int16 x, y, thisHeight, xstart, thisWidth;
|
||||
UInt8 srcA, srcR, srcG, srcB;
|
||||
|
||||
|
||||
// Unfortunately for some fonts, their right kern value actually is
|
||||
// farther left than the right edge of the bitmap (think of overlapping
|
||||
// script fonts). Ideally, we should store the actual width of each char's
|
||||
// bitmap and use that here. However, it really shouldn't make too big of a
|
||||
// difference, especially since the dest pixels that we end up overlapping
|
||||
// should already be in the cache. If it does, time to upgrade the font
|
||||
// format (again)
|
||||
thisWidth = (Int16)fWidth + 2;// + (Int32)c.fRightKern;
|
||||
if( thisWidth >= fRenderInfo.fMaxWidth )
|
||||
thisWidth = fRenderInfo.fMaxWidth;
|
||||
|
||||
xstart = fRenderInfo.fClipRect.fX - fRenderInfo.fX;
|
||||
if( xstart < -2 )
|
||||
xstart = -2;
|
||||
|
||||
srcA = (UInt8)(( fRenderInfo.fColor >> 24 ) & 0x000000ff);
|
||||
if (srcA == 0)
|
||||
return;
|
||||
srcR = (UInt8)(( fRenderInfo.fColor >> 16 ) & 0x000000ff);
|
||||
srcG = (UInt8)(( fRenderInfo.fColor >> 8 ) & 0x000000ff);
|
||||
srcB = (UInt8)(( fRenderInfo.fColor ) & 0x000000ff);
|
||||
|
||||
static const UInt32 kernel[5][5] = {
|
||||
{1, 2, 2, 2, 1},
|
||||
{1, 13, 13, 13, 1},
|
||||
{1, 10, 10, 10, 1},
|
||||
{1, 7, 7, 7, 1},
|
||||
{1, 1, 1, 1, 1}
|
||||
};
|
||||
|
||||
UInt32 clamp = 220 - ((2 * srcR + 4 * srcG + srcB) >> 4);
|
||||
|
||||
y = fRenderInfo.fClipRect.fY - fRenderInfo.fY + (Int16)c.fBaseline;
|
||||
if( y < -2 )
|
||||
y = -2;
|
||||
destBasePtr = (UInt32 *)( (UInt8 *)destBasePtr + y*fRenderInfo.fDestStride );
|
||||
|
||||
thisHeight = fRenderInfo.fMaxHeight + (Int16)c.fBaseline;
|
||||
if( thisHeight > (Int16)c.fHeight + 2 )
|
||||
thisHeight = (Int16)c.fHeight + 2;
|
||||
|
||||
for( ; y < thisHeight; y++ )
|
||||
{
|
||||
destPtr = destBasePtr;
|
||||
for( x = xstart; x < thisWidth; x++ )
|
||||
{
|
||||
UInt32 sa = 0;
|
||||
for (Int32 i = -2; i <= 2; i++) {
|
||||
for (Int32 j = -2; j <= 2; j++) {
|
||||
UInt32 m = kernel[j+2][i+2];
|
||||
if (m != 0)
|
||||
sa += m * IGetCharPixel(c, x+i, y+j);
|
||||
}
|
||||
}
|
||||
sa = (sa * clamp) >> 13;
|
||||
if (sa > clamp)
|
||||
sa = clamp;
|
||||
UInt32 a = IGetCharPixel(c, x, y);
|
||||
if (srcA != 0xff)
|
||||
{
|
||||
a = (srcA * a + 127) / 255;
|
||||
sa = (srcA * sa + 127) / 255;
|
||||
}
|
||||
UInt32 ta = a + sa - ((a*sa + 127) / 255);
|
||||
if (ta > (destPtr[ x ] >> 24))
|
||||
destPtr[ x ] = ( ta << 24 ) | (((srcR * a + 127) / 255) << 16) |
|
||||
(((srcG * a + 127) / 255) << 8) |
|
||||
(((srcB * a + 127) / 255) << 0);
|
||||
}
|
||||
destBasePtr = (UInt32 *)( (UInt8 *)destBasePtr + fRenderInfo.fDestStride );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void plFont::IRenderCharNull( const plCharacter &c )
|
||||
{
|
||||
|
@ -116,6 +116,8 @@ class plFont : public hsKeyedObject
|
||||
// value between the renderColor and the destColor and
|
||||
// leave the alpha as-is
|
||||
// This flag has no effect on monochrome fonts
|
||||
kRenderAlphaPremultiplied = 0x00001000, // Destination has color values premultiplied by alpha
|
||||
kRenderShadow = 0x00002000, // Render text shadows
|
||||
};
|
||||
|
||||
enum Flags
|
||||
@ -231,8 +233,16 @@ class plFont : public hsKeyedObject
|
||||
void IRenderChar8To32( const plCharacter &c );
|
||||
void IRenderChar8To32Alpha( const plCharacter &c );
|
||||
void IRenderChar8To32FullAlpha( const plCharacter &c );
|
||||
void IRenderChar8To32AlphaPremultiplied( const plCharacter &c );
|
||||
void IRenderChar8To32AlphaPremShadow( const plCharacter &c );
|
||||
void IRenderCharNull( const plCharacter &c );
|
||||
|
||||
UInt32 IGetCharPixel( const plCharacter &c, Int32 x, Int32 y )
|
||||
{
|
||||
// only for 8-bit characters
|
||||
return (x < 0 || y < 0 || (UInt32)x >= fWidth || (UInt32)y >= c.fHeight) ? 0 : *(fBMapData + c.fBitmapOff + y*fWidth + x);
|
||||
}
|
||||
|
||||
public:
|
||||
|
||||
plFont();
|
||||
|
@ -60,6 +60,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
#include "../plPipeline/hsGDeviceRef.h"
|
||||
#include "plProfile.h"
|
||||
#include "../plJPEG/plJPEG.h"
|
||||
#include "plPNG.h"
|
||||
|
||||
plProfile_CreateMemCounter("Mipmaps", "Memory", MemMipmaps);
|
||||
|
||||
@ -122,11 +123,8 @@ void plMipmap::Create( UInt32 width, UInt32 height, unsigned config, UInt8 numLe
|
||||
}
|
||||
|
||||
fCompressionType = compType;
|
||||
if( compType == kUncompressed )
|
||||
{
|
||||
fUncompressedInfo.fType = format;
|
||||
}
|
||||
else if( compType == kJPEGCompression )
|
||||
if( compType == kUncompressed || compType == kJPEGCompression ||
|
||||
compType == kPNGCompression )
|
||||
{
|
||||
fUncompressedInfo.fType = format;
|
||||
}
|
||||
@ -269,6 +267,10 @@ UInt32 plMipmap::Read( hsStream *s )
|
||||
case kJPEGCompression:
|
||||
IReadJPEGImage( s );
|
||||
break;
|
||||
|
||||
case kPNGCompression:
|
||||
IReadPNGImage( s );
|
||||
break;
|
||||
|
||||
default:
|
||||
hsAssert( false, "Unknown compression type in plMipmap::Read()" );
|
||||
@ -309,6 +311,10 @@ UInt32 plMipmap::Write( hsStream *s )
|
||||
IWriteJPEGImage( s );
|
||||
break;
|
||||
|
||||
case kPNGCompression:
|
||||
IWritePNGImage( s );
|
||||
break;
|
||||
|
||||
default:
|
||||
hsAssert( false, "Unknown compression type in plMipmap::Read()" );
|
||||
return totalWritten;
|
||||
@ -576,6 +582,23 @@ void plMipmap::IWriteJPEGImage( hsStream *stream )
|
||||
delete alpha;
|
||||
}
|
||||
|
||||
void plMipmap::IReadPNGImage(hsStream* stream)
|
||||
{
|
||||
plMipmap* temp = NULL;
|
||||
|
||||
temp = plPNG::Instance().ReadFromStream(stream);
|
||||
|
||||
if (temp) {
|
||||
CopyFrom(temp);
|
||||
delete temp;
|
||||
}
|
||||
}
|
||||
|
||||
void plMipmap::IWritePNGImage(hsStream* stream)
|
||||
{
|
||||
plPNG::Instance().WriteToStream(stream, this);
|
||||
}
|
||||
|
||||
//// GetLevelSize /////////////////////////////////////////////////////////////
|
||||
// Get the size of a single mipmap level (0 is the largest)
|
||||
|
||||
@ -613,6 +636,7 @@ void plMipmap::IBuildLevelSizes()
|
||||
|
||||
case kUncompressed:
|
||||
case kJPEGCompression:
|
||||
case kPNGCompression:
|
||||
fLevelSizes[ level ] = height * rowBytes;
|
||||
break;
|
||||
|
||||
@ -1586,6 +1610,7 @@ void plMipmap::CopyFrom( const plMipmap *source )
|
||||
break;
|
||||
case kUncompressed:
|
||||
case kJPEGCompression:
|
||||
case kPNGCompression:
|
||||
fUncompressedInfo.fType = source->fUncompressedInfo.fType;
|
||||
break;
|
||||
default:
|
||||
@ -1745,6 +1770,18 @@ void plMipmap::Composite( plMipmap *source, UInt16 x, UInt16 y, plMipmap::Compos
|
||||
for( pY = (UInt16)srcHeight; pY > 0; pY-- )
|
||||
{
|
||||
memcpy( dstPtr, srcPtr, srcRowBytesToCopy );
|
||||
if( options->fFlags & kDestPremultiplied )
|
||||
{
|
||||
// multiply color values by alpha
|
||||
for( pX = 0; pX < srcWidth; pX++ )
|
||||
{
|
||||
srcAlpha = ((dstPtr[ pX ] >> 24) & 0x000000ff);
|
||||
dstPtr[ pX ] = ( srcAlpha << 24 )
|
||||
| (((((dstPtr[ pX ] >> 16) & 0xff)*srcAlpha + 127)/255) << 16)
|
||||
| (((((dstPtr[ pX ] >> 8) & 0xff)*srcAlpha + 127)/255) << 8)
|
||||
| (((((dstPtr[ pX ] ) & 0xff)*srcAlpha + 127)/255) );
|
||||
}
|
||||
}
|
||||
dstPtr += dstRowBytes >> 2;
|
||||
srcPtr += srcRowBytes >> 2;
|
||||
}
|
||||
@ -1776,7 +1813,15 @@ void plMipmap::Composite( plMipmap *source, UInt16 x, UInt16 y, plMipmap::Compos
|
||||
{
|
||||
srcAlpha = options->fOpacity * ( ( srcPtr[ pX ] >> 16 ) & 0x0000ff00 ) / 255 / 256;
|
||||
if( srcAlpha != 0 )
|
||||
dstPtr[ pX ] = ( srcPtr[ pX ] & 0x00ffffff ) | ( srcAlpha << 24 );
|
||||
{
|
||||
if( options->fFlags & kDestPremultiplied )
|
||||
dstPtr[ pX ] = ( srcAlpha << 24 )
|
||||
| (((((srcPtr[ pX ] >> 16) & 0xff)*srcAlpha + 127)/255) << 16)
|
||||
| (((((srcPtr[ pX ] >> 8) & 0xff)*srcAlpha + 127)/255) << 8)
|
||||
| (((((srcPtr[ pX ] ) & 0xff)*srcAlpha + 127)/255) );
|
||||
else
|
||||
dstPtr[ pX ] = ( srcPtr[ pX ] & 0x00ffffff ) | ( srcAlpha << 24 );
|
||||
}
|
||||
}
|
||||
dstPtr += dstRowBytes >> 2;
|
||||
srcPtr += srcRowBytes >> 2;
|
||||
|
@ -233,11 +233,14 @@ class plMipmap : public plBitmap
|
||||
|
||||
enum CompositeFlags
|
||||
{
|
||||
kForceOpaque = 0x0001, // Copy src pixels raw, force dest alphas to opaque
|
||||
kCopySrcAlpha = 0x0002, // Copy the src pixels raw, including alphas, overwrite dest
|
||||
kBlendSrcAlpha = 0x0004, // Blend src pixels onto dest using src alpha, dest alpha = src alpha
|
||||
kMaskSrcAlpha = 0x0008, // Same as copySrcAlpha, but dest is untouched when src alpha = 0
|
||||
kBlendWriteAlpha= 0x0010 // Like default (0), but writes dest alpha values
|
||||
kForceOpaque = 0x0001, // Copy src pixels raw, force dest alphas to opaque
|
||||
kCopySrcAlpha = 0x0002, // Copy the src pixels raw, including alphas, overwrite dest
|
||||
kBlendSrcAlpha = 0x0004, // Blend src pixels onto dest using src alpha, dest alpha = src alpha
|
||||
kMaskSrcAlpha = 0x0008, // Same as copySrcAlpha, but dest is untouched when src alpha = 0
|
||||
kBlendWriteAlpha = 0x0010, // Like default (0), but writes dest alpha values
|
||||
|
||||
kDestPremultiplied = 0x0020, // Dest has color premultiplied by alpha
|
||||
// (src always assumed nonpremultiplied for now)
|
||||
};
|
||||
|
||||
class CompositeOptions
|
||||
@ -307,6 +310,8 @@ class plMipmap : public plBitmap
|
||||
void IWriteRLEImage( hsStream *stream, plMipmap *mipmap );
|
||||
void IReadJPEGImage( hsStream *stream );
|
||||
void IWriteJPEGImage( hsStream *stream );
|
||||
void IReadPNGImage( hsStream *stream );
|
||||
void IWritePNGImage( hsStream *stream );
|
||||
void IBuildLevelSizes();
|
||||
|
||||
void IColorLevel( UInt8 level, const UInt8 *colorMask );
|
||||
|
@ -262,7 +262,27 @@ plKeyDef plInputManager::UntranslateKey(plKeyDef key, hsBool extended)
|
||||
|
||||
return key;
|
||||
}
|
||||
|
||||
#if HS_BUILD_FOR_WIN32
|
||||
/** Determines if we need to hackily flush cursor updates
|
||||
* \remarks Normally, we would just call SetCursorPos directly. However, in Windows 10's
|
||||
* 2017 Fall Creator's Update, SetCursorPos, GetCursorPos, and WM_MOUSEMOVE are buggy.
|
||||
* Research done by Deledrius matches my independent observations and failed fixes:
|
||||
* https://discourse.libsdl.org/t/win10-fall-creators-update-breaks-mouse-warping/23526
|
||||
* Many thanks to these fine folks who work on libsdl!
|
||||
*/
|
||||
static bool INeedsWin10CursorHack()
|
||||
{
|
||||
// According to Chromium, Microsoft will be fixing the cursor bug in the next build
|
||||
// of Windows 10, so we only need to test for the dreaded 2017 FCU...
|
||||
// Reference: https://bugs.chromium.org/p/chromium/issues/detail?id=781182#c15
|
||||
// UPDATE: Bug is still present in the April 2018 Update (build 17134)...
|
||||
// so this bandage will now be applied to anything 2017 FCU and later :(
|
||||
const RTL_OSVERSIONINFOW& version = hsGetWindowsVersion();
|
||||
return version.dwMajorVersion == 10 && version.dwBuildNumber >= 16299;
|
||||
}
|
||||
|
||||
#endif // HS_BUILD_FOR_WIN32
|
||||
|
||||
void plInputManager::HandleWin32ControlEvent(UINT message, WPARAM Wparam, LPARAM Lparam, HWND hWnd)
|
||||
{
|
||||
if( !fhWnd )
|
||||
@ -378,6 +398,12 @@ void plInputManager::HandleWin32ControlEvent(UINT message, WPARAM Wparam, LPARAM
|
||||
{
|
||||
pt.x = (rect.right - rect.left) / 2;
|
||||
pt.y = HIWORD(Lparam);
|
||||
if (INeedsWin10CursorHack()) {
|
||||
pXMsg->fWx = pt.x;
|
||||
pXMsg->fX = pt.x / (float)rect.right;
|
||||
for (int i = 0; i < fInputDevices.Count(); i++)
|
||||
fInputDevices[i]->MsgReceive(pXMsg);
|
||||
}
|
||||
ClientToScreen(hWnd, &pt);
|
||||
SetCursorPos( pt.x, pt.y );
|
||||
}
|
||||
@ -386,6 +412,13 @@ void plInputManager::HandleWin32ControlEvent(UINT message, WPARAM Wparam, LPARAM
|
||||
{
|
||||
pt.y = (rect.bottom - rect.top) / 2;
|
||||
pt.x = LOWORD(Lparam);
|
||||
if (INeedsWin10CursorHack()) {
|
||||
pYMsg->fWy = pt.y;
|
||||
pYMsg->fY = pYMsg->fWy / (float)rect.bottom;
|
||||
for (int i = 0; i < fInputDevices.Count(); i++)
|
||||
fInputDevices[i]->MsgReceive(pYMsg);
|
||||
}
|
||||
|
||||
ClientToScreen(hWnd, &pt);
|
||||
SetCursorPos( pt.x, pt.y );
|
||||
}
|
||||
@ -393,6 +426,17 @@ void plInputManager::HandleWin32ControlEvent(UINT message, WPARAM Wparam, LPARAM
|
||||
{
|
||||
pt.y = (rect.bottom - rect.top) / 2;
|
||||
pt.x = (rect.right - rect.left) / 2;
|
||||
if (INeedsWin10CursorHack()) {
|
||||
pXMsg->fWx = pt.x;
|
||||
pXMsg->fX = pXMsg->fWx / (float)rect.right;
|
||||
pYMsg->fWy = pt.y;
|
||||
pYMsg->fY = pYMsg->fWy / (float)rect.bottom;
|
||||
|
||||
for (int i = 0; i < fInputDevices.Count(); i++) {
|
||||
fInputDevices[i]->MsgReceive(pXMsg);
|
||||
fInputDevices[i]->MsgReceive(pYMsg);
|
||||
}
|
||||
}
|
||||
ClientToScreen(hWnd, &pt);
|
||||
SetCursorPos( pt.x, pt.y );
|
||||
}
|
||||
|
@ -51,15 +51,26 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
|
||||
#include "../pnMessage/plMessage.h"
|
||||
|
||||
class plPipeline;
|
||||
|
||||
class plDeviceRecreateMsg : public plMessage
|
||||
{
|
||||
plPipeline* fPipe;
|
||||
|
||||
public:
|
||||
plDeviceRecreateMsg() : plMessage( nil, nil, nil ) { SetBCastFlag( kBCastByExactType ); }
|
||||
plDeviceRecreateMsg(plPipeline* pipe=nil)
|
||||
: plMessage(nil, nil, nil), fPipe(pipe)
|
||||
{
|
||||
SetBCastFlag(kBCastByExactType);
|
||||
}
|
||||
|
||||
~plDeviceRecreateMsg() {}
|
||||
|
||||
CLASSNAME_REGISTER( plDeviceRecreateMsg );
|
||||
GETINTERFACE_ANY( plDeviceRecreateMsg, plMessage );
|
||||
|
||||
plPipeline* Pipeline() const { return fPipe; }
|
||||
|
||||
// IO
|
||||
void Read(hsStream* stream, hsResMgr* mgr) { plMessage::IMsgRead( stream, mgr ); }
|
||||
void Write(hsStream* stream, hsResMgr* mgr) { plMessage::IMsgWrite( stream, mgr ); }
|
||||
|
@ -5215,6 +5215,15 @@ void NetCliAuthStartConnect (
|
||||
}
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
unsigned NetCliAuthGetCurrentConnPort() {
|
||||
unsigned port;
|
||||
s_critsect.Enter();
|
||||
port = NetAddressGetPort(s_active->addr);
|
||||
s_critsect.Leave();
|
||||
return port;
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
bool NetCliAuthQueryConnected () {
|
||||
|
||||
|
@ -66,6 +66,7 @@ void NetCliAuthStartConnect (
|
||||
);
|
||||
bool NetCliAuthQueryConnected ();
|
||||
void NetCliAuthAutoReconnectEnable (bool enable); // is enabled by default
|
||||
unsigned NetCliAuthGetCurrentConnPort(); // for Game Server socket port
|
||||
|
||||
// Called after the auth/client connection is encrypted
|
||||
typedef void (*FNetCliAuthConnectCallback)();
|
||||
|
@ -743,7 +743,7 @@ void NetCliGameStartConnect (
|
||||
const NetAddressNode & node
|
||||
) {
|
||||
NetAddress addr;
|
||||
NetAddressFromNode(node, kNetDefaultClientPort, &addr);
|
||||
NetAddressFromNode(node, NetCliAuthGetCurrentConnPort(), &addr);
|
||||
Connect(addr);
|
||||
}
|
||||
|
||||
|
@ -42,6 +42,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
#include "plPXPhysical.h"
|
||||
|
||||
#include "NxPhysics.h"
|
||||
#include "NxCooking.h"
|
||||
|
||||
#include "hsResMgr.h"
|
||||
#include "hsStream.h"
|
||||
@ -824,6 +825,7 @@ void plPXPhysical::ApplyHitForce()
|
||||
void plPXPhysical::ISetTransformGlobal(const hsMatrix44& l2w)
|
||||
{
|
||||
hsAssert(fActor->isDynamic(), "Shouldn't move a static actor");
|
||||
fActor->wakeUp();
|
||||
|
||||
NxMat34 mat;
|
||||
|
||||
@ -853,10 +855,12 @@ void plPXPhysical::ISetTransformGlobal(const hsMatrix44& l2w)
|
||||
}
|
||||
}
|
||||
|
||||
if (GetProperty(plSimulationInterface::kPhysAnim))
|
||||
{ hsAssert(fActor->readBodyFlag(NX_BF_KINEMATIC),"This Should be kinematic");
|
||||
// This used to check for the kPhysAnim flag, however animated detectors
|
||||
// are also kinematic but not kPhysAnim, therefore, this would break on PhysX
|
||||
// SDKs (yes, I'm looking at you, 2.6.4) that actually obey the ***GlobalPose
|
||||
// rules set forth in the SDK documentation.
|
||||
if (fActor->readBodyFlag(NX_BF_KINEMATIC))
|
||||
fActor->moveGlobalPose(mat);
|
||||
}
|
||||
else
|
||||
fActor->setGlobalPose(mat);
|
||||
}
|
||||
@ -995,15 +999,7 @@ plKey plPXPhysical::GetSceneNode() const
|
||||
|
||||
void plPXPhysical::SetSceneNode(plKey newNode)
|
||||
{
|
||||
#ifdef HS_DEBUGGING
|
||||
plKey oldNode = GetSceneNode();
|
||||
char msg[1024];
|
||||
if (newNode)
|
||||
sprintf(msg,"Physical object %s cannot change scenes. Already in %s, trying to switch to %s.",fObjectKey->GetName(),oldNode->GetName(),newNode->GetName());
|
||||
else
|
||||
sprintf(msg,"Physical object %s cannot change scenes. Already in %s, trying to switch to <nil key>.",fObjectKey->GetName(),oldNode->GetName());
|
||||
hsAssert(oldNode == newNode, msg);
|
||||
#endif // HS_DEBUGGING
|
||||
// Not Supported
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
@ -1060,12 +1056,10 @@ void plPXPhysical::Read(hsStream* stream, hsResMgr* mgr)
|
||||
}
|
||||
else
|
||||
{
|
||||
// Read in the cooked mesh
|
||||
plPXStream pxs(stream);
|
||||
if (recipe.bounds == plSimDefs::kHullBounds)
|
||||
recipe.convexMesh = plSimulationMgr::GetInstance()->GetSDK()->createConvexMesh(pxs);
|
||||
recipe.convexMesh = IReadHull(stream);
|
||||
else
|
||||
recipe.triMesh = plSimulationMgr::GetInstance()->GetSDK()->createTriangleMesh(pxs);
|
||||
recipe.triMesh = IReadTriMesh(stream);
|
||||
}
|
||||
|
||||
Init(recipe);
|
||||
@ -1123,11 +1117,107 @@ void plPXPhysical::Read(hsStream* stream, hsResMgr* mgr)
|
||||
fProxyGen->Init(this);
|
||||
}
|
||||
|
||||
static bool IIsNxStream(hsStream* s)
|
||||
{
|
||||
char tag[4];
|
||||
s->Read(sizeof(tag), tag);
|
||||
|
||||
// PhysX streams begin with the magic string "NXS\x01"
|
||||
// Our hacked streams begin with the magic string "HSP\x01"
|
||||
if (memcmp("HSP\x01", tag, sizeof(tag)) == 0)
|
||||
return false;
|
||||
|
||||
// We're not going to compare to see if it says NXS. We will let the PhysX SDK
|
||||
// worry about garbage data. Just rewind the stream back so PhysX can deal with it.
|
||||
s->SetPosition(s->GetPosition() - sizeof(tag));
|
||||
return true;
|
||||
}
|
||||
|
||||
NxConvexMesh* plPXPhysical::IReadHull(hsStream* s)
|
||||
{
|
||||
if (IIsNxStream(s))
|
||||
{
|
||||
plPXStream pxs(s);
|
||||
return plSimulationMgr::GetInstance()->GetSDK()->createConvexMesh(pxs);
|
||||
}
|
||||
else
|
||||
{
|
||||
std::vector<hsPoint3> verts;
|
||||
verts.resize(s->ReadSwap32());
|
||||
for (size_t i = 0; i < verts.size(); ++i)
|
||||
verts[i].Read(s);
|
||||
|
||||
// Unfortunately, the only way I know of to accomplish this is to cook to a RAM stream,
|
||||
// then have PhysX read the cooked data from the RAM stream. Yes, this is very sad.
|
||||
// I blame PhysX. It needs to die in a fiaaaaaaaaaaah
|
||||
hsRAMStream ram;
|
||||
plPXStream pxs(&ram);
|
||||
|
||||
NxConvexMeshDesc desc;
|
||||
desc.numVertices = verts.size();
|
||||
desc.pointStrideBytes = sizeof(hsPoint3);
|
||||
desc.points = &verts[0];
|
||||
desc.flags = NX_CF_COMPUTE_CONVEX | NX_CF_USE_UNCOMPRESSED_NORMALS;
|
||||
if (!NxCookConvexMesh(desc, pxs))
|
||||
{
|
||||
SimLog("Failed to cook hull for '%s'", GetKeyName());
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ram.Rewind();
|
||||
return plSimulationMgr::GetInstance()->GetSDK()->createConvexMesh(pxs);
|
||||
}
|
||||
}
|
||||
|
||||
NxTriangleMesh* plPXPhysical::IReadTriMesh(hsStream* s)
|
||||
{
|
||||
if (IIsNxStream(s))
|
||||
{
|
||||
plPXStream pxs(s);
|
||||
return plSimulationMgr::GetInstance()->GetSDK()->createTriangleMesh(pxs);
|
||||
}
|
||||
else
|
||||
{
|
||||
std::vector<hsPoint3> verts;
|
||||
verts.resize(s->ReadSwap32());
|
||||
for (size_t i = 0; i < verts.size(); ++i)
|
||||
verts[i].Read(s);
|
||||
std::vector<UInt32> indices;
|
||||
UInt32 numTriangles = s->ReadSwap32();
|
||||
indices.resize(numTriangles * 3);
|
||||
for (size_t i = 0; i < indices.size(); ++i)
|
||||
indices[i] = s->ReadSwap32();
|
||||
|
||||
// Unfortunately, the only way I know of to accomplish this is to cook to a RAM stream,
|
||||
// then have PhysX read the cooked data from the RAM stream. Yes, this is very sad.
|
||||
// I blame PhysX. It needs to die in a fiaaaaaaaaaaah
|
||||
hsRAMStream ram;
|
||||
plPXStream pxs(&ram);
|
||||
|
||||
NxTriangleMeshDesc desc;
|
||||
desc.numVertices = verts.size();
|
||||
desc.pointStrideBytes = sizeof(hsPoint3);
|
||||
desc.points = &verts[0];
|
||||
desc.numTriangles = numTriangles;
|
||||
desc.triangleStrideBytes = sizeof(UInt32) * 3;
|
||||
desc.triangles = &indices[0];
|
||||
desc.flags = 0;
|
||||
if (!NxCookTriangleMesh(desc, pxs))
|
||||
{
|
||||
SimLog("Failed to cook trimesh for '%s'", GetKeyName());
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ram.Rewind();
|
||||
return plSimulationMgr::GetInstance()->GetSDK()->createTriangleMesh(pxs);
|
||||
}
|
||||
}
|
||||
|
||||
void plPXPhysical::Write(hsStream* stream, hsResMgr* mgr)
|
||||
{
|
||||
plPhysical::Write(stream, mgr);
|
||||
|
||||
hsAssert(fActor, "nil actor");
|
||||
hsAssert(fActor, "nil actor");
|
||||
hsAssert(fActor->getNbShapes() == 1, "Can only write actors with one shape. Writing first only.");
|
||||
NxShape* shape = fActor->getShapes()[0];
|
||||
|
||||
|
@ -193,6 +193,9 @@ public:
|
||||
|
||||
virtual hsScalar GetMass() {return fMass;}
|
||||
protected:
|
||||
class NxConvexMesh* IReadHull(hsStream* s);
|
||||
class NxTriangleMesh* IReadTriMesh(hsStream* s);
|
||||
|
||||
void IGetPositionSim(hsPoint3& pos) const;
|
||||
void IGetRotationSim(hsQuat& rot) const;
|
||||
void ISetPositionSim(const hsPoint3& pos);
|
||||
|
@ -71,7 +71,7 @@ hsBool plPXPhysicalControllerCore::fDebugDisplay = false;
|
||||
int plPXPhysicalControllerCore::fPXControllersMax = 0;
|
||||
|
||||
#define kCCTSkinWidth 0.1f
|
||||
#define kCCTStepOffset 0.6f
|
||||
#define kCCTStepOffset 0.7f
|
||||
#define kCCTZOffset ((fRadius + (fHeight / 2)) + kCCTSkinWidth)
|
||||
#define kPhysHeightCorrection 0.8f
|
||||
#define kPhysZOffset ((kCCTZOffset + (kPhysHeightCorrection / 2)) - 0.05f)
|
||||
|
@ -42,6 +42,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
#include "plSimulationMgr.h"
|
||||
|
||||
#include "NxPhysics.h"
|
||||
#include "NxCooking.h"
|
||||
|
||||
#include "hsTimer.h"
|
||||
#include "plProfile.h"
|
||||
@ -316,10 +317,7 @@ void plSimulationMgr::Init()
|
||||
hsAssert(!gTheInstance, "Initializing the sim when it's already been done");
|
||||
gTheInstance = TRACKED_NEW plSimulationMgr();
|
||||
if (gTheInstance->InitSimulation())
|
||||
{
|
||||
gTheInstance->RegisterAs(kSimulationMgr_KEY);
|
||||
gTheInstance->GetKey()->RefObject();
|
||||
}
|
||||
else
|
||||
{
|
||||
// There was an error when creating the PhysX simulation
|
||||
@ -335,10 +333,7 @@ void plSimulationMgr::Shutdown()
|
||||
hsAssert(gTheInstance, "Simulation manager missing during shutdown.");
|
||||
if (gTheInstance)
|
||||
{
|
||||
// UnRef to match our Ref in Init(). Unless something strange is
|
||||
// going on, this should destroy the instance and set gTheInstance to nil.
|
||||
// gTheInstance->GetKey()->UnRefObject();
|
||||
gTheInstance->UnRegister(); // this will destroy the instance
|
||||
gTheInstance->UnRegisterAs(kSimulationMgr_KEY); // this will destroy the instance
|
||||
gTheInstance = nil;
|
||||
}
|
||||
}
|
||||
@ -367,10 +362,20 @@ bool plSimulationMgr::InitSimulation()
|
||||
{
|
||||
fSDK = NxCreatePhysicsSDK(NX_PHYSICS_SDK_VERSION, &gHeapAllocator, &gErrorStream);
|
||||
if (!fSDK)
|
||||
{
|
||||
return false; // client will handle this and ask user to install
|
||||
}
|
||||
|
||||
fLog = plStatusLogMgr::GetInstance().CreateStatusLog(40, "Simulation.log", plStatusLog::kFilledBackground | plStatusLog::kAlignToTop);
|
||||
fLog->AddLine("Initialized simulation mgr");
|
||||
fLog->AddLine("Initialized PhysX SDK");
|
||||
|
||||
if (!NxInitCooking(NULL, &gErrorStream))
|
||||
{
|
||||
fLog->AddLine("Phailed to init NxCooking");
|
||||
fSDK->release();
|
||||
fSDK = NULL;
|
||||
return false;
|
||||
}
|
||||
|
||||
#ifndef PLASMA_EXTERNAL_RELEASE
|
||||
// If this is an internal build, enable the PhysX debugger
|
||||
@ -399,7 +404,10 @@ plSimulationMgr::~plSimulationMgr()
|
||||
hsAssert(fScenes.empty(), "Unreleased scenes at shutdown");
|
||||
|
||||
if (fSDK)
|
||||
{
|
||||
NxCloseCooking();
|
||||
fSDK->release();
|
||||
}
|
||||
|
||||
delete fLog;
|
||||
fLog = nil;
|
||||
@ -759,11 +767,6 @@ void plSimulationMgr::ISendUpdates()
|
||||
}
|
||||
}
|
||||
|
||||
hsBool plSimulationMgr::MsgReceive(plMessage *msg)
|
||||
{
|
||||
return hsKeyedObject::MsgReceive(msg);
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// RESOLUTION & TIMEOUT PARAMETERS
|
||||
|
@ -75,8 +75,6 @@ public:
|
||||
// Advance the simulation by the given number of seconds
|
||||
void Advance(float delSecs);
|
||||
|
||||
hsBool MsgReceive(plMessage* msg);
|
||||
|
||||
// The simulation won't run at all if it is suspended
|
||||
void Suspend() { fSuspended = true; }
|
||||
void Resume() { fSuspended = false; }
|
||||
@ -211,4 +209,4 @@ inline void SimLog(const char *str, ...)
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
@ -676,9 +676,8 @@ void plSubworldRegionDetector::Write(hsStream* stream, hsResMgr* mgr)
|
||||
///////////////////////////////////
|
||||
hsBool plPanicLinkRegion::MsgReceive(plMessage* msg)
|
||||
{
|
||||
plCollideMsg* pCollMsg = plCollideMsg::ConvertNoRef(msg);
|
||||
|
||||
if (pCollMsg)
|
||||
if (plCollideMsg* pCollMsg = plCollideMsg::ConvertNoRef(msg))
|
||||
{
|
||||
if (plNetClientApp::GetInstance()->GetLocalPlayerKey() != pCollMsg->fOtherKey)
|
||||
return true;
|
||||
@ -688,13 +687,17 @@ hsBool plPanicLinkRegion::MsgReceive(plMessage* msg)
|
||||
plArmatureMod* avMod = IGetAvatarModifier(pCollMsg->fOtherKey);
|
||||
if (avMod)
|
||||
{
|
||||
hsPoint3 pos;
|
||||
if (avMod->GetController())
|
||||
{
|
||||
avMod->GetController()->GetPositionSim(pos);
|
||||
DetectorLogSpecial("Avatar is panic linking. Position %f,%f,%f and is %s", pos.fX, pos.fY, pos.fZ, avMod->GetController()->IsEnabled() ? "enabled" : "disabled");
|
||||
}
|
||||
avMod->PanicLink(fPlayLinkOutAnim);
|
||||
if (avMod->IsLinkedIn())
|
||||
{
|
||||
hsPoint3 kinPos;
|
||||
if (avMod->GetController())
|
||||
{
|
||||
avMod->GetController()->GetPositionSim(kinPos);
|
||||
DetectorLogSpecial("Avatar is panic linking. KinPos at %f,%f,%f and is %s", kinPos.fX, kinPos.fY, kinPos.fZ, avMod->GetController()->IsEnabled() ? "enabled" : "disabled");
|
||||
}
|
||||
avMod->PanicLink(fPlayLinkOutAnim);
|
||||
} else
|
||||
DetectorLogRed("PANIC LINK %s before we actually linked in!", GetKey()->GetName());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -232,8 +232,7 @@ class plPanicLinkRegion : public plCollisionDetector
|
||||
public:
|
||||
hsBool fPlayLinkOutAnim;
|
||||
|
||||
plPanicLinkRegion() : fPlayLinkOutAnim(true) {;}
|
||||
~plPanicLinkRegion(){;}
|
||||
plPanicLinkRegion() : fPlayLinkOutAnim(true) { }
|
||||
|
||||
|
||||
virtual hsBool MsgReceive(plMessage* msg);
|
||||
|
@ -0,0 +1,132 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
|
||||
#ifndef plBinkPlayer_inc
|
||||
#define plBinkPlayer_inc
|
||||
|
||||
#include "HeadSpin.h"
|
||||
#include "hsPoint2.h"
|
||||
#include "hsTemplates.h"
|
||||
|
||||
struct D3DVertex;
|
||||
class plDXPipeline;
|
||||
struct IDirect3DTexture9;
|
||||
class plMessage;
|
||||
struct IDirectSound8;
|
||||
|
||||
class plBinkPlayer
|
||||
{
|
||||
public:
|
||||
|
||||
plBinkPlayer() : fFileName(nil) { }
|
||||
~plBinkPlayer() { delete [] fFileName; }
|
||||
|
||||
static bool Init( hsWindowHndl hWnd) { return true; }
|
||||
static bool DeInit() { return true; }
|
||||
|
||||
static void SetForeGroundTrack(UInt32 t) { }
|
||||
static void SetBackGroundTrack(UInt32 t) { }
|
||||
static UInt32 GetForeGroundTrack() { }
|
||||
static UInt32 GetBackGroundTrack() { }
|
||||
|
||||
void SetDefaults() { }
|
||||
|
||||
bool Start(plPipeline* pipe, hsWindowHndl hWnd) { return false; }
|
||||
|
||||
bool NextFrame() {
|
||||
// we have reached the end
|
||||
return Stop();
|
||||
}
|
||||
|
||||
bool Pause(bool on) { return false; }
|
||||
|
||||
bool Stop() {
|
||||
for (int i = 0; i < fCallbacks.GetCount(); i++)
|
||||
fCallbacks[i]->Send();
|
||||
fCallbacks.Reset();
|
||||
delete [] fFileName;
|
||||
fFileName = nil;
|
||||
return false;
|
||||
}
|
||||
|
||||
void SetFileName(const char* filename) {
|
||||
delete [] fFileName;
|
||||
fFileName = hsStrcpy(filename);
|
||||
}
|
||||
void SetColor(const hsColorRGBA& c) { }
|
||||
void SetPosition(float x, float y) { }
|
||||
void SetScale(float x, float y) { }
|
||||
void SetVolume(float v) { }
|
||||
void SetForeVolume(float v) { }
|
||||
void SetBackVolume(float v) { }
|
||||
|
||||
void SetPosition(const hsPoint2& p) { }
|
||||
void SetScale(const hsPoint2& s) { }
|
||||
|
||||
const char* GetFileName() const { return fFileName; }
|
||||
const hsColorRGBA GetColor() const { return hsColorRGBA(); }
|
||||
const hsPoint2 GetPosition() const { return hsPoint2(); }
|
||||
const hsPoint2 GetScale() const { return hsPoint2(); }
|
||||
float GetBackVolume() const { return 0.0f; }
|
||||
float GetForeVolume() const { return 0.0f; }
|
||||
|
||||
void AddCallback(plMessage* msg) { hsRefCnt_SafeRef(msg); fCallbacks.Append(msg); }
|
||||
UInt32 GetNumCallbacks() const { return 0; }
|
||||
plMessage* GetCallback(int i) const { return nil; }
|
||||
|
||||
void SetFadeFromTime(float secs) { }
|
||||
void SetFadeFromColor(hsColorRGBA c) { }
|
||||
|
||||
void SetFadeToTime(float secs) { }
|
||||
void SetFadeToColor(hsColorRGBA c) { }
|
||||
|
||||
float GetFadeFromTime() const { return 0.0f; }
|
||||
hsColorRGBA GetFadeFromColor() const { return hsColorRGBA(); }
|
||||
float GetFadeToTime() const { return 0.0f; }
|
||||
hsColorRGBA GetFadeToColor() const { return hsColorRGBA(); }
|
||||
|
||||
private:
|
||||
char* fFileName;
|
||||
hsTArray<plMessage*> fCallbacks;
|
||||
};
|
||||
|
||||
#endif // plBinkPlayer_inc
|
@ -2278,7 +2278,7 @@ hsBool plDXPipeline::IResetDevice()
|
||||
|
||||
/// Broadcast a message letting everyone know that we were recreated and that
|
||||
/// all device-specific stuff needs to be recreated
|
||||
plDeviceRecreateMsg* clean = TRACKED_NEW plDeviceRecreateMsg();
|
||||
plDeviceRecreateMsg* clean = TRACKED_NEW plDeviceRecreateMsg(this);
|
||||
plgDispatch::MsgSend(clean);
|
||||
}
|
||||
fDevWasLost = true;
|
||||
@ -2552,7 +2552,7 @@ void plDXPipeline::Resize( UInt32 width, UInt32 height )
|
||||
|
||||
/// Broadcast a message letting everyone know that we were recreated and that
|
||||
/// all device-specific stuff needs to be recreated
|
||||
plDeviceRecreateMsg* clean = TRACKED_NEW plDeviceRecreateMsg();
|
||||
plDeviceRecreateMsg* clean = TRACKED_NEW plDeviceRecreateMsg(this);
|
||||
plgDispatch::MsgSend(clean);
|
||||
}
|
||||
|
||||
@ -3834,7 +3834,7 @@ hsBool plDXPipeline::BeginRender()
|
||||
{
|
||||
/// Broadcast a message letting everyone know that we were recreated and that
|
||||
/// all device-specific stuff needs to be recreated
|
||||
// plDeviceRecreateMsg* clean = TRACKED_NEW plDeviceRecreateMsg();
|
||||
// plDeviceRecreateMsg* clean = TRACKED_NEW plDeviceRecreateMsg(this);
|
||||
// plgDispatch::MsgSend(clean);
|
||||
|
||||
fDevWasLost = false;
|
||||
@ -7229,12 +7229,26 @@ void plDXPipeline::IHandleFirstStageBlend()
|
||||
fD3DDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE );
|
||||
if( fLayerState[0].fBlendFlags & hsGMatState::kBlendInvertFinalAlpha )
|
||||
{
|
||||
fD3DDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_INVSRCALPHA );
|
||||
if( fLayerState[0].fBlendFlags & hsGMatState::kBlendAlphaPremultiplied )
|
||||
{
|
||||
fD3DDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_ONE );
|
||||
}
|
||||
else
|
||||
{
|
||||
fD3DDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_INVSRCALPHA );
|
||||
}
|
||||
fD3DDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_SRCALPHA );
|
||||
}
|
||||
else
|
||||
{
|
||||
fD3DDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA );
|
||||
if( fLayerState[0].fBlendFlags & hsGMatState::kBlendAlphaPremultiplied )
|
||||
{
|
||||
fD3DDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_ONE );
|
||||
}
|
||||
else
|
||||
{
|
||||
fD3DDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA );
|
||||
}
|
||||
fD3DDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA );
|
||||
}
|
||||
break;
|
||||
|
@ -2476,21 +2476,7 @@ bool VaultAddOwnedAgeSpawnPoint (const Uuid & ageInstId, const plSpawnPointInfo
|
||||
bool VaultSetOwnedAgePublicAndWait (const plAgeInfoStruct * info, bool publicOrNot) {
|
||||
if (RelVaultNode * rvnLink = VaultGetOwnedAgeLinkIncRef(info)) {
|
||||
if (RelVaultNode * rvnInfo = rvnLink->GetChildNodeIncRef(plVault::kNodeType_AgeInfo, 1)) {
|
||||
NetCliAuthSetAgePublic(rvnInfo->nodeId, publicOrNot);
|
||||
|
||||
VaultAgeInfoNode access(rvnInfo);
|
||||
char ageName[MAX_PATH];
|
||||
StrToAnsi(ageName, access.ageFilename, arrsize(ageName));
|
||||
|
||||
plVaultNotifyMsg * msg = NEWZERO(plVaultNotifyMsg);
|
||||
if (publicOrNot)
|
||||
msg->SetType(plVaultNotifyMsg::kPublicAgeCreated);
|
||||
else
|
||||
msg->SetType(plVaultNotifyMsg::kPublicAgeRemoved);
|
||||
msg->SetResultCode(true);
|
||||
msg->GetArgs()->AddString(plNetCommon::VaultTaskArgs::kAgeFilename, ageName);
|
||||
msg->Send();
|
||||
|
||||
VaultSetAgePublicAndWait(rvnInfo, publicOrNot);
|
||||
rvnInfo->DecRef();
|
||||
}
|
||||
rvnLink->DecRef();
|
||||
@ -2498,6 +2484,25 @@ bool VaultSetOwnedAgePublicAndWait (const plAgeInfoStruct * info, bool publicOrN
|
||||
return true;
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
bool VaultSetAgePublicAndWait (NetVaultNode * ageInfoNode, bool publicOrNot) {
|
||||
NetCliAuthSetAgePublic(ageInfoNode->nodeId, publicOrNot);
|
||||
|
||||
VaultAgeInfoNode access(ageInfoNode);
|
||||
char ageName[MAX_PATH];
|
||||
StrToAnsi(ageName, access.ageFilename, arrsize(ageName));
|
||||
|
||||
plVaultNotifyMsg * msg = NEWZERO(plVaultNotifyMsg);
|
||||
if (publicOrNot)
|
||||
msg->SetType(plVaultNotifyMsg::kPublicAgeCreated);
|
||||
else
|
||||
msg->SetType(plVaultNotifyMsg::kPublicAgeRemoved);
|
||||
msg->SetResultCode(true);
|
||||
msg->GetArgs()->AddString(plNetCommon::VaultTaskArgs::kAgeFilename, ageName);
|
||||
msg->Send();
|
||||
return true;
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
RelVaultNode * VaultGetVisitAgeLinkIncRef (const plAgeInfoStruct * info) {
|
||||
RelVaultNode * rvnLink = nil;
|
||||
|
@ -345,6 +345,7 @@ RelVaultNode * VaultGetOwnedAgeInfoIncRef (const plAgeInfoStruct * info);
|
||||
bool VaultGetOwnedAgeLink (const plAgeInfoStruct * info, plAgeLinkStruct * link);
|
||||
bool VaultAddOwnedAgeSpawnPoint (const Uuid & ageInstId, const plSpawnPointInfo & spawnPt);
|
||||
bool VaultSetOwnedAgePublicAndWait (const plAgeInfoStruct * info, bool publicOrNot);
|
||||
bool VaultSetAgePublicAndWait (NetVaultNode * ageInfoNode, bool publicOrNot);
|
||||
RelVaultNode * VaultGetVisitAgeLinkIncRef (const plAgeInfoStruct * info);
|
||||
bool VaultGetVisitAgeLink (const plAgeInfoStruct * info, class plAgeLinkStruct * link);
|
||||
bool VaultRegisterOwnedAgeAndWait (const plAgeLinkStruct * link);
|
||||
|
Reference in New Issue
Block a user