diff --git a/trunk/3rd party/Xiph/libogg/win32/VS2010/libogg_static.vcxproj b/trunk/3rd party/Xiph/libogg/win32/VS2010/libogg_static.vcxproj index 6040b14d..c6b4b390 100644 --- a/trunk/3rd party/Xiph/libogg/win32/VS2010/libogg_static.vcxproj +++ b/trunk/3rd party/Xiph/libogg/win32/VS2010/libogg_static.vcxproj @@ -1,5 +1,5 @@  - + Debug @@ -28,19 +28,23 @@ StaticLibrary Unicode true + v140 StaticLibrary Unicode + v140 StaticLibrary Unicode true + v140 StaticLibrary Unicode + v140 diff --git a/trunk/3rd party/Xiph/libtheora/win32/VS2010/libtheora_static.vcxproj b/trunk/3rd party/Xiph/libtheora/win32/VS2010/libtheora_static.vcxproj index acb2df25..844afa42 100644 --- a/trunk/3rd party/Xiph/libtheora/win32/VS2010/libtheora_static.vcxproj +++ b/trunk/3rd party/Xiph/libtheora/win32/VS2010/libtheora_static.vcxproj @@ -1,5 +1,5 @@  - + Debug @@ -50,47 +50,57 @@ Application + v140 StaticLibrary Unicode true + v140 StaticLibrary Unicode true + v140 StaticLibrary Unicode true + v140 StaticLibrary Unicode + v140 Application + v140 StaticLibrary Unicode true + v140 StaticLibrary Unicode true + v140 StaticLibrary Unicode true + v140 StaticLibrary Unicode + v140 diff --git a/trunk/3rd party/Xiph/libvorbis/win32/VS2010/libvorbis/libvorbis_static.vcxproj b/trunk/3rd party/Xiph/libvorbis/win32/VS2010/libvorbis/libvorbis_static.vcxproj index 8387cadc..0ef1d439 100644 --- a/trunk/3rd party/Xiph/libvorbis/win32/VS2010/libvorbis/libvorbis_static.vcxproj +++ b/trunk/3rd party/Xiph/libvorbis/win32/VS2010/libvorbis/libvorbis_static.vcxproj @@ -1,5 +1,5 @@  - + Debug @@ -28,19 +28,23 @@ StaticLibrary Unicode true + v140 StaticLibrary Unicode + v140 StaticLibrary Unicode true + v140 StaticLibrary Unicode + v140 diff --git a/trunk/3rd party/Xiph/libvorbis/win32/VS2010/libvorbisfile/libvorbisfile_static.vcxproj b/trunk/3rd party/Xiph/libvorbis/win32/VS2010/libvorbisfile/libvorbisfile_static.vcxproj index b80f8ff7..447cdec2 100644 --- a/trunk/3rd party/Xiph/libvorbis/win32/VS2010/libvorbisfile/libvorbisfile_static.vcxproj +++ b/trunk/3rd party/Xiph/libvorbis/win32/VS2010/libvorbisfile/libvorbisfile_static.vcxproj @@ -1,5 +1,5 @@  - + Debug @@ -28,18 +28,22 @@ StaticLibrary Unicode + v140 StaticLibrary Unicode + v140 StaticLibrary Unicode + v140 StaticLibrary Unicode + v140 diff --git a/trunk/3rd party/nvtt/nvtt.vcxproj b/trunk/3rd party/nvtt/nvtt.vcxproj index 7359f4b1..29f092cd 100644 --- a/trunk/3rd party/nvtt/nvtt.vcxproj +++ b/trunk/3rd party/nvtt/nvtt.vcxproj @@ -1,5 +1,5 @@  - + Debug @@ -172,23 +172,27 @@ StaticLibrary true MultiByte + v140 StaticLibrary true MultiByte + v140 StaticLibrary false true MultiByte + v140 StaticLibrary false true MultiByte + v140 diff --git a/trunk/build_config_defines.h b/trunk/build_config_defines.h index 8ac51855..44894935 100644 --- a/trunk/build_config_defines.h +++ b/trunk/build_config_defines.h @@ -36,7 +36,6 @@ // ==================================== Ïðàâêè îò Kondr48 ====================================== #define CLEANING_CONFIGS // Kondr48: Íåáîëüøàÿ ÷èñòêà ïàïêè config -#define COP_WEATHER_MANAGER // Kondr48: Ïîãîäíûé ìåíåäæåð àäàïòèðîâàí ïîä êîíôèãè ÇÏ (×Í) #define FIRE_WOUND_HIT_FIXED // Kondr48: "Ôèêñ" ïóëåñòîéêîñòè äëÿ øëåìîâ è áðîíè. Ïî ôàêòó ïðîñòî âûêëþ÷åí ìåõàíèçì ðàñ÷åòà õèòà ïî êîñòÿì. Ñ÷èòàåòñÿ òàêæå, êàê îñòàëüíûå õèòû. // ==================================== Ïðàâêè îò Íàíîáîò ====================================== diff --git a/trunk/xray/LuaJIT/LuaJIT.vcxproj b/trunk/xray/LuaJIT/LuaJIT.vcxproj index 3ec3544a..23efe083 100644 --- a/trunk/xray/LuaJIT/LuaJIT.vcxproj +++ b/trunk/xray/LuaJIT/LuaJIT.vcxproj @@ -1,5 +1,5 @@  - + Debug @@ -19,12 +19,14 @@ DynamicLibrary true MultiByte + v140 DynamicLibrary false true MultiByte + v140 diff --git a/trunk/xray/Luabind/Luabind.vcxproj b/trunk/xray/Luabind/Luabind.vcxproj index 29b6fdbc..f83bd2e3 100644 --- a/trunk/xray/Luabind/Luabind.vcxproj +++ b/trunk/xray/Luabind/Luabind.vcxproj @@ -1,5 +1,5 @@  - + Debug @@ -19,12 +19,14 @@ DynamicLibrary true MultiByte + v140 DynamicLibrary false true MultiByte + v140 diff --git a/trunk/xray/xrCDB/xrCDB.vcxproj b/trunk/xray/xrCDB/xrCDB.vcxproj index 8e10df7f..cff1e681 100644 --- a/trunk/xray/xrCDB/xrCDB.vcxproj +++ b/trunk/xray/xrCDB/xrCDB.vcxproj @@ -1,5 +1,5 @@  - + Debug @@ -50,45 +50,59 @@ DynamicLibrary false MultiByte + v140 DynamicLibrary false MultiByte + v140 DynamicLibrary false MultiByte + v140 DynamicLibrary false MultiByte + v140 DynamicLibrary false MultiByte true + v140 DynamicLibrary false MultiByte true + v140 DynamicLibrary false MultiByte true + v140 DynamicLibrary false MultiByte true + v140 + + + v140 + + + v140 diff --git a/trunk/xray/xrCore/_quaternion.h b/trunk/xray/xrCore/_quaternion.h index 11d54e6e..112d27d5 100644 --- a/trunk/xray/xrCore/_quaternion.h +++ b/trunk/xray/xrCore/_quaternion.h @@ -140,7 +140,7 @@ #define QEPSILON 0.00001f template -struct XRCORE_API _quaternion { +struct _quaternion { public: typedef T TYPE; typedef _quaternion Self; diff --git a/trunk/xray/xrCore/dxerr.h b/trunk/xray/xrCore/dxerr.h new file mode 100644 index 00000000..2bd75911 --- /dev/null +++ b/trunk/xray/xrCore/dxerr.h @@ -0,0 +1,99 @@ +/*==========================================================================; + * + * + * File: dxerr.h + * Content: DirectX Error Library Include File + * + ****************************************************************************/ + +#ifndef _DXERR_H_ +#define _DXERR_H_ + +#ifdef __cplusplus +extern "C" { +#endif //__cplusplus + +// +// DXGetErrorString +// +// Desc: Converts a DirectX HRESULT to a string +// +// Args: HRESULT hr Can be any error code from +// XACT XAUDIO2 XAPO XINPUT DXGI D3D10 D3DX10 D3D9 D3DX9 DDRAW DSOUND DINPUT DSHOW +// +// Return: Converted string +// +const char* WINAPI DXGetErrorStringA(__in HRESULT hr); +const WCHAR* WINAPI DXGetErrorStringW(__in HRESULT hr); + +#ifdef UNICODE +#define DXGetErrorString DXGetErrorStringW +#else +#define DXGetErrorString DXGetErrorStringA +#endif + + +// +// DXGetErrorDescription +// +// Desc: Returns a string description of a DirectX HRESULT +// +// Args: HRESULT hr Can be any error code from +// XACT XAUDIO2 XAPO XINPUT DXGI D3D10 D3DX10 D3D9 D3DX9 DDRAW DSOUND DINPUT DSHOW +// +// Return: String description +// +const char* WINAPI DXGetErrorDescriptionA(__in HRESULT hr); +const WCHAR* WINAPI DXGetErrorDescriptionW(__in HRESULT hr); + +#ifdef UNICODE + #define DXGetErrorDescription DXGetErrorDescriptionW +#else + #define DXGetErrorDescription DXGetErrorDescriptionA +#endif + + +// +// DXTrace +// +// Desc: Outputs a formatted error message to the debug stream +// +// Args: CHAR* strFile The current file, typically passed in using the +// __FILE__ macro. +// DWORD dwLine The current line number, typically passed in using the +// __LINE__ macro. +// HRESULT hr An HRESULT that will be traced to the debug stream. +// CHAR* strMsg A string that will be traced to the debug stream (may be NULL) +// BOOL bPopMsgBox If TRUE, then a message box will popup also containing the passed info. +// +// Return: The hr that was passed in. +// +HRESULT WINAPI DXTraceA( __in_z const char* strFile, __in DWORD dwLine, __in HRESULT hr, __in_z_opt const char* strMsg, __in BOOL bPopMsgBox ); +HRESULT WINAPI DXTraceW( __in_z const char* strFile, __in DWORD dwLine, __in HRESULT hr, __in_z_opt const WCHAR* strMsg, __in BOOL bPopMsgBox ); + +#ifdef UNICODE +#define DXTrace DXTraceW +#else +#define DXTrace DXTraceA +#endif + + +// +// Helper macros +// +#if defined(DEBUG) | defined(_DEBUG) +#define DXTRACE_MSG(str) DXTrace( __FILE__, (DWORD)__LINE__, 0, str, FALSE ) +#define DXTRACE_ERR(str,hr) DXTrace( __FILE__, (DWORD)__LINE__, hr, str, FALSE ) +#define DXTRACE_ERR_MSGBOX(str,hr) DXTrace( __FILE__, (DWORD)__LINE__, hr, str, TRUE ) +#else +#define DXTRACE_MSG(str) (0L) +#define DXTRACE_ERR(str,hr) (hr) +#define DXTRACE_ERR_MSGBOX(str,hr) (hr) +#endif + + +#ifdef __cplusplus +} +#endif //__cplusplus + +#endif // _DXERR_H_ diff --git a/trunk/xray/xrCore/xrCore.vcxproj b/trunk/xray/xrCore/xrCore.vcxproj index 0aeee8f9..e90a31ff 100644 --- a/trunk/xray/xrCore/xrCore.vcxproj +++ b/trunk/xray/xrCore/xrCore.vcxproj @@ -1,5 +1,5 @@  - + Debug @@ -51,38 +51,52 @@ DynamicLibrary MultiByte + v140 DynamicLibrary MultiByte + v140 DynamicLibrary MultiByte true + v140 DynamicLibrary MultiByte true + v140 DynamicLibrary MultiByte true + v140 DynamicLibrary MultiByte true + v140 DynamicLibrary MultiByte + v140 DynamicLibrary MultiByte + v140 + + + v140 + + + v140 diff --git a/trunk/xray/xrCore/xrDebugNew.cpp b/trunk/xray/xrCore/xrDebugNew.cpp index 56d49c99..fcf87472 100644 --- a/trunk/xray/xrCore/xrDebugNew.cpp +++ b/trunk/xray/xrCore/xrDebugNew.cpp @@ -860,7 +860,7 @@ LONG WINAPI UnhandledFilter (_EXCEPTION_POINTERS *pExceptionInfo) #else typedef int (__cdecl * _PNH)( size_t ); _CRTIMP int __cdecl _set_new_mode( int ); - _CRTIMP _PNH __cdecl _set_new_handler( _PNH ); + // _CRTIMP _PNH __cdecl _set_new_handler( _PNH ); #ifndef USE_BUG_TRAP void _terminate () diff --git a/trunk/xray/xrNetServer/NET_Client.cpp b/trunk/xray/xrNetServer/NET_Client.cpp index b7265ad4..8d6a5bb7 100644 --- a/trunk/xray/xrNetServer/NET_Client.cpp +++ b/trunk/xray/xrNetServer/NET_Client.cpp @@ -12,6 +12,71 @@ #include "dxerr.h" //#pragma warning(pop) +const GUID CLSID_DirectPlay8Client = +{ 0x743f1dc6, 0x5aba, 0x429f,{ 0x8b, 0xdf, 0xc5, 0x4d, 0x03, 0x25, 0x3d, 0xc2 } }; + +// {DA825E1B-6830-43d7-835D-0B5AD82956A2} +const GUID CLSID_DirectPlay8Server = +{ 0xda825e1b, 0x6830, 0x43d7,{ 0x83, 0x5d, 0x0b, 0x5a, 0xd8, 0x29, 0x56, 0xa2 } }; + +// {5102DACD-241B-11d3-AEA7-006097B01411} +const GUID IID_IDirectPlay8Client = +{ 0x5102dacd, 0x241b, 0x11d3, { 0xae, 0xa7, 0x00, 0x60, 0x97, 0xb0, 0x14, 0x11 } }; + +// {5102DACE-241B-11d3-AEA7-006097B01411} +const GUID IID_IDirectPlay8Server = +{ 0x5102dace, 0x241b, 0x11d3, { 0xae, 0xa7, 0x00, 0x60, 0x97, 0xb0, 0x14, 0x11 } }; + +// {5102DACF-241B-11d3-AEA7-006097B01411} +const GUID IID_IDirectPlay8Peer = +{ 0x5102dacf, 0x241b, 0x11d3, { 0xae, 0xa7, 0x00, 0x60, 0x97, 0xb0, 0x14, 0x11 } }; + + +// IIDs added for DirectX 9 + +// {0D22EE73-4A46-4a0d-89B2-045B4D666425} +const GUID IID_IDirectPlay8ThreadPool = +{ 0xd22ee73, 0x4a46, 0x4a0d, { 0x89, 0xb2, 0x04, 0x5b, 0x4d, 0x66, 0x64, 0x25 } }; + +// {A9E213F2-9A60-486f-BF3B-53408B6D1CBB} +const GUID IID_IDirectPlay8NATResolver = +{ 0xa9e213f2, 0x9a60, 0x486f, { 0xbf, 0x3b, 0x53, 0x40, 0x8b, 0x6d, 0x1c, 0xbb } }; + +// {53934290-628D-11D2-AE0F-006097B01411} +const GUID CLSID_DP8SP_IPX = +{ 0x53934290, 0x628d, 0x11d2, { 0xae, 0x0f, 0x00, 0x60, 0x97, 0xb0, 0x14, 0x11 } }; + + +// {6D4A3650-628D-11D2-AE0F-006097B01411} +const GUID CLSID_DP8SP_MODEM = +{ 0x6d4a3650, 0x628d, 0x11d2, { 0xae, 0x0f, 0x00, 0x60, 0x97, 0xb0, 0x14, 0x11 } }; + + +// {743B5D60-628D-11D2-AE0F-006097B01411} +const GUID CLSID_DP8SP_SERIAL = +{ 0x743b5d60, 0x628d, 0x11d2, { 0xae, 0x0f, 0x00, 0x60, 0x97, 0xb0, 0x14, 0x11 } }; + + +// {EBFE7BA0-628D-11D2-AE0F-006097B01411} +const GUID CLSID_DP8SP_TCPIP = +{ 0xebfe7ba0, 0x628d, 0x11d2, { 0xae, 0x0f, 0x00, 0x60, 0x97, 0xb0, 0x14, 0x11 } }; + + +// Service providers added for DirectX 9 + + +// {995513AF-3027-4b9a-956E-C772B3F78006} +const GUID CLSID_DP8SP_BLUETOOTH = +{ 0x995513af, 0x3027, 0x4b9a, { 0x95, 0x6e, 0xc7, 0x72, 0xb3, 0xf7, 0x80, 0x06 } }; + +const GUID CLSID_DirectPlay8Address = +{ 0x934a9523, 0xa3ca, 0x4bc5, { 0xad, 0xa0, 0xd6, 0xd9, 0x5d, 0x97, 0x94, 0x21 } }; + +const GUID IID_IDirectPlay8Address = +{ 0x83783300, 0x4063, 0x4c8a, { 0x9d, 0xb3, 0x82, 0x83, 0x0a, 0x7f, 0xeb, 0x31 } }; + + + static INetLog* pClNetLog = NULL; #define BASE_PORT_LAN_SV 5445 diff --git a/trunk/xray/xrNetServer/dpaddr.h b/trunk/xray/xrNetServer/dpaddr.h new file mode 100644 index 00000000..6e3fccf6 --- /dev/null +++ b/trunk/xray/xrNetServer/dpaddr.h @@ -0,0 +1,392 @@ +/*==========================================================================; + * + * Copyright (C) 2000-2002 Microsoft Corporation. All Rights Reserved. + * + * File: dpaddr.h + * Content: DirectPlayAddress include file + ***************************************************************************/ + +#ifndef __DIRECTPLAYADDRESS__ +#define __DIRECTPLAYADDRESS__ + +#include // for DECLARE_INTERFACE_ and HRESULT + +#ifdef __cplusplus +extern "C" { +#endif + +#include "dplay8.h" + + + +/**************************************************************************** + * + * DirectPlay8Address CLSIDs + * + ****************************************************************************/ + +// {934A9523-A3CA-4bc5-ADA0-D6D95D979421} +DEFINE_GUID(CLSID_DirectPlay8Address, +0x934a9523, 0xa3ca, 0x4bc5, 0xad, 0xa0, 0xd6, 0xd9, 0x5d, 0x97, 0x94, 0x21); + + +/**************************************************************************** + * + * DirectPlay8Address Interface IIDs + * + ****************************************************************************/ + + +typedef REFIID DPNAREFIID; + +// {83783300-4063-4c8a-9DB3-82830A7FEB31} +DEFINE_GUID(IID_IDirectPlay8Address, +0x83783300, 0x4063, 0x4c8a, 0x9d, 0xb3, 0x82, 0x83, 0xa, 0x7f, 0xeb, 0x31); + +// {E5A0E990-2BAD-430b-87DA-A142CF75DE58} +DEFINE_GUID(IID_IDirectPlay8AddressIP, +0xe5a0e990, 0x2bad, 0x430b, 0x87, 0xda, 0xa1, 0x42, 0xcf, 0x75, 0xde, 0x58); + + + +/**************************************************************************** + * + * DirectPlay8Address Interface Pointer definitions + * + ****************************************************************************/ + +typedef struct IDirectPlay8Address *PDIRECTPLAY8ADDRESS, *LPDIRECTPLAY8ADDRESS; +typedef struct IDirectPlay8AddressIP *PDIRECTPLAY8ADDRESSIP, *LPDIRECTPLAY8ADDRESSIP; + + +/**************************************************************************** + * + * DirectPlay8Address Forward Declarations For External Types + * + ****************************************************************************/ + +typedef struct sockaddr SOCKADDR; + +/**************************************************************************** + * + * DirectPlay8Address Constants + * + ****************************************************************************/ +// +// Asynchronous operation flags +// +#define DPNA_DATATYPE_STRING 0x00000001 +#define DPNA_DATATYPE_DWORD 0x00000002 +#define DPNA_DATATYPE_GUID 0x00000003 +#define DPNA_DATATYPE_BINARY 0x00000004 +#define DPNA_DATATYPE_STRING_ANSI 0x00000005 + +#define DPNA_DPNSVR_PORT 6073 + +#define DPNA_INDEX_INVALID 0xFFFFFFFF + +/**************************************************************************** + * + * DirectPlay8Address Address Elements + * + ****************************************************************************/ + +#define DPNA_SEPARATOR_KEYVALUE L'=' +#define DPNA_SEPARATOR_USERDATA L'#' +#define DPNA_SEPARATOR_COMPONENT L';' +#define DPNA_ESCAPECHAR L'%' + +// Header +#define DPNA_HEADER L"x-directplay:/" + +// key names for address components +#define DPNA_KEY_NAT_RESOLVER L"natresolver" +#define DPNA_KEY_NAT_RESOLVER_USER_STRING L"natresolveruserstring" +#define DPNA_KEY_APPLICATION_INSTANCE L"applicationinstance" +#define DPNA_KEY_DEVICE L"device" +#define DPNA_KEY_HOSTNAME L"hostname" +#define DPNA_KEY_PORT L"port" +#define DPNA_KEY_NAMEINFO L"nameinfo" +#define DPNA_KEY_PROCESSOR L"processor" +#define DPNA_KEY_PROGRAM L"program" +#define DPNA_KEY_PROVIDER L"provider" +#define DPNA_KEY_SCOPE L"scope" +#define DPNA_KEY_TRAVERSALMODE L"traversalmode" +#define DPNA_KEY_BAUD L"baud" +#define DPNA_KEY_FLOWCONTROL L"flowcontrol" +#define DPNA_KEY_PARITY L"parity" +#define DPNA_KEY_PHONENUMBER L"phonenumber" +#define DPNA_KEY_STOPBITS L"stopbits" + +// values for baud rate +#define DPNA_BAUD_RATE_9600 9600 +#define DPNA_BAUD_RATE_14400 14400 +#define DPNA_BAUD_RATE_19200 19200 +#define DPNA_BAUD_RATE_38400 38400 +#define DPNA_BAUD_RATE_56000 56000 +#define DPNA_BAUD_RATE_57600 57600 +#define DPNA_BAUD_RATE_115200 115200 + +// values for stop bits +#define DPNA_STOP_BITS_ONE L"1" +#define DPNA_STOP_BITS_ONE_FIVE L"1.5" +#define DPNA_STOP_BITS_TWO L"2" + +// values for parity +#define DPNA_PARITY_NONE L"NONE" +#define DPNA_PARITY_EVEN L"EVEN" +#define DPNA_PARITY_ODD L"ODD" +#define DPNA_PARITY_MARK L"MARK" +#define DPNA_PARITY_SPACE L"SPACE" + +// values for flow control +#define DPNA_FLOW_CONTROL_NONE L"NONE" +#define DPNA_FLOW_CONTROL_XONXOFF L"XONXOFF" +#define DPNA_FLOW_CONTROL_RTS L"RTS" +#define DPNA_FLOW_CONTROL_DTR L"DTR" +#define DPNA_FLOW_CONTROL_RTSDTR L"RTSDTR" +// values for traversal mode +#define DPNA_TRAVERSALMODE_NONE 0 +#define DPNA_TRAVERSALMODE_PORTREQUIRED 1 +#define DPNA_TRAVERSALMODE_PORTRECOMMENDED 2 +// Shortcut values +// +// These can be used instead of the corresponding CLSID_DP8SP_XXXX guids +// +#define DPNA_VALUE_TCPIPPROVIDER L"IP" +#define DPNA_VALUE_IPXPROVIDER L"IPX" +#define DPNA_VALUE_MODEMPROVIDER L"MODEM" +#define DPNA_VALUE_SERIALPROVIDER L"SERIAL" + +//// ANSI DEFINITIONS + +// Header +#define DPNA_HEADER_A "x-directplay:/" +#define DPNA_SEPARATOR_KEYVALUE_A '=' +#define DPNA_SEPARATOR_USERDATA_A '#' +#define DPNA_SEPARATOR_COMPONENT_A ';' +#define DPNA_ESCAPECHAR_A '%' + +// key names for address components +#define DPNA_KEY_NAT_RESOLVER_A "natresolver" +#define DPNA_KEY_NAT_RESOLVER_USER_STRING_A "natresolveruserstring" +#define DPNA_KEY_APPLICATION_INSTANCE_A "applicationinstance" +#define DPNA_KEY_DEVICE_A "device" +#define DPNA_KEY_HOSTNAME_A "hostname" +#define DPNA_KEY_PORT_A "port" +#define DPNA_KEY_NAMEINFO_A "nameinfo" +#define DPNA_KEY_PROCESSOR_A "processor" +#define DPNA_KEY_PROGRAM_A "program" +#define DPNA_KEY_PROVIDER_A "provider" +#define DPNA_KEY_SCOPE_A "scope" +#define DPNA_KEY_TRAVERSALMODE_A "traversalmode" +#define DPNA_KEY_BAUD_A "baud" +#define DPNA_KEY_FLOWCONTROL_A "flowcontrol" +#define DPNA_KEY_PARITY_A "parity" +#define DPNA_KEY_PHONENUMBER_A "phonenumber" +#define DPNA_KEY_STOPBITS_A "stopbits" + +// values for stop bits +#define DPNA_STOP_BITS_ONE_A "1" +#define DPNA_STOP_BITS_ONE_FIVE_A "1.5" +#define DPNA_STOP_BITS_TWO_A "2" + +// values for parity +#define DPNA_PARITY_NONE_A "NONE" +#define DPNA_PARITY_EVEN_A "EVEN" +#define DPNA_PARITY_ODD_A "ODD" +#define DPNA_PARITY_MARK_A "MARK" +#define DPNA_PARITY_SPACE_A "SPACE" + +// values for flow control +#define DPNA_FLOW_CONTROL_NONE_A "NONE" +#define DPNA_FLOW_CONTROL_XONXOFF_A "XONXOFF" +#define DPNA_FLOW_CONTROL_RTS_A "RTS" +#define DPNA_FLOW_CONTROL_DTR_A "DTR" +#define DPNA_FLOW_CONTROL_RTSDTR_A "RTSDTR" +// Shortcut values +// +// These can be used instead of the corresponding CLSID_DP8SP_XXXX guids +// +#define DPNA_VALUE_TCPIPPROVIDER_A "IP" +#define DPNA_VALUE_IPXPROVIDER_A "IPX" +#define DPNA_VALUE_MODEMPROVIDER_A "MODEM" +#define DPNA_VALUE_SERIALPROVIDER_A "SERIAL" + +/**************************************************************************** + * + * DirectPlay8Address Functions + * + ****************************************************************************/ + + +/* + * + * This function is no longer supported. It is recommended that CoCreateInstance be used to create + * DirectPlay8 address objects. + * + * HRESULT WINAPI DirectPlay8AddressCreate( const GUID * pcIID, void **ppvInterface, IUnknown *pUnknown); + * + */ + + +/**************************************************************************** + * + * DirectPlay8Address Application Interfaces + * + ****************************************************************************/ + +// +// COM definition for IDirectPlay8Address Generic Interface +// +#undef INTERFACE // External COM Implementation +#define INTERFACE IDirectPlay8Address +DECLARE_INTERFACE_(IDirectPlay8Address,IUnknown) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface) (THIS_ DPNAREFIID, LPVOID *) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + /*** IDirectPlay8Address methods ***/ + STDMETHOD(BuildFromURLW)(THIS_ WCHAR *pwszSourceURL ) PURE; + STDMETHOD(BuildFromURLA)(THIS_ CHAR *pszSourceURL ) PURE; + STDMETHOD(Duplicate)(THIS_ PDIRECTPLAY8ADDRESS *ppdpaNewAddress ) PURE; + STDMETHOD(SetEqual)(THIS_ PDIRECTPLAY8ADDRESS pdpaAddress ) PURE; + STDMETHOD(IsEqual)(THIS_ PDIRECTPLAY8ADDRESS pdpaAddress ) PURE; + STDMETHOD(Clear)(THIS ) PURE; + STDMETHOD(GetURLW)(THIS_ WCHAR *pwszURL, PDWORD pdwNumChars ) PURE; + STDMETHOD(GetURLA)(THIS_ CHAR *pszURL, PDWORD pdwNumChars) PURE; + STDMETHOD(GetSP)(THIS_ GUID *pguidSP ) PURE; + STDMETHOD(GetUserData)(THIS_ void *pvUserData, PDWORD pdwBufferSize) PURE; + STDMETHOD(SetSP)(THIS_ const GUID * const pguidSP ) PURE; + STDMETHOD(SetUserData)(THIS_ const void * const pvUserData, const DWORD dwDataSize) PURE; + STDMETHOD(GetNumComponents)(THIS_ PDWORD pdwNumComponents ) PURE; + STDMETHOD(GetComponentByName)(THIS_ const WCHAR * const pwszName, void *pvBuffer, PDWORD pdwBufferSize, PDWORD pdwDataType ) PURE; + STDMETHOD(GetComponentByIndex)(THIS_ const DWORD dwComponentID, WCHAR * pwszName, PDWORD pdwNameLen, void *pvBuffer, PDWORD pdwBufferSize, PDWORD pdwDataType ) PURE; + STDMETHOD(AddComponent)(THIS_ const WCHAR * const pwszName, const void * const lpvData, const DWORD dwDataSize, const DWORD dwDataType ) PURE; + STDMETHOD(GetDevice)(THIS_ GUID * ) PURE; + STDMETHOD(SetDevice)(THIS_ const GUID * const) PURE; + STDMETHOD(BuildFromDPADDRESS)( THIS_ LPVOID pvAddress, DWORD dwDataSize ) PURE; +}; + +// +// COM definition for IDirectPlay8AddressIP Generic Interface +// +#undef INTERFACE // External COM Implementation +#define INTERFACE IDirectPlay8AddressIP +DECLARE_INTERFACE_(IDirectPlay8AddressIP,IUnknown) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface) (THIS_ DPNAREFIID, PVOID *) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + /*** IDirectPlay8AddressIP methods ***/ + + // Constructs a IDirectPlay8 TCP Address from a SOCKADDR structure + STDMETHOD(BuildFromSockAddr)(THIS_ const SOCKADDR * const ) PURE; + + // Constructs a TCP Address from a string (hostname) and port + STDMETHOD(BuildAddress)(THIS_ const WCHAR * const wszAddress, const USHORT usPort ) PURE; + + // Builds a local TCP Address + STDMETHOD(BuildLocalAddress)(THIS_ const GUID * const pguidAdapter, const USHORT usPort ) PURE; + + // Gets the address from the structure in SOCKADR format + STDMETHOD(GetSockAddress)(THIS_ SOCKADDR *, PDWORD ) PURE; + + // Gets the local afddress + STDMETHOD(GetLocalAddress)(THIS_ GUID *pguidAdapter, USHORT *pusPort ) PURE; + + // Gets the remote address + STDMETHOD(GetAddress)(THIS_ WCHAR *wszAddress, PDWORD pdwAddressLength, USHORT *psPort ) PURE; +}; + + +/**************************************************************************** + * + * IDirectPlay8 application interface macros + * + ****************************************************************************/ + +#if !defined(__cplusplus) || defined(CINTERFACE) + +#define IDirectPlay8Address_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirectPlay8Address_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectPlay8Address_Release(p) (p)->lpVtbl->Release(p) +#define IDirectPlay8Address_BuildFromURLW(p,a) (p)->lpVtbl->BuildFromURLW(p,a) +#define IDirectPlay8Address_BuildFromURLA(p,a) (p)->lpVtbl->BuildFromURLA(p,a) +#define IDirectPlay8Address_Duplicate(p,a) (p)->lpVtbl->Duplicate(p,a) +#define IDirectPlay8Address_SetEqual(p,a) (p)->lpVtbl->SetEqual(p,a) +#define IDirectPlay8Address_IsEqual(p,a) (p)->lpVtbl->IsEqual(p,a) +#define IDirectPlay8Address_Clear(p) (p)->lpVtbl->Clear(p) +#define IDirectPlay8Address_GetURLW(p,a,b) (p)->lpVtbl->GetURLW(p,a,b) +#define IDirectPlay8Address_GetURLA(p,a,b) (p)->lpVtbl->GetURLA(p,a,b) +#define IDirectPlay8Address_GetSP(p,a) (p)->lpVtbl->GetSP(p,a) +#define IDirectPlay8Address_GetUserData(p,a,b) (p)->lpVtbl->GetUserData(p,a,b) +#define IDirectPlay8Address_SetSP(p,a) (p)->lpVtbl->SetSP(p,a) +#define IDirectPlay8Address_SetUserData(p,a,b) (p)->lpVtbl->SetUserData(p,a,b) +#define IDirectPlay8Address_GetNumComponents(p,a) (p)->lpVtbl->GetNumComponents(p,a) +#define IDirectPlay8Address_GetComponentByName(p,a,b,c,d) (p)->lpVtbl->GetComponentByName(p,a,b,c,d) +#define IDirectPlay8Address_GetComponentByIndex(p,a,b,c,d,e,f) (p)->lpVtbl->GetComponentByIndex(p,a,b,c,d,e,f) +#define IDirectPlay8Address_AddComponent(p,a,b,c,d) (p)->lpVtbl->AddComponent(p,a,b,c,d) +#define IDirectPlay8Address_SetDevice(p,a) (p)->lpVtbl->SetDevice(p,a) +#define IDirectPlay8Address_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) +#define IDirectPlay8Address_BuildFromDirectPlay4Address(p,a,b) (p)->lpVtbl->BuildFromDirectPlay4Address(p,a,b) + +#define IDirectPlay8AddressIP_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirectPlay8AddressIP_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectPlay8AddressIP_Release(p) (p)->lpVtbl->Release(p) +#define IDirectPlay8AddressIP_BuildFromSockAddr(p,a) (p)->lpVtbl->BuildFromSockAddr(p,a) +#define IDirectPlay8AddressIP_BuildAddress(p,a,b) (p)->lpVtbl->BuildAddress(p,a,b) +#define IDirectPlay8AddressIP_BuildLocalAddress(p,a,b) (p)->lpVtbl->BuildLocalAddress(p,a,b) +#define IDirectPlay8AddressIP_GetSockAddress(p,a,b) (p)->lpVtbl->GetSockAddress(p,a,b) +#define IDirectPlay8AddressIP_GetLocalAddress(p,a,b) (p)->lpVtbl->GetLocalAddress(p,a,b) +#define IDirectPlay8AddressIP_GetAddress(p,a,b,c) (p)->lpVtbl->GetAddress(p,a,b,c) + +#else /* C++ */ + +#define IDirectPlay8Address_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirectPlay8Address_AddRef(p) (p)->AddRef() +#define IDirectPlay8Address_Release(p) (p)->Release() +#define IDirectPlay8Address_BuildFromURLW(p,a) (p)->BuildFromURLW(a) +#define IDirectPlay8Address_BuildFromURLA(p,a) (p)->BuildFromURLA(a) +#define IDirectPlay8Address_Duplicate(p,a) (p)->Duplicate(a) +#define IDirectPlay8Address_SetEqual(p,a) (p)->SetEqual(a) +#define IDirectPlay8Address_IsEqual(p,a) (p)->IsEqual(a) +#define IDirectPlay8Address_Clear(p) (p)->Clear() +#define IDirectPlay8Address_GetURLW(p,a,b) (p)->GetURLW(a,b) +#define IDirectPlay8Address_GetURLA(p,a,b) (p)->GetURLA(a,b) +#define IDirectPlay8Address_GetSP(p,a) (p)->GetSP(a) +#define IDirectPlay8Address_GetUserData(p,a,b) (p)->GetUserData(a,b) +#define IDirectPlay8Address_SetSP(p,a) (p)->SetSP(a) +#define IDirectPlay8Address_SetUserData(p,a,b) (p)->SetUserData(a,b) +#define IDirectPlay8Address_GetNumComponents(p,a) (p)->GetNumComponents(a) +#define IDirectPlay8Address_GetComponentByName(p,a,b,c,d) (p)->GetComponentByName(a,b,c,d) +#define IDirectPlay8Address_GetComponentByIndex(p,a,b,c,d,e,f) (p)->GetComponentByIndex(a,b,c,d,e,f) +#define IDirectPlay8Address_AddComponent(p,a,b,c,d) (p)->AddComponent(a,b,c,d) +#define IDirectPlay8Address_SetDevice(p,a) (p)->SetDevice(a) +#define IDirectPlay8Address_GetDevice(p,a) (p)->GetDevice(a) +#define IDirectPlay8Address_BuildFromDirectPlay4Address(p,a,b) (p)->BuildFromDirectPlay4Address(a,b) + +#define IDirectPlay8AddressIP_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirectPlay8AddressIP_AddRef(p) (p)->AddRef() +#define IDirectPlay8AddressIP_Release(p) (p)->Release() +#define IDirectPlay8AddressIP_BuildFromSockAddr(p,a) (p)->BuildFromSockAddr(a) +#define IDirectPlay8AddressIP_BuildAddress(p,a,b) (p)->BuildAddress(a,b) +#define IDirectPlay8AddressIP_BuildLocalAddress(p,a,b) (p)->BuildLocalAddress(a,b) +#define IDirectPlay8AddressIP_GetSockAddress(p,a,b) (p)->GetSockAddress(a,b) +#define IDirectPlay8AddressIP_GetLocalAddress(p,a,b) (p)->GetLocalAddress(a,b) +#define IDirectPlay8AddressIP_GetAddress(p,a,b,c) (p)->GetAddress(a,b,c) + +#endif + + +#ifdef __cplusplus +} +#endif + +#endif + + diff --git a/trunk/xray/xrNetServer/dplay8.h b/trunk/xray/xrNetServer/dplay8.h new file mode 100644 index 00000000..c6799a9d --- /dev/null +++ b/trunk/xray/xrNetServer/dplay8.h @@ -0,0 +1,1456 @@ +/*========================================================================== + * + * Copyright (C) 1998-2002 Microsoft Corporation. All Rights Reserved. + * + * File: DPlay8.h + * Content: DirectPlay8 include file + * + ***************************************************************************/ + +#ifndef __DIRECTPLAY8_H__ +#define __DIRECTPLAY8_H__ + +#include // for DECLARE_INTERFACE_ and HRESULT + +#include "dpaddr.h" + + +#ifdef __cplusplus +extern "C" { +#endif + + + +/**************************************************************************** + * + * DirectPlay8 CLSIDs + * + ****************************************************************************/ + +// {743F1DC6-5ABA-429f-8BDF-C54D03253DC2} +DEFINE_GUID(CLSID_DirectPlay8Client, +0x743f1dc6, 0x5aba, 0x429f, 0x8b, 0xdf, 0xc5, 0x4d, 0x3, 0x25, 0x3d, 0xc2); + +// {DA825E1B-6830-43d7-835D-0B5AD82956A2} +DEFINE_GUID(CLSID_DirectPlay8Server, +0xda825e1b, 0x6830, 0x43d7, 0x83, 0x5d, 0xb, 0x5a, 0xd8, 0x29, 0x56, 0xa2); + +// {286F484D-375E-4458-A272-B138E2F80A6A} +DEFINE_GUID(CLSID_DirectPlay8Peer, +0x286f484d, 0x375e, 0x4458, 0xa2, 0x72, 0xb1, 0x38, 0xe2, 0xf8, 0xa, 0x6a); + + +// CLSIDs added for DirectX 9 + +// {FC47060E-6153-4b34-B975-8E4121EB7F3C} +DEFINE_GUID(CLSID_DirectPlay8ThreadPool, +0xfc47060e, 0x6153, 0x4b34, 0xb9, 0x75, 0x8e, 0x41, 0x21, 0xeb, 0x7f, 0x3c); + +// {E4C1D9A2-CBF7-48bd-9A69-34A55E0D8941} +DEFINE_GUID(CLSID_DirectPlay8NATResolver, +0xe4c1d9a2, 0xcbf7, 0x48bd, 0x9a, 0x69, 0x34, 0xa5, 0x5e, 0xd, 0x89, 0x41); + +/**************************************************************************** + * + * DirectPlay8 Interface IIDs + * + ****************************************************************************/ + +typedef REFIID DP8REFIID; + + +// {5102DACD-241B-11d3-AEA7-006097B01411} +DEFINE_GUID(IID_IDirectPlay8Client, +0x5102dacd, 0x241b, 0x11d3, 0xae, 0xa7, 0x0, 0x60, 0x97, 0xb0, 0x14, 0x11); + +// {5102DACE-241B-11d3-AEA7-006097B01411} +DEFINE_GUID(IID_IDirectPlay8Server, +0x5102dace, 0x241b, 0x11d3, 0xae, 0xa7, 0x0, 0x60, 0x97, 0xb0, 0x14, 0x11); + +// {5102DACF-241B-11d3-AEA7-006097B01411} +DEFINE_GUID(IID_IDirectPlay8Peer, +0x5102dacf, 0x241b, 0x11d3, 0xae, 0xa7, 0x0, 0x60, 0x97, 0xb0, 0x14, 0x11); + + +// IIDs added for DirectX 9 + +// {0D22EE73-4A46-4a0d-89B2-045B4D666425} +DEFINE_GUID(IID_IDirectPlay8ThreadPool, +0xd22ee73, 0x4a46, 0x4a0d, 0x89, 0xb2, 0x4, 0x5b, 0x4d, 0x66, 0x64, 0x25); + +// {A9E213F2-9A60-486f-BF3B-53408B6D1CBB} +DEFINE_GUID(IID_IDirectPlay8NATResolver, +0xa9e213f2, 0x9a60, 0x486f, 0xbf, 0x3b, 0x53, 0x40, 0x8b, 0x6d, 0x1c, 0xbb); + +/**************************************************************************** + * + * DirectPlay8 Service Provider GUIDs + * + ****************************************************************************/ + + +// {53934290-628D-11D2-AE0F-006097B01411} +DEFINE_GUID(CLSID_DP8SP_IPX, +0x53934290, 0x628d, 0x11d2, 0xae, 0xf, 0x0, 0x60, 0x97, 0xb0, 0x14, 0x11); + + +// {6D4A3650-628D-11D2-AE0F-006097B01411} +DEFINE_GUID(CLSID_DP8SP_MODEM, +0x6d4a3650, 0x628d, 0x11d2, 0xae, 0xf, 0x0, 0x60, 0x97, 0xb0, 0x14, 0x11); + + +// {743B5D60-628D-11D2-AE0F-006097B01411} +DEFINE_GUID(CLSID_DP8SP_SERIAL, +0x743b5d60, 0x628d, 0x11d2, 0xae, 0xf, 0x0, 0x60, 0x97, 0xb0, 0x14, 0x11); + + +// {EBFE7BA0-628D-11D2-AE0F-006097B01411} +DEFINE_GUID(CLSID_DP8SP_TCPIP, +0xebfe7ba0, 0x628d, 0x11d2, 0xae, 0xf, 0x0, 0x60, 0x97, 0xb0, 0x14, 0x11); + + +// Service providers added for DirectX 9 + + +// {995513AF-3027-4b9a-956E-C772B3F78006} +DEFINE_GUID(CLSID_DP8SP_BLUETOOTH, +0x995513af, 0x3027, 0x4b9a, 0x95, 0x6e, 0xc7, 0x72, 0xb3, 0xf7, 0x80, 0x6); + + +/**************************************************************************** + * + * DirectPlay8 Interface Pointer definitions + * + ****************************************************************************/ + +typedef struct IDirectPlay8Client *PDIRECTPLAY8CLIENT; + +typedef struct IDirectPlay8Server *PDIRECTPLAY8SERVER; + +typedef struct IDirectPlay8Peer *PDIRECTPLAY8PEER; + + +// Interface pointers added for DirectX 9 + +typedef struct IDirectPlay8ThreadPool *PDIRECTPLAY8THREADPOOL; + +typedef struct IDirectPlay8NATResolver *PDIRECTPLAY8NATRESOLVER; + +/**************************************************************************** + * + * DirectPlay8 Forward Declarations For External Types + * + ****************************************************************************/ + +typedef struct IDirectPlay8LobbiedApplication *PDNLOBBIEDAPPLICATION; +typedef struct IDirectPlay8Address IDirectPlay8Address; + +/**************************************************************************** + * + * DirectPlay8 Callback Functions + * + ****************************************************************************/ + +// +// Callback Function Type Definition +// +typedef HRESULT (WINAPI *PFNDPNMESSAGEHANDLER)(PVOID,DWORD,PVOID); + +/**************************************************************************** + * + * DirectPlay8 Datatypes (Non-Structure / Non-Message) + * + ****************************************************************************/ + +// +// Player IDs. Used to uniquely identify a player in a session +// +typedef DWORD DPNID, *PDPNID; + +// +// Used as identifiers for operations +// +typedef DWORD DPNHANDLE, *PDPNHANDLE; + + + + +/**************************************************************************** + * + * DirectPlay8 Message Identifiers + * + ****************************************************************************/ + +#define DPN_MSGID_OFFSET 0xFFFF0000 +#define DPN_MSGID_ADD_PLAYER_TO_GROUP ( DPN_MSGID_OFFSET | 0x0001 ) +#define DPN_MSGID_APPLICATION_DESC ( DPN_MSGID_OFFSET | 0x0002 ) +#define DPN_MSGID_ASYNC_OP_COMPLETE ( DPN_MSGID_OFFSET | 0x0003 ) +#define DPN_MSGID_CLIENT_INFO ( DPN_MSGID_OFFSET | 0x0004 ) +#define DPN_MSGID_CONNECT_COMPLETE ( DPN_MSGID_OFFSET | 0x0005 ) +#define DPN_MSGID_CREATE_GROUP ( DPN_MSGID_OFFSET | 0x0006 ) +#define DPN_MSGID_CREATE_PLAYER ( DPN_MSGID_OFFSET | 0x0007 ) +#define DPN_MSGID_DESTROY_GROUP ( DPN_MSGID_OFFSET | 0x0008 ) +#define DPN_MSGID_DESTROY_PLAYER ( DPN_MSGID_OFFSET | 0x0009 ) +#define DPN_MSGID_ENUM_HOSTS_QUERY ( DPN_MSGID_OFFSET | 0x000a ) +#define DPN_MSGID_ENUM_HOSTS_RESPONSE ( DPN_MSGID_OFFSET | 0x000b ) +#define DPN_MSGID_GROUP_INFO ( DPN_MSGID_OFFSET | 0x000c ) +#define DPN_MSGID_HOST_MIGRATE ( DPN_MSGID_OFFSET | 0x000d ) +#define DPN_MSGID_INDICATE_CONNECT ( DPN_MSGID_OFFSET | 0x000e ) +#define DPN_MSGID_INDICATED_CONNECT_ABORTED ( DPN_MSGID_OFFSET | 0x000f ) +#define DPN_MSGID_PEER_INFO ( DPN_MSGID_OFFSET | 0x0010 ) +#define DPN_MSGID_RECEIVE ( DPN_MSGID_OFFSET | 0x0011 ) +#define DPN_MSGID_REMOVE_PLAYER_FROM_GROUP ( DPN_MSGID_OFFSET | 0x0012 ) +#define DPN_MSGID_RETURN_BUFFER ( DPN_MSGID_OFFSET | 0x0013 ) +#define DPN_MSGID_SEND_COMPLETE ( DPN_MSGID_OFFSET | 0x0014 ) +#define DPN_MSGID_SERVER_INFO ( DPN_MSGID_OFFSET | 0x0015 ) +#define DPN_MSGID_TERMINATE_SESSION ( DPN_MSGID_OFFSET | 0x0016 ) + +// Messages added for DirectX 9 +#define DPN_MSGID_CREATE_THREAD ( DPN_MSGID_OFFSET | 0x0017 ) +#define DPN_MSGID_DESTROY_THREAD ( DPN_MSGID_OFFSET | 0x0018 ) +#define DPN_MSGID_NAT_RESOLVER_QUERY ( DPN_MSGID_OFFSET | 0x0101 ) + +/**************************************************************************** + * + * DirectPlay8 Constants + * + ****************************************************************************/ + +#define DPNID_ALL_PLAYERS_GROUP 0 + +// +// DESTROY_GROUP reasons +// +#define DPNDESTROYGROUPREASON_NORMAL 0x0001 +#define DPNDESTROYGROUPREASON_AUTODESTRUCTED 0x0002 +#define DPNDESTROYGROUPREASON_SESSIONTERMINATED 0x0003 + +// +// DESTROY_PLAYER reasons +// +#define DPNDESTROYPLAYERREASON_NORMAL 0x0001 +#define DPNDESTROYPLAYERREASON_CONNECTIONLOST 0x0002 +#define DPNDESTROYPLAYERREASON_SESSIONTERMINATED 0x0003 +#define DPNDESTROYPLAYERREASON_HOSTDESTROYEDPLAYER 0x0004 + +#define DPN_MAX_APPDESC_RESERVEDDATA_SIZE 64 + + + +/**************************************************************************** + * + * DirectPlay8 Flags + * + ****************************************************************************/ + +// +// Asynchronous operation flags (for Async Ops) +// +#define DPNOP_SYNC 0x80000000 + +// +// Add player to group flags (for AddPlayerToGroup) +// +#define DPNADDPLAYERTOGROUP_SYNC DPNOP_SYNC + +// +// Cancel flags +// +#define DPNCANCEL_CONNECT 0x00000001 +#define DPNCANCEL_ENUM 0x00000002 +#define DPNCANCEL_SEND 0x00000004 +#define DPNCANCEL_ALL_OPERATIONS 0x00008000 +// Flags added for DirectX 9 +#define DPNCANCEL_PLAYER_SENDS 0x80000000 +#define DPNCANCEL_PLAYER_SENDS_PRIORITY_HIGH (DPNCANCEL_PLAYER_SENDS | 0x00010000) +#define DPNCANCEL_PLAYER_SENDS_PRIORITY_NORMAL (DPNCANCEL_PLAYER_SENDS | 0x00020000) +#define DPNCANCEL_PLAYER_SENDS_PRIORITY_LOW (DPNCANCEL_PLAYER_SENDS | 0x00040000) + +// +// Close flags (for Close, added for DirectX 9) +// +#define DPNCLOSE_IMMEDIATE 0x00000001 + +// +// Connect flags (for Connect) +// +#define DPNCONNECT_SYNC DPNOP_SYNC +#define DPNCONNECT_OKTOQUERYFORADDRESSING 0x0001 + +// +// Create group flags (for CreateGroup) +// +#define DPNCREATEGROUP_SYNC DPNOP_SYNC + +// +// Destroy group flags (for DestroyGroup) +// +#define DPNDESTROYGROUP_SYNC DPNOP_SYNC + +// +// Enumerate clients and groups flags (for EnumPlayersAndGroups) +// +#define DPNENUM_PLAYERS 0x0001 +#define DPNENUM_GROUPS 0x0010 + +// +// Enum hosts flags (for EnumHosts) +// +#define DPNENUMHOSTS_SYNC DPNOP_SYNC +#define DPNENUMHOSTS_OKTOQUERYFORADDRESSING 0x0001 +#define DPNENUMHOSTS_NOBROADCASTFALLBACK 0x0002 + +// +// Enum service provider flags (for EnumSP) +// +#define DPNENUMSERVICEPROVIDERS_ALL 0x0001 + +// +// GetLocalHostAddresses flags (added for DirectX 9) +// +#define DPNGETLOCALHOSTADDRESSES_COMBINED 0x0001 + +// +// Get send queue info flags (for GetSendQueueInfo) +// +#define DPNGETSENDQUEUEINFO_PRIORITY_NORMAL 0x0001 +#define DPNGETSENDQUEUEINFO_PRIORITY_HIGH 0x0002 +#define DPNGETSENDQUEUEINFO_PRIORITY_LOW 0x0004 + +// +// Group information flags (for Group Info) +// +#define DPNGROUP_AUTODESTRUCT 0x0001 + +// +// Host flags (for Host) +// +#define DPNHOST_OKTOQUERYFORADDRESSING 0x0001 + +// +// Set info +// +#define DPNINFO_NAME 0x0001 +#define DPNINFO_DATA 0x0002 + +// +// Initialize flags (for Initialize) +// +#define DPNINITIALIZE_DISABLEPARAMVAL 0x0001 +// Flags added for DirectX 9 +#define DPNINITIALIZE_HINT_LANSESSION 0x0002 +#define DPNINITIALIZE_DISABLELINKTUNING 0x0004 + + +// +// Register Lobby flags +// +#define DPNLOBBY_REGISTER 0x0001 +#define DPNLOBBY_UNREGISTER 0x0002 + +// +// Player information flags (for Player Info / Player Messages) +// +#define DPNPLAYER_LOCAL 0x0002 +#define DPNPLAYER_HOST 0x0004 + +// +// Receive indication flags (added for DirectX 9) +// +#define DPNRECEIVE_GUARANTEED 0x0001 +#define DPNRECEIVE_COALESCED 0x0002 + +// +// Remove player from group flags (for RemovePlayerFromGroup) +// +#define DPNREMOVEPLAYERFROMGROUP_SYNC DPNOP_SYNC + +// +// Send flags (for Send/SendTo) +// +#define DPNSEND_SYNC DPNOP_SYNC +#define DPNSEND_NOCOPY 0x0001 +#define DPNSEND_NOCOMPLETE 0x0002 +#define DPNSEND_COMPLETEONPROCESS 0x0004 +#define DPNSEND_GUARANTEED 0x0008 +#define DPNSEND_NONSEQUENTIAL 0x0010 +#define DPNSEND_NOLOOPBACK 0x0020 +#define DPNSEND_PRIORITY_LOW 0x0040 +#define DPNSEND_PRIORITY_HIGH 0x0080 +// Flag added for DirectX 9 +#define DPNSEND_COALESCE 0x0100 + +// +// Send complete indication flags (added for DirectX 9) +// +#define DPNSENDCOMPLETE_GUARANTEED 0x0001 +#define DPNSENDCOMPLETE_COALESCED 0x0002 + +// +// Session Flags (for DPN_APPLICATION_DESC) +// +#define DPNSESSION_CLIENT_SERVER 0x0001 +#define DPNSESSION_MIGRATE_HOST 0x0004 +#define DPNSESSION_NODPNSVR 0x0040 +#define DPNSESSION_REQUIREPASSWORD 0x0080 +// Flag added for DirectX 9 +#define DPNSESSION_NOENUMS 0x0100 +#define DPNSESSION_FAST_SIGNED 0x0200 +#define DPNSESSION_FULL_SIGNED 0x0400 + +// +// Set client info flags (for SetClientInfo) +// +#define DPNSETCLIENTINFO_SYNC DPNOP_SYNC + +// +// Set group info flags (for SetGroupInfo) +// +#define DPNSETGROUPINFO_SYNC DPNOP_SYNC + +// +// Set peer info flags (for SetPeerInfo) +// +#define DPNSETPEERINFO_SYNC DPNOP_SYNC + +// +// Set server info flags (for SetServerInfo) +// +#define DPNSETSERVERINFO_SYNC DPNOP_SYNC + +// +// SP capabilities flags +// +#define DPNSPCAPS_SUPPORTSDPNSVR 0x0001 +#define DPNSPCAPS_SUPPORTSDPNSRV DPNSPCAPS_SUPPORTSDPNSVR +#define DPNSPCAPS_SUPPORTSBROADCAST 0x0002 +#define DPNSPCAPS_SUPPORTSALLADAPTERS 0x0004 +// Flags added for DirectX 9 +#define DPNSPCAPS_SUPPORTSTHREADPOOL 0x0008 +#define DPNSPCAPS_NETWORKSIMULATOR 0x0010 + +// +// SP information flags (added for DirectX 9) +// +#define DPNSPINFO_NETWORKSIMULATORDEVICE 0x0001 + +/**************************************************************************** + * + * DirectPlay8 Structures (Non-Message) + * + ****************************************************************************/ + +// +// Application description +// +typedef struct _DPN_APPLICATION_DESC +{ + DWORD dwSize; // Size of this structure + DWORD dwFlags; // Flags (DPNSESSION_...) + GUID guidInstance; // Instance GUID + GUID guidApplication; // Application GUID + DWORD dwMaxPlayers; // Maximum # of players allowed (0=no limit) + DWORD dwCurrentPlayers; // Current # of players allowed + WCHAR *pwszSessionName; // Name of the session + WCHAR *pwszPassword; // Password for the session + PVOID pvReservedData; + DWORD dwReservedDataSize; + PVOID pvApplicationReservedData; + DWORD dwApplicationReservedDataSize; +} DPN_APPLICATION_DESC, *PDPN_APPLICATION_DESC; + +// +// Generic Buffer Description +// +typedef struct _BUFFERDESC +{ + DWORD dwBufferSize; + BYTE * pBufferData; +} BUFFERDESC, DPN_BUFFER_DESC, *PDPN_BUFFER_DESC; + +typedef BUFFERDESC FAR * PBUFFERDESC; + +// +// DirectPlay8 capabilities +// +typedef struct _DPN_CAPS +{ + DWORD dwSize; // Size of this structure + DWORD dwFlags; // Flags + DWORD dwConnectTimeout; // ms before a connect request times out + DWORD dwConnectRetries; // # of times to attempt the connection + DWORD dwTimeoutUntilKeepAlive; // ms of inactivity before a keep alive is sent +} DPN_CAPS, *PDPN_CAPS; + +// +// Extended capabilities structures (added for DirectX 9) +// +typedef struct _DPN_CAPS_EX +{ + DWORD dwSize; // Size of this structure + DWORD dwFlags; // Flags + DWORD dwConnectTimeout; // ms before a connect request times out + DWORD dwConnectRetries; // # of times to attempt the connection + DWORD dwTimeoutUntilKeepAlive; // ms of inactivity before a keep alive is sent + DWORD dwMaxRecvMsgSize; // maximum size in bytes of message that can be received + DWORD dwNumSendRetries; // maximum number of send retries before link is considered dead + DWORD dwMaxSendRetryInterval; // maximum period in msec between send retries + DWORD dwDropThresholdRate; // percentage of dropped packets before throttling + DWORD dwThrottleRate; // percentage amount to reduce send window when throttling + DWORD dwNumHardDisconnectSends; // number of hard disconnect frames to send when close immediate flag is specified + DWORD dwMaxHardDisconnectPeriod; // maximum period between hard disconnect sends +} DPN_CAPS_EX, *PDPN_CAPS_EX; + +// +// Connection Statistics information +// +typedef struct _DPN_CONNECTION_INFO +{ + DWORD dwSize; + DWORD dwRoundTripLatencyMS; + DWORD dwThroughputBPS; + DWORD dwPeakThroughputBPS; + + DWORD dwBytesSentGuaranteed; + DWORD dwPacketsSentGuaranteed; + DWORD dwBytesSentNonGuaranteed; + DWORD dwPacketsSentNonGuaranteed; + + DWORD dwBytesRetried; // Guaranteed only + DWORD dwPacketsRetried; // Guaranteed only + DWORD dwBytesDropped; // Non Guaranteed only + DWORD dwPacketsDropped; // Non Guaranteed only + + DWORD dwMessagesTransmittedHighPriority; + DWORD dwMessagesTimedOutHighPriority; + DWORD dwMessagesTransmittedNormalPriority; + DWORD dwMessagesTimedOutNormalPriority; + DWORD dwMessagesTransmittedLowPriority; + DWORD dwMessagesTimedOutLowPriority; + + DWORD dwBytesReceivedGuaranteed; + DWORD dwPacketsReceivedGuaranteed; + DWORD dwBytesReceivedNonGuaranteed; + DWORD dwPacketsReceivedNonGuaranteed; + DWORD dwMessagesReceived; + +} DPN_CONNECTION_INFO, *PDPN_CONNECTION_INFO; + + +// +// Group information structure +// +typedef struct _DPN_GROUP_INFO +{ + DWORD dwSize; // size of this structure + DWORD dwInfoFlags; // information contained + PWSTR pwszName; // Unicode Name + PVOID pvData; // data block + DWORD dwDataSize; // size in BYTES of data block + DWORD dwGroupFlags; // group flags (DPNGROUP_...) +} DPN_GROUP_INFO, *PDPN_GROUP_INFO; + +// +// Player information structure +// +typedef struct _DPN_PLAYER_INFO +{ + DWORD dwSize; // size of this structure + DWORD dwInfoFlags; // information contained + PWSTR pwszName; // Unicode Name + PVOID pvData; // data block + DWORD dwDataSize; // size in BYTES of data block + DWORD dwPlayerFlags; // player flags (DPNPLAYER_...) +} DPN_PLAYER_INFO, *PDPN_PLAYER_INFO; + +typedef struct _DPN_SECURITY_CREDENTIALS DPN_SECURITY_CREDENTIALS, *PDPN_SECURITY_CREDENTIALS; +typedef struct _DPN_SECURITY_DESC DPN_SECURITY_DESC, *PDPN_SECURITY_DESC; + +// +// Service provider & adapter enumeration structure +// +typedef struct _DPN_SERVICE_PROVIDER_INFO +{ + DWORD dwFlags; + GUID guid; // SP Guid + WCHAR *pwszName; // Friendly Name + PVOID pvReserved; + DWORD dwReserved; +} DPN_SERVICE_PROVIDER_INFO, *PDPN_SERVICE_PROVIDER_INFO; + +// +// Service provider caps structure +// +typedef struct _DPN_SP_CAPS +{ + DWORD dwSize; // Size of this structure + DWORD dwFlags; // Flags (DPNSPCAPS_...) + DWORD dwNumThreads; // # of worker threads to use + DWORD dwDefaultEnumCount; // default # of enum requests + DWORD dwDefaultEnumRetryInterval; // default ms between enum requests + DWORD dwDefaultEnumTimeout; // default enum timeout + DWORD dwMaxEnumPayloadSize; // maximum size in bytes for enum payload data + DWORD dwBuffersPerThread; // number of receive buffers per thread + DWORD dwSystemBufferSize; // amount of buffering to do in addition to posted receive buffers +} DPN_SP_CAPS, *PDPN_SP_CAPS; + + +/**************************************************************************** + * + * IDirectPlay8 message handler call back structures + * + ****************************************************************************/ + +// +// Add player to group structure for message handler +// (DPN_MSGID_ADD_PLAYER_TO_GROUP) +// +typedef struct _DPNMSG_ADD_PLAYER_TO_GROUP +{ + DWORD dwSize; // Size of this structure + DPNID dpnidGroup; // DPNID of group + PVOID pvGroupContext; // Group context value + DPNID dpnidPlayer; // DPNID of added player + PVOID pvPlayerContext; // Player context value +} DPNMSG_ADD_PLAYER_TO_GROUP, *PDPNMSG_ADD_PLAYER_TO_GROUP; + +// +// Async operation completion structure for message handler +// (DPN_MSGID_ASYNC_OP_COMPLETE) +// +typedef struct _DPNMSG_ASYNC_OP_COMPLETE +{ + DWORD dwSize; // Size of this structure + DPNHANDLE hAsyncOp; // DirectPlay8 async operation handle + PVOID pvUserContext; // User context supplied + HRESULT hResultCode; // HRESULT of operation +} DPNMSG_ASYNC_OP_COMPLETE, *PDPNMSG_ASYNC_OP_COMPLETE; + +// +// Client info structure for message handler +// (DPN_MSGID_CLIENT_INFO) +// +typedef struct _DPNMSG_CLIENT_INFO +{ + DWORD dwSize; // Size of this structure + DPNID dpnidClient; // DPNID of client + PVOID pvPlayerContext; // Player context value +} DPNMSG_CLIENT_INFO, *PDPNMSG_CLIENT_INFO; + +// +// Connect complete structure for message handler +// (DPN_MSGID_CONNECT_COMPLETE) +// +typedef struct _DPNMSG_CONNECT_COMPLETE +{ + DWORD dwSize; // Size of this structure + DPNHANDLE hAsyncOp; // DirectPlay8 Async operation handle + PVOID pvUserContext; // User context supplied at Connect + HRESULT hResultCode; // HRESULT of connection attempt + PVOID pvApplicationReplyData; // Connection reply data from Host/Server + DWORD dwApplicationReplyDataSize; // Size (in bytes) of pvApplicationReplyData + + // Fields added for DirectX 9 + DPNID dpnidLocal; // DPNID of local player +} DPNMSG_CONNECT_COMPLETE, *PDPNMSG_CONNECT_COMPLETE; + +// +// Create group structure for message handler +// (DPN_MSGID_CREATE_GROUP) +// +typedef struct _DPNMSG_CREATE_GROUP +{ + DWORD dwSize; // Size of this structure + DPNID dpnidGroup; // DPNID of new group + DPNID dpnidOwner; // Owner of newgroup + PVOID pvGroupContext; // Group context value + + // Fields added for DirectX 9 + PVOID pvOwnerContext; // Owner context value +} DPNMSG_CREATE_GROUP, *PDPNMSG_CREATE_GROUP; + +// +// Create player structure for message handler +// (DPN_MSGID_CREATE_PLAYER) +// +typedef struct _DPNMSG_CREATE_PLAYER +{ + DWORD dwSize; // Size of this structure + DPNID dpnidPlayer; // DPNID of new player + PVOID pvPlayerContext; // Player context value +} DPNMSG_CREATE_PLAYER, *PDPNMSG_CREATE_PLAYER; + +// +// Destroy group structure for message handler +// (DPN_MSGID_DESTROY_GROUP) +// +typedef struct _DPNMSG_DESTROY_GROUP +{ + DWORD dwSize; // Size of this structure + DPNID dpnidGroup; // DPNID of destroyed group + PVOID pvGroupContext; // Group context value + DWORD dwReason; // Information only +} DPNMSG_DESTROY_GROUP, *PDPNMSG_DESTROY_GROUP; + +// +// Destroy player structure for message handler +// (DPN_MSGID_DESTROY_PLAYER) +// +typedef struct _DPNMSG_DESTROY_PLAYER +{ + DWORD dwSize; // Size of this structure + DPNID dpnidPlayer; // DPNID of leaving player + PVOID pvPlayerContext; // Player context value + DWORD dwReason; // Information only +} DPNMSG_DESTROY_PLAYER, *PDPNMSG_DESTROY_PLAYER; + +// +// Enumeration request received structure for message handler +// (DPN_MSGID_ENUM_HOSTS_QUERY) +// +typedef struct _DPNMSG_ENUM_HOSTS_QUERY +{ + DWORD dwSize; // Size of this structure. + IDirectPlay8Address *pAddressSender; // Address of client who sent the request + IDirectPlay8Address *pAddressDevice; // Address of device request was received on + PVOID pvReceivedData; // Request data (set on client) + DWORD dwReceivedDataSize; // Request data size (set on client) + DWORD dwMaxResponseDataSize; // Max allowable size of enum response + PVOID pvResponseData; // Optional query repsonse (user set) + DWORD dwResponseDataSize; // Optional query response size (user set) + PVOID pvResponseContext; // Optional query response context (user set) +} DPNMSG_ENUM_HOSTS_QUERY, *PDPNMSG_ENUM_HOSTS_QUERY; + +// +// Enumeration response received structure for message handler +// (DPN_MSGID_ENUM_HOSTS_RESPONSE) +// +typedef struct _DPNMSG_ENUM_HOSTS_RESPONSE +{ + DWORD dwSize; // Size of this structure + IDirectPlay8Address *pAddressSender; // Address of host who responded + IDirectPlay8Address *pAddressDevice; // Device response was received on + const DPN_APPLICATION_DESC *pApplicationDescription; // Application description for the session + PVOID pvResponseData; // Optional response data (set on host) + DWORD dwResponseDataSize; // Optional response data size (set on host) + PVOID pvUserContext; // Context value supplied for enumeration + DWORD dwRoundTripLatencyMS; // Round trip latency in MS +} DPNMSG_ENUM_HOSTS_RESPONSE, *PDPNMSG_ENUM_HOSTS_RESPONSE; + +// +// Group info structure for message handler +// (DPN_MSGID_GROUP_INFO) +// +typedef struct _DPNMSG_GROUP_INFO +{ + DWORD dwSize; // Size of this structure + DPNID dpnidGroup; // DPNID of group + PVOID pvGroupContext; // Group context value +} DPNMSG_GROUP_INFO, *PDPNMSG_GROUP_INFO; + +// +// Migrate host structure for message handler +// (DPN_MSGID_HOST_MIGRATE) +// +typedef struct _DPNMSG_HOST_MIGRATE +{ + DWORD dwSize; // Size of this structure + DPNID dpnidNewHost; // DPNID of new Host player + PVOID pvPlayerContext; // Player context value +} DPNMSG_HOST_MIGRATE, *PDPNMSG_HOST_MIGRATE; + +// +// Indicate connect structure for message handler +// (DPN_MSGID_INDICATE_CONNECT) +// +typedef struct _DPNMSG_INDICATE_CONNECT +{ + DWORD dwSize; // Size of this structure + PVOID pvUserConnectData; // Connecting player data + DWORD dwUserConnectDataSize; // Size (in bytes) of pvUserConnectData + PVOID pvReplyData; // Connection reply data + DWORD dwReplyDataSize; // Size (in bytes) of pvReplyData + PVOID pvReplyContext; // Buffer context for pvReplyData + PVOID pvPlayerContext; // Player context preset + IDirectPlay8Address *pAddressPlayer; // Address of connecting player + IDirectPlay8Address *pAddressDevice; // Address of device receiving connect attempt +} DPNMSG_INDICATE_CONNECT, *PDPNMSG_INDICATE_CONNECT; + +// +// Indicated connect aborted structure for message handler +// (DPN_MSGID_INDICATED_CONNECT_ABORTED) +// +typedef struct _DPNMSG_INDICATED_CONNECT_ABORTED +{ + DWORD dwSize; // Size of this structure + PVOID pvPlayerContext; // Player context preset from DPNMSG_INDICATE_CONNECT +} DPNMSG_INDICATED_CONNECT_ABORTED, *PDPNMSG_INDICATED_CONNECT_ABORTED; + +// +// Peer info structure for message handler +// (DPN_MSGID_PEER_INFO) +// +typedef struct _DPNMSG_PEER_INFO +{ + DWORD dwSize; // Size of this structure + DPNID dpnidPeer; // DPNID of peer + PVOID pvPlayerContext; // Player context value +} DPNMSG_PEER_INFO, *PDPNMSG_PEER_INFO; + +// +// Receive structure for message handler +// (DPN_MSGID_RECEIVE) +// +typedef struct _DPNMSG_RECEIVE +{ + DWORD dwSize; // Size of this structure + DPNID dpnidSender; // DPNID of sending player + PVOID pvPlayerContext; // Player context value of sending player + PBYTE pReceiveData; // Received data + DWORD dwReceiveDataSize; // Size (in bytes) of pReceiveData + DPNHANDLE hBufferHandle; // Buffer handle for pReceiveData + + // Fields added for DirectX 9 + DWORD dwReceiveFlags; // Flags describing how message was received +} DPNMSG_RECEIVE, *PDPNMSG_RECEIVE; + +// +// Remove player from group structure for message handler +// (DPN_MSGID_REMOVE_PLAYER_FROM_GROUP) +// +typedef struct _DPNMSG_REMOVE_PLAYER_FROM_GROUP +{ + DWORD dwSize; // Size of this structure + DPNID dpnidGroup; // DPNID of group + PVOID pvGroupContext; // Group context value + DPNID dpnidPlayer; // DPNID of deleted player + PVOID pvPlayerContext; // Player context value +} DPNMSG_REMOVE_PLAYER_FROM_GROUP, *PDPNMSG_REMOVE_PLAYER_FROM_GROUP; + +// +// Returned buffer structure for message handler +// (DPN_MSGID_RETURN_BUFFER) +// +typedef struct _DPNMSG_RETURN_BUFFER +{ + DWORD dwSize; // Size of this structure + HRESULT hResultCode; // Return value of operation + PVOID pvBuffer; // Buffer being returned + PVOID pvUserContext; // Context associated with buffer +} DPNMSG_RETURN_BUFFER, *PDPNMSG_RETURN_BUFFER; + +// +// Send complete structure for message handler +// (DPN_MSGID_SEND_COMPLETE) +// +typedef struct _DPNMSG_SEND_COMPLETE +{ + DWORD dwSize; // Size of this structure + DPNHANDLE hAsyncOp; // DirectPlay8 Async operation handle + PVOID pvUserContext; // User context supplied at Send/SendTo + HRESULT hResultCode; // HRESULT of send + DWORD dwSendTime; // Send time in ms + + // Fields added for DirectX 9 + DWORD dwFirstFrameRTT; // RTT of the first frame in the message + DWORD dwFirstFrameRetryCount; // Retry count of the first frame + DWORD dwSendCompleteFlags; // Flags describing how message was sent + DPN_BUFFER_DESC *pBuffers; // Pointer to array of buffers sent, if DirectPlay did not make a copy + DWORD dwNumBuffers; // Number of buffers in previous array +} DPNMSG_SEND_COMPLETE, *PDPNMSG_SEND_COMPLETE; + +// +// Server info structure for message handler +// (DPN_MSGID_SERVER_INFO) +// +typedef struct _DPNMSG_SERVER_INFO +{ + DWORD dwSize; // Size of this structure + DPNID dpnidServer; // DPNID of server + PVOID pvPlayerContext; // Player context value +} DPNMSG_SERVER_INFO, *PDPNMSG_SERVER_INFO; + +// +// Terminated session structure for message handler +// (DPN_MSGID_TERMINATE_SESSION) +// +typedef struct _DPNMSG_TERMINATE_SESSION +{ + DWORD dwSize; // Size of this structure + HRESULT hResultCode; // Reason + PVOID pvTerminateData; // Data passed from Host/Server + DWORD dwTerminateDataSize;// Size (in bytes) of pvTerminateData +} DPNMSG_TERMINATE_SESSION, *PDPNMSG_TERMINATE_SESSION; + + +// +// Message structures added for DirectX 9 +// + +// +// Create thread info structure for message handler +// (DPN_MSGID_CREATE_THREAD) +// +typedef struct _DPNMSG_CREATE_THREAD +{ + DWORD dwSize; // Size of this structure + DWORD dwFlags; // Flags describing this thread + DWORD dwProcessorNum; // Index of processor to which thread is bound + PVOID pvUserContext; // Thread context value +} DPNMSG_CREATE_THREAD, *PDPNMSG_CREATE_THREAD; + +// +// Destroy thread info structure for message handler +// (DPN_MSGID_DESTROY_THREAD) +// +typedef struct _DPNMSG_DESTROY_THREAD +{ + DWORD dwSize; // Size of this structure + DWORD dwProcessorNum; // Index of processor to which thread was bound + PVOID pvUserContext; // Thread context value +} DPNMSG_DESTROY_THREAD, *PDPNMSG_DESTROY_THREAD; + + +// +// Query-to-resolve-NAT-address structure for message handler +// (DPN_MSGID_NAT_RESOLVER_QUERY) +// +typedef struct _DPNMSG_NAT_RESOLVER_QUERY +{ + DWORD dwSize; // Size of this structure. + IDirectPlay8Address *pAddressSender; // Address of client that sent the query + IDirectPlay8Address *pAddressDevice; // Address of device on which query was received + WCHAR *pwszUserString; // User specified string, or NULL if none +} DPNMSG_NAT_RESOLVER_QUERY, *PDPNMSG_NAT_RESOLVER_QUERY; + +/**************************************************************************** + * + * DirectPlay8 Functions + * + ****************************************************************************/ + + + +/* + * This function is no longer supported. It is recommended that CoCreateInstance be used to create + * DirectPlay8 objects. + * + * extern HRESULT WINAPI DirectPlay8Create( const CLSID * pcIID, void **ppvInterface, IUnknown *pUnknown ); + * + */ + + +/**************************************************************************** + * + * DirectPlay8 Application Interfaces + * + ****************************************************************************/ + +// +// COM definition for DirectPlay8 Client interface +// +#undef INTERFACE // External COM Implementation +#define INTERFACE IDirectPlay8Client +DECLARE_INTERFACE_(IDirectPlay8Client,IUnknown) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface) (THIS_ DP8REFIID riid, LPVOID *ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + /*** IDirectPlay8Client methods ***/ + STDMETHOD(Initialize) (THIS_ PVOID const pvUserContext, const PFNDPNMESSAGEHANDLER pfn, const DWORD dwFlags) PURE; + STDMETHOD(EnumServiceProviders) (THIS_ const GUID *const pguidServiceProvider, const GUID *const pguidApplication, DPN_SERVICE_PROVIDER_INFO *const pSPInfoBuffer, PDWORD const pcbEnumData, PDWORD const pcReturned, const DWORD dwFlags) PURE; + STDMETHOD(EnumHosts) (THIS_ PDPN_APPLICATION_DESC const pApplicationDesc,IDirectPlay8Address *const pAddrHost,IDirectPlay8Address *const pDeviceInfo,PVOID const pUserEnumData,const DWORD dwUserEnumDataSize,const DWORD dwEnumCount,const DWORD dwRetryInterval,const DWORD dwTimeOut,PVOID const pvUserContext,DPNHANDLE *const pAsyncHandle,const DWORD dwFlags) PURE; + STDMETHOD(CancelAsyncOperation) (THIS_ const DPNHANDLE hAsyncHandle, const DWORD dwFlags) PURE; + STDMETHOD(Connect) (THIS_ const DPN_APPLICATION_DESC *const pdnAppDesc,IDirectPlay8Address *const pHostAddr,IDirectPlay8Address *const pDeviceInfo,const DPN_SECURITY_DESC *const pdnSecurity,const DPN_SECURITY_CREDENTIALS *const pdnCredentials,const void *const pvUserConnectData,const DWORD dwUserConnectDataSize,void *const pvAsyncContext,DPNHANDLE *const phAsyncHandle,const DWORD dwFlags) PURE; + STDMETHOD(Send) (THIS_ const DPN_BUFFER_DESC *const prgBufferDesc,const DWORD cBufferDesc,const DWORD dwTimeOut,void *const pvAsyncContext,DPNHANDLE *const phAsyncHandle,const DWORD dwFlags) PURE; + STDMETHOD(GetSendQueueInfo) (THIS_ DWORD *const pdwNumMsgs, DWORD *const pdwNumBytes, const DWORD dwFlags) PURE; + STDMETHOD(GetApplicationDesc) (THIS_ DPN_APPLICATION_DESC *const pAppDescBuffer, DWORD *const pcbDataSize, const DWORD dwFlags) PURE; + STDMETHOD(SetClientInfo) (THIS_ const DPN_PLAYER_INFO *const pdpnPlayerInfo,PVOID const pvAsyncContext,DPNHANDLE *const phAsyncHandle, const DWORD dwFlags) PURE; + STDMETHOD(GetServerInfo) (THIS_ DPN_PLAYER_INFO *const pdpnPlayerInfo,DWORD *const pdwSize,const DWORD dwFlags) PURE; + STDMETHOD(GetServerAddress) (THIS_ IDirectPlay8Address **const pAddress,const DWORD dwFlags) PURE; + STDMETHOD(Close) (THIS_ const DWORD dwFlags) PURE; + STDMETHOD(ReturnBuffer) (THIS_ const DPNHANDLE hBufferHandle,const DWORD dwFlags) PURE; + STDMETHOD(GetCaps) (THIS_ DPN_CAPS *const pdpCaps,const DWORD dwFlags) PURE; + STDMETHOD(SetCaps) (THIS_ const DPN_CAPS *const pdpCaps, const DWORD dwFlags) PURE; + STDMETHOD(SetSPCaps) (THIS_ const GUID * const pguidSP, const DPN_SP_CAPS *const pdpspCaps, const DWORD dwFlags ) PURE; + STDMETHOD(GetSPCaps) (THIS_ const GUID * const pguidSP,DPN_SP_CAPS *const pdpspCaps,const DWORD dwFlags) PURE; + STDMETHOD(GetConnectionInfo) (THIS_ DPN_CONNECTION_INFO *const pdpConnectionInfo,const DWORD dwFlags) PURE; + STDMETHOD(RegisterLobby) (THIS_ const DPNHANDLE dpnHandle, struct IDirectPlay8LobbiedApplication *const pIDP8LobbiedApplication,const DWORD dwFlags) PURE; +}; + +// +// COM definition for DirectPlay8 Server interface +// +#undef INTERFACE // External COM Implementation +#define INTERFACE IDirectPlay8Server +DECLARE_INTERFACE_(IDirectPlay8Server,IUnknown) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface) (THIS_ DP8REFIID riid, LPVOID *ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + /*** IDirectPlay8Server methods ***/ + STDMETHOD(Initialize) (THIS_ PVOID const pvUserContext, const PFNDPNMESSAGEHANDLER pfn, const DWORD dwFlags) PURE; + STDMETHOD(EnumServiceProviders) (THIS_ const GUID *const pguidServiceProvider,const GUID *const pguidApplication,DPN_SERVICE_PROVIDER_INFO *const pSPInfoBuffer,PDWORD const pcbEnumData,PDWORD const pcReturned,const DWORD dwFlags) PURE; + STDMETHOD(CancelAsyncOperation) (THIS_ const DPNHANDLE hAsyncHandle,const DWORD dwFlags) PURE; + STDMETHOD(GetSendQueueInfo) (THIS_ const DPNID dpnid,DWORD *const pdwNumMsgs, DWORD *const pdwNumBytes, const DWORD dwFlags) PURE; + STDMETHOD(GetApplicationDesc) (THIS_ DPN_APPLICATION_DESC *const pAppDescBuffer, DWORD *const pcbDataSize, const DWORD dwFlags) PURE; + STDMETHOD(SetServerInfo) (THIS_ const DPN_PLAYER_INFO *const pdpnPlayerInfo,PVOID const pvAsyncContext, DPNHANDLE *const phAsyncHandle, const DWORD dwFlags) PURE; + STDMETHOD(GetClientInfo) (THIS_ const DPNID dpnid,DPN_PLAYER_INFO *const pdpnPlayerInfo,DWORD *const pdwSize,const DWORD dwFlags) PURE; + STDMETHOD(GetClientAddress) (THIS_ const DPNID dpnid,IDirectPlay8Address **const pAddress,const DWORD dwFlags) PURE; + STDMETHOD(GetLocalHostAddresses) (THIS_ IDirectPlay8Address **const prgpAddress,DWORD *const pcAddress,const DWORD dwFlags) PURE; + STDMETHOD(SetApplicationDesc) (THIS_ const DPN_APPLICATION_DESC *const pad, const DWORD dwFlags) PURE; + STDMETHOD(Host) (THIS_ const DPN_APPLICATION_DESC *const pdnAppDesc,IDirectPlay8Address **const prgpDeviceInfo,const DWORD cDeviceInfo,const DPN_SECURITY_DESC *const pdnSecurity,const DPN_SECURITY_CREDENTIALS *const pdnCredentials,void *const pvPlayerContext,const DWORD dwFlags) PURE; + STDMETHOD(SendTo) (THIS_ const DPNID dpnid,const DPN_BUFFER_DESC *const prgBufferDesc,const DWORD cBufferDesc,const DWORD dwTimeOut,void *const pvAsyncContext,DPNHANDLE *const phAsyncHandle,const DWORD dwFlags) PURE; + STDMETHOD(CreateGroup) (THIS_ const DPN_GROUP_INFO *const pdpnGroupInfo,void *const pvGroupContext,void *const pvAsyncContext,DPNHANDLE *const phAsyncHandle,const DWORD dwFlags) PURE; + STDMETHOD(DestroyGroup) (THIS_ const DPNID idGroup, PVOID const pvAsyncContext, DPNHANDLE *const phAsyncHandle, const DWORD dwFlags) PURE; + STDMETHOD(AddPlayerToGroup) (THIS_ const DPNID idGroup, const DPNID idClient, PVOID const pvAsyncContext, DPNHANDLE *const phAsyncHandle, const DWORD dwFlags) PURE; + STDMETHOD(RemovePlayerFromGroup) (THIS_ const DPNID idGroup, const DPNID idClient, PVOID const pvAsyncContext, DPNHANDLE *const phAsyncHandle, const DWORD dwFlags) PURE; + STDMETHOD(SetGroupInfo) (THIS_ const DPNID dpnid,DPN_GROUP_INFO *const pdpnGroupInfo,PVOID const pvAsyncContext,DPNHANDLE *const phAsyncHandle, const DWORD dwFlags) PURE; + STDMETHOD(GetGroupInfo) (THIS_ const DPNID dpnid,DPN_GROUP_INFO *const pdpnGroupInfo,DWORD *const pdwSize,const DWORD dwFlags) PURE; + STDMETHOD(EnumPlayersAndGroups) (THIS_ DPNID *const prgdpnid, DWORD *const pcdpnid, const DWORD dwFlags) PURE; + STDMETHOD(EnumGroupMembers) (THIS_ const DPNID dpnid, DPNID *const prgdpnid, DWORD *const pcdpnid, const DWORD dwFlags) PURE; + STDMETHOD(Close) (THIS_ const DWORD dwFlags) PURE; + STDMETHOD(DestroyClient) (THIS_ const DPNID dpnidClient, const void *const pvDestroyData, const DWORD dwDestroyDataSize, const DWORD dwFlags) PURE; + STDMETHOD(ReturnBuffer) (THIS_ const DPNHANDLE hBufferHandle,const DWORD dwFlags) PURE; + STDMETHOD(GetPlayerContext) (THIS_ const DPNID dpnid,PVOID *const ppvPlayerContext,const DWORD dwFlags) PURE; + STDMETHOD(GetGroupContext) (THIS_ const DPNID dpnid,PVOID *const ppvGroupContext,const DWORD dwFlags) PURE; + STDMETHOD(GetCaps) (THIS_ DPN_CAPS *const pdpCaps,const DWORD dwFlags) PURE; + STDMETHOD(SetCaps) (THIS_ const DPN_CAPS *const pdpCaps, const DWORD dwFlags) PURE; + STDMETHOD(SetSPCaps) (THIS_ const GUID * const pguidSP, const DPN_SP_CAPS *const pdpspCaps, const DWORD dwFlags ) PURE; + STDMETHOD(GetSPCaps) (THIS_ const GUID * const pguidSP, DPN_SP_CAPS *const pdpspCaps,const DWORD dwFlags) PURE; + STDMETHOD(GetConnectionInfo) (THIS_ const DPNID dpnid, DPN_CONNECTION_INFO *const pdpConnectionInfo,const DWORD dwFlags) PURE; + STDMETHOD(RegisterLobby) (THIS_ const DPNHANDLE dpnHandle, struct IDirectPlay8LobbiedApplication *const pIDP8LobbiedApplication,const DWORD dwFlags) PURE; +}; + +// +// COM definition for DirectPlay8 Peer interface +// +#undef INTERFACE // External COM Implementation +#define INTERFACE IDirectPlay8Peer +DECLARE_INTERFACE_(IDirectPlay8Peer,IUnknown) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface) (THIS_ DP8REFIID riid, LPVOID *ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + /*** IDirectPlay8Peer methods ***/ + STDMETHOD(Initialize) (THIS_ PVOID const pvUserContext, const PFNDPNMESSAGEHANDLER pfn, const DWORD dwFlags) PURE; + STDMETHOD(EnumServiceProviders) (THIS_ const GUID *const pguidServiceProvider, const GUID *const pguidApplication, DPN_SERVICE_PROVIDER_INFO *const pSPInfoBuffer, DWORD *const pcbEnumData, DWORD *const pcReturned, const DWORD dwFlags) PURE; + STDMETHOD(CancelAsyncOperation) (THIS_ const DPNHANDLE hAsyncHandle, const DWORD dwFlags) PURE; + STDMETHOD(Connect) (THIS_ const DPN_APPLICATION_DESC *const pdnAppDesc,IDirectPlay8Address *const pHostAddr,IDirectPlay8Address *const pDeviceInfo,const DPN_SECURITY_DESC *const pdnSecurity,const DPN_SECURITY_CREDENTIALS *const pdnCredentials,const void *const pvUserConnectData,const DWORD dwUserConnectDataSize,void *const pvPlayerContext,void *const pvAsyncContext,DPNHANDLE *const phAsyncHandle,const DWORD dwFlags) PURE; + STDMETHOD(SendTo) (THIS_ const DPNID dpnid,const DPN_BUFFER_DESC *const prgBufferDesc,const DWORD cBufferDesc,const DWORD dwTimeOut,void *const pvAsyncContext,DPNHANDLE *const phAsyncHandle,const DWORD dwFlags) PURE; + STDMETHOD(GetSendQueueInfo) (THIS_ const DPNID dpnid, DWORD *const pdwNumMsgs, DWORD *const pdwNumBytes, const DWORD dwFlags) PURE; + STDMETHOD(Host) (THIS_ const DPN_APPLICATION_DESC *const pdnAppDesc,IDirectPlay8Address **const prgpDeviceInfo,const DWORD cDeviceInfo,const DPN_SECURITY_DESC *const pdnSecurity,const DPN_SECURITY_CREDENTIALS *const pdnCredentials,void *const pvPlayerContext,const DWORD dwFlags) PURE; + STDMETHOD(GetApplicationDesc) (THIS_ DPN_APPLICATION_DESC *const pAppDescBuffer, DWORD *const pcbDataSize, const DWORD dwFlags) PURE; + STDMETHOD(SetApplicationDesc) (THIS_ const DPN_APPLICATION_DESC *const pad, const DWORD dwFlags) PURE; + STDMETHOD(CreateGroup) (THIS_ const DPN_GROUP_INFO *const pdpnGroupInfo,void *const pvGroupContext,void *const pvAsyncContext,DPNHANDLE *const phAsyncHandle,const DWORD dwFlags) PURE; + STDMETHOD(DestroyGroup) (THIS_ const DPNID idGroup, PVOID const pvAsyncContext, DPNHANDLE *const phAsyncHandle, const DWORD dwFlags) PURE; + STDMETHOD(AddPlayerToGroup) (THIS_ const DPNID idGroup, const DPNID idClient, PVOID const pvAsyncContext, DPNHANDLE *const phAsyncHandle, const DWORD dwFlags) PURE; + STDMETHOD(RemovePlayerFromGroup) (THIS_ const DPNID idGroup, const DPNID idClient, PVOID const pvAsyncContext, DPNHANDLE *const phAsyncHandle, const DWORD dwFlags) PURE; + STDMETHOD(SetGroupInfo) (THIS_ const DPNID dpnid,DPN_GROUP_INFO *const pdpnGroupInfo,PVOID const pvAsyncContext,DPNHANDLE *const phAsyncHandle, const DWORD dwFlags) PURE; + STDMETHOD(GetGroupInfo) (THIS_ const DPNID dpnid,DPN_GROUP_INFO *const pdpnGroupInfo,DWORD *const pdwSize,const DWORD dwFlags) PURE; + STDMETHOD(EnumPlayersAndGroups) (THIS_ DPNID *const prgdpnid, DWORD *const pcdpnid, const DWORD dwFlags) PURE; + STDMETHOD(EnumGroupMembers) (THIS_ const DPNID dpnid, DPNID *const prgdpnid, DWORD *const pcdpnid, const DWORD dwFlags) PURE; + STDMETHOD(SetPeerInfo) (THIS_ const DPN_PLAYER_INFO *const pdpnPlayerInfo,PVOID const pvAsyncContext,DPNHANDLE *const phAsyncHandle, const DWORD dwFlags) PURE; + STDMETHOD(GetPeerInfo) (THIS_ const DPNID dpnid,DPN_PLAYER_INFO *const pdpnPlayerInfo,DWORD *const pdwSize,const DWORD dwFlags) PURE; + STDMETHOD(GetPeerAddress) (THIS_ const DPNID dpnid,IDirectPlay8Address **const ppAddress,const DWORD dwFlags) PURE; + STDMETHOD(GetLocalHostAddresses) (THIS_ IDirectPlay8Address **const prgpAddress,DWORD *const pcAddress,const DWORD dwFlags) PURE; + STDMETHOD(Close) (THIS_ const DWORD dwFlags) PURE; + STDMETHOD(EnumHosts) (THIS_ PDPN_APPLICATION_DESC const pApplicationDesc,IDirectPlay8Address *const pAddrHost,IDirectPlay8Address *const pDeviceInfo,PVOID const pUserEnumData,const DWORD dwUserEnumDataSize,const DWORD dwEnumCount,const DWORD dwRetryInterval,const DWORD dwTimeOut,PVOID const pvUserContext,DPNHANDLE *const pAsyncHandle,const DWORD dwFlags) PURE; + STDMETHOD(DestroyPeer) (THIS_ const DPNID dpnidClient, const void *const pvDestroyData, const DWORD dwDestroyDataSize, const DWORD dwFlags) PURE; + STDMETHOD(ReturnBuffer) (THIS_ const DPNHANDLE hBufferHandle,const DWORD dwFlags) PURE; + STDMETHOD(GetPlayerContext) (THIS_ const DPNID dpnid,PVOID *const ppvPlayerContext,const DWORD dwFlags) PURE; + STDMETHOD(GetGroupContext) (THIS_ const DPNID dpnid,PVOID *const ppvGroupContext,const DWORD dwFlags) PURE; + STDMETHOD(GetCaps) (THIS_ DPN_CAPS *const pdpCaps,const DWORD dwFlags) PURE; + STDMETHOD(SetCaps) (THIS_ const DPN_CAPS *const pdpCaps, const DWORD dwFlags) PURE; + STDMETHOD(SetSPCaps) (THIS_ const GUID * const pguidSP, const DPN_SP_CAPS *const pdpspCaps, const DWORD dwFlags ) PURE; + STDMETHOD(GetSPCaps) (THIS_ const GUID * const pguidSP, DPN_SP_CAPS *const pdpspCaps,const DWORD dwFlags) PURE; + STDMETHOD(GetConnectionInfo) (THIS_ const DPNID dpnid, DPN_CONNECTION_INFO *const pdpConnectionInfo,const DWORD dwFlags) PURE; + STDMETHOD(RegisterLobby) (THIS_ const DPNHANDLE dpnHandle, struct IDirectPlay8LobbiedApplication *const pIDP8LobbiedApplication,const DWORD dwFlags) PURE; + STDMETHOD(TerminateSession) (THIS_ void *const pvTerminateData,const DWORD dwTerminateDataSize,const DWORD dwFlags) PURE; +}; + + + +// +// COM definition for DirectPlay8 Thread Pool interface +// +#undef INTERFACE // External COM Implementation +#define INTERFACE IDirectPlay8ThreadPool +DECLARE_INTERFACE_(IDirectPlay8ThreadPool,IUnknown) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface) (THIS_ DP8REFIID riid, LPVOID *ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + /*** IDirectPlay8ThreadPool methods ***/ + STDMETHOD(Initialize) (THIS_ PVOID const pvUserContext, const PFNDPNMESSAGEHANDLER pfn, const DWORD dwFlags) PURE; + STDMETHOD(Close) (THIS_ const DWORD dwFlags) PURE; + STDMETHOD(GetThreadCount) (THIS_ const DWORD dwProcessorNum, DWORD *const pdwNumThreads, const DWORD dwFlags) PURE; + STDMETHOD(SetThreadCount) (THIS_ const DWORD dwProcessorNum, const DWORD dwNumThreads, const DWORD dwFlags) PURE; + STDMETHOD(DoWork) (THIS_ const DWORD dwAllowedTimeSlice, const DWORD dwFlags) PURE; +}; + + +// +// COM definition for DirectPlay8 NAT Resolver interface +// +#undef INTERFACE // External COM Implementation +#define INTERFACE IDirectPlay8NATResolver +DECLARE_INTERFACE_(IDirectPlay8NATResolver,IUnknown) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface) (THIS_ DP8REFIID riid, LPVOID *ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + /*** IDirectPlay8NATResolver methods ***/ + STDMETHOD(Initialize) (THIS_ PVOID const pvUserContext, const PFNDPNMESSAGEHANDLER pfn, const DWORD dwFlags) PURE; + STDMETHOD(Start) (THIS_ IDirectPlay8Address **const ppDevices, const DWORD dwNumDevices, const DWORD dwFlags) PURE; + STDMETHOD(Close) (THIS_ const DWORD dwFlags) PURE; + STDMETHOD(EnumDevices) (THIS_ DPN_SERVICE_PROVIDER_INFO *const pSPInfoBuffer, PDWORD const pdwBufferSize, PDWORD const pdwNumDevices, const DWORD dwFlags) PURE; + STDMETHOD(GetAddresses) (THIS_ IDirectPlay8Address **const ppAddresses, DWORD *const pdwNumAddresses, const DWORD dwFlags) PURE; +}; + + +/**************************************************************************** + * + * IDirectPlay8 application interface macros + * + ****************************************************************************/ + +#if !defined(__cplusplus) || defined(CINTERFACE) + +#define IDirectPlay8Client_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirectPlay8Client_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectPlay8Client_Release(p) (p)->lpVtbl->Release(p) +#define IDirectPlay8Client_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c) +#define IDirectPlay8Client_EnumServiceProviders(p,a,b,c,d,e,f) (p)->lpVtbl->EnumServiceProviders(p,a,b,c,d,e,f) +#define IDirectPlay8Client_EnumHosts(p,a,b,c,d,e,f,g,h,i,j,k) (p)->lpVtbl->EnumHosts(p,a,b,c,d,e,f,g,h,i,j,k) +#define IDirectPlay8Client_CancelAsyncOperation(p,a,b) (p)->lpVtbl->CancelAsyncOperation(p,a,b) +#define IDirectPlay8Client_Connect(p,a,b,c,d,e,f,g,h,i,j) (p)->lpVtbl->Connect(p,a,b,c,d,e,f,g,h,i,j) +#define IDirectPlay8Client_Send(p,a,b,c,d,e,f) (p)->lpVtbl->Send(p,a,b,c,d,e,f) +#define IDirectPlay8Client_GetSendQueueInfo(p,a,b,c) (p)->lpVtbl->GetSendQueueInfo(p,a,b,c) +#define IDirectPlay8Client_GetApplicationDesc(p,a,b,c) (p)->lpVtbl->GetApplicationDesc(p,a,b,c) +#define IDirectPlay8Client_SetClientInfo(p,a,b,c,d) (p)->lpVtbl->SetClientInfo(p,a,b,c,d) +#define IDirectPlay8Client_GetServerInfo(p,a,b,c) (p)->lpVtbl->GetServerInfo(p,a,b,c) +#define IDirectPlay8Client_GetServerAddress(p,a,b) (p)->lpVtbl->GetServerAddress(p,a,b) +#define IDirectPlay8Client_Close(p,a) (p)->lpVtbl->Close(p,a) +#define IDirectPlay8Client_ReturnBuffer(p,a,b) (p)->lpVtbl->ReturnBuffer(p,a,b) +#define IDirectPlay8Client_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b) +#define IDirectPlay8Client_SetCaps(p,a,b) (p)->lpVtbl->SetCaps(p,a,b) +#define IDirectPlay8Client_SetSPCaps(p,a,b,c) (p)->lpVtbl->SetSPCaps(p,a,b,c) +#define IDirectPlay8Client_GetSPCaps(p,a,b,c) (p)->lpVtbl->GetSPCaps(p,a,b,c) +#define IDirectPlay8Client_GetConnectionInfo(p,a,b) (p)->lpVtbl->GetConnectionInfo(p,a,b) +#define IDirectPlay8Client_RegisterLobby(p,a,b,c) (p)->lpVtbl->RegisterLobby(p,a,b,c) + +#define IDirectPlay8Server_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirectPlay8Server_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectPlay8Server_Release(p) (p)->lpVtbl->Release(p) +#define IDirectPlay8Server_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c) +#define IDirectPlay8Server_EnumServiceProviders(p,a,b,c,d,e,f) (p)->lpVtbl->EnumServiceProviders(p,a,b,c,d,e,f) +#define IDirectPlay8Server_CancelAsyncOperation(p,a,b) (p)->lpVtbl->CancelAsyncOperation(p,a,b) +#define IDirectPlay8Server_GetSendQueueInfo(p,a,b,c,d) (p)->lpVtbl->GetSendQueueInfo(p,a,b,c,d) +#define IDirectPlay8Server_GetApplicationDesc(p,a,b,c) (p)->lpVtbl->GetApplicationDesc(p,a,b,c) +#define IDirectPlay8Server_SetServerInfo(p,a,b,c,d) (p)->lpVtbl->SetServerInfo(p,a,b,c,d) +#define IDirectPlay8Server_GetClientInfo(p,a,b,c,d) (p)->lpVtbl->GetClientInfo(p,a,b,c,d) +#define IDirectPlay8Server_GetClientAddress(p,a,b,c) (p)->lpVtbl->GetClientAddress(p,a,b,c) +#define IDirectPlay8Server_GetLocalHostAddresses(p,a,b,c) (p)->lpVtbl->GetLocalHostAddresses(p,a,b,c) +#define IDirectPlay8Server_SetApplicationDesc(p,a,b) (p)->lpVtbl->SetApplicationDesc(p,a,b) +#define IDirectPlay8Server_Host(p,a,b,c,d,e,f,g) (p)->lpVtbl->Host(p,a,b,c,d,e,f,g) +#define IDirectPlay8Server_SendTo(p,a,b,c,d,e,f,g) (p)->lpVtbl->SendTo(p,a,b,c,d,e,f,g) +#define IDirectPlay8Server_CreateGroup(p,a,b,c,d,e) (p)->lpVtbl->CreateGroup(p,a,b,c,d,e) +#define IDirectPlay8Server_DestroyGroup(p,a,b,c,d) (p)->lpVtbl->DestroyGroup(p,a,b,c,d) +#define IDirectPlay8Server_AddPlayerToGroup(p,a,b,c,d,e) (p)->lpVtbl->AddPlayerToGroup(p,a,b,c,d,e) +#define IDirectPlay8Server_RemovePlayerFromGroup(p,a,b,c,d,e) (p)->lpVtbl->RemovePlayerFromGroup(p,a,b,c,d,e) +#define IDirectPlay8Server_SetGroupInfo(p,a,b,c,d,e) (p)->lpVtbl->SetGroupInfo(p,a,b,c,d,e) +#define IDirectPlay8Server_GetGroupInfo(p,a,b,c,d) (p)->lpVtbl->GetGroupInfo(p,a,b,c,d) +#define IDirectPlay8Server_EnumPlayersAndGroups(p,a,b,c) (p)->lpVtbl->EnumPlayersAndGroups(p,a,b,c) +#define IDirectPlay8Server_EnumGroupMembers(p,a,b,c,d) (p)->lpVtbl->EnumGroupMembers(p,a,b,c,d) +#define IDirectPlay8Server_Close(p,a) (p)->lpVtbl->Close(p,a) +#define IDirectPlay8Server_DestroyClient(p,a,b,c,d) (p)->lpVtbl->DestroyClient(p,a,b,c,d) +#define IDirectPlay8Server_ReturnBuffer(p,a,b) (p)->lpVtbl->ReturnBuffer(p,a,b) +#define IDirectPlay8Server_GetPlayerContext(p,a,b,c) (p)->lpVtbl->GetPlayerContext(p,a,b,c) +#define IDirectPlay8Server_GetGroupContext(p,a,b,c) (p)->lpVtbl->GetGroupContext(p,a,b,c) +#define IDirectPlay8Server_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b) +#define IDirectPlay8Server_SetCaps(p,a,b) (p)->lpVtbl->SetCaps(p,a,b) +#define IDirectPlay8Server_SetSPCaps(p,a,b,c) (p)->lpVtbl->SetSPCaps(p,a,b,c) +#define IDirectPlay8Server_GetSPCaps(p,a,b,c) (p)->lpVtbl->GetSPCaps(p,a,b,c) +#define IDirectPlay8Server_GetConnectionInfo(p,a,b,c) (p)->lpVtbl->GetConnectionInfo(p,a,b,c) +#define IDirectPlay8Server_RegisterLobby(p,a,b,c) (p)->lpVtbl->RegisterLobby(p,a,b,c) + +#define IDirectPlay8Peer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirectPlay8Peer_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectPlay8Peer_Release(p) (p)->lpVtbl->Release(p) +#define IDirectPlay8Peer_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c) +#define IDirectPlay8Peer_EnumServiceProviders(p,a,b,c,d,e,f) (p)->lpVtbl->EnumServiceProviders(p,a,b,c,d,e,f) +#define IDirectPlay8Peer_CancelAsyncOperation(p,a,b) (p)->lpVtbl->CancelAsyncOperation(p,a,b) +#define IDirectPlay8Peer_Connect(p,a,b,c,d,e,f,g,h,i,j,k) (p)->lpVtbl->Connect(p,a,b,c,d,e,f,g,h,i,j,k) +#define IDirectPlay8Peer_SendTo(p,a,b,c,d,e,f,g) (p)->lpVtbl->SendTo(p,a,b,c,d,e,f,g) +#define IDirectPlay8Peer_GetSendQueueInfo(p,a,b,c,d) (p)->lpVtbl->GetSendQueueInfo(p,a,b,c,d) +#define IDirectPlay8Peer_Host(p,a,b,c,d,e,f,g) (p)->lpVtbl->Host(p,a,b,c,d,e,f,g) +#define IDirectPlay8Peer_GetApplicationDesc(p,a,b,c) (p)->lpVtbl->GetApplicationDesc(p,a,b,c) +#define IDirectPlay8Peer_SetApplicationDesc(p,a,b) (p)->lpVtbl->SetApplicationDesc(p,a,b) +#define IDirectPlay8Peer_CreateGroup(p,a,b,c,d,e) (p)->lpVtbl->CreateGroup(p,a,b,c,d,e) +#define IDirectPlay8Peer_DestroyGroup(p,a,b,c,d) (p)->lpVtbl->DestroyGroup(p,a,b,c,d) +#define IDirectPlay8Peer_AddPlayerToGroup(p,a,b,c,d,e) (p)->lpVtbl->AddPlayerToGroup(p,a,b,c,d,e) +#define IDirectPlay8Peer_RemovePlayerFromGroup(p,a,b,c,d,e) (p)->lpVtbl->RemovePlayerFromGroup(p,a,b,c,d,e) +#define IDirectPlay8Peer_SetGroupInfo(p,a,b,c,d,e) (p)->lpVtbl->SetGroupInfo(p,a,b,c,d,e) +#define IDirectPlay8Peer_GetGroupInfo(p,a,b,c,d) (p)->lpVtbl->GetGroupInfo(p,a,b,c,d) +#define IDirectPlay8Peer_EnumPlayersAndGroups(p,a,b,c) (p)->lpVtbl->EnumPlayersAndGroups(p,a,b,c) +#define IDirectPlay8Peer_EnumGroupMembers(p,a,b,c,d) (p)->lpVtbl->EnumGroupMembers(p,a,b,c,d) +#define IDirectPlay8Peer_SetPeerInfo(p,a,b,c,d) (p)->lpVtbl->SetPeerInfo(p,a,b,c,d) +#define IDirectPlay8Peer_GetPeerInfo(p,a,b,c,d) (p)->lpVtbl->GetPeerInfo(p,a,b,c,d) +#define IDirectPlay8Peer_GetPeerAddress(p,a,b,c) (p)->lpVtbl->GetPeerAddress(p,a,b,c) +#define IDirectPlay8Peer_GetLocalHostAddresses(p,a,b,c) (p)->lpVtbl->GetLocalHostAddresses(p,a,b,c) +#define IDirectPlay8Peer_Close(p,a) (p)->lpVtbl->Close(p,a) +#define IDirectPlay8Peer_EnumHosts(p,a,b,c,d,e,f,g,h,i,j,k) (p)->lpVtbl->EnumHosts(p,a,b,c,d,e,f,g,h,i,j,k) +#define IDirectPlay8Peer_DestroyPeer(p,a,b,c,d) (p)->lpVtbl->DestroyPeer(p,a,b,c,d) +#define IDirectPlay8Peer_ReturnBuffer(p,a,b) (p)->lpVtbl->ReturnBuffer(p,a,b) +#define IDirectPlay8Peer_GetPlayerContext(p,a,b,c) (p)->lpVtbl->GetPlayerContext(p,a,b,c) +#define IDirectPlay8Peer_GetGroupContext(p,a,b,c) (p)->lpVtbl->GetGroupContext(p,a,b,c) +#define IDirectPlay8Peer_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b) +#define IDirectPlay8Peer_SetCaps(p,a,b) (p)->lpVtbl->SetCaps(p,a,b) +#define IDirectPlay8Peer_SetSPCaps(p,a,b,c) (p)->lpVtbl->SetSPCaps(p,a,b,c) +#define IDirectPlay8Peer_GetSPCaps(p,a,b,c) (p)->lpVtbl->GetSPCaps(p,a,b,c) +#define IDirectPlay8Peer_GetConnectionInfo(p,a,b,c) (p)->lpVtbl->GetConnectionInfo(p,a,b,c) +#define IDirectPlay8Peer_RegisterLobby(p,a,b,c) (p)->lpVtbl->RegisterLobby(p,a,b,c) +#define IDirectPlay8Peer_TerminateSession(p,a,b,c) (p)->lpVtbl->TerminateSession(p,a,b,c) + +#define IDirectPlay8ThreadPool_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirectPlay8ThreadPool_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectPlay8ThreadPool_Release(p) (p)->lpVtbl->Release(p) +#define IDirectPlay8ThreadPool_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c) +#define IDirectPlay8ThreadPool_Close(p,a) (p)->lpVtbl->Close(p,a) +#define IDirectPlay8ThreadPool_GetThreadCount(p,a,b,c) (p)->lpVtbl->GetThreadCount(p,a,b,c) +#define IDirectPlay8ThreadPool_SetThreadCount(p,a,b,c) (p)->lpVtbl->SetThreadCount(p,a,b,c) +#define IDirectPlay8ThreadPool_DoWork(p,a,b) (p)->lpVtbl->DoWork(p,a,b) + +#define IDirectPlay8NATResolver_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirectPlay8NATResolver_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectPlay8NATResolver_Release(p) (p)->lpVtbl->Release(p) +#define IDirectPlay8NATResolver_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c) +#define IDirectPlay8NATResolver_Start(p,a,b,c) (p)->lpVtbl->Start(p,a,b,c) +#define IDirectPlay8NATResolver_Close(p,a) (p)->lpVtbl->Close(p,a) +#define IDirectPlay8NATResolver_EnumDevices(p,a,b,c,d) (p)->lpVtbl->EnumDevices(p,a,b,c,d) +#define IDirectPlay8NATResolver_GetAddresses(p,a,b,c) (p)->lpVtbl->GetAddresses(p,a,b,c) + +#else /* C++ */ + +#define IDirectPlay8Client_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirectPlay8Client_AddRef(p) (p)->AddRef() +#define IDirectPlay8Client_Release(p) (p)->Release() +#define IDirectPlay8Client_Initialize(p,a,b,c) (p)->Initialize(a,b,c) +#define IDirectPlay8Client_EnumServiceProviders(p,a,b,c,d,e,f) (p)->EnumServiceProviders(a,b,c,d,e,f) +#define IDirectPlay8Client_EnumHosts(p,a,b,c,d,e,f,g,h,i,j,k) (p)->EnumHosts(a,b,c,d,e,f,g,h,i,j,k) +#define IDirectPlay8Client_CancelAsyncOperation(p,a,b) (p)->CancelAsyncOperation(a,b) +#define IDirectPlay8Client_Connect(p,a,b,c,d,e,f,g,h,i,j) (p)->Connect(a,b,c,d,e,f,g,h,i,j) +#define IDirectPlay8Client_Send(p,a,b,c,d,e,f) (p)->Send(a,b,c,d,e,f) +#define IDirectPlay8Client_GetSendQueueInfo(p,a,b,c) (p)->GetSendQueueInfo(a,b,c) +#define IDirectPlay8Client_GetApplicationDesc(p,a,b,c) (p)->GetApplicationDesc(a,b,c) +#define IDirectPlay8Client_SetClientInfo(p,a,b,c,d) (p)->SetClientInfo(a,b,c,d) +#define IDirectPlay8Client_GetServerInfo(p,a,b,c) (p)->GetServerInfo(a,b,c) +#define IDirectPlay8Client_GetServerAddress(p,a,b) (p)->GetServerAddress(a,b) +#define IDirectPlay8Client_Close(p,a) (p)->Close(a) +#define IDirectPlay8Client_ReturnBuffer(p,a,b) (p)->ReturnBuffer(a,b) +#define IDirectPlay8Client_GetCaps(p,a,b) (p)->GetCaps(a,b) +#define IDirectPlay8Client_SetCaps(p,a,b) (p)->SetCaps(a,b) +#define IDirectPlay8Client_SetSPCaps(p,a,b,c) (p)->SetSPCaps(a,b,c) +#define IDirectPlay8Client_GetSPCaps(p,a,b,c) (p)->GetSPCaps(a,b,c) +#define IDirectPlay8Client_GetConnectionInfo(p,a,b) (p)->GetConnectionInfo(a,b) +#define IDirectPlay8Client_RegisterLobby(p,a,b,c) (p)->RegisterLobby(a,b,c) + +#define IDirectPlay8Server_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirectPlay8Server_AddRef(p) (p)->AddRef() +#define IDirectPlay8Server_Release(p) (p)->Release() +#define IDirectPlay8Server_Initialize(p,a,b,c) (p)->Initialize(a,b,c) +#define IDirectPlay8Server_EnumServiceProviders(p,a,b,c,d,e,f) (p)->EnumServiceProviders(a,b,c,d,e,f) +#define IDirectPlay8Server_CancelAsyncOperation(p,a,b) (p)->CancelAsyncOperation(a,b) +#define IDirectPlay8Server_GetSendQueueInfo(p,a,b,c,d) (p)->GetSendQueueInfo(a,b,c,d) +#define IDirectPlay8Server_GetApplicationDesc(p,a,b,c) (p)->GetApplicationDesc(a,b,c) +#define IDirectPlay8Server_SetServerInfo(p,a,b,c,d) (p)->SetServerInfo(a,b,c,d) +#define IDirectPlay8Server_GetClientInfo(p,a,b,c,d) (p)->GetClientInfo(a,b,c,d) +#define IDirectPlay8Server_GetClientAddress(p,a,b,c) (p)->GetClientAddress(a,b,c) +#define IDirectPlay8Server_GetLocalHostAddresses(p,a,b,c) (p)->GetLocalHostAddresses(a,b,c) +#define IDirectPlay8Server_SetApplicationDesc(p,a,b) (p)->SetApplicationDesc(a,b) +#define IDirectPlay8Server_Host(p,a,b,c,d,e,f,g) (p)->Host(a,b,c,d,e,f,g) +#define IDirectPlay8Server_SendTo(p,a,b,c,d,e,f,g) (p)->SendTo(a,b,c,d,e,f,g) +#define IDirectPlay8Server_CreateGroup(p,a,b,c,d,e) (p)->CreateGroup(a,b,c,d,e) +#define IDirectPlay8Server_DestroyGroup(p,a,b,c,d) (p)->DestroyGroup(a,b,c,d) +#define IDirectPlay8Server_AddPlayerToGroup(p,a,b,c,d,e) (p)->AddPlayerToGroup(a,b,c,d,e) +#define IDirectPlay8Server_RemovePlayerFromGroup(p,a,b,c,d,e) (p)->RemovePlayerFromGroup(a,b,c,d,e) +#define IDirectPlay8Server_SetGroupInfo(p,a,b,c,d,e) (p)->SetGroupInfo(a,b,c,d,e) +#define IDirectPlay8Server_GetGroupInfo(p,a,b,c,d) (p)->GetGroupInfo(a,b,c,d) +#define IDirectPlay8Server_EnumPlayersAndGroups(p,a,b,c) (p)->EnumPlayersAndGroups(a,b,c) +#define IDirectPlay8Server_EnumGroupMembers(p,a,b,c,d) (p)->EnumGroupMembers(a,b,c,d) +#define IDirectPlay8Server_Close(p,a) (p)->Close(a) +#define IDirectPlay8Server_DestroyClient(p,a,b,c,d) (p)->DestroyClient(a,b,c,d) +#define IDirectPlay8Server_ReturnBuffer(p,a,b) (p)->ReturnBuffer(a,b) +#define IDirectPlay8Server_GetPlayerContext(p,a,b,c) (p)->GetPlayerContext(a,b,c) +#define IDirectPlay8Server_GetGroupContext(p,a,b,c) (p)->GetGroupContext(a,b,c) +#define IDirectPlay8Server_GetCaps(p,a,b) (p)->GetCaps(a,b) +#define IDirectPlay8Server_SetCaps(p,a,b) (p)->SetCaps(a,b) +#define IDirectPlay8Server_SetSPCaps(p,a,b,c) (p)->SetSPCaps(a,b,c) +#define IDirectPlay8Server_GetSPCaps(p,a,b,c) (p)->GetSPCaps(a,b,c) +#define IDirectPlay8Server_GetConnectionInfo(p,a,b,c) (p)->GetConnectionInfo(a,b,c) +#define IDirectPlay8Server_RegisterLobby(p,a,b,c) (p)->RegisterLobby(a,b,c) + +#define IDirectPlay8Peer_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirectPlay8Peer_AddRef(p) (p)->AddRef() +#define IDirectPlay8Peer_Release(p) (p)->Release() +#define IDirectPlay8Peer_Initialize(p,a,b,c) (p)->Initialize(a,b,c) +#define IDirectPlay8Peer_EnumServiceProviders(p,a,b,c,d,e,f) (p)->EnumServiceProviders(a,b,c,d,e,f) +#define IDirectPlay8Peer_CancelAsyncOperation(p,a,b) (p)->CancelAsyncOperation(a,b) +#define IDirectPlay8Peer_Connect(p,a,b,c,d,e,f,g,h,i,j,k) (p)->Connect(a,b,c,d,e,f,g,h,i,j,k) +#define IDirectPlay8Peer_SendTo(p,a,b,c,d,e,f,g) (p)->SendTo(a,b,c,d,e,f,g) +#define IDirectPlay8Peer_GetSendQueueInfo(p,a,b,c,d) (p)->GetSendQueueInfo(a,b,c,d) +#define IDirectPlay8Peer_Host(p,a,b,c,d,e,f,g) (p)->Host(a,b,c,d,e,f,g) +#define IDirectPlay8Peer_GetApplicationDesc(p,a,b,c) (p)->GetApplicationDesc(a,b,c) +#define IDirectPlay8Peer_SetApplicationDesc(p,a,b) (p)->SetApplicationDesc(a,b) +#define IDirectPlay8Peer_CreateGroup(p,a,b,c,d,e) (p)->CreateGroup(a,b,c,d,e) +#define IDirectPlay8Peer_DestroyGroup(p,a,b,c,d) (p)->DestroyGroup(a,b,c,d) +#define IDirectPlay8Peer_AddPlayerToGroup(p,a,b,c,d,e) (p)->AddPlayerToGroup(a,b,c,d,e) +#define IDirectPlay8Peer_RemovePlayerFromGroup(p,a,b,c,d,e) (p)->RemovePlayerFromGroup(a,b,c,d,e) +#define IDirectPlay8Peer_SetGroupInfo(p,a,b,c,d,e) (p)->SetGroupInfo(a,b,c,d,e) +#define IDirectPlay8Peer_GetGroupInfo(p,a,b,c,d) (p)->GetGroupInfo(a,b,c,d) +#define IDirectPlay8Peer_EnumPlayersAndGroups(p,a,b,c) (p)->EnumPlayersAndGroups(a,b,c) +#define IDirectPlay8Peer_EnumGroupMembers(p,a,b,c,d) (p)->EnumGroupMembers(a,b,c,d) +#define IDirectPlay8Peer_SetPeerInfo(p,a,b,c,d) (p)->SetPeerInfo(a,b,c,d) +#define IDirectPlay8Peer_GetPeerInfo(p,a,b,c,d) (p)->GetPeerInfo(a,b,c,d) +#define IDirectPlay8Peer_GetPeerAddress(p,a,b,c) (p)->GetPeerAddress(a,b,c) +#define IDirectPlay8Peer_GetLocalHostAddresses(p,a,b,c) (p)->GetLocalHostAddresses(a,b,c) +#define IDirectPlay8Peer_Close(p,a) (p)->Close(a) +#define IDirectPlay8Peer_EnumHosts(p,a,b,c,d,e,f,g,h,i,j,k) (p)->EnumHosts(a,b,c,d,e,f,g,h,i,j,k) +#define IDirectPlay8Peer_DestroyPeer(p,a,b,c,d) (p)->DestroyPeer(a,b,c,d) +#define IDirectPlay8Peer_ReturnBuffer(p,a,b) (p)->ReturnBuffer(a,b) +#define IDirectPlay8Peer_GetPlayerContext(p,a,b,c) (p)->GetPlayerContext(a,b,c) +#define IDirectPlay8Peer_GetGroupContext(p,a,b,c) (p)->GetGroupContext(a,b,c) +#define IDirectPlay8Peer_GetCaps(p,a,b) (p)->GetCaps(a,b) +#define IDirectPlay8Peer_SetCaps(p,a,b) (p)->SetCaps(a,b) +#define IDirectPlay8Peer_SetSPCaps(p,a,b,c) (p)->SetSPCaps(a,b,c) +#define IDirectPlay8Peer_GetSPCaps(p,a,b,c) (p)->GetSPCaps(a,b,c) +#define IDirectPlay8Peer_GetConnectionInfo(p,a,b,c) (p)->GetConnectionInfo(a,b,c) +#define IDirectPlay8Peer_RegisterLobby(p,a,b,c) (p)->RegisterLobby(a,b,c) +#define IDirectPlay8Peer_TerminateSession(p,a,b,c) (p)->TerminateSession(a,b,c) + +#define IDirectPlay8ThreadPool_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirectPlay8ThreadPool_AddRef(p) (p)->AddRef() +#define IDirectPlay8ThreadPool_Release(p) (p)->Release() +#define IDirectPlay8ThreadPool_Initialize(p,a,b,c) (p)->Initialize(a,b,c) +#define IDirectPlay8ThreadPool_Close(p,a) (p)->Close(a) +#define IDirectPlay8ThreadPool_GetThreadCount(p,a,b,c) (p)->GetThreadCount(a,b,c) +#define IDirectPlay8ThreadPool_SetThreadCount(p,a,b,c) (p)->SetThreadCount(a,b,c) +#define IDirectPlay8ThreadPool_DoWork(p,a,b) (p)->DoWork(a,b) + +#define IDirectPlay8NATResolver_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirectPlay8NATResolver_AddRef(p) (p)->AddRef() +#define IDirectPlay8NATResolver_Release(p) (p)->Release() +#define IDirectPlay8NATResolver_Initialize(p,a,b,c) (p)->Initialize(a,b,c) +#define IDirectPlay8NATResolver_Start(p,a,b,c) (p)->Start(a,b,c) +#define IDirectPlay8NATResolver_Close(p,a) (p)->Close(a) +#define IDirectPlay8NATResolver_EnumDevices(p,a,b,c,d) (p)->EnumDevices(a,b,c,d) +#define IDirectPlay8NATResolver_GetAddresses(p,a,b,c) (p)->GetAddresses(a,b,c) + +#endif + + + +/**************************************************************************** + * + * DIRECTPLAY8 ERRORS + * + * Errors are represented by negative values and cannot be combined. + * + ****************************************************************************/ + +#define _DPN_FACILITY_CODE 0x015 +#define _DPNHRESULT_BASE 0x8000 +#define MAKE_DPNHRESULT( code ) MAKE_HRESULT( 1, _DPN_FACILITY_CODE, ( code + _DPNHRESULT_BASE ) ) + +#define DPN_OK S_OK + +#define DPNSUCCESS_EQUAL MAKE_HRESULT( 0, _DPN_FACILITY_CODE, ( 0x5 + _DPNHRESULT_BASE ) ) +#define DPNSUCCESS_NOPLAYERSINGROUP MAKE_HRESULT( 0, _DPN_FACILITY_CODE, ( 0x8 + _DPNHRESULT_BASE ) ) // added for DirectX 9 +#define DPNSUCCESS_NOTEQUAL MAKE_HRESULT( 0, _DPN_FACILITY_CODE, (0x0A + _DPNHRESULT_BASE ) ) +#define DPNSUCCESS_PENDING MAKE_HRESULT( 0, _DPN_FACILITY_CODE, (0x0e + _DPNHRESULT_BASE ) ) + +#define DPNERR_ABORTED MAKE_DPNHRESULT( 0x30 ) +#define DPNERR_ADDRESSING MAKE_DPNHRESULT( 0x40 ) +#define DPNERR_ALREADYCLOSING MAKE_DPNHRESULT( 0x50 ) +#define DPNERR_ALREADYCONNECTED MAKE_DPNHRESULT( 0x60 ) +#define DPNERR_ALREADYDISCONNECTING MAKE_DPNHRESULT( 0x70 ) +#define DPNERR_ALREADYINITIALIZED MAKE_DPNHRESULT( 0x80 ) +#define DPNERR_ALREADYREGISTERED MAKE_DPNHRESULT( 0x90 ) +#define DPNERR_BUFFERTOOSMALL MAKE_DPNHRESULT( 0x100 ) +#define DPNERR_CANNOTCANCEL MAKE_DPNHRESULT( 0x110 ) +#define DPNERR_CANTCREATEGROUP MAKE_DPNHRESULT( 0x120 ) +#define DPNERR_CANTCREATEPLAYER MAKE_DPNHRESULT( 0x130 ) +#define DPNERR_CANTLAUNCHAPPLICATION MAKE_DPNHRESULT( 0x140 ) +#define DPNERR_CONNECTING MAKE_DPNHRESULT( 0x150 ) +#define DPNERR_CONNECTIONLOST MAKE_DPNHRESULT( 0x160 ) +#define DPNERR_CONVERSION MAKE_DPNHRESULT( 0x170 ) +#define DPNERR_DATATOOLARGE MAKE_DPNHRESULT( 0x175 ) +#define DPNERR_DOESNOTEXIST MAKE_DPNHRESULT( 0x180 ) +#define DPNERR_DPNSVRNOTAVAILABLE MAKE_DPNHRESULT( 0x185 ) +#define DPNERR_DUPLICATECOMMAND MAKE_DPNHRESULT( 0x190 ) +#define DPNERR_ENDPOINTNOTRECEIVING MAKE_DPNHRESULT( 0x200 ) +#define DPNERR_ENUMQUERYTOOLARGE MAKE_DPNHRESULT( 0x210 ) +#define DPNERR_ENUMRESPONSETOOLARGE MAKE_DPNHRESULT( 0x220 ) +#define DPNERR_EXCEPTION MAKE_DPNHRESULT( 0x230 ) +#define DPNERR_GENERIC E_FAIL +#define DPNERR_GROUPNOTEMPTY MAKE_DPNHRESULT( 0x240 ) +#define DPNERR_HOSTING MAKE_DPNHRESULT( 0x250 ) +#define DPNERR_HOSTREJECTEDCONNECTION MAKE_DPNHRESULT( 0x260 ) +#define DPNERR_HOSTTERMINATEDSESSION MAKE_DPNHRESULT( 0x270 ) +#define DPNERR_INCOMPLETEADDRESS MAKE_DPNHRESULT( 0x280 ) +#define DPNERR_INVALIDADDRESSFORMAT MAKE_DPNHRESULT( 0x290 ) +#define DPNERR_INVALIDAPPLICATION MAKE_DPNHRESULT( 0x300 ) +#define DPNERR_INVALIDCOMMAND MAKE_DPNHRESULT( 0x310 ) +#define DPNERR_INVALIDDEVICEADDRESS MAKE_DPNHRESULT( 0x320 ) +#define DPNERR_INVALIDENDPOINT MAKE_DPNHRESULT( 0x330 ) +#define DPNERR_INVALIDFLAGS MAKE_DPNHRESULT( 0x340 ) +#define DPNERR_INVALIDGROUP MAKE_DPNHRESULT( 0x350 ) +#define DPNERR_INVALIDHANDLE MAKE_DPNHRESULT( 0x360 ) +#define DPNERR_INVALIDHOSTADDRESS MAKE_DPNHRESULT( 0x370 ) +#define DPNERR_INVALIDINSTANCE MAKE_DPNHRESULT( 0x380 ) +#define DPNERR_INVALIDINTERFACE MAKE_DPNHRESULT( 0x390 ) +#define DPNERR_INVALIDOBJECT MAKE_DPNHRESULT( 0x400 ) +#define DPNERR_INVALIDPARAM E_INVALIDARG +#define DPNERR_INVALIDPASSWORD MAKE_DPNHRESULT( 0x410 ) +#define DPNERR_INVALIDPLAYER MAKE_DPNHRESULT( 0x420 ) +#define DPNERR_INVALIDPOINTER E_POINTER +#define DPNERR_INVALIDPRIORITY MAKE_DPNHRESULT( 0x430 ) +#define DPNERR_INVALIDSTRING MAKE_DPNHRESULT( 0x440 ) +#define DPNERR_INVALIDURL MAKE_DPNHRESULT( 0x450 ) +#define DPNERR_INVALIDVERSION MAKE_DPNHRESULT( 0x460 ) +#define DPNERR_NOCAPS MAKE_DPNHRESULT( 0x470 ) +#define DPNERR_NOCONNECTION MAKE_DPNHRESULT( 0x480 ) +#define DPNERR_NOHOSTPLAYER MAKE_DPNHRESULT( 0x490 ) +#define DPNERR_NOINTERFACE E_NOINTERFACE +#define DPNERR_NOMOREADDRESSCOMPONENTS MAKE_DPNHRESULT( 0x500 ) +#define DPNERR_NORESPONSE MAKE_DPNHRESULT( 0x510 ) +#define DPNERR_NOTALLOWED MAKE_DPNHRESULT( 0x520 ) +#define DPNERR_NOTHOST MAKE_DPNHRESULT( 0x530 ) +#define DPNERR_NOTREADY MAKE_DPNHRESULT( 0x540 ) +#define DPNERR_NOTREGISTERED MAKE_DPNHRESULT( 0x550 ) +#define DPNERR_OUTOFMEMORY E_OUTOFMEMORY +#define DPNERR_PENDING DPNSUCCESS_PENDING +#define DPNERR_PLAYERALREADYINGROUP MAKE_DPNHRESULT( 0x560 ) +#define DPNERR_PLAYERLOST MAKE_DPNHRESULT( 0x570 ) +#define DPNERR_PLAYERNOTINGROUP MAKE_DPNHRESULT( 0x580 ) +#define DPNERR_PLAYERNOTREACHABLE MAKE_DPNHRESULT( 0x590 ) +#define DPNERR_SENDTOOLARGE MAKE_DPNHRESULT( 0x600 ) +#define DPNERR_SESSIONFULL MAKE_DPNHRESULT( 0x610 ) +#define DPNERR_TABLEFULL MAKE_DPNHRESULT( 0x620 ) +#define DPNERR_TIMEDOUT MAKE_DPNHRESULT( 0x630 ) +#define DPNERR_UNINITIALIZED MAKE_DPNHRESULT( 0x640 ) +#define DPNERR_UNSUPPORTED E_NOTIMPL +#define DPNERR_USERCANCEL MAKE_DPNHRESULT( 0x650 ) + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/trunk/xray/xrNetServer/stdafx.h b/trunk/xray/xrNetServer/stdafx.h index 39fa1412..638b405a 100644 --- a/trunk/xray/xrNetServer/stdafx.h +++ b/trunk/xray/xrNetServer/stdafx.h @@ -13,7 +13,7 @@ #pragma warning(push) #pragma warning(disable:4995) -#include +#include "dplay8.h" #pragma warning(pop) #include "NET_Shared.h" diff --git a/trunk/xray/xrNetServer/xrNetServer.vcxproj b/trunk/xray/xrNetServer/xrNetServer.vcxproj index bb7016ee..e0e8b50d 100644 --- a/trunk/xray/xrNetServer/xrNetServer.vcxproj +++ b/trunk/xray/xrNetServer/xrNetServer.vcxproj @@ -1,5 +1,5 @@  - + Debug @@ -49,42 +49,56 @@ DynamicLibrary false + v140 DynamicLibrary false + v140 DynamicLibrary false + v140 DynamicLibrary false + v140 DynamicLibrary false MultiByte true + v140 DynamicLibrary false MultiByte true + v140 DynamicLibrary false MultiByte true + v140 DynamicLibrary false MultiByte true + v140 + + + v140 + + + v140 diff --git a/trunk/xray/xrODE/contrib/msvc7/ode_default/default.vcxproj b/trunk/xray/xrODE/contrib/msvc7/ode_default/default.vcxproj index 0ed71a0c..df2c922d 100644 --- a/trunk/xray/xrODE/contrib/msvc7/ode_default/default.vcxproj +++ b/trunk/xray/xrODE/contrib/msvc7/ode_default/default.vcxproj @@ -1,5 +1,5 @@  - + Debug @@ -53,46 +53,60 @@ Static MultiByte false + v140 DynamicLibrary Static MultiByte false + v140 DynamicLibrary false MultiByte true + v140 DynamicLibrary false MultiByte true + v140 DynamicLibrary false MultiByte true + v140 DynamicLibrary false MultiByte true + v140 DynamicLibrary Static MultiByte + v140 DynamicLibrary Static MultiByte + v140 + + + v140 + + + v140 diff --git a/trunk/xray/xrParticles/xrParticles.vcxproj b/trunk/xray/xrParticles/xrParticles.vcxproj index f90a995f..7deb4634 100644 --- a/trunk/xray/xrParticles/xrParticles.vcxproj +++ b/trunk/xray/xrParticles/xrParticles.vcxproj @@ -1,5 +1,5 @@  - + Debug @@ -49,42 +49,56 @@ DynamicLibrary false + v140 DynamicLibrary false + v140 DynamicLibrary false + v140 DynamicLibrary false + v140 DynamicLibrary false MultiByte true + v140 DynamicLibrary false MultiByte true + v140 DynamicLibrary false MultiByte true + v140 DynamicLibrary false MultiByte true + v140 + + + v140 + + + v140 diff --git a/trunk/xray/xrSound/xrSound.vcxproj b/trunk/xray/xrSound/xrSound.vcxproj index a65dc809..198d80a3 100644 --- a/trunk/xray/xrSound/xrSound.vcxproj +++ b/trunk/xray/xrSound/xrSound.vcxproj @@ -1,5 +1,5 @@  - + Debug @@ -26,15 +26,21 @@ DynamicLibrary MultiByte + v140 DynamicLibrary MultiByte true + v140 DynamicLibrary MultiByte + v140 + + + v140 diff --git a/trunk/xray/xrXMLParser/xrXMLParser.vcxproj b/trunk/xray/xrXMLParser/xrXMLParser.vcxproj index 80a3b588..2d0031b9 100644 --- a/trunk/xray/xrXMLParser/xrXMLParser.vcxproj +++ b/trunk/xray/xrXMLParser/xrXMLParser.vcxproj @@ -1,5 +1,5 @@  - + Debug @@ -49,44 +49,58 @@ DynamicLibrary false + v140 DynamicLibrary false + v140 DynamicLibrary false MultiByte + v140 DynamicLibrary false MultiByte + v140 DynamicLibrary false MultiByte true + v140 DynamicLibrary false MultiByte true + v140 DynamicLibrary false MultiByte true + v140 DynamicLibrary false MultiByte true + v140 + + + v140 + + + v140 diff --git a/trunk/xray/xr_3da/Blender_Recorder_StandartBinding.cpp b/trunk/xray/xr_3da/Blender_Recorder_StandartBinding.cpp index ac7254ff..a37a16bc 100644 --- a/trunk/xray/xr_3da/Blender_Recorder_StandartBinding.cpp +++ b/trunk/xray/xr_3da/Blender_Recorder_StandartBinding.cpp @@ -43,8 +43,8 @@ class cl_fog_plane : public R_constant_setup { plane.mul (denom); // Near/Far - float A = g_pGamePersistent->Environment().CurrentEnv.fog_near; - float B = 1/(g_pGamePersistent->Environment().CurrentEnv.fog_far - A); + float A = g_pGamePersistent->Environment().CurrentEnv->fog_near; + float B = 1/(g_pGamePersistent->Environment().CurrentEnv->fog_far - A); result.set (-plane.x*B, -plane.y*B, -plane.z*B, 1 - (plane.w-A)*B ); // view-plane } @@ -62,8 +62,8 @@ class cl_fog_params : public R_constant_setup { if (marker!=Device.dwFrame) { // Near/Far - float n = g_pGamePersistent->Environment().CurrentEnv.fog_near ; - float f = g_pGamePersistent->Environment().CurrentEnv.fog_far ; + float n = g_pGamePersistent->Environment().CurrentEnv->fog_near ; + float f = g_pGamePersistent->Environment().CurrentEnv->fog_far ; float r = 1/(f-n); result.set (-n*r, r, r, r); } @@ -77,8 +77,8 @@ class cl_fog_color : public R_constant_setup { Fvector4 result; virtual void setup (R_constant* C) { if (marker!=Device.dwFrame) { - CEnvDescriptor& desc = g_pGamePersistent->Environment().CurrentEnv; - result.set (desc.fog_color.x, desc.fog_color.y, desc.fog_color.z, 0); + CEnvDescriptor* desc = g_pGamePersistent->Environment().CurrentEnv; + result.set (desc->fog_color.x, desc->fog_color.y, desc->fog_color.z, 0); } RCache.set_c (C,result); } @@ -130,8 +130,8 @@ class cl_sun0_color : public R_constant_setup { Fvector4 result; virtual void setup (R_constant* C) { if (marker!=Device.dwFrame) { - CEnvDescriptor& desc = g_pGamePersistent->Environment().CurrentEnv; - result.set (desc.sun_color.x, desc.sun_color.y, desc.sun_color.z, 0); + CEnvDescriptor* desc = g_pGamePersistent->Environment().CurrentEnv; + result.set (desc->sun_color.x, desc->sun_color.y, desc->sun_color.z, 0); } RCache.set_c (C,result); } @@ -141,8 +141,8 @@ class cl_sun0_dir_w : public R_constant_setup { Fvector4 result; virtual void setup (R_constant* C) { if (marker!=Device.dwFrame) { - CEnvDescriptor& desc = g_pGamePersistent->Environment().CurrentEnv; - result.set (desc.sun_dir.x, desc.sun_dir.y, desc.sun_dir.z, 0); + CEnvDescriptor* desc = g_pGamePersistent->Environment().CurrentEnv; + result.set (desc->sun_dir.x, desc->sun_dir.y, desc->sun_dir.z, 0); } RCache.set_c (C,result); } @@ -153,8 +153,8 @@ class cl_sun0_dir_e : public R_constant_setup { virtual void setup (R_constant* C) { if (marker!=Device.dwFrame) { Fvector D; - CEnvDescriptor& desc = g_pGamePersistent->Environment().CurrentEnv; - Device.mView.transform_dir (D,desc.sun_dir); + CEnvDescriptor* desc = g_pGamePersistent->Environment().CurrentEnv; + Device.mView.transform_dir (D,desc->sun_dir); D.normalize (); result.set (D.x,D.y,D.z,0); } @@ -168,8 +168,8 @@ class cl_amb_color : public R_constant_setup { Fvector4 result; virtual void setup (R_constant* C) { if (marker!=Device.dwFrame) { - CEnvDescriptorMixer& desc = g_pGamePersistent->Environment().CurrentEnv; - result.set (desc.ambient.x, desc.ambient.y, desc.ambient.z, desc.weight); + CEnvDescriptorMixer* desc = g_pGamePersistent->Environment().CurrentEnv; + result.set (desc->ambient.x, desc->ambient.y, desc->ambient.z, desc->weight); } RCache.set_c (C,result); } @@ -179,8 +179,8 @@ class cl_hemi_color : public R_constant_setup { Fvector4 result; virtual void setup (R_constant* C) { if (marker!=Device.dwFrame) { - CEnvDescriptor& desc = g_pGamePersistent->Environment().CurrentEnv; - result.set (desc.hemi_color.x, desc.hemi_color.y, desc.hemi_color.z, desc.hemi_color.w); + CEnvDescriptor* desc = g_pGamePersistent->Environment().CurrentEnv; + result.set (desc->hemi_color.x, desc->hemi_color.y, desc->hemi_color.z, desc->hemi_color.w); } RCache.set_c (C,result); } diff --git a/trunk/xray/xr_3da/CameraManager.cpp b/trunk/xray/xr_3da/CameraManager.cpp index 1a1d0210..532d9cc6 100644 --- a/trunk/xray/xr_3da/CameraManager.cpp +++ b/trunk/xray/xr_3da/CameraManager.cpp @@ -198,7 +198,7 @@ void CCameraManager::RemovePPEffector(EEffectorPPType type) void CCameraManager::Update(const CCameraBase* C) { - Update(C->vPosition,C->vDirection,C->vNormal, C->f_fov, C->f_aspect, g_pGamePersistent->Environment().CurrentEnv.far_plane, C->m_Flags.flags); + Update(C->vPosition,C->vDirection,C->vNormal, C->f_fov, C->f_aspect, g_pGamePersistent->Environment().CurrentEnv->far_plane, C->m_Flags.flags); } void CCameraManager::Update(const Fvector& P, const Fvector& D, const Fvector& N, float fFOV_Dest, float fASPECT_Dest, float fFAR_Dest, u32 flags) { diff --git a/trunk/xray/xr_3da/Device_destroy.cpp b/trunk/xray/xr_3da/Device_destroy.cpp index 06ec6528..97eef785 100644 --- a/trunk/xray/xr_3da/Device_destroy.cpp +++ b/trunk/xray/xr_3da/Device_destroy.cpp @@ -50,7 +50,6 @@ void CRenderDevice::Destroy (void) { #include "IGame_Level.h" #include "CustomHUD.h" -extern BOOL bNeed_re_create_env; void CRenderDevice::Reset (bool precache) { #ifdef DEBUG @@ -77,7 +76,7 @@ void CRenderDevice::Reset (bool precache) if (g_pGamePersistent) { //. g_pGamePersistent->Environment().OnDeviceCreate(); - bNeed_re_create_env = TRUE; + g_pGamePersistent->Environment().bNeed_re_create_env = TRUE; } _SetupStates (); if (precache) diff --git a/trunk/xray/xr_3da/Environment.cpp b/trunk/xray/xr_3da/Environment.cpp index 0db2d3bc..e70095e4 100644 --- a/trunk/xray/xr_3da/Environment.cpp +++ b/trunk/xray/xr_3da/Environment.cpp @@ -2,7 +2,7 @@ #pragma hdrstop #ifndef _EDITOR - #include "render.h" + #include "render.h" #endif #include "Environment.h" @@ -31,34 +31,44 @@ ENGINE_API float psVisDistance = 1.f; static const float MAX_NOISE_FREQ = 0.03f; -//#define WEATHER_LOGGING +#define WEATHER_LOGGING // real WEATHER->WFX transition time #define WFX_TRANS_TIME 5.f +const float MAX_DIST_FACTOR = 0.95f; ////////////////////////////////////////////////////////////////////////// // environment -CEnvironment::CEnvironment () +CEnvironment::CEnvironment () : + CurrentEnv (0), + m_ambients_config (0) { + bNeed_re_create_env = FALSE; bWFX = false; Current[0] = 0; Current[1] = 0; - CurrentWeather = 0; - CurrentWeatherName = 0; + CurrentWeather = 0; + CurrentWeatherName = 0; eff_Rain = 0; - eff_LensFlare = 0; - eff_Thunderbolt = 0; + eff_LensFlare = 0; + eff_Thunderbolt = 0; OnDeviceCreate (); #ifdef _EDITOR ed_from_time = 0.f; ed_to_time = DAY_LENGTH; #endif fGameTime = 0.f; - fTimeFactor = 12.f; + fTimeFactor = 12.f; wind_strength_factor = 0.f; wind_gust_factor = 0.f; + wind_blast_strength = 0.f; + wind_blast_direction.set(1.f,0.f,0.f); + + wind_blast_strength_start_value = 0.f; + wind_blast_strength_stop_value = 0.f; + // fill clouds hemi verts & faces const Fvector* verts; CloudsVerts.resize (xrHemisphereVertices(2,verts)); @@ -74,11 +84,129 @@ CEnvironment::CEnvironment () tsky0 = Device.Resources->_CreateTexture("$user$sky0"); tsky1 = Device.Resources->_CreateTexture("$user$sky1"); + + string_path file_name; + m_ambients_config = + xr_new( + FS.update_path( + file_name, + "$game_config$", + "environment\\ambients.ltx" + ), + TRUE, + TRUE, + FALSE + ); + m_sound_channels_config = + xr_new( + FS.update_path( + file_name, + "$game_config$", + "environment\\sound_channels.ltx" + ), + TRUE, + TRUE, + FALSE + ); + m_effects_config = + xr_new( + FS.update_path( + file_name, + "$game_config$", + "environment\\effects.ltx" + ), + TRUE, + TRUE, + FALSE + ); + m_suns_config = + xr_new( + FS.update_path( + file_name, + "$game_config$", + "environment\\suns.ltx" + ), + TRUE, + TRUE, + FALSE + ); + m_thunderbolt_collections_config = + xr_new( + FS.update_path( + file_name, + "$game_config$", + "environment\\thunderbolt_collections.ltx" + ), + TRUE, + TRUE, + FALSE + ); + m_thunderbolts_config = + xr_new( + FS.update_path( + file_name, + "$game_config$", + "environment\\thunderbolts.ltx" + ), + TRUE, + TRUE, + FALSE + ); + + CInifile* config = + xr_new( + FS.update_path( + file_name, + "$game_config$", + "environment\\environment.ltx" + ), + TRUE, + TRUE, + FALSE + ); + // params + p_var_alt = deg2rad(config->r_float ( "environment","altitude" )); + p_var_long = deg2rad (config->r_float ( "environment","delta_longitude" )); + p_min_dist = _min (.95f,config->r_float ( "environment","min_dist_factor" )); + p_tilt = deg2rad (config->r_float ( "environment","tilt" )); + p_second_prop = config->r_float ( "environment","second_propability" ); + clamp (p_second_prop,0.f,1.f); + p_sky_color = config->r_float ( "environment","sky_color" ); + p_sun_color = config->r_float ( "environment","sun_color" ); + p_fog_color = config->r_float ( "environment","fog_color" ); + + xr_delete (config); } CEnvironment::~CEnvironment () { xr_delete (PerlinNoise1D); OnDeviceDestroy (); + + VERIFY (m_ambients_config); + CInifile::Destroy (m_ambients_config); + m_ambients_config = 0; + + VERIFY (m_sound_channels_config); + CInifile::Destroy (m_sound_channels_config); + m_sound_channels_config = 0; + + VERIFY (m_effects_config); + CInifile::Destroy (m_effects_config); + m_effects_config = 0; + + VERIFY (m_suns_config); + CInifile::Destroy (m_suns_config); + m_suns_config = 0; + + VERIFY (m_thunderbolt_collections_config); + CInifile::Destroy (m_thunderbolt_collections_config); + m_thunderbolt_collections_config = 0; + + VERIFY (m_thunderbolts_config); + CInifile::Destroy (m_thunderbolts_config); + m_thunderbolts_config = 0; + + destroy_mixer (); } void CEnvironment::Invalidate() @@ -113,7 +241,7 @@ float CEnvironment::TimeWeight(float val, float min_t, float max_t) //Kondr48: ôóíêöèÿ ïåðåìîòêè âðåìåíè void CEnvironment::ChangeGameTime(float game_time) { - fGameTime = NormalizeTime(fGameTime + game_time); + fGameTime = NormalizeTime(fGameTime + game_time); }; void CEnvironment::SetGameTime(float game_time, float time_factor) @@ -137,13 +265,13 @@ void CEnvironment::SetWeather(shared_str name, bool forced) //. if(bAlready) return; if (name.size()) { //. bAlready = TRUE; - EnvsMapIt it = WeatherCycles.find(name); + EnvsMapIt it = WeatherCycles.find(name); if (it == WeatherCycles.end()) { Msg("! Invalid weather name: %s", name.c_str()); return; } - R_ASSERT3 (it!=WeatherCycles.end(),"Invalid weather name.",*name); + R_ASSERT3 (it!=WeatherCycles.end(),"Invalid weather name.",*name); CurrentCycleName = it->first; if (forced) {Invalidate(); } if (!bWFX){ @@ -154,11 +282,11 @@ void CEnvironment::SetWeather(shared_str name, bool forced) #ifdef WEATHER_LOGGING Msg ("Starting Cycle: %s [%s]",*name,forced?"forced":"deferred"); #endif - }else{ + }else{ #ifndef _EDITOR FATAL ("! Empty weather name"); #endif - } + } } bool CEnvironment::SetWeatherFX(shared_str name) @@ -175,7 +303,7 @@ bool CEnvironment::SetWeatherFX(shared_str name) float start_tm = fGameTime+rewind_tm; float current_length; float current_weight; - if (Current[0]->exec_time>Current[1]->exec_time){ + if (Current[0]->exec_time > Current[1]->exec_time){ float x = fGameTime>Current[0]->exec_time?fGameTime-Current[0]->exec_time:(DAY_LENGTH-Current[0]->exec_time)+fGameTime; current_length = (DAY_LENGTH-Current[0]->exec_time)+Current[1]->exec_time; current_weight = x/current_length; @@ -207,8 +335,8 @@ bool CEnvironment::SetWeatherFX(shared_str name) Current[1] = C1; #ifdef WEATHER_LOGGING Msg ("Starting WFX: '%s' - %3.2f sec",*name,wfx_time); - for (EnvIt l_it=CurrentWeather->begin(); l_it!=CurrentWeather->end(); l_it++) - Msg (". Env: '%s' Tm: %3.2f",*(*l_it)->sect_name,(*l_it)->exec_time); +// for (EnvIt l_it=CurrentWeather->begin(); l_it!=CurrentWeather->end(); l_it++) +// Msg (". Env: '%s' Tm: %3.2f",*(*l_it)->m_identifier.c_str(),(*l_it)->exec_time); #endif }else{ #ifndef _EDITOR @@ -218,6 +346,18 @@ bool CEnvironment::SetWeatherFX(shared_str name) return true; } +bool CEnvironment::StartWeatherFXFromTime(shared_str name, float time) +{ + if(!SetWeatherFX(name)) + return false; + + for (EnvIt it=CurrentWeather->begin(); it!=CurrentWeather->end(); it++) + (*it)->exec_time = NormalizeTime((*it)->exec_time - wfx_time + time); + + wfx_time = time; + return true; +} + void CEnvironment::StopWFX () { VERIFY (CurrentCycleName.size()); @@ -226,12 +366,14 @@ void CEnvironment::StopWFX () Current[0] = WFX_end_desc[0]; Current[1] = WFX_end_desc[1]; #ifdef WEATHER_LOGGING - Msg ("WFX - end. Weather: '%s' Desc: '%s'/'%s' GameTime: %3.2f",CurrentWeatherName.c_str(),Current[0]->sect_name.c_str(),Current[1]->sect_name.c_str(),fGameTime); + Msg ("WFX - end. Weather: '%s' Desc: '%s'/'%s' GameTime: %3.2f",CurrentWeatherName.c_str(),Current[0]->m_identifier.c_str(),Current[1]->m_identifier.c_str(),fGameTime); #endif } -IC bool lb_env_pred(const CEnvDescriptor* x, float val) -{ return x->exec_time < val; } +bool lb_env_pred(const CEnvDescriptor* x, float val) +{ + return x->exec_time < val; +} void CEnvironment::SelectEnv(EnvVec* envs, CEnvDescriptor*& e, float gt) { @@ -259,11 +401,11 @@ void CEnvironment::SelectEnvs(EnvVec* envs, CEnvDescriptor*& e0, CEnvDescriptor* void CEnvironment::SelectEnvs(float gt) { VERIFY (CurrentWeather); - if ((Current[0]==Current[1])&&(Current[0]==0)){ + if ((Current[0]==Current[1])&&(Current[0]==0)){ VERIFY (!bWFX); // first or forced start SelectEnvs (CurrentWeather,Current[0],Current[1],gt); - }else{ + }else{ bool bSelect = false; if (Current[0]->exec_time>Current[1]->exec_time){ // terminator @@ -275,10 +417,10 @@ void CEnvironment::SelectEnvs(float gt) Current[0] = Current[1]; SelectEnv (CurrentWeather,Current[1],gt); #ifdef WEATHER_LOGGING - Msg ("Weather: '%s' Desc: '%s' Time: %3.2f/%3.2f",CurrentWeatherName.c_str(),Current[1]->sect_name.c_str(),Current[1]->exec_time,fGameTime); + Msg ("Weather: '%s' Desc: '%s' Time: %3.2f/%3.2f",CurrentWeatherName.c_str(),Current[1]->m_identifier.c_str(),Current[1]->exec_time,fGameTime); #endif } - } + } } int get_ref_count(IUnknown* ii) @@ -290,36 +432,14 @@ int get_ref_count(IUnknown* ii) return 0; } -void CEnvironment::OnFrame() +void CEnvironment::lerp (float& current_weight) { -#ifdef _EDITOR - SetGameTime (fGameTime+Device.fTimeDelta*fTimeFactor,fTimeFactor); - if (fsimilar(ed_to_time,DAY_LENGTH)&&fsimilar(ed_from_time,0.f)){ - if (fGameTime>DAY_LENGTH) fGameTime-=DAY_LENGTH; - }else{ - if (fGameTime>ed_to_time){ - fGameTime=fGameTime-ed_to_time+ed_from_time; - Current[0]=Current[1]=0; - } - if (fGameTimeiGetAsyncKeyState(DIK_O)) SetWeatherFX("surge_day"); - if (bWFX&&(wfx_time<=0.f)) StopWFX(); SelectEnvs (fGameTime); VERIFY (Current[0]&&Current[1]); - float current_weight = TimeWeight(fGameTime,Current[0]->exec_time,Current[1]->exec_time); - + current_weight = TimeWeight(fGameTime,Current[0]->exec_time,Current[1]->exec_time); // modifiers CEnvModifier EM; EM.far_plane = 0; @@ -328,17 +448,45 @@ void CEnvironment::OnFrame() EM.ambient.set ( 0,0,0 ); EM.sky_color.set ( 0,0,0 ); EM.hemi_color.set ( 0,0,0 ); + Fvector view = Device.vCameraPosition; float mpower = 0; for (xr_vector::iterator mit=Modifiers.begin(); mit!=Modifiers.end(); mit++) mpower += EM.sum(*mit,view); // final lerp - CurrentEnv.lerp (this,*Current[0],*Current[1],current_weight,EM,mpower); + CurrentEnv->lerp (this,*Current[0],*Current[1],current_weight,EM,mpower); +} + +void CEnvironment::OnFrame() +{ +#ifdef _EDITOR + SetGameTime (fGameTime+Device.fTimeDelta*fTimeFactor,fTimeFactor); + if (fsimilar(ed_to_time,DAY_LENGTH)&&fsimilar(ed_from_time,0.f)){ + if (fGameTime>DAY_LENGTH) fGameTime-=DAY_LENGTH; + }else{ + if (fGameTime>ed_to_time){ + fGameTime=fGameTime-ed_to_time+ed_from_time; + Current[0]=Current[1]=0; + } + if (fGameTimeiGetAsyncKeyState(DIK_O)) SetWeatherFX("surge_day"); + float current_weight; + lerp (current_weight); + #ifndef SUN_DIR_NOT_DEBUG - if(CurrentEnv.sun_dir.y>0) + if(CurrentEnv->sun_dir.y>0) { - Log("CurrentEnv.sun_dir", CurrentEnv.sun_dir); + Log("CurrentEnv->sun_dir", CurrentEnv->sun_dir); Log("current_weight", current_weight); Log("mpower", mpower); @@ -346,28 +494,28 @@ void CEnvironment::OnFrame() Log("Current[1]->sun_dir", Current[1]->sun_dir); } + VERIFY2 (CurrentEnv->sun_dir.y<0,"Invalid sun direction settings in lerp"); #endif - VERIFY2 (CurrentEnv.sun_dir.y<0,"Invalid sun direction settings in lerp"); if (::Render->get_generation()==IRender_interface::GENERATION_R2){ //. very very ugly hack if (HW.Caps.raster_major >= 3 && HW.Caps.geometry.bVTF){ // tonemapping in VS - CurrentEnv.sky_r_textures.push_back (mk_pair(u32(D3DVERTEXTEXTURESAMPLER0),tonemap)); //. hack - CurrentEnv.sky_r_textures_env.push_back (mk_pair(u32(D3DVERTEXTEXTURESAMPLER0),tonemap)); //. hack - CurrentEnv.clouds_r_textures.push_back (mk_pair(u32(D3DVERTEXTEXTURESAMPLER0),tonemap)); //. hack + CurrentEnv->sky_r_textures.push_back (mk_pair(u32(D3DVERTEXTEXTURESAMPLER0),tonemap)); //. hack + CurrentEnv->sky_r_textures_env.push_back (mk_pair(u32(D3DVERTEXTEXTURESAMPLER0),tonemap)); //. hack + CurrentEnv->clouds_r_textures.push_back (mk_pair(u32(D3DVERTEXTEXTURESAMPLER0),tonemap)); //. hack } else { // tonemapping in PS - CurrentEnv.sky_r_textures.push_back (mk_pair(2,tonemap)); //. hack - CurrentEnv.sky_r_textures_env.push_back (mk_pair(2,tonemap)); //. hack - CurrentEnv.clouds_r_textures.push_back (mk_pair(2,tonemap)); //. hack + CurrentEnv->sky_r_textures.push_back (mk_pair(2,tonemap)); //. hack + CurrentEnv->sky_r_textures_env.push_back (mk_pair(2,tonemap)); //. hack + CurrentEnv->clouds_r_textures.push_back (mk_pair(2,tonemap)); //. hack } } //. Setup skybox textures, somewhat ugly - IDirect3DBaseTexture9* e0 = CurrentEnv.sky_r_textures[0].second->surface_get(); - IDirect3DBaseTexture9* e1 = CurrentEnv.sky_r_textures[1].second->surface_get(); + IDirect3DBaseTexture9* e0 = CurrentEnv->sky_r_textures[0].second->surface_get(); + IDirect3DBaseTexture9* e1 = CurrentEnv->sky_r_textures[1].second->surface_get(); tsky0->surface_set (e0); _RELEASE(e0); tsky1->surface_set (e1); _RELEASE(e1); @@ -375,16 +523,71 @@ void CEnvironment::OnFrame() PerlinNoise1D->SetFrequency (wind_gust_factor*MAX_NOISE_FREQ); wind_strength_factor = clampr(PerlinNoise1D->GetContinious(Device.fTimeGlobal)+0.5f,0.f,1.f); - int l_id = (current_weight<0.5f)?Current[0]->lens_flare_id:Current[1]->lens_flare_id; + shared_str l_id = (current_weight<0.5f)?Current[0]->lens_flare_id:Current[1]->lens_flare_id; eff_LensFlare->OnFrame (l_id); - int t_id = (current_weight<0.5f)?Current[0]->tb_id:Current[1]->tb_id; - - eff_Thunderbolt->OnFrame (t_id,CurrentEnv.bolt_period,CurrentEnv.bolt_duration); + shared_str t_id = (current_weight<0.5f)?Current[0]->tb_id:Current[1]->tb_id; + eff_Thunderbolt->OnFrame (t_id,CurrentEnv->bolt_period,CurrentEnv->bolt_duration); eff_Rain->OnFrame (); // ******************** Environment params (setting) - CHK_DX(HW.pDevice->SetRenderState( D3DRS_FOGCOLOR, color_rgba_f(CurrentEnv.fog_color.x,CurrentEnv.fog_color.y,CurrentEnv.fog_color.z,0) )); - CHK_DX(HW.pDevice->SetRenderState( D3DRS_FOGSTART, *(u32 *)(&CurrentEnv.fog_near) )); - CHK_DX(HW.pDevice->SetRenderState( D3DRS_FOGEND, *(u32 *)(&CurrentEnv.fog_far) )); + CHK_DX(HW.pDevice->SetRenderState( D3DRS_FOGCOLOR, color_rgba_f(CurrentEnv->fog_color.x,CurrentEnv->fog_color.y,CurrentEnv->fog_color.z,0) )); + CHK_DX(HW.pDevice->SetRenderState( D3DRS_FOGSTART, *(u32 *)(&CurrentEnv->fog_near) )); + CHK_DX(HW.pDevice->SetRenderState( D3DRS_FOGEND, *(u32 *)(&CurrentEnv->fog_far) )); +} + +void CEnvironment::create_mixer () +{ + VERIFY (!CurrentEnv); + CurrentEnv = xr_new("00:00:00"); +} + +void CEnvironment::destroy_mixer() +{ + xr_delete (CurrentEnv); +} + +SThunderboltDesc* CEnvironment::thunderbolt_description (CInifile& config, shared_str const& section) +{ + SThunderboltDesc* result = xr_new(); + result->load (config, section); + return (result); +} + +SThunderboltCollection* CEnvironment::thunderbolt_collection (CInifile* pIni, CInifile* thunderbolts, LPCSTR section) +{ + SThunderboltCollection* result = xr_new(); + result->load (pIni, thunderbolts, section); + return (result); +} + +SThunderboltCollection* CEnvironment::thunderbolt_collection (xr_vector& collection, shared_str const& id) +{ + typedef xr_vector Container; + Container::iterator i = collection.begin(); + Container::iterator e = collection.end(); + for ( ; i != e; ++i) + if ((*i)->section == id) + return (*i); + + NODEFAULT; +#ifdef DEBUG + return (0); +#endif // #ifdef DEBUG } +CLensFlareDescriptor* CEnvironment::add_flare (xr_vector& collection, shared_str const& id) +{ + typedef xr_vector Flares; + + Flares::const_iterator i = collection.begin(); + Flares::const_iterator e = collection.end(); + for ( ; i != e; ++i) { + if ((*i)->section == id) + return (*i); + } + + CLensFlareDescriptor* result = xr_new(); + result->load (m_suns_config, id.c_str()); + collection.push_back (result); + return (result); +} \ No newline at end of file diff --git a/trunk/xray/xr_3da/Environment.h b/trunk/xray/xr_3da/Environment.h index 6e9e6387..7d862c9d 100644 --- a/trunk/xray/xr_3da/Environment.h +++ b/trunk/xray/xr_3da/Environment.h @@ -1,5 +1,3 @@ -#include "../../build_config_defines.h" - #ifndef EnvironmentH #define EnvironmentH @@ -16,6 +14,10 @@ class ENGINE_API CEffect_Thunderbolt; class ENGINE_API CPerlinNoise1D; +struct SThunderboltDesc; +struct SThunderboltCollection; +class CLensFlareDescriptor; + #define DAY_LENGTH 86400.f #include "blenders\blender.h" @@ -63,23 +65,62 @@ class ENGINE_API CEnvAmbient{ shared_str particles; Fvector offset; float wind_gust_factor; + float wind_blast_in_time; + float wind_blast_out_time; + float wind_blast_strength; + Fvector wind_blast_direction; + + ~SEffect() {} }; - DEFINE_VECTOR(SEffect,EffectVec,EffectVecIt); + DEFINE_VECTOR(SEffect*,EffectVec,EffectVecIt); + struct SSndChannel + { + shared_str m_load_section; + Fvector2 m_sound_dist; + Ivector4 m_sound_period; + + typedef xr_vector sounds_type; + + void load (CInifile& config, LPCSTR sect); + ref_sound& get_rnd_sound () {return sounds()[Random.randI(sounds().size())];} + u32 get_rnd_sound_time () {return (m_sound_period.z < m_sound_period.w) ? Random.randI(m_sound_period.z,m_sound_period.w) : 0;} + u32 get_rnd_sound_first_time() {return (m_sound_period.x < m_sound_period.y) ? Random.randI(m_sound_period.x,m_sound_period.y) : 0;} + float get_rnd_sound_dist () {return (m_sound_dist.x < m_sound_dist.y) ? Random.randF(m_sound_dist.x, m_sound_dist.y) : 0;} + ~SSndChannel () {} + IC sounds_type& sounds () {return m_sounds;} + + protected: + xr_vector m_sounds; + }; + DEFINE_VECTOR(SSndChannel*,SSndChannelVec,SSndChannelVecIt); + protected: - shared_str section; - EffectVec effects; - xr_vectorsounds; - Fvector2 sound_dist; - Ivector2 sound_period; - Ivector2 effect_period; + shared_str m_load_section; + + EffectVec m_effects; + Ivector2 m_effect_period; + + SSndChannelVec m_sound_channels; + shared_str m_ambients_config_filename; public: - void load (const shared_str& section); - IC SEffect* get_rnd_effect (){return effects.empty()?0:&effects[Random.randI(effects.size())];} - IC ref_sound* get_rnd_sound (){return sounds.empty()?0:&sounds[Random.randI(sounds.size())];} - IC const shared_str&name (){return section;} - IC u32 get_rnd_sound_time (){return Random.randI(sound_period.x,sound_period.y);} - IC float get_rnd_sound_dist (){return Random.randF(sound_dist.x,sound_dist.y);} - IC u32 get_rnd_effect_time (){return Random.randI(effect_period.x,effect_period.y);} + IC const shared_str& name () {return m_load_section;} + IC const shared_str& get_ambients_config_filename () {return m_ambients_config_filename;} + + void load ( + CInifile& ambients_config, + CInifile& sound_channels_config, + CInifile& effects_config, + const shared_str& section + ); + IC SEffect* get_rnd_effect () {return effects().empty()?0:effects()[Random.randI(effects().size())];} + IC u32 get_rnd_effect_time () {return Random.randI(m_effect_period.x, m_effect_period.y);} + + SEffect* create_effect (CInifile& config, LPCSTR id); + SSndChannel* create_sound_channel (CInifile& config, LPCSTR id); + ~CEnvAmbient (); + void destroy (); + IC EffectVec& effects () { return m_effects; } + IC SSndChannelVec& get_snd_channels() { return m_sound_channels; } }; class ENGINE_API CEnvDescriptor @@ -112,9 +153,9 @@ class ENGINE_API CEnvDescriptor float bolt_period; float bolt_duration; - float wind_velocity; - float wind_direction; - + float wind_velocity; + float wind_direction; + Fvector3 ambient ; Fvector4 hemi_color ; // w = R2 correction Fvector3 sun_color ; @@ -122,17 +163,14 @@ class ENGINE_API CEnvDescriptor float m_fSunShaftsIntensity; float m_fWaterIntensity; - int lens_flare_id; - int tb_id; - + shared_str lens_flare_id; + shared_str tb_id; + CEnvAmbient* env_ambient; -#ifdef DEBUG - shared_str sect_name; -#endif - CEnvDescriptor (); + CEnvDescriptor (shared_str const& identifier); - void load (LPCSTR exec_tm, LPCSTR sect, CEnvironment* parent); + void load (CEnvironment& environment, CInifile& config); void copy (const CEnvDescriptor& src) { float tm0 = exec_time; @@ -144,6 +182,8 @@ class ENGINE_API CEnvDescriptor void on_device_create (); void on_device_destroy (); + + shared_str m_identifier; }; class ENGINE_API CEnvDescriptorMixer: public CEnvDescriptor{ @@ -156,6 +196,7 @@ class ENGINE_API CEnvDescriptorMixer: public CEnvDescriptor{ float fog_near; float fog_far; public: + CEnvDescriptorMixer (shared_str const& identifier); void lerp (CEnvironment* parent, CEnvDescriptor& A, CEnvDescriptor& B, float f, CEnvModifier& M, float m_power); void clear (); void destroy (); @@ -181,7 +222,6 @@ class ENGINE_API CEnvironment float TimeWeight (float val, float min_t, float max_t); void SelectEnvs (EnvVec* envs, CEnvDescriptor*& e0, CEnvDescriptor*& e1, float tm); void SelectEnv (EnvVec* envs, CEnvDescriptor*& e, float tm); - void StopWFX (); public: static bool sort_env_pred (const CEnvDescriptor* x, const CEnvDescriptor* y) { return x->exec_time < y->exec_time; } @@ -193,18 +233,29 @@ class ENGINE_API CEnvironment float fGameTime; public: + BOOL bNeed_re_create_env; + float wind_strength_factor; float wind_gust_factor; + + // wind blast params + float wind_blast_strength; + Fvector wind_blast_direction; + Fquaternion wind_blast_start_time; + Fquaternion wind_blast_stop_time; + float wind_blast_strength_start_value; + float wind_blast_strength_stop_value; + Fquaternion wind_blast_current; // Environments - CEnvDescriptorMixer CurrentEnv; + CEnvDescriptorMixer* CurrentEnv; CEnvDescriptor* Current[2]; bool bWFX; float wfx_time; CEnvDescriptor* WFX_end_desc[2]; - - EnvVec* CurrentWeather; - shared_str CurrentWeatherName; + + EnvVec* CurrentWeather; + shared_str CurrentWeatherName; shared_str CurrentCycleName; EnvsMap WeatherCycles; @@ -226,7 +277,7 @@ class ENGINE_API CEnvironment ref_texture tonemap; ref_texture tsky0,tsky1; - void SelectEnvs (float gt); + void SelectEnvs (float gt); void UpdateAmbient (); CEnvAmbient* AppendEnvAmb (const shared_str& sect); @@ -237,12 +288,13 @@ class ENGINE_API CEnvironment ~CEnvironment (); void load (); - void unload (); + void unload (); void mods_load (); void mods_unload (); void OnFrame (); + void lerp (float& current_weight); void RenderSky (); void RenderClouds (); @@ -250,25 +302,18 @@ class ENGINE_API CEnvironment void RenderLast (); bool SetWeatherFX (shared_str name); + bool StartWeatherFXFromTime (shared_str name, float time); bool IsWFXPlaying (){return bWFX;} - void SetWeather (shared_str name, bool forced=false); - shared_str GetWeather () { return CurrentWeatherName;} + void StopWFX (); + void SetWeather (shared_str name, bool forced=false); + shared_str GetWeather () { return CurrentWeatherName;} //Kondr48: ôóíêöèÿ ïåðåìîòêè âðåìåíè - void ChangeGameTime (float game_time); + void ChangeGameTime (float game_time); void SetGameTime (float game_time, float time_factor); void OnDeviceCreate (); void OnDeviceDestroy (); - -protected: - -#ifdef COP_WEATHER_MANAGER_NEW - CEnvDescriptor* create_descriptor(shared_str const& identifier, CInifile* config); -#endif - - void load_weathers(); - void load_weather_effects(); // editor-related #ifdef _EDITOR @@ -276,9 +321,40 @@ class ENGINE_API CEnvironment float ed_from_time ; float ed_to_time ; public: - void ED_Reload (); - float GetGameTime (){return fGameTime;} + void ED_Reload (); + float GetGameTime (){return fGameTime;} #endif + CInifile* m_ambients_config; + CInifile* m_sound_channels_config; + CInifile* m_effects_config; + CInifile* m_suns_config; + CInifile* m_thunderbolt_collections_config; + CInifile* m_thunderbolts_config; + +protected: + CEnvDescriptor* create_descriptor (shared_str const& identifier, CInifile* config); + void load_weathers (); + void load_weather_effects (); + void create_mixer (); + void destroy_mixer (); + + void load_level_specific_ambients (); + +public: + SThunderboltDesc* thunderbolt_description (CInifile& config, shared_str const& section); + SThunderboltCollection* thunderbolt_collection (CInifile* pIni, CInifile* thunderbolts, LPCSTR section); + SThunderboltCollection* thunderbolt_collection (xr_vector& collection, shared_str const& id); + CLensFlareDescriptor* add_flare (xr_vector& collection, shared_str const& id); + +public: + float p_var_alt; + float p_var_long; + float p_min_dist; + float p_tilt; + float p_second_prop; + float p_sky_color; + float p_sun_color; + float p_fog_color; }; ENGINE_API extern Flags32 psEnvFlags; diff --git a/trunk/xray/xr_3da/Environment_misc.cpp b/trunk/xray/xr_3da/Environment_misc.cpp index 40373b60..b9a71c42 100644 --- a/trunk/xray/xr_3da/Environment_misc.cpp +++ b/trunk/xray/xr_3da/Environment_misc.cpp @@ -5,8 +5,9 @@ #include "xr_efflensflare.h" #include "thunderbolt.h" #include "rain.h" +#include "IGame_Level.h" +#include "xrGame/object_broker.h" #include "resourcemanager.h" -#include "..\..\build_config_defines.h" //----------------------------------------------------------------------------- // Environment modifier @@ -39,7 +40,6 @@ float CEnvModifier::sum (CEnvModifier& M, Fvector3& view) fog_color.mad (M.fog_color,_power); fog_density += M.fog_density*_power; ambient.mad (M.ambient,_power); -// lmap_color.mad (M.lmap_color,_power); sky_color.mad (M.sky_color,_power); hemi_color.mad (M.hemi_color,_power); return _power; @@ -48,51 +48,129 @@ float CEnvModifier::sum (CEnvModifier& M, Fvector3& view) //----------------------------------------------------------------------------- // Environment ambient //----------------------------------------------------------------------------- -void CEnvAmbient::load(const shared_str& sect) +void CEnvAmbient::SSndChannel::load(CInifile& config, LPCSTR sect) { - section = sect; + m_load_section = sect; + + m_sound_dist.x = config.r_float (m_load_section, "min_distance"); + m_sound_dist.y = config.r_float (m_load_section, "max_distance"); + m_sound_period.x = config.r_s32 (m_load_section, "period0"); + m_sound_period.y = config.r_s32 (m_load_section, "period1"); + m_sound_period.z = config.r_s32 (m_load_section, "period2"); + m_sound_period.w = config.r_s32 (m_load_section, "period3"); + +// m_sound_period = config.r_ivector4(sect,"sound_period"); + R_ASSERT (m_sound_period.x <= m_sound_period.y && m_sound_period.z <= m_sound_period.w); +// m_sound_period.mul (1000);// now in ms +// m_sound_dist = config.r_fvector2(sect,"sound_dist"); + R_ASSERT2 (m_sound_dist.y > m_sound_dist.x, sect); + + LPCSTR snds = config.r_string (sect,"sounds"); + u32 cnt = _GetItemCount (snds); + string_path tmp; + R_ASSERT3 (cnt,"sounds empty", sect); + + m_sounds.resize (cnt); + + for (u32 k=0; k(); + result->life_time = iFloor(config.r_float(id,"life_time")*1000.f); + result->particles = config.r_string (id,"particles"); + VERIFY (result->particles.size()); + result->offset = config.r_fvector3 (id,"offset"); + result->wind_gust_factor = config.r_float(id,"wind_gust_factor"); + + if (config.line_exist(id,"sound")) + result->sound.create (config.r_string(id,"sound"),st_Effect,sg_SourceType); + + if (config.line_exist(id,"wind_blast_strength")) + { + result->wind_blast_strength = config.r_float(id,"wind_blast_strength"); + result->wind_blast_direction.setHP (deg2rad(config.r_float(id,"wind_blast_longitude")), 0.f); + result->wind_blast_in_time = config.r_float(id,"wind_blast_in_time"); + result->wind_blast_out_time = config.r_float(id,"wind_blast_out_time"); + return (result); + } + + result->wind_blast_strength = 0.f; + result->wind_blast_direction.set (0.f, 0.f, 1.f); + result->wind_blast_in_time = 0.f; + result->wind_blast_out_time = 0.f; + + return (result); +} + +CEnvAmbient::SSndChannel* CEnvAmbient::create_sound_channel (CInifile& config, LPCSTR id) +{ + SSndChannel* result = xr_new(); + result->load (config, id); + return (result); +} + +CEnvAmbient::~CEnvAmbient () +{ + destroy (); +} + +void CEnvAmbient::destroy () +{ + delete_data (m_effects); + delete_data (m_sound_channels); +} + +void CEnvAmbient::load( + CInifile& ambients_config, + CInifile& sound_channels_config, + CInifile& effects_config, + const shared_str& sect + ) +{ + m_ambients_config_filename = ambients_config.fname(); + m_load_section = sect; string_path tmp; + // sounds - if (pSettings->line_exist(sect,"sounds")){ - Fvector2 t = pSettings->r_fvector2 (sect,"sound_period"); - sound_period.set(iFloor(t.x*1000.f),iFloor(t.y*1000.f)); - sound_dist = pSettings->r_fvector2 (sect,"sound_dist"); if (sound_dist[0]>sound_dist[1]) std::swap(sound_dist[0],sound_dist[1]); - LPCSTR snds = pSettings->r_string (sect,"sounds"); - u32 cnt = _GetItemCount(snds); - if (cnt){ - sounds.resize(cnt); - for (u32 k=0; kline_exist(sect,"effects")){ - Fvector2 t = pSettings->r_fvector2 (sect,"effect_period"); - effect_period.set(iFloor(t.x*1000.f),iFloor(t.y*1000.f)); - LPCSTR effs = pSettings->r_string (sect,"effects"); - u32 cnt = _GetItemCount(effs); - if (cnt){ - effects.resize(cnt); - for (u32 k=0; kr_float(tmp,"life_time")*1000.f); - effects[k].particles = pSettings->r_string (tmp,"particles"); VERIFY(effects[k].particles.size()); - effects[k].offset = pSettings->r_fvector3 (tmp,"offset"); - effects[k].wind_gust_factor = pSettings->r_float (tmp,"wind_gust_factor"); - if (pSettings->line_exist(tmp,"sound")) - effects[k].sound.create (pSettings->r_string(tmp,"sound"),st_Effect,sg_SourceType); - } - } - } -#ifndef DEBUG - VERIFY(!sounds.empty() || !effects.empty()); -#endif + m_effect_period.set ( + iFloor( + ambients_config.r_float(sect,"min_effect_period")*1000.f + ), + iFloor( + ambients_config.r_float(sect,"max_effect_period")*1000.f + ) + ); + LPCSTR effs = ambients_config.r_string (sect,"effects"); + cnt = _GetItemCount(effs); +// R_ASSERT3 (cnt,"effects empty", sect.c_str()); + + m_effects.resize (cnt); + for (u32 k=0; k2 || C.y<0 || C.y>2 || C.z<0 || C.z>2) { Msg("! Invalid '%s' in env-section '%s'",#C,S);} -void CEnvDescriptor::load (LPCSTR exec_tm, LPCSTR S, CEnvironment* parent) +#define C_CHECK(C) if (C.x<0 || C.x>2 || C.y<0 || C.y>2 || C.z<0 || C.z>2) { Msg("! Invalid '%s' in env-section '%s'",#C,m_identifier.c_str());} +void CEnvDescriptor::load (CEnvironment& environment, CInifile& config) { Ivector3 tm ={0,0,0}; - sscanf (exec_tm,"%d:%d:%d",&tm.x,&tm.y,&tm.z); - R_ASSERT3 ((tm.x>=0)&&(tm.x<24)&&(tm.y>=0)&&(tm.y<60)&&(tm.z>=0)&&(tm.z<60),"Incorrect weather time",S); + sscanf (m_identifier.c_str(),"%d:%d:%d",&tm.x,&tm.y,&tm.z); + R_ASSERT3 ((tm.x>=0)&&(tm.x<24)&&(tm.y>=0)&&(tm.y<60)&&(tm.z>=0)&&(tm.z<60),"Incorrect weather time",m_identifier.c_str()); exec_time = tm.x*3600.f+tm.y*60.f+tm.z; exec_time_loaded = exec_time; string_path st,st_env; - strcpy_s (st,pSettings->r_string (S,"sky_texture")); + strcpy (st,config.r_string (m_identifier.c_str(),"sky_texture")); strconcat (sizeof(st_env),st_env,st,"#small" ); sky_texture_name = st; sky_texture_env_name = st_env; - clouds_texture_name = pSettings->r_string (S,"clouds_texture"); - LPCSTR cldclr = pSettings->r_string (S,"clouds_color"); + clouds_texture_name = config.r_string (m_identifier.c_str(),"clouds_texture"); + LPCSTR cldclr = config.r_string (m_identifier.c_str(),"clouds_color"); float multiplier = 0, save=0; sscanf (cldclr,"%f,%f,%f,%f,%f",&clouds_color.x,&clouds_color.y,&clouds_color.z,&clouds_color.w,&multiplier); - save=clouds_color.w; clouds_color.mul (.5f*multiplier); clouds_color.w = save; - sky_color = pSettings->r_fvector3 (S,"sky_color"); sky_color.mul(.5f); + save=clouds_color.w; clouds_color.mul (.5f*multiplier); + clouds_color.w = save; - if (pSettings->line_exist(S,"sky_rotation")) - sky_rotation = deg2rad(pSettings->r_float(S,"sky_rotation")); - else - sky_rotation = 0; - - far_plane = pSettings->r_float (S,"far_plane"); - fog_color = pSettings->r_fvector3 (S,"fog_color"); - fog_density = pSettings->r_float (S,"fog_density"); - fog_distance = pSettings->r_float (S,"fog_distance"); - rain_density = pSettings->r_float (S,"rain_density"); clamp(rain_density,0.f,1.f); - rain_color = pSettings->r_fvector3 (S,"rain_color"); - wind_velocity = pSettings->r_float (S,"wind_velocity"); - wind_direction = deg2rad(pSettings->r_float(S,"wind_direction")); - sun_color = pSettings->r_fvector3 (S,"sun_color"); - - if (pSettings->line_exist(S, "water_intensity")) - m_fWaterIntensity = pSettings->r_float (S, "water_intensity"); + sky_color = config.r_fvector3 (m_identifier.c_str(),"sky_color"); - if (pSettings->line_exist(S, "sun_shafts_intensity")) - m_fSunShaftsIntensity= pSettings->r_float (S, "sun_shafts_intensity"); - -#ifdef COP_WEATHER_MANAGER - sun_dir.setHP ( - deg2rad(pSettings->r_float(S, "sun_altitude")), - deg2rad(pSettings->r_float(S, "sun_longitude")) + if (config.line_exist(m_identifier.c_str(),"sky_rotation")) sky_rotation = deg2rad(config.r_float(m_identifier.c_str(),"sky_rotation")); + else sky_rotation = 0; + far_plane = config.r_float (m_identifier.c_str(),"far_plane"); + fog_color = config.r_fvector3 (m_identifier.c_str(),"fog_color"); + fog_density = config.r_float (m_identifier.c_str(),"fog_density"); + fog_distance = config.r_float (m_identifier.c_str(),"fog_distance"); + rain_density = config.r_float (m_identifier.c_str(),"rain_density"); clamp(rain_density,0.f,1.f); + rain_color = config.r_fvector3 (m_identifier.c_str(),"rain_color"); + wind_velocity = config.r_float (m_identifier.c_str(),"wind_velocity"); + wind_direction = deg2rad(config.r_float(m_identifier.c_str(),"wind_direction")); + ambient = config.r_fvector3 (m_identifier.c_str(),"ambient_color"); + hemi_color = config.r_fvector4 (m_identifier.c_str(),"hemisphere_color"); + sun_color = config.r_fvector3 (m_identifier.c_str(),"sun_color"); +// if (config.line_exist(m_identifier.c_str(),"sun_altitude")) + sun_dir.setHP ( + deg2rad(config.r_float(m_identifier.c_str(),"sun_altitude")), + deg2rad(config.r_float(m_identifier.c_str(),"sun_longitude")) ); R_ASSERT ( _valid(sun_dir) ); +// else +// sun_dir.setHP ( +// deg2rad(config.r_fvector2(m_identifier.c_str(),"sun_dir").y), +// deg2rad(config.r_fvector2(m_identifier.c_str(),"sun_dir").x) +// ); VERIFY2 (sun_dir.y < 0, "Invalid sun direction settings while loading"); - - lens_flare_id = parent->eff_LensFlare->AppendDef(pSettings,pSettings->r_string(S,"sun")); - tb_id = parent->eff_Thunderbolt->AppendDef(pSettings,pSettings->r_string(S,"thunderbolt_collection")); - bolt_period = (tb_id>=0)?pSettings->r_float (S,"thunderbolt_period"):0.f; - bolt_duration = (tb_id>=0)?pSettings->r_float (S,"thunderbolt_duration"):0.f; - env_ambient = pSettings->line_exist(S,"ambient")?parent->AppendEnvAmb (pSettings->r_string(S,"ambient")):0; - ambient = pSettings->r_fvector3 (S,"ambient_color"); - hemi_color = pSettings->r_fvector4 (S,"hemisphere_color"); -#else - Fvector2 sund = pSettings->r_fvector2 (S,"sun_dir"); sun_dir.setHP (deg2rad(sund.y),deg2rad(sund.x)); - VERIFY2 (sun_dir.y<0,"Invalid sun direction settings while loading"); - - lens_flare_id = parent->eff_LensFlare->AppendDef(pSettings,pSettings->r_string(S,"flares")); - tb_id = parent->eff_Thunderbolt->AppendDef(pSettings,pSettings->r_string(S,"thunderbolt")); - bolt_period = (tb_id>=0)?pSettings->r_float (S,"bolt_period"):0.f; - bolt_duration = (tb_id>=0)?pSettings->r_float (S,"bolt_duration"):0.f; - env_ambient = pSettings->line_exist(S,"env_ambient")?parent->AppendEnvAmb (pSettings->r_string(S,"env_ambient")):0; - ambient = pSettings->r_fvector3 (S,"ambient"); - hemi_color = pSettings->r_fvector4 (S,"hemi_color"); -#endif + + lens_flare_id = environment.eff_LensFlare->AppendDef(environment, environment.m_suns_config, config.r_string(m_identifier.c_str(),"sun")); + tb_id = environment.eff_Thunderbolt->AppendDef(environment, environment.m_thunderbolt_collections_config, environment.m_thunderbolts_config, config.r_string(m_identifier.c_str(),"thunderbolt_collection")); + bolt_period = (tb_id.size())?config.r_float (m_identifier.c_str(),"thunderbolt_period"):0.f; + bolt_duration = (tb_id.size())?config.r_float (m_identifier.c_str(),"thunderbolt_duration"):0.f; + env_ambient = config.line_exist(m_identifier.c_str(),"ambient")?environment.AppendEnvAmb (config.r_string(m_identifier.c_str(),"ambient")):0; + + if (config.line_exist(m_identifier.c_str(),"sun_shafts_intensity")) + m_fSunShaftsIntensity = config.r_float(m_identifier.c_str(),"sun_shafts_intensity"); + + if (config.line_exist(m_identifier.c_str(),"water_intensity")) + m_fWaterIntensity = config.r_float(m_identifier.c_str(),"water_intensity"); C_CHECK (clouds_color); C_CHECK (sky_color ); C_CHECK (fog_color ); C_CHECK (rain_color ); C_CHECK (ambient ); -// C_CHECK (lmap_color ); C_CHECK (hemi_color ); C_CHECK (sun_color ); on_device_create (); @@ -226,12 +294,19 @@ void CEnvDescriptor::on_device_destroy () //----------------------------------------------------------------------------- // Environment Mixer //----------------------------------------------------------------------------- +CEnvDescriptorMixer::CEnvDescriptorMixer(shared_str const& identifier) : + CEnvDescriptor (identifier) +{ +} + void CEnvDescriptorMixer::destroy() { sky_r_textures.clear (); sky_r_textures_env.clear (); clouds_r_textures.clear (); + on_device_destroy(); + sky_texture.destroy (); sky_texture_env.destroy (); clouds_texture.destroy (); @@ -306,9 +381,12 @@ void CEnvDescriptorMixer::lerp (CEnvironment* , CEnvDescriptor& A, CEnvDescripto hemi_color.y *= _power; hemi_color.z *= _power; sun_color.lerp (A.sun_color,B.sun_color,f); + R_ASSERT ( _valid(A.sun_dir) ); + R_ASSERT ( _valid(B.sun_dir) ); sun_dir.lerp (A.sun_dir,B.sun_dir,f).normalize(); - VERIFY2 (sun_dir.y<0,"Invalid sun direction settings while lerp"); + R_ASSERT ( _valid(sun_dir) ); + VERIFY2 (sun_dir.y<0,"Invalid sun direction settings while lerp"); } //----------------------------------------------------------------------------- @@ -317,10 +395,17 @@ void CEnvDescriptorMixer::lerp (CEnvironment* , CEnvDescriptor& A, CEnvDescripto CEnvAmbient* CEnvironment::AppendEnvAmb (const shared_str& sect) { for (EnvAmbVecIt it=Ambients.begin(); it!=Ambients.end(); it++) - if ((*it)->name().equal(sect)) return *it; + if ((*it)->name().equal(sect)) + return (*it); + Ambients.push_back (xr_new()); - Ambients.back()->load (sect); - return Ambients.back(); + Ambients.back()->load ( + *m_ambients_config, + *m_sound_channels_config, + *m_effects_config, + sect + ); + return (Ambients.back()); } void CEnvironment::mods_load () @@ -342,144 +427,189 @@ void CEnvironment::mods_load () } FS.r_close (fs); } + + load_level_specific_ambients (); } void CEnvironment::mods_unload () { Modifiers.clear_and_free (); } -void CEnvironment::load () +void CEnvironment::load_level_specific_ambients () { - tonemap = Device.Resources->_CreateTexture("$user$tonemap"); //. hack - if (!eff_Rain) eff_Rain = xr_new(); - if (!eff_LensFlare) eff_LensFlare = xr_new(); - if (!eff_Thunderbolt) eff_Thunderbolt = xr_new(); - - load_weathers(); - load_weather_effects(); - + const shared_str level_name = g_pGameLevel->name(); + + string_path path; + strconcat(sizeof(path), path, "environment\\ambients\\", level_name.c_str(), ".ltx"); + + string_path full_path; + CInifile* level_ambients = xr_new( + FS.update_path(full_path, "$game_config$", path), + TRUE, + TRUE, + FALSE); + + for ( EnvAmbVecIt I=Ambients.begin(), E=Ambients.end(); I!=E; ++I ) + { + CEnvAmbient* ambient = *I; + + shared_str section_name = ambient->name(); + + // choose a source ini file + CInifile* source = (level_ambients && level_ambients->section_exist(section_name)) ? + level_ambients : m_ambients_config; + + + // check and reload if needed + if ( xr_strcmp( ambient->get_ambients_config_filename().c_str(), source->fname() ) ) + { + ambient->destroy(); + ambient->load(*source, *m_sound_channels_config, *m_effects_config, section_name); + } + } + + xr_delete(level_ambients); +} + +CEnvDescriptor* CEnvironment::create_descriptor (shared_str const& identifier, CInifile* config) +{ + CEnvDescriptor* result = xr_new(identifier); + if (config) + result->load(*this, *config); + return (result); } -void CEnvironment::load_weathers() +void CEnvironment::load_weathers () { - if (!WeatherCycles.empty()) return; - // load weathers -#ifdef COP_WEATHER_MANAGER_NEW - typedef xr_vector file_list_type; - file_list_type* file_list = FS.file_list_open("$game_weathers$", ""); - VERIFY(file_list); - xr_string id; - file_list_type::const_iterator i = file_list->begin(); - file_list_type::const_iterator e = file_list->end(); - for (; i != e; ++i) - { - u32 length = xr_strlen(*i); - VERIFY(length >= 4); - VERIFY((*i)[length - 4] == '.'); - VERIFY((*i)[length - 3] == 'l'); - VERIFY((*i)[length - 2] == 't'); - VERIFY((*i)[length - 1] == 'x'); - id.assign(*i, length - 4); - EnvVec& env = WeatherCycles[id.c_str()]; - - string_path file_name; - FS.update_path(file_name, "$game_weathers$", id.c_str()); - strcat(file_name, ".ltx"); - CInifile* config = CInifile::Create(file_name); - - typedef CInifile::Root sections_type; - sections_type& sections = config->sections(); - - env.reserve(sections.size()); - - sections_type::const_iterator i = sections.begin(); - sections_type::const_iterator e = sections.end(); - for (; i != e; ++i) - { - CEnvDescriptor* object = create_descriptor((*i)->Name, config); - env.push_back(object); - } - - CInifile::Destroy(config); - } - - FS.file_list_close(file_list); -#else - LPCSTR first_weather=0; - int weather_count = pSettings->line_count("weathers"); - for (int w_idx=0; w_idxr_line("weathers",w_idx,&weather,§_w)){ - if (0==first_weather) first_weather=weather; - int env_count = pSettings->line_count(sect_w); - LPCSTR exec_tm, sect_e; - for (int env_idx=0; env_idxr_line(sect_w,env_idx,&exec_tm,§_e)){ - CEnvDescriptor* D=xr_new(); - D->load (exec_tm,sect_e,this); - WeatherCycles[weather].push_back (D); -#ifdef DEBUG - D->sect_name = sect_e; -#endif - } - } + if (!WeatherCycles.empty()) + return; + + typedef xr_vector file_list_type; + file_list_type* file_list = FS.file_list_open("$game_weathers$",""); + VERIFY (file_list); + + file_list_type::const_iterator i = file_list->begin(); + file_list_type::const_iterator e = file_list->end(); + for ( ; i != e; ++i) { + u32 length = xr_strlen(*i); + VERIFY (length >= 4); + VERIFY ((*i)[length - 4] == '.'); + VERIFY ((*i)[length - 3] == 'l'); + VERIFY ((*i)[length - 2] == 't'); + VERIFY ((*i)[length - 1] == 'x'); + u32 new_length = length - 4; + LPSTR identifier = (LPSTR)_alloca((new_length + 1)*sizeof(char)); + Memory.mem_copy (identifier, *i, new_length*sizeof(char)); + identifier[new_length] = 0; + EnvVec& env = WeatherCycles[identifier]; + + string_path file_name; + FS.update_path (file_name, "$game_weathers$", identifier); + strcat (file_name, ".ltx"); + CInifile* config = CInifile::Create(file_name); + + typedef CInifile::Root sections_type; + sections_type& sections = config->sections(); + + env.reserve (sections.size()); + + sections_type::const_iterator i = sections.begin(); + sections_type::const_iterator e = sections.end(); + for ( ; i != e; ++i) { + CEnvDescriptor* object = create_descriptor((*i)->Name, config); + env.push_back (object); } + + CInifile::Destroy (config); } -#endif - // sorting weather envs - EnvsMapIt _I = WeatherCycles.begin(); - EnvsMapIt _E = WeatherCycles.end(); - for (; _I != _E; _I++) - { - R_ASSERT3(_I->second.size() > 1, "Environment in weather must >=2", *_I->first); - std::sort(_I->second.begin(), _I->second.end(), sort_env_etl_pred); - } - R_ASSERT2(!WeatherCycles.empty(), "Empty weathers."); - -#ifdef COP_WEATHER_MANAGER_NEW - SetWeather((*WeatherCycles.begin()).first.c_str()); -#else - SetWeather (first_weather); -#endif + FS.file_list_close (file_list); + + // sorting weather envs + EnvsMapIt _I=WeatherCycles.begin(); + EnvsMapIt _E=WeatherCycles.end(); + for (; _I!=_E; _I++){ + R_ASSERT3 (_I->second.size()>1,"Environment in weather must >=2",*_I->first); + std::sort(_I->second.begin(),_I->second.end(),sort_env_etl_pred); + } + R_ASSERT2 (!WeatherCycles.empty(),"Empty weathers."); + SetWeather ((*WeatherCycles.begin()).first.c_str()); } -void CEnvironment::load_weather_effects() +void CEnvironment::load_weather_effects () { - if (!WeatherFXs.empty()) return; - - // load weather effects - int line_count = pSettings->line_count("weather_effects"); - for (int w_idx=0; w_idxr_line("weather_effects",w_idx,&weather,§_w)){ - EnvVec& env = WeatherFXs[weather]; - env.push_back (xr_new()); env.back()->exec_time_loaded = 0; - env.push_back (xr_new()); env.back()->exec_time_loaded = 0; - int env_count = pSettings->line_count(sect_w); - LPCSTR exec_tm, sect_e; - for (int env_idx=0; env_idxr_line(sect_w,env_idx,&exec_tm,§_e)){ - CEnvDescriptor* D=xr_new(); - D->load (exec_tm,sect_e,this); - env.push_back (D); -#ifdef DEBUG - D->sect_name = sect_e; -#endif - } - } - env.push_back (xr_new()); env.back()->exec_time_loaded = DAY_LENGTH; + if (!WeatherFXs.empty()) + return; + + typedef xr_vector file_list_type; + file_list_type* file_list = FS.file_list_open("$game_weather_effects$",""); + VERIFY (file_list); + + file_list_type::const_iterator i = file_list->begin(); + file_list_type::const_iterator e = file_list->end(); + for ( ; i != e; ++i) { + u32 length = xr_strlen(*i); + VERIFY (length >= 4); + VERIFY ((*i)[length - 4] == '.'); + VERIFY ((*i)[length - 3] == 'l'); + VERIFY ((*i)[length - 2] == 't'); + VERIFY ((*i)[length - 1] == 'x'); + u32 new_length = length - 4; + LPSTR identifier = (LPSTR)_alloca((new_length + 1)*sizeof(char)); + Memory.mem_copy (identifier, *i, new_length*sizeof(char)); + identifier[new_length] = 0; + EnvVec& env = WeatherFXs[identifier]; + + string_path file_name; + FS.update_path (file_name, "$game_weather_effects$", identifier); + strcat (file_name, ".ltx"); + CInifile* config = CInifile::Create(file_name); + + typedef CInifile::Root sections_type; + sections_type& sections = config->sections(); + + env.reserve (sections.size() + 2); + env.push_back (create_descriptor("00:00:00", false)); + + sections_type::const_iterator i = sections.begin(); + sections_type::const_iterator e = sections.end(); + for ( ; i != e; ++i) { + CEnvDescriptor* object = create_descriptor((*i)->Name, config); + env.push_back (object); } + + CInifile::Destroy (config); + + env.push_back (create_descriptor("24:00:00", false)); + env.back()->exec_time_loaded = DAY_LENGTH; + } + + FS.file_list_close (file_list); + // sorting weather envs EnvsMapIt _I=WeatherFXs.begin(); EnvsMapIt _E=WeatherFXs.end(); for (; _I!=_E; _I++){ R_ASSERT3 (_I->second.size()>1,"Environment in weather must >=2",*_I->first); - std::sort(_I->second.begin(),_I->second.end(),sort_env_etl_pred); + std::sort (_I->second.begin(),_I->second.end(),sort_env_etl_pred); } } +void CEnvironment::load () +{ + if (!CurrentEnv) + create_mixer (); + + tonemap = Device.Resources->_CreateTexture("$user$tonemap"); //. hack + if (!eff_Rain) eff_Rain = xr_new(); + if (!eff_LensFlare) eff_LensFlare = xr_new(); + if (!eff_Thunderbolt) eff_Thunderbolt = xr_new(); + + load_weathers (); + load_weather_effects (); +} + void CEnvironment::unload () { EnvsMapIt _I,_E; @@ -510,7 +640,7 @@ void CEnvironment::unload () xr_delete (eff_Thunderbolt); CurrentWeather = 0; CurrentWeatherName = 0; - CurrentEnv.clear (); + CurrentEnv->clear (); Invalidate (); tonemap = 0; } diff --git a/trunk/xray/xr_3da/Environment_render.cpp b/trunk/xray/xr_3da/Environment_render.cpp index c626c02e..45773875 100644 --- a/trunk/xray/xr_3da/Environment_render.cpp +++ b/trunk/xray/xr_3da/Environment_render.cpp @@ -3,7 +3,7 @@ #include "Environment.h" #ifndef _EDITOR - #include "render.h" + #include "render.h" #endif #include "xr_efflensflare.h" #include "rain.h" @@ -15,6 +15,8 @@ ////////////////////////////////////////////////////////////////////////// // half box def + +/* static Fvector3 hbox_verts[24] = { {-1.f, -1.f, -1.f}, {-1.f, -1.01f, -1.f}, // down @@ -30,6 +32,24 @@ static Fvector3 hbox_verts[24] = { 1.f, 0.f, 1.f}, { 1.f, -1.f, 1.f}, // half {-1.f, 0.f, 1.f}, {-1.f, -1.f, 1.f} // half }; +*/ + +// SkyLoader: ïîäíÿë ñêàéáîêñ êàê â çï. Åñëè íå íóæíî, âåðíóòü çàêîììåí÷åííûé êîä +static Fvector3 hbox_verts[24] = +{ + {-1.f, -1.f, -1.f}, {-1.f, -1.01f, -1.f}, // down + { 1.f, -1.f, -1.f}, { 1.f, -1.01f, -1.f}, // down + {-1.f, -1.f, 1.f}, {-1.f, -1.01f, 1.f}, // down + { 1.f, -1.f, 1.f}, { 1.f, -1.01f, 1.f}, // down + {-1.f, 2.f, -1.f}, {-1.f, 1.f, -1.f}, + { 1.f, 2.f, -1.f}, { 1.f, 1.f, -1.f}, + {-1.f, 2.f, 1.f}, {-1.f, 1.f, 1.f}, + { 1.f, 2.f, 1.f}, { 1.f, 1.f, 1.f}, + {-1.f, 0.f, -1.f}, {-1.f, -1.f, -1.f}, // half + { 1.f, 0.f, -1.f}, { 1.f, -1.f, -1.f}, // half + { 1.f, 0.f, 1.f}, { 1.f, -1.f, 1.f}, // half + {-1.f, 0.f, 1.f}, {-1.f, -1.f, 1.f} // half +}; static u16 hbox_faces[20*3] = { 0, 2, 3, @@ -86,8 +106,7 @@ const u32 v_clouds_fvf = D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_SPECULAR; //----------------------------------------------------------------------------- // Environment render //----------------------------------------------------------------------------- -extern float psHUD_FOV; -BOOL bNeed_re_create_env = FALSE; +extern ENGINE_API float psHUD_FOV; void CEnvironment::RenderSky () { #ifndef _EDITOR @@ -112,11 +131,11 @@ void CEnvironment::RenderSky () // draw sky box Fmatrix mSky; - mSky.rotateY (CurrentEnv.sky_rotation); + mSky.rotateY (CurrentEnv->sky_rotation); mSky.translate_over (Device.vCameraPosition); u32 i_offset,v_offset; - u32 C = color_rgba(iFloor(CurrentEnv.sky_color.x*255.f), iFloor(CurrentEnv.sky_color.y*255.f), iFloor(CurrentEnv.sky_color.z*255.f), iFloor(CurrentEnv.weight*255.f)); + u32 C = color_rgba(iFloor(CurrentEnv->sky_color.x*255.f), iFloor(CurrentEnv->sky_color.y*255.f), iFloor(CurrentEnv->sky_color.z*255.f), iFloor(CurrentEnv->weight*255.f)); // Fill index buffer u16* pib = RCache.Index.Lock (20*3,i_offset); @@ -132,7 +151,7 @@ void CEnvironment::RenderSky () RCache.set_xform_world (mSky); RCache.set_Geometry (sh_2geom); RCache.set_Shader (sh_2sky); - RCache.set_Textures (&CurrentEnv.sky_r_textures); + RCache.set_Textures (&CurrentEnv->sky_r_textures); RCache.Render (D3DPT_TRIANGLELIST,v_offset,0,12,i_offset,20); // Sun @@ -146,13 +165,13 @@ void CEnvironment::RenderClouds () if (0==g_pGameLevel) return ; #endif // draw clouds - if (fis_zero(CurrentEnv.clouds_color.w,EPS_L)) return; + if (fis_zero(CurrentEnv->clouds_color.w,EPS_L)) return; ::Render->rmFar (); Fmatrix mXFORM, mScale; mScale.scale (10,0.4f,10); - mXFORM.rotateY (CurrentEnv.sky_rotation); + mXFORM.rotateY (CurrentEnv->sky_rotation); mXFORM.mulB_43 (mScale); mXFORM.translate_over (Device.vCameraPosition); @@ -163,7 +182,7 @@ void CEnvironment::RenderClouds () wind_dir.set (wd0.x,wd0.z,wd1.x,wd1.z).mul(0.5f).add(0.5f).mul(255.f); u32 i_offset,v_offset; u32 C0 = color_rgba(iFloor(wind_dir.x),iFloor(wind_dir.y),iFloor(wind_dir.w),iFloor(wind_dir.z)); - u32 C1 = color_rgba(iFloor(CurrentEnv.clouds_color.x*255.f),iFloor(CurrentEnv.clouds_color.y*255.f),iFloor(CurrentEnv.clouds_color.z*255.f),iFloor(CurrentEnv.clouds_color.w*255.f)); + u32 C1 = color_rgba(iFloor(CurrentEnv->clouds_color.x*255.f),iFloor(CurrentEnv->clouds_color.y*255.f),iFloor(CurrentEnv->clouds_color.z*255.f),iFloor(CurrentEnv->clouds_color.w*255.f)); // Fill index buffer u16* pib = RCache.Index.Lock (CloudsIndices.size(),i_offset); @@ -180,7 +199,7 @@ void CEnvironment::RenderClouds () RCache.set_xform_world (mXFORM); RCache.set_Geometry (clouds_geom); RCache.set_Shader (clouds_sh); - RCache.set_Textures (&CurrentEnv.clouds_r_textures); + RCache.set_Textures (&CurrentEnv->clouds_r_textures); RCache.Render (D3DPT_TRIANGLELIST,v_offset,0,CloudsVerts.size(),i_offset,CloudsIndices.size()/3); ::Render->rmNormal (); @@ -264,7 +283,7 @@ void CEnvironment::OnDeviceDestroy() for (EnvIt it=_I->second.begin(); it!=_I->second.end(); it++) (*it)->on_device_destroy(); } - CurrentEnv.destroy(); + CurrentEnv->destroy(); } diff --git a/trunk/xray/xr_3da/Feel_Touch.cpp b/trunk/xray/xr_3da/Feel_Touch.cpp index dbabe5f0..954d361c 100644 --- a/trunk/xray/xr_3da/Feel_Touch.cpp +++ b/trunk/xray/xr_3da/Feel_Touch.cpp @@ -52,7 +52,7 @@ void Touch::feel_touch_update (Fvector& C, float R) if (std::find(feel_touch.begin(),feel_touch.end(),O) == feel_touch.end()){ // check for deny BOOL bDeny = FALSE; - for (dit=0; ditEnvironment().wind_strength_factor/10.f; - float k = g_pGamePersistent->Environment().CurrentEnv.wind_velocity*gust/drop_max_wind_vel; + float k = g_pGamePersistent->Environment().CurrentEnv->wind_velocity*gust/drop_max_wind_vel; clamp (k,0.f,1.f); float pitch = drop_max_angle*k-PI_DIV_2; - axis.setHP (g_pGamePersistent->Environment().CurrentEnv.wind_direction,pitch); + axis.setHP (g_pGamePersistent->Environment().CurrentEnv->wind_direction,pitch); Fvector& view = Device.vCameraPosition; float angle = ::Random.randF (0,PI_MUL_2); @@ -121,7 +121,7 @@ void CEffect_Rain::OnFrame () if (!g_pGameLevel) return; #endif // Parse states - float factor = g_pGamePersistent->Environment().CurrentEnv.rain_density; + float factor = g_pGamePersistent->Environment().CurrentEnv->rain_density; float hemi_factor = 1.f; #ifndef _EDITOR CObject* E = g_pGameLevel->CurrentViewEntity(); @@ -161,13 +161,13 @@ void CEffect_Rain::Render () #ifndef _EDITOR if (!g_pGameLevel) return; #endif - float factor = g_pGamePersistent->Environment().CurrentEnv.rain_density; + float factor = g_pGamePersistent->Environment().CurrentEnv->rain_density; if (factorEnvironment().CurrentEnv.rain_color; + Fvector3 f_rain_color = g_pGamePersistent->Environment().CurrentEnv->rain_color; u32 u_rain_color = color_rgba_f(f_rain_color.x,f_rain_color.y,f_rain_color.z,factor_visual); // born _new_ if needed diff --git a/trunk/xray/xr_3da/XR_3DA.vcxproj b/trunk/xray/xr_3da/XR_3DA.vcxproj index 629ea5a4..8849d68d 100644 --- a/trunk/xray/xr_3da/XR_3DA.vcxproj +++ b/trunk/xray/xr_3da/XR_3DA.vcxproj @@ -1,5 +1,5 @@  - + Debug_Dedicated @@ -75,76 +75,96 @@ false MultiByte true + v140 Application false MultiByte true + v140 Application false MultiByte + v140 Application false MultiByte + v140 Application false MultiByte + v140 Application false MultiByte + v140 Application false MultiByte true + v140 Application false MultiByte true + v140 Application false MultiByte true + v140 Application false MultiByte true + v140 Application false MultiByte + v140 Application false MultiByte + v140 Application false MultiByte + v140 Application false MultiByte + v140 + + + v140 + + + v140 diff --git a/trunk/xray/xr_3da/XR_3DA_2015.sln b/trunk/xray/xr_3da/XR_3DA_2015.sln new file mode 100644 index 00000000..f7efc930 --- /dev/null +++ b/trunk/xray/xr_3da/XR_3DA_2015.sln @@ -0,0 +1,1299 @@ +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "dedicated", "dedicated", "{3FC858CB-4888-42FF-ABC5-82DAECB59C2C}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "3rd party", "3rd party", "{2BFC806B-CE92-4EA4-8FE8-5F2EA54BA348}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "XR_3DA", "XR_3DA.vcxproj", "{2578C6D8-660D-48AE-9322-7422F8664F06}" + ProjectSection(ProjectDependencies) = postProject + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B} = {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xrCPU_Pipe", "xrCPU_Pipe\xrCPU_Pipe.vcxproj", "{CA0649DD-D089-423A-981C-46B57A884EB9}" + ProjectSection(ProjectDependencies) = postProject + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B} = {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xrGame", "xrGame\xrGame.vcxproj", "{200652A6-043E-4634-8837-87983B3BD5E0}" + ProjectSection(ProjectDependencies) = postProject + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B} = {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xrSound", "..\xrSound\xrSound.vcxproj", "{CCCA7859-EB86-493E-9B53-C4235F45B3C5}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xrCore", "..\xrCore\xrCore.vcxproj", "{A0F7D1FB-59A7-4717-A7E4-96F37E91998E}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xrCDB", "..\xrCDB\xrCDB.vcxproj", "{A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xrRender_R2", "xrRender_R2\xrRender_R2.vcxproj", "{963BA4E5-499A-454D-B002-1D5ECE0527A6}" + ProjectSection(ProjectDependencies) = postProject + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B} = {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xrXMLParser", "..\xrXMLParser\xrXMLParser.vcxproj", "{94A1C366-3D19-48E6-8170-4ADC2E70DF98}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ode", "..\xrODE\contrib\msvc7\ode_default\default.vcxproj", "{1BF75FEB-87DD-486C-880B-227987D191C2}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xrParticles", "..\xrParticles\xrParticles.vcxproj", "{94A1C366-3D19-48E6-8170-4ADC2E70DF97}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xrNetServer", "..\xrNetServer\xrNetServer.vcxproj", "{435BAC9A-B225-457D-AB40-C9BD0CC8838C}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xrD3D9-Null", "xrGame\xrD3D9-Null\xrD3D9-Null.vcxproj", "{0899B131-F1D4-4876-9BA1-67AC821DB9E1}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xrGameSpy", "xrGame\xrGameSpy\xrGameSpy.vcxproj", "{5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libogg_static", "..\..\3rd party\Xiph\libogg\win32\VS2010\libogg_static.vcxproj", "{15CBFEFF-7965-41F5-B4E2-21E8795C9159}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libvorbis_static", "..\..\3rd party\Xiph\libvorbis\win32\VS2010\libvorbis\libvorbis_static.vcxproj", "{3A214E06-B95E-4D61-A291-1F8DF2EC10FD}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libvorbisfile", "..\..\3rd party\Xiph\libvorbis\win32\VS2010\libvorbisfile\libvorbisfile_static.vcxproj", "{CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libtheora_static", "..\..\3rd party\Xiph\libtheora\win32\VS2010\libtheora_static.vcxproj", "{653F3841-3F26-49B9-AFCF-091DB4B67031}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Lua", "Lua", "{EF293583-AFED-4761-A72D-04F8BF122434}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LuaJIT", "..\LuaJIT\LuaJIT.vcxproj", "{94BE3D19-23D3-4D15-8B5C-41193885648C}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Luabind", "..\Luabind\Luabind.vcxproj", "{6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B}" + ProjectSection(ProjectDependencies) = postProject + {94BE3D19-23D3-4D15-8B5C-41193885648C} = {94BE3D19-23D3-4D15-8B5C-41193885648C} + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E} = {A0F7D1FB-59A7-4717-A7E4-96F37E91998E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "nvtt", "..\..\3rd party\nvtt\nvtt.vcxproj", "{0EB257DC-5CFC-44B0-82C9-CE6B158BE473}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + .NET Debug|Win32 = .NET Debug|Win32 + .NET Debug|x64 = .NET Debug|x64 + .NET Release|Win32 = .NET Release|Win32 + .NET Release|x64 = .NET Release|x64 + Debug_Dedicated|Win32 = Debug_Dedicated|Win32 + Debug_Dedicated|x64 = Debug_Dedicated|x64 + Debug_Priquel|Win32 = Debug_Priquel|Win32 + Debug_Priquel|x64 = Debug_Priquel|x64 + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Mixed_Dedicated|Win32 = Mixed_Dedicated|Win32 + Mixed_Dedicated|x64 = Mixed_Dedicated|x64 + Mixed_Priquel|Win32 = Mixed_Priquel|Win32 + Mixed_Priquel|x64 = Mixed_Priquel|x64 + Mixed|Win32 = Mixed|Win32 + Mixed|x64 = Mixed|x64 + Release_Dedicated|Win32 = Release_Dedicated|Win32 + Release_Dedicated|x64 = Release_Dedicated|x64 + Release_Priquel|Win32 = Release_Priquel|Win32 + Release_Priquel|x64 = Release_Priquel|x64 + Release_SSE|Win32 = Release_SSE|Win32 + Release_SSE|x64 = Release_SSE|x64 + Release_SSE2|Win32 = Release_SSE2|Win32 + Release_SSE2|x64 = Release_SSE2|x64 + Release_w_STLPORT|Win32 = Release_w_STLPORT|Win32 + Release_w_STLPORT|x64 = Release_w_STLPORT|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + Template|Win32 = Template|Win32 + Template|x64 = Template|x64 + Unicode Debug|Win32 = Unicode Debug|Win32 + Unicode Debug|x64 = Unicode Debug|x64 + Unicode Release|Win32 = Unicode Release|Win32 + Unicode Release|x64 = Unicode Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {2578C6D8-660D-48AE-9322-7422F8664F06}..NET Debug|Win32.ActiveCfg = Debug|Win32 + {2578C6D8-660D-48AE-9322-7422F8664F06}..NET Debug|Win32.Build.0 = Debug|Win32 + {2578C6D8-660D-48AE-9322-7422F8664F06}..NET Debug|x64.ActiveCfg = Debug|x64 + {2578C6D8-660D-48AE-9322-7422F8664F06}..NET Debug|x64.Build.0 = Debug|x64 + {2578C6D8-660D-48AE-9322-7422F8664F06}..NET Release|Win32.ActiveCfg = Release|Win32 + {2578C6D8-660D-48AE-9322-7422F8664F06}..NET Release|Win32.Build.0 = Release|Win32 + {2578C6D8-660D-48AE-9322-7422F8664F06}..NET Release|x64.ActiveCfg = Release|x64 + {2578C6D8-660D-48AE-9322-7422F8664F06}..NET Release|x64.Build.0 = Release|x64 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Debug_Dedicated|Win32.ActiveCfg = Debug_Dedicated|Win32 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Debug_Dedicated|Win32.Build.0 = Debug_Dedicated|Win32 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Debug_Dedicated|x64.ActiveCfg = Debug_Dedicated|x64 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Debug_Dedicated|x64.Build.0 = Debug_Dedicated|x64 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Debug_Priquel|Win32.ActiveCfg = Debug|Win32 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Debug_Priquel|Win32.Build.0 = Debug|Win32 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Debug_Priquel|x64.ActiveCfg = Debug_Dedicated|x64 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Debug_Priquel|x64.Build.0 = Debug_Dedicated|x64 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Debug|Win32.ActiveCfg = Debug|Win32 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Debug|Win32.Build.0 = Debug|Win32 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Debug|x64.ActiveCfg = Debug|x64 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Debug|x64.Build.0 = Debug|x64 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Mixed_Dedicated|Win32.ActiveCfg = Mixed_Dedicated|Win32 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Mixed_Dedicated|Win32.Build.0 = Mixed_Dedicated|Win32 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Mixed_Dedicated|x64.ActiveCfg = Mixed_Dedicated|x64 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Mixed_Dedicated|x64.Build.0 = Mixed_Dedicated|x64 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Mixed_Priquel|Win32.ActiveCfg = Debug|Win32 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Mixed_Priquel|Win32.Build.0 = Debug|Win32 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Mixed_Priquel|x64.ActiveCfg = Mixed_Dedicated|x64 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Mixed_Priquel|x64.Build.0 = Mixed_Dedicated|x64 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Mixed|Win32.ActiveCfg = Mixed|Win32 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Mixed|Win32.Build.0 = Mixed|Win32 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Mixed|x64.ActiveCfg = Mixed|x64 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Mixed|x64.Build.0 = Mixed|x64 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Release_Dedicated|Win32.ActiveCfg = Release_Dedicated|Win32 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Release_Dedicated|Win32.Build.0 = Release_Dedicated|Win32 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Release_Dedicated|x64.ActiveCfg = Release_Dedicated|x64 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Release_Dedicated|x64.Build.0 = Release_Dedicated|x64 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Release_Priquel|Win32.ActiveCfg = Release|Win32 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Release_Priquel|Win32.Build.0 = Release|Win32 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Release_Priquel|x64.ActiveCfg = Release_Dedicated|x64 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Release_Priquel|x64.Build.0 = Release_Dedicated|x64 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Release_SSE|Win32.ActiveCfg = Release_w_STLPORT|x64 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Release_SSE|x64.ActiveCfg = Release_w_STLPORT|x64 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Release_SSE|x64.Build.0 = Release_w_STLPORT|x64 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Release_SSE2|Win32.ActiveCfg = Release_w_STLPORT|x64 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Release_SSE2|x64.ActiveCfg = Release_w_STLPORT|x64 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Release_SSE2|x64.Build.0 = Release_w_STLPORT|x64 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Release_w_STLPORT|Win32.ActiveCfg = Release_w_STLPORT|Win32 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Release_w_STLPORT|Win32.Build.0 = Release_w_STLPORT|Win32 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Release_w_STLPORT|x64.ActiveCfg = Release_w_STLPORT|x64 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Release_w_STLPORT|x64.Build.0 = Release_w_STLPORT|x64 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Release|Win32.ActiveCfg = Release|Win32 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Release|Win32.Build.0 = Release|Win32 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Release|x64.ActiveCfg = Release|x64 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Template|Win32.ActiveCfg = Template|Win32 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Template|Win32.Build.0 = Template|Win32 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Template|x64.ActiveCfg = Template|x64 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Template|x64.Build.0 = Template|x64 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Unicode Debug|Win32.ActiveCfg = Debug|Win32 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Unicode Debug|Win32.Build.0 = Debug|Win32 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Unicode Debug|x64.ActiveCfg = Debug|x64 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Unicode Debug|x64.Build.0 = Debug|x64 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Unicode Release|Win32.ActiveCfg = Release|Win32 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Unicode Release|Win32.Build.0 = Release|Win32 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Unicode Release|x64.ActiveCfg = Release|x64 + {2578C6D8-660D-48AE-9322-7422F8664F06}.Unicode Release|x64.Build.0 = Release|x64 + {CA0649DD-D089-423A-981C-46B57A884EB9}..NET Debug|Win32.ActiveCfg = Debug|Win32 + {CA0649DD-D089-423A-981C-46B57A884EB9}..NET Debug|Win32.Build.0 = Debug|Win32 + {CA0649DD-D089-423A-981C-46B57A884EB9}..NET Debug|x64.ActiveCfg = Debug|x64 + {CA0649DD-D089-423A-981C-46B57A884EB9}..NET Debug|x64.Build.0 = Debug|x64 + {CA0649DD-D089-423A-981C-46B57A884EB9}..NET Release|Win32.ActiveCfg = Release|Win32 + {CA0649DD-D089-423A-981C-46B57A884EB9}..NET Release|Win32.Build.0 = Release|Win32 + {CA0649DD-D089-423A-981C-46B57A884EB9}..NET Release|x64.ActiveCfg = Release|x64 + {CA0649DD-D089-423A-981C-46B57A884EB9}..NET Release|x64.Build.0 = Release|x64 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Debug_Dedicated|Win32.ActiveCfg = Debug|Win32 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Debug_Dedicated|x64.ActiveCfg = Template|x64 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Debug_Dedicated|x64.Build.0 = Debug|x64 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Debug_Priquel|Win32.ActiveCfg = Debug|Win32 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Debug_Priquel|Win32.Build.0 = Debug|Win32 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Debug_Priquel|x64.ActiveCfg = Debug|x64 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Debug_Priquel|x64.Build.0 = Debug|x64 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Debug|Win32.ActiveCfg = Debug|Win32 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Debug|Win32.Build.0 = Debug|Win32 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Debug|x64.ActiveCfg = Debug|x64 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Debug|x64.Build.0 = Debug|x64 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Mixed_Dedicated|Win32.ActiveCfg = Mixed|Win32 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Mixed_Dedicated|x64.ActiveCfg = Mixed|x64 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Mixed_Dedicated|x64.Build.0 = Mixed|x64 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Mixed_Priquel|Win32.ActiveCfg = Mixed|Win32 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Mixed_Priquel|Win32.Build.0 = Mixed|Win32 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Mixed_Priquel|x64.ActiveCfg = Mixed|x64 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Mixed_Priquel|x64.Build.0 = Mixed|x64 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Mixed|Win32.ActiveCfg = Mixed|Win32 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Mixed|Win32.Build.0 = Mixed|Win32 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Mixed|x64.ActiveCfg = Mixed|x64 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Mixed|x64.Build.0 = Mixed|x64 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Release_Dedicated|Win32.ActiveCfg = Release|Win32 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Release_Dedicated|x64.ActiveCfg = Release|x64 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Release_Dedicated|x64.Build.0 = Release|x64 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Release_Priquel|Win32.ActiveCfg = Release|Win32 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Release_Priquel|Win32.Build.0 = Release|Win32 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Release_Priquel|x64.ActiveCfg = Release|x64 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Release_Priquel|x64.Build.0 = Release|x64 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Release_SSE|Win32.ActiveCfg = Release_w_STLPORT|x64 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Release_SSE|x64.ActiveCfg = Release_w_STLPORT|x64 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Release_SSE|x64.Build.0 = Release_w_STLPORT|x64 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Release_SSE2|Win32.ActiveCfg = Release_w_STLPORT|x64 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Release_SSE2|x64.ActiveCfg = Release_w_STLPORT|x64 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Release_SSE2|x64.Build.0 = Release_w_STLPORT|x64 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Release_w_STLPORT|Win32.ActiveCfg = Release_w_STLPORT|Win32 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Release_w_STLPORT|Win32.Build.0 = Release_w_STLPORT|Win32 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Release_w_STLPORT|x64.ActiveCfg = Release_w_STLPORT|x64 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Release_w_STLPORT|x64.Build.0 = Release_w_STLPORT|x64 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Release|Win32.ActiveCfg = Release|Win32 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Release|Win32.Build.0 = Release|Win32 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Release|x64.ActiveCfg = Release|x64 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Template|Win32.ActiveCfg = Template|Win32 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Template|Win32.Build.0 = Template|Win32 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Template|x64.ActiveCfg = Template|x64 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Template|x64.Build.0 = Template|x64 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Unicode Debug|Win32.ActiveCfg = Debug|Win32 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Unicode Debug|Win32.Build.0 = Debug|Win32 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Unicode Debug|x64.ActiveCfg = Debug|x64 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Unicode Debug|x64.Build.0 = Debug|x64 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Unicode Release|Win32.ActiveCfg = Release|Win32 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Unicode Release|Win32.Build.0 = Release|Win32 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Unicode Release|x64.ActiveCfg = Release|x64 + {CA0649DD-D089-423A-981C-46B57A884EB9}.Unicode Release|x64.Build.0 = Release|x64 + {200652A6-043E-4634-8837-87983B3BD5E0}..NET Debug|Win32.ActiveCfg = Debug|Win32 + {200652A6-043E-4634-8837-87983B3BD5E0}..NET Debug|Win32.Build.0 = Debug|Win32 + {200652A6-043E-4634-8837-87983B3BD5E0}..NET Debug|x64.ActiveCfg = Debug|x64 + {200652A6-043E-4634-8837-87983B3BD5E0}..NET Debug|x64.Build.0 = Debug|x64 + {200652A6-043E-4634-8837-87983B3BD5E0}..NET Release|Win32.ActiveCfg = Release|Win32 + {200652A6-043E-4634-8837-87983B3BD5E0}..NET Release|Win32.Build.0 = Release|Win32 + {200652A6-043E-4634-8837-87983B3BD5E0}..NET Release|x64.ActiveCfg = Release|x64 + {200652A6-043E-4634-8837-87983B3BD5E0}..NET Release|x64.Build.0 = Release|x64 + {200652A6-043E-4634-8837-87983B3BD5E0}.Debug_Dedicated|Win32.ActiveCfg = Debug|Win32 + {200652A6-043E-4634-8837-87983B3BD5E0}.Debug_Dedicated|x64.ActiveCfg = Template|x64 + {200652A6-043E-4634-8837-87983B3BD5E0}.Debug_Dedicated|x64.Build.0 = Debug_Priquel|x64 + {200652A6-043E-4634-8837-87983B3BD5E0}.Debug_Priquel|Win32.ActiveCfg = Debug_Priquel|Win32 + {200652A6-043E-4634-8837-87983B3BD5E0}.Debug_Priquel|Win32.Build.0 = Debug_Priquel|Win32 + {200652A6-043E-4634-8837-87983B3BD5E0}.Debug_Priquel|x64.ActiveCfg = Debug_Priquel|x64 + {200652A6-043E-4634-8837-87983B3BD5E0}.Debug_Priquel|x64.Build.0 = Debug_Priquel|x64 + {200652A6-043E-4634-8837-87983B3BD5E0}.Debug|Win32.ActiveCfg = Debug|Win32 + {200652A6-043E-4634-8837-87983B3BD5E0}.Debug|Win32.Build.0 = Debug|Win32 + {200652A6-043E-4634-8837-87983B3BD5E0}.Debug|x64.ActiveCfg = Debug|x64 + {200652A6-043E-4634-8837-87983B3BD5E0}.Debug|x64.Build.0 = Debug|x64 + {200652A6-043E-4634-8837-87983B3BD5E0}.Mixed_Dedicated|Win32.ActiveCfg = Mixed|Win32 + {200652A6-043E-4634-8837-87983B3BD5E0}.Mixed_Dedicated|x64.ActiveCfg = Mixed_Priquel|x64 + {200652A6-043E-4634-8837-87983B3BD5E0}.Mixed_Dedicated|x64.Build.0 = Mixed_Priquel|x64 + {200652A6-043E-4634-8837-87983B3BD5E0}.Mixed_Priquel|Win32.ActiveCfg = Debug_Priquel|Win32 + {200652A6-043E-4634-8837-87983B3BD5E0}.Mixed_Priquel|Win32.Build.0 = Debug_Priquel|Win32 + {200652A6-043E-4634-8837-87983B3BD5E0}.Mixed_Priquel|x64.ActiveCfg = Mixed_Priquel|x64 + {200652A6-043E-4634-8837-87983B3BD5E0}.Mixed_Priquel|x64.Build.0 = Mixed_Priquel|x64 + {200652A6-043E-4634-8837-87983B3BD5E0}.Mixed|Win32.ActiveCfg = Debug|Win32 + {200652A6-043E-4634-8837-87983B3BD5E0}.Mixed|Win32.Build.0 = Debug|Win32 + {200652A6-043E-4634-8837-87983B3BD5E0}.Mixed|x64.ActiveCfg = Mixed|x64 + {200652A6-043E-4634-8837-87983B3BD5E0}.Mixed|x64.Build.0 = Mixed|x64 + {200652A6-043E-4634-8837-87983B3BD5E0}.Release_Dedicated|Win32.ActiveCfg = Release|Win32 + {200652A6-043E-4634-8837-87983B3BD5E0}.Release_Dedicated|x64.ActiveCfg = Release_Priquel|x64 + {200652A6-043E-4634-8837-87983B3BD5E0}.Release_Dedicated|x64.Build.0 = Release_Priquel|x64 + {200652A6-043E-4634-8837-87983B3BD5E0}.Release_Priquel|Win32.ActiveCfg = Release_Priquel|Win32 + {200652A6-043E-4634-8837-87983B3BD5E0}.Release_Priquel|Win32.Build.0 = Release_Priquel|Win32 + {200652A6-043E-4634-8837-87983B3BD5E0}.Release_Priquel|x64.ActiveCfg = Release_Priquel|x64 + {200652A6-043E-4634-8837-87983B3BD5E0}.Release_Priquel|x64.Build.0 = Release_Priquel|x64 + {200652A6-043E-4634-8837-87983B3BD5E0}.Release_SSE|Win32.ActiveCfg = Release_w_STLPORT|x64 + {200652A6-043E-4634-8837-87983B3BD5E0}.Release_SSE|x64.ActiveCfg = Release_w_STLPORT|x64 + {200652A6-043E-4634-8837-87983B3BD5E0}.Release_SSE|x64.Build.0 = Release_w_STLPORT|x64 + {200652A6-043E-4634-8837-87983B3BD5E0}.Release_SSE2|Win32.ActiveCfg = Release_w_STLPORT|x64 + {200652A6-043E-4634-8837-87983B3BD5E0}.Release_SSE2|x64.ActiveCfg = Release_w_STLPORT|x64 + {200652A6-043E-4634-8837-87983B3BD5E0}.Release_SSE2|x64.Build.0 = Release_w_STLPORT|x64 + {200652A6-043E-4634-8837-87983B3BD5E0}.Release_w_STLPORT|Win32.ActiveCfg = Release_w_STLPORT|Win32 + {200652A6-043E-4634-8837-87983B3BD5E0}.Release_w_STLPORT|Win32.Build.0 = Release_w_STLPORT|Win32 + {200652A6-043E-4634-8837-87983B3BD5E0}.Release_w_STLPORT|x64.ActiveCfg = Release_w_STLPORT|x64 + {200652A6-043E-4634-8837-87983B3BD5E0}.Release_w_STLPORT|x64.Build.0 = Release_w_STLPORT|x64 + {200652A6-043E-4634-8837-87983B3BD5E0}.Release|Win32.ActiveCfg = Release|Win32 + {200652A6-043E-4634-8837-87983B3BD5E0}.Release|Win32.Build.0 = Release|Win32 + {200652A6-043E-4634-8837-87983B3BD5E0}.Release|x64.ActiveCfg = Release|x64 + {200652A6-043E-4634-8837-87983B3BD5E0}.Template|Win32.ActiveCfg = Template|Win32 + {200652A6-043E-4634-8837-87983B3BD5E0}.Template|Win32.Build.0 = Template|Win32 + {200652A6-043E-4634-8837-87983B3BD5E0}.Template|x64.ActiveCfg = Template|x64 + {200652A6-043E-4634-8837-87983B3BD5E0}.Template|x64.Build.0 = Template|x64 + {200652A6-043E-4634-8837-87983B3BD5E0}.Unicode Debug|Win32.ActiveCfg = Debug|Win32 + {200652A6-043E-4634-8837-87983B3BD5E0}.Unicode Debug|Win32.Build.0 = Debug|Win32 + {200652A6-043E-4634-8837-87983B3BD5E0}.Unicode Debug|x64.ActiveCfg = Debug|x64 + {200652A6-043E-4634-8837-87983B3BD5E0}.Unicode Debug|x64.Build.0 = Debug|x64 + {200652A6-043E-4634-8837-87983B3BD5E0}.Unicode Release|Win32.ActiveCfg = Release|Win32 + {200652A6-043E-4634-8837-87983B3BD5E0}.Unicode Release|Win32.Build.0 = Release|Win32 + {200652A6-043E-4634-8837-87983B3BD5E0}.Unicode Release|x64.ActiveCfg = Release|x64 + {200652A6-043E-4634-8837-87983B3BD5E0}.Unicode Release|x64.Build.0 = Release|x64 + {CCCA7859-EB86-493E-9B53-C4235F45B3C5}..NET Debug|Win32.ActiveCfg = Debug|Win32 + {CCCA7859-EB86-493E-9B53-C4235F45B3C5}..NET Debug|Win32.Build.0 = Debug|Win32 + {CCCA7859-EB86-493E-9B53-C4235F45B3C5}..NET Debug|x64.ActiveCfg = Debug|Win32 + {CCCA7859-EB86-493E-9B53-C4235F45B3C5}..NET Release|Win32.ActiveCfg = Release|Win32 + {CCCA7859-EB86-493E-9B53-C4235F45B3C5}..NET Release|Win32.Build.0 = Release|Win32 + {CCCA7859-EB86-493E-9B53-C4235F45B3C5}..NET Release|x64.ActiveCfg = Release|Win32 + {CCCA7859-EB86-493E-9B53-C4235F45B3C5}.Debug_Dedicated|Win32.ActiveCfg = Debug|Win32 + {CCCA7859-EB86-493E-9B53-C4235F45B3C5}.Debug_Dedicated|x64.ActiveCfg = Debug|Win32 + {CCCA7859-EB86-493E-9B53-C4235F45B3C5}.Debug_Priquel|Win32.ActiveCfg = Debug|Win32 + {CCCA7859-EB86-493E-9B53-C4235F45B3C5}.Debug_Priquel|Win32.Build.0 = Debug|Win32 + {CCCA7859-EB86-493E-9B53-C4235F45B3C5}.Debug_Priquel|x64.ActiveCfg = Debug|Win32 + {CCCA7859-EB86-493E-9B53-C4235F45B3C5}.Debug|Win32.ActiveCfg = Debug|Win32 + {CCCA7859-EB86-493E-9B53-C4235F45B3C5}.Debug|Win32.Build.0 = Debug|Win32 + {CCCA7859-EB86-493E-9B53-C4235F45B3C5}.Debug|x64.ActiveCfg = Debug|Win32 + {CCCA7859-EB86-493E-9B53-C4235F45B3C5}.Mixed_Dedicated|Win32.ActiveCfg = Mixed|Win32 + {CCCA7859-EB86-493E-9B53-C4235F45B3C5}.Mixed_Dedicated|x64.ActiveCfg = Mixed|Win32 + {CCCA7859-EB86-493E-9B53-C4235F45B3C5}.Mixed_Priquel|Win32.ActiveCfg = Mixed|Win32 + {CCCA7859-EB86-493E-9B53-C4235F45B3C5}.Mixed_Priquel|Win32.Build.0 = Mixed|Win32 + {CCCA7859-EB86-493E-9B53-C4235F45B3C5}.Mixed_Priquel|x64.ActiveCfg = Mixed|Win32 + {CCCA7859-EB86-493E-9B53-C4235F45B3C5}.Mixed|Win32.ActiveCfg = Mixed|Win32 + {CCCA7859-EB86-493E-9B53-C4235F45B3C5}.Mixed|Win32.Build.0 = Mixed|Win32 + {CCCA7859-EB86-493E-9B53-C4235F45B3C5}.Mixed|x64.ActiveCfg = Mixed|Win32 + {CCCA7859-EB86-493E-9B53-C4235F45B3C5}.Release_Dedicated|Win32.ActiveCfg = Release|Win32 + {CCCA7859-EB86-493E-9B53-C4235F45B3C5}.Release_Dedicated|x64.ActiveCfg = Release|Win32 + {CCCA7859-EB86-493E-9B53-C4235F45B3C5}.Release_Priquel|Win32.ActiveCfg = Release|Win32 + {CCCA7859-EB86-493E-9B53-C4235F45B3C5}.Release_Priquel|Win32.Build.0 = Release|Win32 + {CCCA7859-EB86-493E-9B53-C4235F45B3C5}.Release_Priquel|x64.ActiveCfg = Release|Win32 + {CCCA7859-EB86-493E-9B53-C4235F45B3C5}.Release_SSE|Win32.ActiveCfg = Release|Win32 + {CCCA7859-EB86-493E-9B53-C4235F45B3C5}.Release_SSE|Win32.Build.0 = Release|Win32 + {CCCA7859-EB86-493E-9B53-C4235F45B3C5}.Release_SSE|x64.ActiveCfg = Release|Win32 + {CCCA7859-EB86-493E-9B53-C4235F45B3C5}.Release_SSE2|Win32.ActiveCfg = Release|Win32 + {CCCA7859-EB86-493E-9B53-C4235F45B3C5}.Release_SSE2|Win32.Build.0 = Release|Win32 + {CCCA7859-EB86-493E-9B53-C4235F45B3C5}.Release_SSE2|x64.ActiveCfg = Release|Win32 + {CCCA7859-EB86-493E-9B53-C4235F45B3C5}.Release_w_STLPORT|Win32.ActiveCfg = Release|Win32 + {CCCA7859-EB86-493E-9B53-C4235F45B3C5}.Release_w_STLPORT|Win32.Build.0 = Release|Win32 + {CCCA7859-EB86-493E-9B53-C4235F45B3C5}.Release_w_STLPORT|x64.ActiveCfg = Release|Win32 + {CCCA7859-EB86-493E-9B53-C4235F45B3C5}.Release|Win32.ActiveCfg = Release|Win32 + {CCCA7859-EB86-493E-9B53-C4235F45B3C5}.Release|Win32.Build.0 = Release|Win32 + {CCCA7859-EB86-493E-9B53-C4235F45B3C5}.Release|x64.ActiveCfg = Release|Win32 + {CCCA7859-EB86-493E-9B53-C4235F45B3C5}.Template|Win32.ActiveCfg = Template|Win32 + {CCCA7859-EB86-493E-9B53-C4235F45B3C5}.Template|Win32.Build.0 = Template|Win32 + {CCCA7859-EB86-493E-9B53-C4235F45B3C5}.Template|x64.ActiveCfg = Template|Win32 + {CCCA7859-EB86-493E-9B53-C4235F45B3C5}.Unicode Debug|Win32.ActiveCfg = Debug|Win32 + {CCCA7859-EB86-493E-9B53-C4235F45B3C5}.Unicode Debug|Win32.Build.0 = Debug|Win32 + {CCCA7859-EB86-493E-9B53-C4235F45B3C5}.Unicode Debug|x64.ActiveCfg = Debug|Win32 + {CCCA7859-EB86-493E-9B53-C4235F45B3C5}.Unicode Release|Win32.ActiveCfg = Release|Win32 + {CCCA7859-EB86-493E-9B53-C4235F45B3C5}.Unicode Release|Win32.Build.0 = Release|Win32 + {CCCA7859-EB86-493E-9B53-C4235F45B3C5}.Unicode Release|x64.ActiveCfg = Release|Win32 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}..NET Debug|Win32.ActiveCfg = Debug|Win32 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}..NET Debug|Win32.Build.0 = Debug|Win32 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}..NET Debug|x64.ActiveCfg = Debug|x64 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}..NET Debug|x64.Build.0 = Debug|x64 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}..NET Release|Win32.ActiveCfg = Release|Win32 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}..NET Release|Win32.Build.0 = Release|Win32 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}..NET Release|x64.ActiveCfg = Release|x64 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}..NET Release|x64.Build.0 = Release|x64 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Debug_Dedicated|Win32.ActiveCfg = Debug|Win32 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Debug_Dedicated|x64.ActiveCfg = Template|x64 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Debug_Dedicated|x64.Build.0 = Debug|x64 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Debug_Priquel|Win32.ActiveCfg = Mixed|Win32 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Debug_Priquel|Win32.Build.0 = Mixed|Win32 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Debug_Priquel|x64.ActiveCfg = Debug|x64 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Debug_Priquel|x64.Build.0 = Debug|x64 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Debug|Win32.ActiveCfg = Mixed|Win32 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Debug|Win32.Build.0 = Mixed|Win32 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Debug|x64.ActiveCfg = Debug|x64 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Debug|x64.Build.0 = Debug|x64 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Mixed_Dedicated|Win32.ActiveCfg = Mixed|Win32 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Mixed_Dedicated|x64.ActiveCfg = Mixed|x64 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Mixed_Dedicated|x64.Build.0 = Mixed|x64 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Mixed_Priquel|Win32.ActiveCfg = Mixed|Win32 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Mixed_Priquel|Win32.Build.0 = Mixed|Win32 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Mixed_Priquel|x64.ActiveCfg = Mixed|x64 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Mixed_Priquel|x64.Build.0 = Mixed|x64 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Mixed|Win32.ActiveCfg = Mixed|Win32 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Mixed|Win32.Build.0 = Mixed|Win32 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Mixed|x64.ActiveCfg = Mixed|x64 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Mixed|x64.Build.0 = Mixed|x64 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Release_Dedicated|Win32.ActiveCfg = Release|Win32 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Release_Dedicated|x64.ActiveCfg = Release|x64 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Release_Dedicated|x64.Build.0 = Release|x64 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Release_Priquel|Win32.ActiveCfg = Release|Win32 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Release_Priquel|Win32.Build.0 = Release|Win32 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Release_Priquel|x64.ActiveCfg = Release|x64 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Release_Priquel|x64.Build.0 = Release|x64 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Release_SSE|Win32.ActiveCfg = Release_w_STLPORT|x64 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Release_SSE|x64.ActiveCfg = Release_w_STLPORT|x64 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Release_SSE|x64.Build.0 = Release_w_STLPORT|x64 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Release_SSE2|Win32.ActiveCfg = Release_w_STLPORT|x64 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Release_SSE2|x64.ActiveCfg = Release_w_STLPORT|x64 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Release_SSE2|x64.Build.0 = Release_w_STLPORT|x64 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Release_w_STLPORT|Win32.ActiveCfg = Release_w_STLPORT|Win32 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Release_w_STLPORT|Win32.Build.0 = Release_w_STLPORT|Win32 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Release_w_STLPORT|x64.ActiveCfg = Release_w_STLPORT|x64 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Release_w_STLPORT|x64.Build.0 = Release_w_STLPORT|x64 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Release|Win32.ActiveCfg = Release|Win32 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Release|Win32.Build.0 = Release|Win32 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Release|x64.ActiveCfg = Release|x64 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Release|x64.Build.0 = Release|x64 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Template|Win32.ActiveCfg = Template|Win32 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Template|Win32.Build.0 = Template|Win32 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Template|x64.ActiveCfg = Template|x64 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Template|x64.Build.0 = Template|x64 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Unicode Debug|Win32.ActiveCfg = Debug|Win32 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Unicode Debug|Win32.Build.0 = Debug|Win32 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Unicode Debug|x64.ActiveCfg = Debug|x64 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Unicode Debug|x64.Build.0 = Debug|x64 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Unicode Release|Win32.ActiveCfg = Release|Win32 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Unicode Release|Win32.Build.0 = Release|Win32 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Unicode Release|x64.ActiveCfg = Release|x64 + {A0F7D1FB-59A7-4717-A7E4-96F37E91998E}.Unicode Release|x64.Build.0 = Release|x64 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}..NET Debug|Win32.ActiveCfg = Debug|Win32 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}..NET Debug|Win32.Build.0 = Debug|Win32 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}..NET Debug|x64.ActiveCfg = Debug|x64 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}..NET Debug|x64.Build.0 = Debug|x64 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}..NET Release|Win32.ActiveCfg = Release|Win32 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}..NET Release|Win32.Build.0 = Release|Win32 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}..NET Release|x64.ActiveCfg = Release|x64 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}..NET Release|x64.Build.0 = Release|x64 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Debug_Dedicated|Win32.ActiveCfg = Debug|Win32 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Debug_Dedicated|x64.ActiveCfg = Template|x64 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Debug_Dedicated|x64.Build.0 = Debug|x64 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Debug_Priquel|Win32.ActiveCfg = Debug|Win32 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Debug_Priquel|Win32.Build.0 = Debug|Win32 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Debug_Priquel|x64.ActiveCfg = Debug|x64 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Debug_Priquel|x64.Build.0 = Debug|x64 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Debug|Win32.ActiveCfg = Debug|Win32 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Debug|Win32.Build.0 = Debug|Win32 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Debug|x64.ActiveCfg = Debug|x64 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Debug|x64.Build.0 = Debug|x64 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Mixed_Dedicated|Win32.ActiveCfg = Mixed|Win32 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Mixed_Dedicated|x64.ActiveCfg = Mixed|x64 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Mixed_Dedicated|x64.Build.0 = Mixed|x64 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Mixed_Priquel|Win32.ActiveCfg = Mixed|Win32 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Mixed_Priquel|Win32.Build.0 = Mixed|Win32 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Mixed_Priquel|x64.ActiveCfg = Mixed|x64 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Mixed_Priquel|x64.Build.0 = Mixed|x64 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Mixed|Win32.ActiveCfg = Mixed|Win32 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Mixed|Win32.Build.0 = Mixed|Win32 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Mixed|x64.ActiveCfg = Mixed|x64 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Mixed|x64.Build.0 = Mixed|x64 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Release_Dedicated|Win32.ActiveCfg = Release|Win32 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Release_Dedicated|x64.ActiveCfg = Release|x64 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Release_Dedicated|x64.Build.0 = Release|x64 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Release_Priquel|Win32.ActiveCfg = Release|Win32 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Release_Priquel|Win32.Build.0 = Release|Win32 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Release_Priquel|x64.ActiveCfg = Release|x64 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Release_Priquel|x64.Build.0 = Release|x64 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Release_SSE|Win32.ActiveCfg = Release_w_STLPORT|x64 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Release_SSE|x64.ActiveCfg = Release_w_STLPORT|x64 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Release_SSE|x64.Build.0 = Release_w_STLPORT|x64 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Release_SSE2|Win32.ActiveCfg = Release_w_STLPORT|x64 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Release_SSE2|x64.ActiveCfg = Release_w_STLPORT|x64 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Release_SSE2|x64.Build.0 = Release_w_STLPORT|x64 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Release_w_STLPORT|Win32.ActiveCfg = Release_w_STLPORT|Win32 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Release_w_STLPORT|Win32.Build.0 = Release_w_STLPORT|Win32 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Release_w_STLPORT|x64.ActiveCfg = Release_w_STLPORT|x64 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Release_w_STLPORT|x64.Build.0 = Release_w_STLPORT|x64 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Release|Win32.ActiveCfg = Release|Win32 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Release|Win32.Build.0 = Release|Win32 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Release|x64.ActiveCfg = Release|x64 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Release|x64.Build.0 = Release|x64 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Template|Win32.ActiveCfg = Template|Win32 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Template|Win32.Build.0 = Template|Win32 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Template|x64.ActiveCfg = Template|x64 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Template|x64.Build.0 = Template|x64 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Unicode Debug|Win32.ActiveCfg = Debug|Win32 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Unicode Debug|Win32.Build.0 = Debug|Win32 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Unicode Debug|x64.ActiveCfg = Debug|x64 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Unicode Debug|x64.Build.0 = Debug|x64 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Unicode Release|Win32.ActiveCfg = Release|Win32 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Unicode Release|Win32.Build.0 = Release|Win32 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Unicode Release|x64.ActiveCfg = Release|x64 + {A19B1DF2-82EC-4364-8BDF-85D13A1C89B5}.Unicode Release|x64.Build.0 = Release|x64 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}..NET Debug|Win32.ActiveCfg = Debug|Win32 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}..NET Debug|Win32.Build.0 = Debug|Win32 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}..NET Debug|x64.ActiveCfg = Debug|x64 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}..NET Debug|x64.Build.0 = Debug|x64 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}..NET Release|Win32.ActiveCfg = Release|Win32 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}..NET Release|Win32.Build.0 = Release|Win32 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}..NET Release|x64.ActiveCfg = Release|x64 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}..NET Release|x64.Build.0 = Release|x64 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}.Debug_Dedicated|Win32.ActiveCfg = Debug|Win32 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}.Debug_Dedicated|x64.ActiveCfg = Debug|x64 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}.Debug_Dedicated|x64.Build.0 = Debug|x64 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}.Debug_Priquel|Win32.ActiveCfg = Debug|Win32 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}.Debug_Priquel|Win32.Build.0 = Debug|Win32 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}.Debug_Priquel|x64.ActiveCfg = Debug|x64 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}.Debug_Priquel|x64.Build.0 = Debug|x64 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}.Debug|Win32.ActiveCfg = Debug|Win32 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}.Debug|Win32.Build.0 = Debug|Win32 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}.Debug|x64.ActiveCfg = Debug|x64 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}.Debug|x64.Build.0 = Debug|x64 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}.Mixed_Dedicated|Win32.ActiveCfg = Mixed|Win32 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}.Mixed_Dedicated|x64.ActiveCfg = Mixed|x64 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}.Mixed_Dedicated|x64.Build.0 = Mixed|x64 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}.Mixed_Priquel|Win32.ActiveCfg = Debug|Win32 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}.Mixed_Priquel|Win32.Build.0 = Debug|Win32 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}.Mixed_Priquel|x64.ActiveCfg = Mixed|x64 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}.Mixed_Priquel|x64.Build.0 = Mixed|x64 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}.Mixed|Win32.ActiveCfg = Mixed|Win32 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}.Mixed|Win32.Build.0 = Mixed|Win32 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}.Mixed|x64.ActiveCfg = Mixed|x64 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}.Mixed|x64.Build.0 = Mixed|x64 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}.Release_Dedicated|Win32.ActiveCfg = Release|Win32 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}.Release_Dedicated|x64.ActiveCfg = Release|x64 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}.Release_Dedicated|x64.Build.0 = Release|x64 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}.Release_Priquel|Win32.ActiveCfg = Release|Win32 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}.Release_Priquel|Win32.Build.0 = Release|Win32 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}.Release_Priquel|x64.ActiveCfg = Release|x64 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}.Release_Priquel|x64.Build.0 = Release|x64 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}.Release_SSE|Win32.ActiveCfg = Release_w_STLPORT|x64 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}.Release_SSE|x64.ActiveCfg = Release_w_STLPORT|x64 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}.Release_SSE|x64.Build.0 = Release_w_STLPORT|x64 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}.Release_SSE2|Win32.ActiveCfg = Release_w_STLPORT|x64 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}.Release_SSE2|x64.ActiveCfg = Release_w_STLPORT|x64 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}.Release_SSE2|x64.Build.0 = Release_w_STLPORT|x64 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}.Release_w_STLPORT|Win32.ActiveCfg = Release_w_STLPORT|Win32 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}.Release_w_STLPORT|Win32.Build.0 = Release_w_STLPORT|Win32 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}.Release_w_STLPORT|x64.ActiveCfg = Release_w_STLPORT|x64 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}.Release_w_STLPORT|x64.Build.0 = Release_w_STLPORT|x64 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}.Release|Win32.ActiveCfg = Release|Win32 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}.Release|Win32.Build.0 = Release|Win32 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}.Release|x64.ActiveCfg = Release|x64 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}.Template|Win32.ActiveCfg = Release|x64 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}.Template|x64.ActiveCfg = Release|x64 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}.Template|x64.Build.0 = Release|x64 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}.Unicode Debug|Win32.ActiveCfg = Debug|Win32 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}.Unicode Debug|Win32.Build.0 = Debug|Win32 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}.Unicode Debug|x64.ActiveCfg = Debug|x64 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}.Unicode Debug|x64.Build.0 = Debug|x64 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}.Unicode Release|Win32.ActiveCfg = Release|Win32 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}.Unicode Release|Win32.Build.0 = Release|Win32 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}.Unicode Release|x64.ActiveCfg = Release|x64 + {963BA4E5-499A-454D-B002-1D5ECE0527A6}.Unicode Release|x64.Build.0 = Release|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}..NET Debug|Win32.ActiveCfg = Debug|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}..NET Debug|Win32.Build.0 = Debug|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}..NET Debug|x64.ActiveCfg = Debug|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}..NET Debug|x64.Build.0 = Debug|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}..NET Release|Win32.ActiveCfg = Release|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}..NET Release|Win32.Build.0 = Release|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}..NET Release|x64.ActiveCfg = Release|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}..NET Release|x64.Build.0 = Release|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Debug_Dedicated|Win32.ActiveCfg = Debug|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Debug_Dedicated|x64.ActiveCfg = Template|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Debug_Dedicated|x64.Build.0 = Debug|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Debug_Priquel|Win32.ActiveCfg = Debug|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Debug_Priquel|Win32.Build.0 = Debug|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Debug_Priquel|x64.ActiveCfg = Debug|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Debug_Priquel|x64.Build.0 = Debug|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Debug|Win32.ActiveCfg = Debug|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Debug|Win32.Build.0 = Debug|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Debug|x64.ActiveCfg = Debug|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Debug|x64.Build.0 = Debug|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Mixed_Dedicated|Win32.ActiveCfg = Mixed|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Mixed_Dedicated|x64.ActiveCfg = Mixed|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Mixed_Dedicated|x64.Build.0 = Mixed|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Mixed_Priquel|Win32.ActiveCfg = Mixed|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Mixed_Priquel|Win32.Build.0 = Mixed|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Mixed_Priquel|x64.ActiveCfg = Mixed|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Mixed_Priquel|x64.Build.0 = Mixed|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Mixed|Win32.ActiveCfg = Mixed|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Mixed|Win32.Build.0 = Mixed|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Mixed|x64.ActiveCfg = Mixed|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Mixed|x64.Build.0 = Mixed|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Release_Dedicated|Win32.ActiveCfg = Release|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Release_Dedicated|x64.ActiveCfg = Release|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Release_Dedicated|x64.Build.0 = Release|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Release_Priquel|Win32.ActiveCfg = Release|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Release_Priquel|Win32.Build.0 = Release|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Release_Priquel|x64.ActiveCfg = Release|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Release_Priquel|x64.Build.0 = Release|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Release_SSE|Win32.ActiveCfg = Release_w_STLPORT|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Release_SSE|x64.ActiveCfg = Release_w_STLPORT|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Release_SSE|x64.Build.0 = Release_w_STLPORT|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Release_SSE2|Win32.ActiveCfg = Release_w_STLPORT|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Release_SSE2|x64.ActiveCfg = Release_w_STLPORT|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Release_SSE2|x64.Build.0 = Release_w_STLPORT|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Release_w_STLPORT|Win32.ActiveCfg = Release_w_STLPORT|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Release_w_STLPORT|Win32.Build.0 = Release_w_STLPORT|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Release_w_STLPORT|x64.ActiveCfg = Release_w_STLPORT|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Release_w_STLPORT|x64.Build.0 = Release_w_STLPORT|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Release|Win32.ActiveCfg = Release|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Release|Win32.Build.0 = Release|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Release|x64.ActiveCfg = Release|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Template|Win32.ActiveCfg = Template|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Template|Win32.Build.0 = Template|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Template|x64.ActiveCfg = Template|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Template|x64.Build.0 = Template|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Unicode Debug|Win32.ActiveCfg = Debug|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Unicode Debug|Win32.Build.0 = Debug|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Unicode Debug|x64.ActiveCfg = Debug|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Unicode Debug|x64.Build.0 = Debug|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Unicode Release|Win32.ActiveCfg = Release|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Unicode Release|Win32.Build.0 = Release|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Unicode Release|x64.ActiveCfg = Release|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF98}.Unicode Release|x64.Build.0 = Release|x64 + {1BF75FEB-87DD-486C-880B-227987D191C2}..NET Debug|Win32.ActiveCfg = Debug|Win32 + {1BF75FEB-87DD-486C-880B-227987D191C2}..NET Debug|Win32.Build.0 = Debug|Win32 + {1BF75FEB-87DD-486C-880B-227987D191C2}..NET Debug|x64.ActiveCfg = Debug|x64 + {1BF75FEB-87DD-486C-880B-227987D191C2}..NET Debug|x64.Build.0 = Debug|x64 + {1BF75FEB-87DD-486C-880B-227987D191C2}..NET Release|Win32.ActiveCfg = Release|Win32 + {1BF75FEB-87DD-486C-880B-227987D191C2}..NET Release|Win32.Build.0 = Release|Win32 + {1BF75FEB-87DD-486C-880B-227987D191C2}..NET Release|x64.ActiveCfg = Release|x64 + {1BF75FEB-87DD-486C-880B-227987D191C2}..NET Release|x64.Build.0 = Release|x64 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Debug_Dedicated|Win32.ActiveCfg = Debug|Win32 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Debug_Dedicated|x64.ActiveCfg = Template|x64 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Debug_Dedicated|x64.Build.0 = Debug|x64 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Debug_Priquel|Win32.ActiveCfg = Debug|Win32 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Debug_Priquel|Win32.Build.0 = Debug|Win32 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Debug_Priquel|x64.ActiveCfg = Debug|x64 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Debug_Priquel|x64.Build.0 = Debug|x64 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Debug|Win32.ActiveCfg = Debug|Win32 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Debug|Win32.Build.0 = Debug|Win32 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Debug|x64.ActiveCfg = Debug|x64 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Debug|x64.Build.0 = Debug|x64 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Mixed_Dedicated|Win32.ActiveCfg = Mixed|Win32 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Mixed_Dedicated|x64.ActiveCfg = Mixed|x64 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Mixed_Dedicated|x64.Build.0 = Mixed|x64 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Mixed_Priquel|Win32.ActiveCfg = Mixed|Win32 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Mixed_Priquel|Win32.Build.0 = Mixed|Win32 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Mixed_Priquel|x64.ActiveCfg = Mixed|x64 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Mixed_Priquel|x64.Build.0 = Mixed|x64 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Mixed|Win32.ActiveCfg = Mixed|Win32 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Mixed|Win32.Build.0 = Mixed|Win32 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Mixed|x64.ActiveCfg = Mixed|x64 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Mixed|x64.Build.0 = Mixed|x64 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Release_Dedicated|Win32.ActiveCfg = Release|Win32 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Release_Dedicated|x64.ActiveCfg = Release|x64 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Release_Dedicated|x64.Build.0 = Release|x64 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Release_Priquel|Win32.ActiveCfg = Release|Win32 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Release_Priquel|Win32.Build.0 = Release|Win32 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Release_Priquel|x64.ActiveCfg = Release|x64 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Release_Priquel|x64.Build.0 = Release|x64 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Release_SSE|Win32.ActiveCfg = Release_w_STLPORT|x64 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Release_SSE|x64.ActiveCfg = Release_w_STLPORT|x64 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Release_SSE|x64.Build.0 = Release_w_STLPORT|x64 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Release_SSE2|Win32.ActiveCfg = Release_w_STLPORT|x64 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Release_SSE2|x64.ActiveCfg = Release_w_STLPORT|x64 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Release_SSE2|x64.Build.0 = Release_w_STLPORT|x64 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Release_w_STLPORT|Win32.ActiveCfg = Release_w_STLPORT|Win32 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Release_w_STLPORT|Win32.Build.0 = Release_w_STLPORT|Win32 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Release_w_STLPORT|x64.ActiveCfg = Release_w_STLPORT|x64 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Release_w_STLPORT|x64.Build.0 = Release_w_STLPORT|x64 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Release|Win32.ActiveCfg = Release|Win32 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Release|Win32.Build.0 = Release|Win32 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Release|x64.ActiveCfg = Release|x64 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Template|Win32.ActiveCfg = Template|Win32 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Template|Win32.Build.0 = Template|Win32 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Template|x64.ActiveCfg = Template|x64 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Template|x64.Build.0 = Template|x64 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Unicode Debug|Win32.ActiveCfg = Debug|Win32 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Unicode Debug|Win32.Build.0 = Debug|Win32 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Unicode Debug|x64.ActiveCfg = Debug|x64 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Unicode Debug|x64.Build.0 = Debug|x64 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Unicode Release|Win32.ActiveCfg = Release|Win32 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Unicode Release|Win32.Build.0 = Release|Win32 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Unicode Release|x64.ActiveCfg = Release|x64 + {1BF75FEB-87DD-486C-880B-227987D191C2}.Unicode Release|x64.Build.0 = Release|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}..NET Debug|Win32.ActiveCfg = Debug|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}..NET Debug|Win32.Build.0 = Debug|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}..NET Debug|x64.ActiveCfg = Debug|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}..NET Debug|x64.Build.0 = Debug|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}..NET Release|Win32.ActiveCfg = Release|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}..NET Release|Win32.Build.0 = Release|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}..NET Release|x64.ActiveCfg = Release|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}..NET Release|x64.Build.0 = Release|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Debug_Dedicated|Win32.ActiveCfg = Debug|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Debug_Dedicated|x64.ActiveCfg = Template|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Debug_Dedicated|x64.Build.0 = Debug|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Debug_Priquel|Win32.ActiveCfg = Debug|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Debug_Priquel|Win32.Build.0 = Debug|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Debug_Priquel|x64.ActiveCfg = Debug|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Debug_Priquel|x64.Build.0 = Debug|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Debug|Win32.ActiveCfg = Debug|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Debug|Win32.Build.0 = Debug|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Debug|x64.ActiveCfg = Debug|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Debug|x64.Build.0 = Debug|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Mixed_Dedicated|Win32.ActiveCfg = Mixed|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Mixed_Dedicated|x64.ActiveCfg = Mixed|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Mixed_Dedicated|x64.Build.0 = Mixed|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Mixed_Priquel|Win32.ActiveCfg = Mixed|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Mixed_Priquel|Win32.Build.0 = Mixed|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Mixed_Priquel|x64.ActiveCfg = Mixed|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Mixed_Priquel|x64.Build.0 = Mixed|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Mixed|Win32.ActiveCfg = Mixed|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Mixed|Win32.Build.0 = Mixed|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Mixed|x64.ActiveCfg = Mixed|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Mixed|x64.Build.0 = Mixed|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Release_Dedicated|Win32.ActiveCfg = Release|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Release_Dedicated|x64.ActiveCfg = Release|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Release_Dedicated|x64.Build.0 = Release|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Release_Priquel|Win32.ActiveCfg = Release|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Release_Priquel|Win32.Build.0 = Release|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Release_Priquel|x64.ActiveCfg = Release|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Release_Priquel|x64.Build.0 = Release|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Release_SSE|Win32.ActiveCfg = Release_w_STLPORT|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Release_SSE|x64.ActiveCfg = Release_w_STLPORT|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Release_SSE|x64.Build.0 = Release_w_STLPORT|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Release_SSE2|Win32.ActiveCfg = Release_w_STLPORT|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Release_SSE2|x64.ActiveCfg = Release_w_STLPORT|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Release_SSE2|x64.Build.0 = Release_w_STLPORT|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Release_w_STLPORT|Win32.ActiveCfg = Release_w_STLPORT|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Release_w_STLPORT|Win32.Build.0 = Release_w_STLPORT|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Release_w_STLPORT|x64.ActiveCfg = Release_w_STLPORT|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Release_w_STLPORT|x64.Build.0 = Release_w_STLPORT|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Release|Win32.ActiveCfg = Release|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Release|Win32.Build.0 = Release|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Release|x64.ActiveCfg = Release|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Template|Win32.ActiveCfg = Template|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Template|Win32.Build.0 = Template|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Template|x64.ActiveCfg = Template|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Template|x64.Build.0 = Template|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Unicode Debug|Win32.ActiveCfg = Debug|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Unicode Debug|Win32.Build.0 = Debug|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Unicode Debug|x64.ActiveCfg = Debug|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Unicode Debug|x64.Build.0 = Debug|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Unicode Release|Win32.ActiveCfg = Release|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Unicode Release|Win32.Build.0 = Release|Win32 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Unicode Release|x64.ActiveCfg = Release|x64 + {94A1C366-3D19-48E6-8170-4ADC2E70DF97}.Unicode Release|x64.Build.0 = Release|x64 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}..NET Debug|Win32.ActiveCfg = Debug|Win32 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}..NET Debug|Win32.Build.0 = Debug|Win32 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}..NET Debug|x64.ActiveCfg = Debug|x64 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}..NET Debug|x64.Build.0 = Debug|x64 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}..NET Release|Win32.ActiveCfg = Release|Win32 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}..NET Release|Win32.Build.0 = Release|Win32 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}..NET Release|x64.ActiveCfg = Release|x64 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}..NET Release|x64.Build.0 = Release|x64 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Debug_Dedicated|Win32.ActiveCfg = Debug|Win32 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Debug_Dedicated|x64.ActiveCfg = Template|x64 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Debug_Dedicated|x64.Build.0 = Debug|x64 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Debug_Priquel|Win32.ActiveCfg = Debug|Win32 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Debug_Priquel|Win32.Build.0 = Debug|Win32 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Debug_Priquel|x64.ActiveCfg = Debug|x64 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Debug_Priquel|x64.Build.0 = Debug|x64 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Debug|Win32.ActiveCfg = Debug|Win32 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Debug|Win32.Build.0 = Debug|Win32 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Debug|x64.ActiveCfg = Debug|x64 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Debug|x64.Build.0 = Debug|x64 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Mixed_Dedicated|Win32.ActiveCfg = Mixed|Win32 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Mixed_Dedicated|x64.ActiveCfg = Mixed|x64 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Mixed_Dedicated|x64.Build.0 = Mixed|x64 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Mixed_Priquel|Win32.ActiveCfg = Mixed|Win32 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Mixed_Priquel|Win32.Build.0 = Mixed|Win32 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Mixed_Priquel|x64.ActiveCfg = Mixed|x64 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Mixed_Priquel|x64.Build.0 = Mixed|x64 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Mixed|Win32.ActiveCfg = Mixed|Win32 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Mixed|Win32.Build.0 = Mixed|Win32 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Mixed|x64.ActiveCfg = Mixed|x64 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Mixed|x64.Build.0 = Mixed|x64 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Release_Dedicated|Win32.ActiveCfg = Release|Win32 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Release_Dedicated|x64.ActiveCfg = Release|x64 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Release_Dedicated|x64.Build.0 = Release|x64 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Release_Priquel|Win32.ActiveCfg = Release|Win32 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Release_Priquel|Win32.Build.0 = Release|Win32 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Release_Priquel|x64.ActiveCfg = Release|x64 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Release_Priquel|x64.Build.0 = Release|x64 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Release_SSE|Win32.ActiveCfg = Release_w_STLPORT|x64 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Release_SSE|x64.ActiveCfg = Release_w_STLPORT|x64 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Release_SSE|x64.Build.0 = Release_w_STLPORT|x64 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Release_SSE2|Win32.ActiveCfg = Release_w_STLPORT|x64 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Release_SSE2|x64.ActiveCfg = Release_w_STLPORT|x64 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Release_SSE2|x64.Build.0 = Release_w_STLPORT|x64 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Release_w_STLPORT|Win32.ActiveCfg = Release_w_STLPORT|Win32 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Release_w_STLPORT|Win32.Build.0 = Release_w_STLPORT|Win32 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Release_w_STLPORT|x64.ActiveCfg = Release_w_STLPORT|x64 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Release_w_STLPORT|x64.Build.0 = Release_w_STLPORT|x64 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Release|Win32.ActiveCfg = Release|Win32 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Release|Win32.Build.0 = Release|Win32 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Release|x64.ActiveCfg = Release|x64 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Template|Win32.ActiveCfg = Template|Win32 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Template|Win32.Build.0 = Template|Win32 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Template|x64.ActiveCfg = Template|x64 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Template|x64.Build.0 = Template|x64 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Unicode Debug|Win32.ActiveCfg = Debug|Win32 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Unicode Debug|Win32.Build.0 = Debug|Win32 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Unicode Debug|x64.ActiveCfg = Debug|x64 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Unicode Debug|x64.Build.0 = Debug|x64 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Unicode Release|Win32.ActiveCfg = Release|Win32 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Unicode Release|Win32.Build.0 = Release|Win32 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Unicode Release|x64.ActiveCfg = Release|x64 + {435BAC9A-B225-457D-AB40-C9BD0CC8838C}.Unicode Release|x64.Build.0 = Release|x64 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}..NET Debug|Win32.ActiveCfg = Debug|Win32 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}..NET Debug|Win32.Build.0 = Debug|Win32 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}..NET Debug|x64.ActiveCfg = Debug|x64 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}..NET Debug|x64.Build.0 = Debug|x64 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}..NET Release|Win32.ActiveCfg = Release|Win32 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}..NET Release|Win32.Build.0 = Release|Win32 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}..NET Release|x64.ActiveCfg = Release|x64 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}..NET Release|x64.Build.0 = Release|x64 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}.Debug_Dedicated|Win32.ActiveCfg = Debug|Win32 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}.Debug_Dedicated|x64.ActiveCfg = Debug|x64 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}.Debug_Dedicated|x64.Build.0 = Debug|x64 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}.Debug_Priquel|Win32.ActiveCfg = Debug|Win32 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}.Debug_Priquel|Win32.Build.0 = Debug|Win32 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}.Debug_Priquel|x64.ActiveCfg = Debug|x64 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}.Debug_Priquel|x64.Build.0 = Debug|x64 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}.Debug|Win32.ActiveCfg = Debug|Win32 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}.Debug|Win32.Build.0 = Debug|Win32 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}.Debug|x64.ActiveCfg = Debug|x64 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}.Debug|x64.Build.0 = Debug|x64 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}.Mixed_Dedicated|Win32.ActiveCfg = Debug|Win32 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}.Mixed_Dedicated|x64.ActiveCfg = Release|x64 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}.Mixed_Dedicated|x64.Build.0 = Release|x64 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}.Mixed_Priquel|Win32.ActiveCfg = Release|Win32 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}.Mixed_Priquel|Win32.Build.0 = Release|Win32 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}.Mixed_Priquel|x64.ActiveCfg = Release|x64 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}.Mixed_Priquel|x64.Build.0 = Release|x64 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}.Mixed|Win32.ActiveCfg = Debug|Win32 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}.Mixed|Win32.Build.0 = Debug|Win32 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}.Mixed|x64.ActiveCfg = Release|x64 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}.Mixed|x64.Build.0 = Release|x64 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}.Release_Dedicated|Win32.ActiveCfg = Release|Win32 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}.Release_Dedicated|x64.ActiveCfg = Release|x64 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}.Release_Dedicated|x64.Build.0 = Release|x64 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}.Release_Priquel|Win32.ActiveCfg = Release|Win32 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}.Release_Priquel|Win32.Build.0 = Release|Win32 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}.Release_Priquel|x64.ActiveCfg = Release|x64 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}.Release_Priquel|x64.Build.0 = Release|x64 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}.Release_SSE|Win32.ActiveCfg = Release_w_STLPORT|x64 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}.Release_SSE|x64.ActiveCfg = Release_w_STLPORT|x64 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}.Release_SSE|x64.Build.0 = Release_w_STLPORT|x64 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}.Release_SSE2|Win32.ActiveCfg = Release_w_STLPORT|x64 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}.Release_SSE2|x64.ActiveCfg = Release_w_STLPORT|x64 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}.Release_SSE2|x64.Build.0 = Release_w_STLPORT|x64 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}.Release_w_STLPORT|Win32.ActiveCfg = Release_w_STLPORT|Win32 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}.Release_w_STLPORT|Win32.Build.0 = Release_w_STLPORT|Win32 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}.Release_w_STLPORT|x64.ActiveCfg = Release_w_STLPORT|x64 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}.Release_w_STLPORT|x64.Build.0 = Release_w_STLPORT|x64 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}.Release|Win32.ActiveCfg = Release|Win32 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}.Release|Win32.Build.0 = Release|Win32 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}.Release|x64.ActiveCfg = Release|x64 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}.Template|Win32.ActiveCfg = Release|x64 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}.Template|x64.ActiveCfg = Release|x64 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}.Template|x64.Build.0 = Release|x64 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}.Unicode Debug|Win32.ActiveCfg = Debug|Win32 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}.Unicode Debug|Win32.Build.0 = Debug|Win32 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}.Unicode Debug|x64.ActiveCfg = Debug|x64 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}.Unicode Debug|x64.Build.0 = Debug|x64 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}.Unicode Release|Win32.ActiveCfg = Release|Win32 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}.Unicode Release|Win32.Build.0 = Release|Win32 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}.Unicode Release|x64.ActiveCfg = Release|x64 + {0899B131-F1D4-4876-9BA1-67AC821DB9E1}.Unicode Release|x64.Build.0 = Release|x64 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}..NET Debug|Win32.ActiveCfg = Debug|Win32 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}..NET Debug|Win32.Build.0 = Debug|Win32 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}..NET Debug|x64.ActiveCfg = Debug|x64 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}..NET Debug|x64.Build.0 = Debug|x64 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}..NET Release|Win32.ActiveCfg = Release|Win32 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}..NET Release|Win32.Build.0 = Release|Win32 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}..NET Release|x64.ActiveCfg = Release|x64 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}..NET Release|x64.Build.0 = Release|x64 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}.Debug_Dedicated|Win32.ActiveCfg = Debug|Win32 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}.Debug_Dedicated|x64.ActiveCfg = Debug|x64 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}.Debug_Dedicated|x64.Build.0 = Debug|x64 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}.Debug_Priquel|Win32.ActiveCfg = Debug|Win32 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}.Debug_Priquel|Win32.Build.0 = Debug|Win32 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}.Debug_Priquel|x64.ActiveCfg = Debug|x64 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}.Debug_Priquel|x64.Build.0 = Debug|x64 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}.Debug|Win32.ActiveCfg = Debug|Win32 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}.Debug|Win32.Build.0 = Debug|Win32 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}.Debug|x64.ActiveCfg = Debug|x64 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}.Debug|x64.Build.0 = Debug|x64 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}.Mixed_Dedicated|Win32.ActiveCfg = Release|Win32 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}.Mixed_Dedicated|x64.ActiveCfg = Release|x64 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}.Mixed_Dedicated|x64.Build.0 = Release|x64 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}.Mixed_Priquel|Win32.ActiveCfg = Release|Win32 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}.Mixed_Priquel|Win32.Build.0 = Release|Win32 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}.Mixed_Priquel|x64.ActiveCfg = Release|x64 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}.Mixed_Priquel|x64.Build.0 = Release|x64 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}.Mixed|Win32.ActiveCfg = Debug|Win32 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}.Mixed|Win32.Build.0 = Debug|Win32 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}.Mixed|x64.ActiveCfg = Release|x64 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}.Mixed|x64.Build.0 = Release|x64 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}.Release_Dedicated|Win32.ActiveCfg = Release|Win32 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}.Release_Dedicated|x64.ActiveCfg = Release|x64 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}.Release_Dedicated|x64.Build.0 = Release|x64 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}.Release_Priquel|Win32.ActiveCfg = Release|Win32 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}.Release_Priquel|Win32.Build.0 = Release|Win32 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}.Release_Priquel|x64.ActiveCfg = Release|x64 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}.Release_Priquel|x64.Build.0 = Release|x64 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}.Release_SSE|Win32.ActiveCfg = Release_w_STLPORT|x64 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}.Release_SSE|x64.ActiveCfg = Release_w_STLPORT|x64 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}.Release_SSE|x64.Build.0 = Release_w_STLPORT|x64 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}.Release_SSE2|Win32.ActiveCfg = Release_w_STLPORT|x64 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}.Release_SSE2|x64.ActiveCfg = Release_w_STLPORT|x64 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}.Release_SSE2|x64.Build.0 = Release_w_STLPORT|x64 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}.Release_w_STLPORT|Win32.ActiveCfg = Release_w_STLPORT|Win32 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}.Release_w_STLPORT|Win32.Build.0 = Release_w_STLPORT|Win32 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}.Release_w_STLPORT|x64.ActiveCfg = Release_w_STLPORT|x64 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}.Release_w_STLPORT|x64.Build.0 = Release_w_STLPORT|x64 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}.Release|Win32.ActiveCfg = Release|Win32 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}.Release|Win32.Build.0 = Release|Win32 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}.Release|x64.ActiveCfg = Release|x64 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}.Template|Win32.ActiveCfg = Release|x64 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}.Template|x64.ActiveCfg = Release|x64 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}.Template|x64.Build.0 = Release|x64 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}.Unicode Debug|Win32.ActiveCfg = Debug|Win32 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}.Unicode Debug|Win32.Build.0 = Debug|Win32 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}.Unicode Debug|x64.ActiveCfg = Debug|x64 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}.Unicode Debug|x64.Build.0 = Debug|x64 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}.Unicode Release|Win32.ActiveCfg = Release|Win32 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}.Unicode Release|Win32.Build.0 = Release|Win32 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}.Unicode Release|x64.ActiveCfg = Release|x64 + {5535F6B4-7AE6-4B66-8AEA-CC31C14D7AB7}.Unicode Release|x64.Build.0 = Release|x64 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}..NET Debug|Win32.ActiveCfg = Debug|Win32 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}..NET Debug|Win32.Build.0 = Debug|Win32 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}..NET Debug|x64.ActiveCfg = Debug|x64 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}..NET Debug|x64.Build.0 = Debug|x64 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}..NET Release|Win32.ActiveCfg = Release|Win32 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}..NET Release|Win32.Build.0 = Release|Win32 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}..NET Release|x64.ActiveCfg = Release|x64 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}..NET Release|x64.Build.0 = Release|x64 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Debug_Dedicated|Win32.ActiveCfg = Debug|x64 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Debug_Dedicated|x64.ActiveCfg = Debug|x64 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Debug_Dedicated|x64.Build.0 = Debug|x64 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Debug_Priquel|Win32.ActiveCfg = Debug|x64 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Debug_Priquel|x64.ActiveCfg = Debug|x64 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Debug_Priquel|x64.Build.0 = Debug|x64 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Debug|Win32.ActiveCfg = Debug|Win32 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Debug|Win32.Build.0 = Debug|Win32 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Debug|x64.ActiveCfg = Debug|x64 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Debug|x64.Build.0 = Debug|x64 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Mixed_Dedicated|Win32.ActiveCfg = Release|x64 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Mixed_Dedicated|x64.ActiveCfg = Release|x64 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Mixed_Dedicated|x64.Build.0 = Release|x64 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Mixed_Priquel|Win32.ActiveCfg = Release|x64 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Mixed_Priquel|x64.ActiveCfg = Release|x64 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Mixed_Priquel|x64.Build.0 = Release|x64 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Mixed|Win32.ActiveCfg = Release|x64 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Mixed|x64.ActiveCfg = Release|x64 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Mixed|x64.Build.0 = Release|x64 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Release_Dedicated|Win32.ActiveCfg = Release|x64 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Release_Dedicated|x64.ActiveCfg = Release|x64 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Release_Dedicated|x64.Build.0 = Release|x64 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Release_Priquel|Win32.ActiveCfg = Release|x64 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Release_Priquel|x64.ActiveCfg = Release|x64 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Release_Priquel|x64.Build.0 = Release|x64 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Release_SSE|Win32.ActiveCfg = Release|x64 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Release_SSE|x64.ActiveCfg = Release|x64 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Release_SSE|x64.Build.0 = Release|x64 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Release_SSE2|Win32.ActiveCfg = Release|x64 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Release_SSE2|x64.ActiveCfg = Release|x64 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Release_SSE2|x64.Build.0 = Release|x64 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Release_w_STLPORT|Win32.ActiveCfg = Release|x64 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Release_w_STLPORT|x64.ActiveCfg = Release|x64 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Release_w_STLPORT|x64.Build.0 = Release|x64 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Release|Win32.ActiveCfg = Release|Win32 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Release|Win32.Build.0 = Release|Win32 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Release|x64.ActiveCfg = Release|x64 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Release|x64.Build.0 = Release|x64 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Template|Win32.ActiveCfg = Release|x64 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Template|x64.ActiveCfg = Release|x64 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Template|x64.Build.0 = Release|x64 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Unicode Debug|Win32.ActiveCfg = Debug|Win32 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Unicode Debug|Win32.Build.0 = Debug|Win32 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Unicode Debug|x64.ActiveCfg = Debug|x64 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Unicode Debug|x64.Build.0 = Debug|x64 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Unicode Release|Win32.ActiveCfg = Release|Win32 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Unicode Release|Win32.Build.0 = Release|Win32 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Unicode Release|x64.ActiveCfg = Release|x64 + {15CBFEFF-7965-41F5-B4E2-21E8795C9159}.Unicode Release|x64.Build.0 = Release|x64 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}..NET Debug|Win32.ActiveCfg = Debug|Win32 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}..NET Debug|Win32.Build.0 = Debug|Win32 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}..NET Debug|x64.ActiveCfg = Debug|x64 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}..NET Debug|x64.Build.0 = Debug|x64 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}..NET Release|Win32.ActiveCfg = Release|Win32 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}..NET Release|Win32.Build.0 = Release|Win32 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}..NET Release|x64.ActiveCfg = Release|x64 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}..NET Release|x64.Build.0 = Release|x64 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}.Debug_Dedicated|Win32.ActiveCfg = Debug|x64 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}.Debug_Dedicated|x64.ActiveCfg = Debug|x64 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}.Debug_Dedicated|x64.Build.0 = Debug|x64 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}.Debug_Priquel|Win32.ActiveCfg = Debug|x64 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}.Debug_Priquel|x64.ActiveCfg = Debug|x64 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}.Debug_Priquel|x64.Build.0 = Debug|x64 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}.Debug|Win32.ActiveCfg = Debug|Win32 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}.Debug|Win32.Build.0 = Debug|Win32 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}.Debug|x64.ActiveCfg = Debug|x64 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}.Debug|x64.Build.0 = Debug|x64 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}.Mixed_Dedicated|Win32.ActiveCfg = Release|x64 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}.Mixed_Dedicated|x64.ActiveCfg = Release|x64 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}.Mixed_Dedicated|x64.Build.0 = Release|x64 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}.Mixed_Priquel|Win32.ActiveCfg = Release|x64 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}.Mixed_Priquel|x64.ActiveCfg = Release|x64 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}.Mixed_Priquel|x64.Build.0 = Release|x64 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}.Mixed|Win32.ActiveCfg = Release|x64 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}.Mixed|x64.ActiveCfg = Release|x64 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}.Mixed|x64.Build.0 = Release|x64 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}.Release_Dedicated|Win32.ActiveCfg = Release|x64 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}.Release_Dedicated|x64.ActiveCfg = Release|x64 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}.Release_Dedicated|x64.Build.0 = Release|x64 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}.Release_Priquel|Win32.ActiveCfg = Release|x64 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}.Release_Priquel|x64.ActiveCfg = Release|x64 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}.Release_Priquel|x64.Build.0 = Release|x64 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}.Release_SSE|Win32.ActiveCfg = Release|x64 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}.Release_SSE|x64.ActiveCfg = Release|x64 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}.Release_SSE|x64.Build.0 = Release|x64 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}.Release_SSE2|Win32.ActiveCfg = Release|x64 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}.Release_SSE2|x64.ActiveCfg = Release|x64 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}.Release_SSE2|x64.Build.0 = Release|x64 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}.Release_w_STLPORT|Win32.ActiveCfg = Release|x64 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}.Release_w_STLPORT|x64.ActiveCfg = Release|x64 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}.Release_w_STLPORT|x64.Build.0 = Release|x64 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}.Release|Win32.ActiveCfg = Release|Win32 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}.Release|Win32.Build.0 = Release|Win32 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}.Release|x64.ActiveCfg = Release|x64 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}.Release|x64.Build.0 = Release|x64 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}.Template|Win32.ActiveCfg = Release|x64 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}.Template|x64.ActiveCfg = Release|x64 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}.Template|x64.Build.0 = Release|x64 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}.Unicode Debug|Win32.ActiveCfg = Debug|Win32 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}.Unicode Debug|Win32.Build.0 = Debug|Win32 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}.Unicode Debug|x64.ActiveCfg = Debug|x64 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}.Unicode Debug|x64.Build.0 = Debug|x64 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}.Unicode Release|Win32.ActiveCfg = Release|Win32 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}.Unicode Release|Win32.Build.0 = Release|Win32 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}.Unicode Release|x64.ActiveCfg = Release|x64 + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD}.Unicode Release|x64.Build.0 = Release|x64 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}..NET Debug|Win32.ActiveCfg = Debug|Win32 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}..NET Debug|Win32.Build.0 = Debug|Win32 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}..NET Debug|x64.ActiveCfg = Debug|x64 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}..NET Debug|x64.Build.0 = Debug|x64 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}..NET Release|Win32.ActiveCfg = Release|Win32 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}..NET Release|Win32.Build.0 = Release|Win32 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}..NET Release|x64.ActiveCfg = Release|x64 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}..NET Release|x64.Build.0 = Release|x64 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}.Debug_Dedicated|Win32.ActiveCfg = Debug|x64 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}.Debug_Dedicated|x64.ActiveCfg = Debug|x64 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}.Debug_Dedicated|x64.Build.0 = Debug|x64 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}.Debug_Priquel|Win32.ActiveCfg = Debug|x64 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}.Debug_Priquel|x64.ActiveCfg = Debug|x64 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}.Debug_Priquel|x64.Build.0 = Debug|x64 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}.Debug|Win32.ActiveCfg = Debug|Win32 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}.Debug|Win32.Build.0 = Debug|Win32 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}.Debug|x64.ActiveCfg = Debug|x64 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}.Debug|x64.Build.0 = Debug|x64 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}.Mixed_Dedicated|Win32.ActiveCfg = Release|x64 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}.Mixed_Dedicated|x64.ActiveCfg = Release|x64 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}.Mixed_Dedicated|x64.Build.0 = Release|x64 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}.Mixed_Priquel|Win32.ActiveCfg = Release|x64 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}.Mixed_Priquel|x64.ActiveCfg = Release|x64 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}.Mixed_Priquel|x64.Build.0 = Release|x64 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}.Mixed|Win32.ActiveCfg = Release|x64 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}.Mixed|x64.ActiveCfg = Release|x64 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}.Mixed|x64.Build.0 = Release|x64 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}.Release_Dedicated|Win32.ActiveCfg = Release|x64 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}.Release_Dedicated|x64.ActiveCfg = Release|x64 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}.Release_Dedicated|x64.Build.0 = Release|x64 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}.Release_Priquel|Win32.ActiveCfg = Release|x64 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}.Release_Priquel|x64.ActiveCfg = Release|x64 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}.Release_Priquel|x64.Build.0 = Release|x64 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}.Release_SSE|Win32.ActiveCfg = Release|x64 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}.Release_SSE|x64.ActiveCfg = Release|x64 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}.Release_SSE|x64.Build.0 = Release|x64 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}.Release_SSE2|Win32.ActiveCfg = Release|x64 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}.Release_SSE2|x64.ActiveCfg = Release|x64 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}.Release_SSE2|x64.Build.0 = Release|x64 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}.Release_w_STLPORT|Win32.ActiveCfg = Release|x64 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}.Release_w_STLPORT|x64.ActiveCfg = Release|x64 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}.Release_w_STLPORT|x64.Build.0 = Release|x64 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}.Release|Win32.ActiveCfg = Release|Win32 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}.Release|Win32.Build.0 = Release|Win32 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}.Release|x64.ActiveCfg = Release|x64 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}.Release|x64.Build.0 = Release|x64 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}.Template|Win32.ActiveCfg = Release|x64 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}.Template|x64.ActiveCfg = Release|x64 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}.Template|x64.Build.0 = Release|x64 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}.Unicode Debug|Win32.ActiveCfg = Debug|Win32 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}.Unicode Debug|Win32.Build.0 = Debug|Win32 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}.Unicode Debug|x64.ActiveCfg = Debug|x64 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}.Unicode Debug|x64.Build.0 = Debug|x64 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}.Unicode Release|Win32.ActiveCfg = Release|Win32 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}.Unicode Release|Win32.Build.0 = Release|Win32 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}.Unicode Release|x64.ActiveCfg = Release|x64 + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC}.Unicode Release|x64.Build.0 = Release|x64 + {653F3841-3F26-49B9-AFCF-091DB4B67031}..NET Debug|Win32.ActiveCfg = Debug|Win32 + {653F3841-3F26-49B9-AFCF-091DB4B67031}..NET Debug|Win32.Build.0 = Debug|Win32 + {653F3841-3F26-49B9-AFCF-091DB4B67031}..NET Debug|x64.ActiveCfg = Debug|x64 + {653F3841-3F26-49B9-AFCF-091DB4B67031}..NET Debug|x64.Build.0 = Debug|x64 + {653F3841-3F26-49B9-AFCF-091DB4B67031}..NET Release|Win32.ActiveCfg = Release|Win32 + {653F3841-3F26-49B9-AFCF-091DB4B67031}..NET Release|Win32.Build.0 = Release|Win32 + {653F3841-3F26-49B9-AFCF-091DB4B67031}..NET Release|x64.ActiveCfg = Release|x64 + {653F3841-3F26-49B9-AFCF-091DB4B67031}..NET Release|x64.Build.0 = Release|x64 + {653F3841-3F26-49B9-AFCF-091DB4B67031}.Debug_Dedicated|Win32.ActiveCfg = Debug|x64 + {653F3841-3F26-49B9-AFCF-091DB4B67031}.Debug_Dedicated|x64.ActiveCfg = Debug|x64 + {653F3841-3F26-49B9-AFCF-091DB4B67031}.Debug_Dedicated|x64.Build.0 = Debug|x64 + {653F3841-3F26-49B9-AFCF-091DB4B67031}.Debug_Priquel|Win32.ActiveCfg = Debug|x64 + {653F3841-3F26-49B9-AFCF-091DB4B67031}.Debug_Priquel|x64.ActiveCfg = Debug|x64 + {653F3841-3F26-49B9-AFCF-091DB4B67031}.Debug_Priquel|x64.Build.0 = Debug|x64 + {653F3841-3F26-49B9-AFCF-091DB4B67031}.Debug|Win32.ActiveCfg = Debug|Win32 + {653F3841-3F26-49B9-AFCF-091DB4B67031}.Debug|Win32.Build.0 = Debug|Win32 + {653F3841-3F26-49B9-AFCF-091DB4B67031}.Debug|x64.ActiveCfg = Debug|x64 + {653F3841-3F26-49B9-AFCF-091DB4B67031}.Debug|x64.Build.0 = Debug|x64 + {653F3841-3F26-49B9-AFCF-091DB4B67031}.Mixed_Dedicated|Win32.ActiveCfg = Template|x64 + {653F3841-3F26-49B9-AFCF-091DB4B67031}.Mixed_Dedicated|x64.ActiveCfg = Template|x64 + {653F3841-3F26-49B9-AFCF-091DB4B67031}.Mixed_Dedicated|x64.Build.0 = Template|x64 + {653F3841-3F26-49B9-AFCF-091DB4B67031}.Mixed_Priquel|Win32.ActiveCfg = Template|x64 + {653F3841-3F26-49B9-AFCF-091DB4B67031}.Mixed_Priquel|x64.ActiveCfg = Template|x64 + {653F3841-3F26-49B9-AFCF-091DB4B67031}.Mixed_Priquel|x64.Build.0 = Template|x64 + {653F3841-3F26-49B9-AFCF-091DB4B67031}.Mixed|Win32.ActiveCfg = Template|x64 + {653F3841-3F26-49B9-AFCF-091DB4B67031}.Mixed|x64.ActiveCfg = Template|x64 + {653F3841-3F26-49B9-AFCF-091DB4B67031}.Mixed|x64.Build.0 = Template|x64 + {653F3841-3F26-49B9-AFCF-091DB4B67031}.Release_Dedicated|Win32.ActiveCfg = Release_SSE|x64 + {653F3841-3F26-49B9-AFCF-091DB4B67031}.Release_Dedicated|x64.ActiveCfg = Release_SSE|x64 + {653F3841-3F26-49B9-AFCF-091DB4B67031}.Release_Dedicated|x64.Build.0 = Release_SSE|x64 + {653F3841-3F26-49B9-AFCF-091DB4B67031}.Release_Priquel|Win32.ActiveCfg = Release_SSE|x64 + {653F3841-3F26-49B9-AFCF-091DB4B67031}.Release_Priquel|x64.ActiveCfg = Release_SSE|x64 + {653F3841-3F26-49B9-AFCF-091DB4B67031}.Release_Priquel|x64.Build.0 = Release_SSE|x64 + {653F3841-3F26-49B9-AFCF-091DB4B67031}.Release_SSE|Win32.ActiveCfg = Release_SSE|Win32 + {653F3841-3F26-49B9-AFCF-091DB4B67031}.Release_SSE|Win32.Build.0 = Release_SSE|Win32 + {653F3841-3F26-49B9-AFCF-091DB4B67031}.Release_SSE|x64.ActiveCfg = Release_SSE|x64 + {653F3841-3F26-49B9-AFCF-091DB4B67031}.Release_SSE|x64.Build.0 = Release_SSE|x64 + {653F3841-3F26-49B9-AFCF-091DB4B67031}.Release_SSE2|Win32.ActiveCfg = Release_SSE2|Win32 + {653F3841-3F26-49B9-AFCF-091DB4B67031}.Release_SSE2|Win32.Build.0 = Release_SSE2|Win32 + {653F3841-3F26-49B9-AFCF-091DB4B67031}.Release_SSE2|x64.ActiveCfg = Release_SSE2|x64 + {653F3841-3F26-49B9-AFCF-091DB4B67031}.Release_SSE2|x64.Build.0 = Release_SSE2|x64 + {653F3841-3F26-49B9-AFCF-091DB4B67031}.Release_w_STLPORT|Win32.ActiveCfg = Release_SSE|x64 + {653F3841-3F26-49B9-AFCF-091DB4B67031}.Release_w_STLPORT|x64.ActiveCfg = Release_SSE|x64 + {653F3841-3F26-49B9-AFCF-091DB4B67031}.Release_w_STLPORT|x64.Build.0 = Release_SSE|x64 + {653F3841-3F26-49B9-AFCF-091DB4B67031}.Release|Win32.ActiveCfg = Release|Win32 + {653F3841-3F26-49B9-AFCF-091DB4B67031}.Release|Win32.Build.0 = Release|Win32 + {653F3841-3F26-49B9-AFCF-091DB4B67031}.Release|x64.ActiveCfg = Release|x64 + {653F3841-3F26-49B9-AFCF-091DB4B67031}.Release|x64.Build.0 = Release|x64 + {653F3841-3F26-49B9-AFCF-091DB4B67031}.Template|Win32.ActiveCfg = Template|Win32 + {653F3841-3F26-49B9-AFCF-091DB4B67031}.Template|Win32.Build.0 = Template|Win32 + {653F3841-3F26-49B9-AFCF-091DB4B67031}.Template|x64.ActiveCfg = Template|x64 + {653F3841-3F26-49B9-AFCF-091DB4B67031}.Template|x64.Build.0 = Template|x64 + {653F3841-3F26-49B9-AFCF-091DB4B67031}.Unicode Debug|Win32.ActiveCfg = Debug|Win32 + {653F3841-3F26-49B9-AFCF-091DB4B67031}.Unicode Debug|Win32.Build.0 = Debug|Win32 + {653F3841-3F26-49B9-AFCF-091DB4B67031}.Unicode Debug|x64.ActiveCfg = Debug|x64 + {653F3841-3F26-49B9-AFCF-091DB4B67031}.Unicode Debug|x64.Build.0 = Debug|x64 + {653F3841-3F26-49B9-AFCF-091DB4B67031}.Unicode Release|Win32.ActiveCfg = Release|Win32 + {653F3841-3F26-49B9-AFCF-091DB4B67031}.Unicode Release|Win32.Build.0 = Release|Win32 + {653F3841-3F26-49B9-AFCF-091DB4B67031}.Unicode Release|x64.ActiveCfg = Release|x64 + {653F3841-3F26-49B9-AFCF-091DB4B67031}.Unicode Release|x64.Build.0 = Release|x64 + {94BE3D19-23D3-4D15-8B5C-41193885648C}..NET Debug|Win32.ActiveCfg = Debug|Win32 + {94BE3D19-23D3-4D15-8B5C-41193885648C}..NET Debug|Win32.Build.0 = Debug|Win32 + {94BE3D19-23D3-4D15-8B5C-41193885648C}..NET Debug|x64.ActiveCfg = Debug|Win32 + {94BE3D19-23D3-4D15-8B5C-41193885648C}..NET Release|Win32.ActiveCfg = Release|Win32 + {94BE3D19-23D3-4D15-8B5C-41193885648C}..NET Release|Win32.Build.0 = Release|Win32 + {94BE3D19-23D3-4D15-8B5C-41193885648C}..NET Release|x64.ActiveCfg = Release|Win32 + {94BE3D19-23D3-4D15-8B5C-41193885648C}.Debug_Dedicated|Win32.ActiveCfg = Debug|Win32 + {94BE3D19-23D3-4D15-8B5C-41193885648C}.Debug_Dedicated|Win32.Build.0 = Debug|Win32 + {94BE3D19-23D3-4D15-8B5C-41193885648C}.Debug_Dedicated|x64.ActiveCfg = Debug|Win32 + {94BE3D19-23D3-4D15-8B5C-41193885648C}.Debug_Priquel|Win32.ActiveCfg = Debug|Win32 + {94BE3D19-23D3-4D15-8B5C-41193885648C}.Debug_Priquel|Win32.Build.0 = Debug|Win32 + {94BE3D19-23D3-4D15-8B5C-41193885648C}.Debug_Priquel|x64.ActiveCfg = Debug|Win32 + {94BE3D19-23D3-4D15-8B5C-41193885648C}.Debug|Win32.ActiveCfg = Debug|Win32 + {94BE3D19-23D3-4D15-8B5C-41193885648C}.Debug|Win32.Build.0 = Debug|Win32 + {94BE3D19-23D3-4D15-8B5C-41193885648C}.Debug|x64.ActiveCfg = Debug|Win32 + {94BE3D19-23D3-4D15-8B5C-41193885648C}.Mixed_Dedicated|Win32.ActiveCfg = Release|Win32 + {94BE3D19-23D3-4D15-8B5C-41193885648C}.Mixed_Dedicated|Win32.Build.0 = Release|Win32 + {94BE3D19-23D3-4D15-8B5C-41193885648C}.Mixed_Dedicated|x64.ActiveCfg = Release|Win32 + {94BE3D19-23D3-4D15-8B5C-41193885648C}.Mixed_Priquel|Win32.ActiveCfg = Release|Win32 + {94BE3D19-23D3-4D15-8B5C-41193885648C}.Mixed_Priquel|Win32.Build.0 = Release|Win32 + {94BE3D19-23D3-4D15-8B5C-41193885648C}.Mixed_Priquel|x64.ActiveCfg = Release|Win32 + {94BE3D19-23D3-4D15-8B5C-41193885648C}.Mixed|Win32.ActiveCfg = Release|Win32 + {94BE3D19-23D3-4D15-8B5C-41193885648C}.Mixed|Win32.Build.0 = Release|Win32 + {94BE3D19-23D3-4D15-8B5C-41193885648C}.Mixed|x64.ActiveCfg = Release|Win32 + {94BE3D19-23D3-4D15-8B5C-41193885648C}.Release_Dedicated|Win32.ActiveCfg = Release|Win32 + {94BE3D19-23D3-4D15-8B5C-41193885648C}.Release_Dedicated|Win32.Build.0 = Release|Win32 + {94BE3D19-23D3-4D15-8B5C-41193885648C}.Release_Dedicated|x64.ActiveCfg = Release|Win32 + {94BE3D19-23D3-4D15-8B5C-41193885648C}.Release_Priquel|Win32.ActiveCfg = Release|Win32 + {94BE3D19-23D3-4D15-8B5C-41193885648C}.Release_Priquel|Win32.Build.0 = Release|Win32 + {94BE3D19-23D3-4D15-8B5C-41193885648C}.Release_Priquel|x64.ActiveCfg = Release|Win32 + {94BE3D19-23D3-4D15-8B5C-41193885648C}.Release_SSE|Win32.ActiveCfg = Release|Win32 + {94BE3D19-23D3-4D15-8B5C-41193885648C}.Release_SSE|Win32.Build.0 = Release|Win32 + {94BE3D19-23D3-4D15-8B5C-41193885648C}.Release_SSE|x64.ActiveCfg = Release|Win32 + {94BE3D19-23D3-4D15-8B5C-41193885648C}.Release_SSE2|Win32.ActiveCfg = Release|Win32 + {94BE3D19-23D3-4D15-8B5C-41193885648C}.Release_SSE2|Win32.Build.0 = Release|Win32 + {94BE3D19-23D3-4D15-8B5C-41193885648C}.Release_SSE2|x64.ActiveCfg = Release|Win32 + {94BE3D19-23D3-4D15-8B5C-41193885648C}.Release_w_STLPORT|Win32.ActiveCfg = Release|Win32 + {94BE3D19-23D3-4D15-8B5C-41193885648C}.Release_w_STLPORT|Win32.Build.0 = Release|Win32 + {94BE3D19-23D3-4D15-8B5C-41193885648C}.Release_w_STLPORT|x64.ActiveCfg = Release|Win32 + {94BE3D19-23D3-4D15-8B5C-41193885648C}.Release|Win32.ActiveCfg = Release|Win32 + {94BE3D19-23D3-4D15-8B5C-41193885648C}.Release|Win32.Build.0 = Release|Win32 + {94BE3D19-23D3-4D15-8B5C-41193885648C}.Release|x64.ActiveCfg = Release|Win32 + {94BE3D19-23D3-4D15-8B5C-41193885648C}.Template|Win32.ActiveCfg = Release|Win32 + {94BE3D19-23D3-4D15-8B5C-41193885648C}.Template|Win32.Build.0 = Release|Win32 + {94BE3D19-23D3-4D15-8B5C-41193885648C}.Template|x64.ActiveCfg = Release|Win32 + {94BE3D19-23D3-4D15-8B5C-41193885648C}.Unicode Debug|Win32.ActiveCfg = Debug|Win32 + {94BE3D19-23D3-4D15-8B5C-41193885648C}.Unicode Debug|Win32.Build.0 = Debug|Win32 + {94BE3D19-23D3-4D15-8B5C-41193885648C}.Unicode Debug|x64.ActiveCfg = Debug|Win32 + {94BE3D19-23D3-4D15-8B5C-41193885648C}.Unicode Release|Win32.ActiveCfg = Release|Win32 + {94BE3D19-23D3-4D15-8B5C-41193885648C}.Unicode Release|Win32.Build.0 = Release|Win32 + {94BE3D19-23D3-4D15-8B5C-41193885648C}.Unicode Release|x64.ActiveCfg = Release|Win32 + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B}..NET Debug|Win32.ActiveCfg = Debug|Win32 + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B}..NET Debug|Win32.Build.0 = Debug|Win32 + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B}..NET Debug|x64.ActiveCfg = Debug|Win32 + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B}..NET Release|Win32.ActiveCfg = Release|Win32 + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B}..NET Release|Win32.Build.0 = Release|Win32 + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B}..NET Release|x64.ActiveCfg = Release|Win32 + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B}.Debug_Dedicated|Win32.ActiveCfg = Debug|Win32 + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B}.Debug_Dedicated|Win32.Build.0 = Debug|Win32 + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B}.Debug_Dedicated|x64.ActiveCfg = Debug|Win32 + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B}.Debug_Priquel|Win32.ActiveCfg = Debug|Win32 + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B}.Debug_Priquel|Win32.Build.0 = Debug|Win32 + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B}.Debug_Priquel|x64.ActiveCfg = Debug|Win32 + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B}.Debug|Win32.ActiveCfg = Debug|Win32 + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B}.Debug|Win32.Build.0 = Debug|Win32 + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B}.Debug|x64.ActiveCfg = Debug|Win32 + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B}.Mixed_Dedicated|Win32.ActiveCfg = Release|Win32 + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B}.Mixed_Dedicated|Win32.Build.0 = Release|Win32 + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B}.Mixed_Dedicated|x64.ActiveCfg = Release|Win32 + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B}.Mixed_Priquel|Win32.ActiveCfg = Release|Win32 + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B}.Mixed_Priquel|Win32.Build.0 = Release|Win32 + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B}.Mixed_Priquel|x64.ActiveCfg = Release|Win32 + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B}.Mixed|Win32.ActiveCfg = Release|Win32 + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B}.Mixed|Win32.Build.0 = Release|Win32 + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B}.Mixed|x64.ActiveCfg = Release|Win32 + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B}.Release_Dedicated|Win32.ActiveCfg = Release|Win32 + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B}.Release_Dedicated|Win32.Build.0 = Release|Win32 + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B}.Release_Dedicated|x64.ActiveCfg = Release|Win32 + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B}.Release_Priquel|Win32.ActiveCfg = Release|Win32 + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B}.Release_Priquel|Win32.Build.0 = Release|Win32 + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B}.Release_Priquel|x64.ActiveCfg = Release|Win32 + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B}.Release_SSE|Win32.ActiveCfg = Release|Win32 + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B}.Release_SSE|Win32.Build.0 = Release|Win32 + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B}.Release_SSE|x64.ActiveCfg = Release|Win32 + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B}.Release_SSE2|Win32.ActiveCfg = Release|Win32 + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B}.Release_SSE2|Win32.Build.0 = Release|Win32 + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B}.Release_SSE2|x64.ActiveCfg = Release|Win32 + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B}.Release_w_STLPORT|Win32.ActiveCfg = Release|Win32 + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B}.Release_w_STLPORT|Win32.Build.0 = Release|Win32 + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B}.Release_w_STLPORT|x64.ActiveCfg = Release|Win32 + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B}.Release|Win32.ActiveCfg = Release|Win32 + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B}.Release|Win32.Build.0 = Release|Win32 + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B}.Release|x64.ActiveCfg = Release|Win32 + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B}.Template|Win32.ActiveCfg = Release|Win32 + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B}.Template|Win32.Build.0 = Release|Win32 + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B}.Template|x64.ActiveCfg = Release|Win32 + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B}.Unicode Debug|Win32.ActiveCfg = Debug|Win32 + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B}.Unicode Debug|Win32.Build.0 = Debug|Win32 + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B}.Unicode Debug|x64.ActiveCfg = Debug|Win32 + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B}.Unicode Release|Win32.ActiveCfg = Release|Win32 + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B}.Unicode Release|Win32.Build.0 = Release|Win32 + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B}.Unicode Release|x64.ActiveCfg = Release|Win32 + {0EB257DC-5CFC-44B0-82C9-CE6B158BE473}..NET Debug|Win32.ActiveCfg = Debug|Win32 + {0EB257DC-5CFC-44B0-82C9-CE6B158BE473}..NET Debug|Win32.Build.0 = Debug|Win32 + {0EB257DC-5CFC-44B0-82C9-CE6B158BE473}..NET Debug|x64.ActiveCfg = Debug|Win32 + {0EB257DC-5CFC-44B0-82C9-CE6B158BE473}..NET Release|Win32.ActiveCfg = Release|Win32 + {0EB257DC-5CFC-44B0-82C9-CE6B158BE473}..NET Release|Win32.Build.0 = Release|Win32 + {0EB257DC-5CFC-44B0-82C9-CE6B158BE473}..NET Release|x64.ActiveCfg = Release|Win32 + {0EB257DC-5CFC-44B0-82C9-CE6B158BE473}.Debug_Dedicated|Win32.ActiveCfg = Debug|Win32 + {0EB257DC-5CFC-44B0-82C9-CE6B158BE473}.Debug_Dedicated|Win32.Build.0 = Debug|Win32 + {0EB257DC-5CFC-44B0-82C9-CE6B158BE473}.Debug_Dedicated|x64.ActiveCfg = Debug|Win32 + {0EB257DC-5CFC-44B0-82C9-CE6B158BE473}.Debug_Priquel|Win32.ActiveCfg = Debug|Win32 + {0EB257DC-5CFC-44B0-82C9-CE6B158BE473}.Debug_Priquel|Win32.Build.0 = Debug|Win32 + {0EB257DC-5CFC-44B0-82C9-CE6B158BE473}.Debug_Priquel|x64.ActiveCfg = Debug|Win32 + {0EB257DC-5CFC-44B0-82C9-CE6B158BE473}.Debug|Win32.ActiveCfg = Debug|Win32 + {0EB257DC-5CFC-44B0-82C9-CE6B158BE473}.Debug|Win32.Build.0 = Debug|Win32 + {0EB257DC-5CFC-44B0-82C9-CE6B158BE473}.Debug|x64.ActiveCfg = Debug|Win32 + {0EB257DC-5CFC-44B0-82C9-CE6B158BE473}.Mixed_Dedicated|Win32.ActiveCfg = Release|Win32 + {0EB257DC-5CFC-44B0-82C9-CE6B158BE473}.Mixed_Dedicated|Win32.Build.0 = Release|Win32 + {0EB257DC-5CFC-44B0-82C9-CE6B158BE473}.Mixed_Dedicated|x64.ActiveCfg = Release|Win32 + {0EB257DC-5CFC-44B0-82C9-CE6B158BE473}.Mixed_Priquel|Win32.ActiveCfg = Release|Win32 + {0EB257DC-5CFC-44B0-82C9-CE6B158BE473}.Mixed_Priquel|Win32.Build.0 = Release|Win32 + {0EB257DC-5CFC-44B0-82C9-CE6B158BE473}.Mixed_Priquel|x64.ActiveCfg = Release|Win32 + {0EB257DC-5CFC-44B0-82C9-CE6B158BE473}.Mixed|Win32.ActiveCfg = Release|Win32 + {0EB257DC-5CFC-44B0-82C9-CE6B158BE473}.Mixed|Win32.Build.0 = Release|Win32 + {0EB257DC-5CFC-44B0-82C9-CE6B158BE473}.Mixed|x64.ActiveCfg = Release|Win32 + {0EB257DC-5CFC-44B0-82C9-CE6B158BE473}.Release_Dedicated|Win32.ActiveCfg = Release|Win32 + {0EB257DC-5CFC-44B0-82C9-CE6B158BE473}.Release_Dedicated|Win32.Build.0 = Release|Win32 + {0EB257DC-5CFC-44B0-82C9-CE6B158BE473}.Release_Dedicated|x64.ActiveCfg = Release|Win32 + {0EB257DC-5CFC-44B0-82C9-CE6B158BE473}.Release_Priquel|Win32.ActiveCfg = Release|Win32 + {0EB257DC-5CFC-44B0-82C9-CE6B158BE473}.Release_Priquel|Win32.Build.0 = Release|Win32 + {0EB257DC-5CFC-44B0-82C9-CE6B158BE473}.Release_Priquel|x64.ActiveCfg = Release|Win32 + {0EB257DC-5CFC-44B0-82C9-CE6B158BE473}.Release_SSE|Win32.ActiveCfg = Release|Win32 + {0EB257DC-5CFC-44B0-82C9-CE6B158BE473}.Release_SSE|Win32.Build.0 = Release|Win32 + {0EB257DC-5CFC-44B0-82C9-CE6B158BE473}.Release_SSE|x64.ActiveCfg = Release|Win32 + {0EB257DC-5CFC-44B0-82C9-CE6B158BE473}.Release_SSE2|Win32.ActiveCfg = Release|Win32 + {0EB257DC-5CFC-44B0-82C9-CE6B158BE473}.Release_SSE2|Win32.Build.0 = Release|Win32 + {0EB257DC-5CFC-44B0-82C9-CE6B158BE473}.Release_SSE2|x64.ActiveCfg = Release|Win32 + {0EB257DC-5CFC-44B0-82C9-CE6B158BE473}.Release_w_STLPORT|Win32.ActiveCfg = Release|Win32 + {0EB257DC-5CFC-44B0-82C9-CE6B158BE473}.Release_w_STLPORT|Win32.Build.0 = Release|Win32 + {0EB257DC-5CFC-44B0-82C9-CE6B158BE473}.Release_w_STLPORT|x64.ActiveCfg = Release|Win32 + {0EB257DC-5CFC-44B0-82C9-CE6B158BE473}.Release|Win32.ActiveCfg = Release|Win32 + {0EB257DC-5CFC-44B0-82C9-CE6B158BE473}.Release|Win32.Build.0 = Release|Win32 + {0EB257DC-5CFC-44B0-82C9-CE6B158BE473}.Release|x64.ActiveCfg = Release|x64 + {0EB257DC-5CFC-44B0-82C9-CE6B158BE473}.Template|Win32.ActiveCfg = Release|Win32 + {0EB257DC-5CFC-44B0-82C9-CE6B158BE473}.Template|Win32.Build.0 = Release|Win32 + {0EB257DC-5CFC-44B0-82C9-CE6B158BE473}.Template|x64.ActiveCfg = Release|Win32 + {0EB257DC-5CFC-44B0-82C9-CE6B158BE473}.Unicode Debug|Win32.ActiveCfg = Debug|Win32 + {0EB257DC-5CFC-44B0-82C9-CE6B158BE473}.Unicode Debug|Win32.Build.0 = Debug|Win32 + {0EB257DC-5CFC-44B0-82C9-CE6B158BE473}.Unicode Debug|x64.ActiveCfg = Debug|Win32 + {0EB257DC-5CFC-44B0-82C9-CE6B158BE473}.Unicode Release|Win32.ActiveCfg = Release|Win32 + {0EB257DC-5CFC-44B0-82C9-CE6B158BE473}.Unicode Release|Win32.Build.0 = Release|Win32 + {0EB257DC-5CFC-44B0-82C9-CE6B158BE473}.Unicode Release|x64.ActiveCfg = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {0899B131-F1D4-4876-9BA1-67AC821DB9E1} = {3FC858CB-4888-42FF-ABC5-82DAECB59C2C} + {1BF75FEB-87DD-486C-880B-227987D191C2} = {2BFC806B-CE92-4EA4-8FE8-5F2EA54BA348} + {15CBFEFF-7965-41F5-B4E2-21E8795C9159} = {2BFC806B-CE92-4EA4-8FE8-5F2EA54BA348} + {3A214E06-B95E-4D61-A291-1F8DF2EC10FD} = {2BFC806B-CE92-4EA4-8FE8-5F2EA54BA348} + {CEBDE98B-A6AA-46E6-BC79-FAAF823DB9EC} = {2BFC806B-CE92-4EA4-8FE8-5F2EA54BA348} + {653F3841-3F26-49B9-AFCF-091DB4B67031} = {2BFC806B-CE92-4EA4-8FE8-5F2EA54BA348} + {0EB257DC-5CFC-44B0-82C9-CE6B158BE473} = {2BFC806B-CE92-4EA4-8FE8-5F2EA54BA348} + {94BE3D19-23D3-4D15-8B5C-41193885648C} = {EF293583-AFED-4761-A72D-04F8BF122434} + {6FDBCDB3-D190-486D-BDAC-3C4AC527DA3B} = {EF293583-AFED-4761-A72D-04F8BF122434} + EndGlobalSection + GlobalSection(DPCodeReviewSolutionGUID) = preSolution + DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000} + EndGlobalSection +EndGlobal diff --git a/trunk/xray/xr_3da/thunderbolt.cpp b/trunk/xray/xr_3da/thunderbolt.cpp index 3f447e9c..122b3656 100644 --- a/trunk/xray/xr_3da/thunderbolt.cpp +++ b/trunk/xray/xr_3da/thunderbolt.cpp @@ -2,14 +2,14 @@ #pragma once #ifndef _EDITOR - #include "render.h" -#endif + #include "render.h" +#endif #include "Thunderbolt.h" #include "igame_persistent.h" #include "LightAnimLibrary.h" #ifdef _EDITOR - #include "ui_toolscustom.h" + #include "ui_toolscustom.h" #else #include "igame_level.h" #include "xr_area.h" @@ -18,60 +18,89 @@ static const float MAX_DIST_FACTOR = 0.95f; -SThunderboltDesc::SThunderboltDesc(CInifile* pIni, LPCSTR sect) +SThunderboltDesc::SThunderboltDesc () : + m_GradientTop (0), + m_GradientCenter (0) { +} + +SThunderboltDesc::~SThunderboltDesc() +{ + ::Render->model_Delete (l_model); + m_GradientTop->hShader.destroy (); + m_GradientCenter->hShader.destroy(); + snd.destroy (); + + xr_delete (m_GradientTop); + xr_delete (m_GradientCenter); +} + +void SThunderboltDesc::create_top_gradient (CInifile& pIni, shared_str const& sect) +{ + m_GradientTop = xr_new(); + m_GradientTop->shader = pIni.r_string ( sect,"gradient_top_shader" ); + m_GradientTop->texture = pIni.r_string ( sect,"gradient_top_texture" ); + m_GradientTop->fRadius = pIni.r_fvector2 (sect,"gradient_top_radius" ); + m_GradientTop->fOpacity = pIni.r_float ( sect,"gradient_top_opacity" ); + m_GradientTop->hShader.create (*m_GradientTop->shader,*m_GradientTop->texture); +} + +void SThunderboltDesc::create_center_gradient (CInifile& pIni, shared_str const& sect) +{ + m_GradientCenter = xr_new(); + m_GradientCenter->shader = pIni.r_string ( sect,"gradient_center_shader" ); + m_GradientCenter->texture = pIni.r_string ( sect,"gradient_center_texture" ); + m_GradientCenter->fRadius = pIni.r_fvector2 (sect,"gradient_center_radius" ); + m_GradientCenter->fOpacity = pIni.r_float ( sect,"gradient_center_opacity" ); + m_GradientCenter->hShader.create (*m_GradientCenter->shader,*m_GradientCenter->texture); +} + +void SThunderboltDesc::load (CInifile& pIni, shared_str const& sect) +{ + create_top_gradient (pIni, sect); + create_center_gradient (pIni, sect); + name = sect; - color_anim = LALib.FindItem (pIni->r_string ( sect,"color_anim" )); VERIFY(color_anim); + color_anim = LALib.FindItem (pIni.r_string ( sect,"color_anim" )); + VERIFY (color_anim); color_anim->fFPS = (float)color_anim->iFrameCount; - m_GradientTop.shader = pIni->r_string ( sect,"gradient_top_shader" ); - m_GradientTop.texture = pIni->r_string ( sect,"gradient_top_texture" ); - m_GradientTop.fRadius = pIni->r_fvector2(sect,"gradient_top_radius" ); - m_GradientTop.fOpacity = pIni->r_float ( sect,"gradient_top_opacity" ); - m_GradientTop.hShader.create(*m_GradientTop.shader,*m_GradientTop.texture); - m_GradientCenter.shader = pIni->r_string ( sect,"gradient_center_shader" ); - m_GradientCenter.texture = pIni->r_string ( sect,"gradient_center_texture" ); - m_GradientCenter.fRadius = pIni->r_fvector2(sect,"gradient_center_radius" ); - m_GradientCenter.fOpacity = pIni->r_float ( sect,"gradient_center_opacity" ); - m_GradientCenter.hShader.create(*m_GradientCenter.shader,*m_GradientCenter.texture); - - // models - IReader* F = 0; - LPCSTR m_name; - m_name = pSettings->r_string(sect,"lightning_model"); - F = FS.r_open("$game_meshes$",m_name); R_ASSERT2(F,"Empty 'lightning_model'."); + + // models + LPCSTR m_name; + m_name = pIni.r_string(sect,"lightning_model"); + IReader* F = nullptr; + F = FS.r_open("$game_meshes$",m_name); R_ASSERT2(F,"Empty 'lightning_model'."); l_model = ::Render->model_CreateDM(F); - FS.r_close (F); + FS.r_close (F); - // sound - m_name = pSettings->r_string(sect,"sound"); - if (m_name&&m_name[0]) snd.create(m_name,st_Effect,sg_Undefined); + // sound + m_name = pIni.r_string(sect,"sound"); + if (m_name&&m_name[0]) snd.create(m_name,st_Effect,sg_Undefined); } -SThunderboltDesc::~SThunderboltDesc() -{ - ::Render->model_Delete (l_model); - m_GradientTop.hShader.destroy (); - m_GradientCenter.hShader.destroy(); - snd.destroy (); -} //---------------------------------------------------------------------------------------------- // collection //---------------------------------------------------------------------------------------------- -SThunderboltCollection::SThunderboltCollection(CInifile* pIni, LPCSTR sect) +SThunderboltCollection::SThunderboltCollection () +{ +} + +void SThunderboltCollection::load (CInifile* pIni, CInifile* thunderbolts, LPCSTR sect) { section = sect; int tb_count = pIni->line_count(sect); for (int tb_idx=0; tb_idxr_line(sect,tb_idx,&N,&V)) - palette.push_back(xr_new(pIni,N)); + palette.push_back (g_pGamePersistent->Environment().thunderbolt_description(*thunderbolts, N)); } } -SThunderboltCollection::~SThunderboltCollection() +SThunderboltCollection::~SThunderboltCollection () { for (DescIt d_it=palette.begin(); d_it!=palette.end(); d_it++) - xr_delete(*d_it); + xr_delete (*d_it); + palette.clear (); } @@ -82,204 +111,206 @@ CEffect_Thunderbolt::CEffect_Thunderbolt() { current = 0; life_time = 0.f; - state = stIdle; - next_lightning_time = 0.f; - bEnabled = FALSE; + state = stIdle; + next_lightning_time = 0.f; + bEnabled = FALSE; - // geom + // geom hGeom_model.create (D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX1, RCache.Vertex.Buffer(), RCache.Index.Buffer()); hGeom_gradient.create(FVF::F_LIT,RCache.Vertex.Buffer(),RCache.QuadIB); - - // params - p_var_alt = pSettings->r_fvector2 ( "thunderbolt_common","altitude" ); - p_var_alt.x = deg2rad(p_var_alt.x); p_var_alt.y = deg2rad(p_var_alt.y); - p_var_long = deg2rad ( pSettings->r_float ( "thunderbolt_common","delta_longitude" )); - p_min_dist = _min (MAX_DIST_FACTOR,pSettings->r_float ( "thunderbolt_common","min_dist_factor" )); - p_tilt = deg2rad (pSettings->r_float ( "thunderbolt_common","tilt" )); - p_second_prop = pSettings->r_float ( "thunderbolt_common","second_propability" ); - clamp (p_second_prop,0.f,1.f); - p_sky_color = pSettings->r_float ( "thunderbolt_common","sky_color" ); - p_sun_color = pSettings->r_float ( "thunderbolt_common","sun_color" ); - p_fog_color = pSettings->r_float ( "thunderbolt_common","fog_color" ); } CEffect_Thunderbolt::~CEffect_Thunderbolt() { for (CollectionVecIt d_it=collection.begin(); d_it!=collection.end(); d_it++) - xr_delete (*d_it); + xr_delete (*d_it); collection.clear (); hGeom_model.destroy (); hGeom_gradient.destroy (); } -int CEffect_Thunderbolt::AppendDef(CInifile* pIni, LPCSTR sect) +shared_str CEffect_Thunderbolt::AppendDef(CEnvironment& environment, CInifile* pIni, CInifile* thunderbolts, LPCSTR sect) { - if (!sect||(0==sect[0])) return -1; + if (!sect||(0==sect[0])) return ""; for (CollectionVecIt it=collection.begin(); it!=collection.end(); it++) - if ((*it)->section==sect) return int(it-collection.begin()); - collection.push_back (xr_new(pIni,sect)); - return collection.size()-1; + if ((*it)->section==sect) return (*it)->section; + collection.push_back (environment.thunderbolt_collection(pIni, thunderbolts, sect)); + return collection.back()->section; } BOOL CEffect_Thunderbolt::RayPick(const Fvector& s, const Fvector& d, float& dist) { BOOL bRes = TRUE; #ifdef _EDITOR - bRes = Tools->RayPick (s,d,dist,0,0); + bRes = Tools->RayPick (s,d,dist,0,0); #else collide::rq_result RQ; CObject* E = g_pGameLevel->CurrentViewEntity(); bRes = g_pGameLevel->ObjectSpace.RayPick(s,d,dist,collide::rqtBoth,RQ,E); - if (bRes) dist = RQ.range; - else{ - Fvector N ={0.f,-1.f,0.f}; - Fvector P ={0.f,0.f,0.f}; - Fplane PL; PL.build(P,N); - float dst =dist; - if (PL.intersectRayDist(s,d,dst)&&(dst<=dist)){dist=dst; return true;}else return false; - } + if (bRes) dist = RQ.range; + else{ + Fvector N ={0.f,-1.f,0.f}; + Fvector P ={0.f,0.f,0.f}; + Fplane PL; PL.build(P,N); + float dst =dist; + if (PL.intersectRayDist(s,d,dst)&&(dst<=dist)){dist=dst; return true;}else return false; + } #endif - return bRes; + return bRes; } -#define FAR_DIST g_pGamePersistent->Environment().CurrentEnv.far_plane +#define FAR_DIST g_pGamePersistent->Environment().CurrentEnv->far_plane -void CEffect_Thunderbolt::Bolt(int id, float period, float lt) +void CEffect_Thunderbolt::Bolt(shared_str id, float period, float lt) { - VERIFY (id>=0 && id<(int)collection.size()); - state = stWorking; - life_time = lt+Random.randF(-lt*0.5f,lt*0.5f); - current_time = 0.f; - current = collection[id]->GetRandomDesc(); VERIFY(current); - - Fmatrix XF,S; - Fvector pos,dev; - float sun_h, sun_p; - g_pGamePersistent->Environment().CurrentEnv.sun_dir.getHP (sun_h,sun_p); - float alt = Random.randF(p_var_alt.x,p_var_alt.y); - float lng = Random.randF(sun_h-p_var_long+PI,sun_h+p_var_long+PI); - float dist = Random.randF(FAR_DIST*p_min_dist,FAR_DIST*MAX_DIST_FACTOR); - current_direction.setHP (lng,alt); - pos.mad (Device.vCameraPosition,current_direction,dist); - dev.x = Random.randF(-p_tilt,p_tilt); - dev.y = Random.randF(0,PI_MUL_2); - dev.z = Random.randF(-p_tilt,p_tilt); - XF.setXYZi (dev); - - Fvector light_dir = {0.f,-1.f,0.f}; - XF.transform_dir (light_dir); - lightning_size = FAR_DIST*2.f; - RayPick (pos,light_dir,lightning_size); - - lightning_center.mad (pos,light_dir,lightning_size*0.5f); - - S.scale (lightning_size,lightning_size,lightning_size); - XF.translate_over (pos); - current_xform.mul_43 (XF,S); - - float next_v = Random.randF(); - - if (next_vEnvironment().thunderbolt_collection(collection, id)->GetRandomDesc(); VERIFY(current); + + Fmatrix XF,S; + Fvector pos,dev; + float sun_h, sun_p; + CEnvironment& environment = g_pGamePersistent->Environment(); + environment.CurrentEnv->sun_dir.getHP (sun_h,sun_p); + float alt = environment.p_var_alt;//Random.randF(environment.p_var_alt.x,environment.p_var_alt.y); + float lng = Random.randF(sun_h-environment.p_var_long+PI,sun_h+environment.p_var_long+PI); + float dist = Random.randF(FAR_DIST*environment.p_min_dist,FAR_DIST*.95f); + current_direction.setHP (lng,alt); + pos.mad (Device.vCameraPosition,current_direction,dist); + dev.x = Random.randF(-environment.p_tilt,environment.p_tilt); + dev.y = Random.randF(0,PI_MUL_2); + dev.z = Random.randF(-environment.p_tilt,environment.p_tilt); + XF.setXYZi (dev); + + Fvector light_dir = {0.f,-1.f,0.f}; + XF.transform_dir (light_dir); + lightning_size = FAR_DIST*2.f; + RayPick (pos,light_dir,lightning_size); + + lightning_center.mad (pos,light_dir,lightning_size*0.5f); + + S.scale (lightning_size,lightning_size,lightning_size); + XF.translate_over (pos); + current_xform.mul_43 (XF,S); + + float next_v = Random.randF(); + + if (next_vsnd.play_no_feedback (0,0,dist/300.f,&pos,0,0,&Fvector2().set(dist/2,dist*2.f)); - } + } current_direction.invert (); // for env-sun } -void CEffect_Thunderbolt::OnFrame(int id, float period, float duration) +void CEffect_Thunderbolt::OnFrame(shared_str id, float period, float duration) { - BOOL enabled = (id>=0); + BOOL enabled = !!(id.size()); if (bEnabled!=enabled){ - bEnabled = enabled; - next_lightning_time = Device.fTimeGlobal+period+Random.randF(-period*0.5f,period*0.5f); - }else if (bEnabled&&(Device.fTimeGlobal>next_lightning_time)){ - if (state==stIdle && (id>=0)) Bolt(id,period,duration); - } + bEnabled = enabled; + next_lightning_time = Device.fTimeGlobal+period+Random.randF(-period*0.5f,period*0.5f); + }else if (bEnabled&&(Device.fTimeGlobal>next_lightning_time)){ + if (state==stIdle && !!(id.size())) Bolt(id,period,duration); + } if (state==stWorking){ - if (current_time>life_time) state = stIdle; - current_time += Device.fTimeDelta; + if (current_time>life_time) state = stIdle; + current_time += Device.fTimeDelta; Fvector fClr; int frame; u32 uClr = current->color_anim->CalculateRGB(current_time/life_time,frame); - fClr.set (float(color_get_R(uClr))/255.f,float(color_get_G(uClr)/255.f),float(color_get_B(uClr)/255.f)); - - lightning_phase = 1.5f*(current_time/life_time); - clamp (lightning_phase,0.f,1.f); - - g_pGamePersistent->Environment().CurrentEnv.sky_color.mad(fClr,p_sky_color); - g_pGamePersistent->Environment().CurrentEnv.sun_color.mad(fClr,p_sun_color); - g_pGamePersistent->Environment().CurrentEnv.fog_color.mad(fClr,p_fog_color); + fClr.set ( + clampr(float(color_get_R(uClr)/255.f), 0.f, 1.f), + clampr(float(color_get_G(uClr)/255.f), 0.f, 1.f), + clampr(float(color_get_B(uClr)/255.f), 0.f, 1.f) + ); + + lightning_phase = 1.5f*(current_time/life_time); + clamp (lightning_phase,0.f,1.f); + + CEnvironment& environment = g_pGamePersistent->Environment(); + + Fvector& sky_color = environment.CurrentEnv->sky_color; + sky_color.mad ( fClr, environment.p_sky_color ); + clamp ( sky_color.x, 0.f, 1.f ); + clamp ( sky_color.y, 0.f, 1.f ); + clamp ( sky_color.z, 0.f, 1.f ); + + environment.CurrentEnv->sun_color.mad(fClr,environment.p_sun_color); + environment.CurrentEnv->fog_color.mad(fClr,environment.p_fog_color); if (::Render->get_generation()==IRender_interface::GENERATION_R2) { - g_pGamePersistent->Environment().CurrentEnv.sun_dir = current_direction; - VERIFY2(g_pGamePersistent->Environment().CurrentEnv.sun_dir.y<0,"Invalid sun direction settings while CEffect_Thunderbolt"); + R_ASSERT ( _valid(current_direction) ); + g_pGamePersistent->Environment().CurrentEnv->sun_dir = current_direction; + VERIFY2(g_pGamePersistent->Environment().CurrentEnv->sun_dir.y<0,"Invalid sun direction settings while CEffect_Thunderbolt"); } - } + } } void CEffect_Thunderbolt::Render() -{ +{ if (state==stWorking){ - VERIFY (current); + VERIFY (current); - // lightning model - float dv = lightning_phase*0.5f; - dv = (lightning_phase>0.5f)?Random.randI(2)*0.5f:dv; + // lightning model + float dv = lightning_phase*0.5f; + dv = (lightning_phase>0.5f)?Random.randI(2)*0.5f:dv; RCache.set_CullMode (CULL_NONE); - u32 v_offset,i_offset; - u32 vCount_Lock = current->l_model->number_vertices; - u32 iCount_Lock = current->l_model->number_indices; - IRender_DetailModel::fvfVertexOut* v_ptr= (IRender_DetailModel::fvfVertexOut*) RCache.Vertex.Lock (vCount_Lock, hGeom_model->vb_stride, v_offset); - u16* i_ptr = RCache.Index.Lock (iCount_Lock, i_offset); - // XForm verts - current->l_model->transfer(current_xform,v_ptr,0xffffffff,i_ptr,0,0.f,dv); - // Flush if needed - RCache.Vertex.Unlock(vCount_Lock,hGeom_model->vb_stride); - RCache.Index.Unlock (iCount_Lock); - RCache.set_xform_world(Fidentity); - RCache.set_Shader (current->l_model->shader); - RCache.set_Geometry (hGeom_model); - RCache.Render (D3DPT_TRIANGLELIST,v_offset,0,vCount_Lock,i_offset,iCount_Lock/3); + u32 v_offset,i_offset; + u32 vCount_Lock = current->l_model->number_vertices; + u32 iCount_Lock = current->l_model->number_indices; + IRender_DetailModel::fvfVertexOut* v_ptr= (IRender_DetailModel::fvfVertexOut*) RCache.Vertex.Lock (vCount_Lock, hGeom_model->vb_stride, v_offset); + u16* i_ptr = RCache.Index.Lock (iCount_Lock, i_offset); + // XForm verts + current->l_model->transfer(current_xform,v_ptr,0xffffffff,i_ptr,0,0.f,dv); + // Flush if needed + RCache.Vertex.Unlock(vCount_Lock,hGeom_model->vb_stride); + RCache.Index.Unlock (iCount_Lock); + RCache.set_xform_world(Fidentity); + RCache.set_Shader (current->l_model->shader); + RCache.set_Geometry (hGeom_model); + RCache.Render (D3DPT_TRIANGLELIST,v_offset,0,vCount_Lock,i_offset,iCount_Lock/3); RCache.set_CullMode (CULL_CCW); - // gradient - Fvector vecSx, vecSy; - u32 VS_Offset; - FVF::LIT *pv = (FVF::LIT*) RCache.Vertex.Lock(8,hGeom_gradient.stride(),VS_Offset); - // top - { - u32 c_val = iFloor(current->m_GradientTop.fOpacity*lightning_phase*255.f); - u32 c = color_rgba(c_val,c_val,c_val,c_val); - vecSx.mul (Device.vCameraRight, current->m_GradientTop.fRadius.x*lightning_size); - vecSy.mul (Device.vCameraTop, -current->m_GradientTop.fRadius.y*lightning_size); - pv->set (current_xform.c.x+vecSx.x-vecSy.x, current_xform.c.y+vecSx.y-vecSy.y, current_xform.c.z+vecSx.z-vecSy.z, c, 0, 0); pv++; - pv->set (current_xform.c.x+vecSx.x+vecSy.x, current_xform.c.y+vecSx.y+vecSy.y, current_xform.c.z+vecSx.z+vecSy.z, c, 0, 1); pv++; - pv->set (current_xform.c.x-vecSx.x-vecSy.x, current_xform.c.y-vecSx.y-vecSy.y, current_xform.c.z-vecSx.z-vecSy.z, c, 1, 0); pv++; - pv->set (current_xform.c.x-vecSx.x+vecSy.x, current_xform.c.y-vecSx.y+vecSy.y, current_xform.c.z-vecSx.z+vecSy.z, c, 1, 1); pv++; - } - // center - { - u32 c_val = iFloor(current->m_GradientTop.fOpacity*lightning_phase*255.f); - u32 c = color_rgba(c_val,c_val,c_val,c_val); - vecSx.mul (Device.vCameraRight, current->m_GradientCenter.fRadius.x*lightning_size); - vecSy.mul (Device.vCameraTop, -current->m_GradientCenter.fRadius.y*lightning_size); - pv->set (lightning_center.x+vecSx.x-vecSy.x, lightning_center.y+vecSx.y-vecSy.y, lightning_center.z+vecSx.z-vecSy.z, c, 0, 0); pv++; - pv->set (lightning_center.x+vecSx.x+vecSy.x, lightning_center.y+vecSx.y+vecSy.y, lightning_center.z+vecSx.z+vecSy.z, c, 0, 1); pv++; - pv->set (lightning_center.x-vecSx.x-vecSy.x, lightning_center.y-vecSx.y-vecSy.y, lightning_center.z-vecSx.z-vecSy.z, c, 1, 0); pv++; - pv->set (lightning_center.x-vecSx.x+vecSy.x, lightning_center.y-vecSx.y+vecSy.y, lightning_center.z-vecSx.z+vecSy.z, c, 1, 1); pv++; - } - RCache.Vertex.Unlock (8,hGeom_gradient.stride()); - RCache.set_xform_world (Fidentity); - RCache.set_Geometry (hGeom_gradient); - RCache.set_Shader (current->m_GradientTop.hShader); - RCache.Render (D3DPT_TRIANGLELIST,VS_Offset, 0,4,0,2); - RCache.set_Shader (current->m_GradientCenter.hShader); - RCache.Render (D3DPT_TRIANGLELIST,VS_Offset+4, 0,4,0,2); - } + // gradient + Fvector vecSx, vecSy; + u32 VS_Offset; + FVF::LIT *pv = (FVF::LIT*) RCache.Vertex.Lock(8,hGeom_gradient.stride(),VS_Offset); + // top + { + u32 c_val = iFloor(current->m_GradientTop->fOpacity*lightning_phase*255.f); + u32 c = color_rgba(c_val,c_val,c_val,c_val); + vecSx.mul (Device.vCameraRight, current->m_GradientTop->fRadius.x*lightning_size); + vecSy.mul (Device.vCameraTop, -current->m_GradientTop->fRadius.y*lightning_size); + pv->set (current_xform.c.x+vecSx.x-vecSy.x, current_xform.c.y+vecSx.y-vecSy.y, current_xform.c.z+vecSx.z-vecSy.z, c, 0, 0); pv++; + pv->set (current_xform.c.x+vecSx.x+vecSy.x, current_xform.c.y+vecSx.y+vecSy.y, current_xform.c.z+vecSx.z+vecSy.z, c, 0, 1); pv++; + pv->set (current_xform.c.x-vecSx.x-vecSy.x, current_xform.c.y-vecSx.y-vecSy.y, current_xform.c.z-vecSx.z-vecSy.z, c, 1, 0); pv++; + pv->set (current_xform.c.x-vecSx.x+vecSy.x, current_xform.c.y-vecSx.y+vecSy.y, current_xform.c.z-vecSx.z+vecSy.z, c, 1, 1); pv++; + } + // center + { + u32 c_val = iFloor(current->m_GradientTop->fOpacity*lightning_phase*255.f); + u32 c = color_rgba(c_val,c_val,c_val,c_val); + vecSx.mul (Device.vCameraRight, current->m_GradientCenter->fRadius.x*lightning_size); + vecSy.mul (Device.vCameraTop, -current->m_GradientCenter->fRadius.y*lightning_size); + pv->set (lightning_center.x+vecSx.x-vecSy.x, lightning_center.y+vecSx.y-vecSy.y, lightning_center.z+vecSx.z-vecSy.z, c, 0, 0); pv++; + pv->set (lightning_center.x+vecSx.x+vecSy.x, lightning_center.y+vecSx.y+vecSy.y, lightning_center.z+vecSx.z+vecSy.z, c, 0, 1); pv++; + pv->set (lightning_center.x-vecSx.x-vecSy.x, lightning_center.y-vecSx.y-vecSy.y, lightning_center.z-vecSx.z-vecSy.z, c, 1, 0); pv++; + pv->set (lightning_center.x-vecSx.x+vecSy.x, lightning_center.y-vecSx.y+vecSy.y, lightning_center.z-vecSx.z+vecSy.z, c, 1, 1); pv++; + } + RCache.Vertex.Unlock (8,hGeom_gradient.stride()); + RCache.set_xform_world (Fidentity); + RCache.set_Geometry (hGeom_gradient); + RCache.set_Shader (current->m_GradientTop->hShader); + RCache.Render (D3DPT_TRIANGLELIST,VS_Offset, 0,4,0,2); + RCache.set_Shader (current->m_GradientCenter->hShader); + RCache.Render (D3DPT_TRIANGLELIST,VS_Offset+4, 0,4,0,2); + } } diff --git a/trunk/xray/xr_3da/thunderbolt.h b/trunk/xray/xr_3da/thunderbolt.h index bb7efe53..79a2dd4c 100644 --- a/trunk/xray/xr_3da/thunderbolt.h +++ b/trunk/xray/xr_3da/thunderbolt.h @@ -9,30 +9,34 @@ //refs class ENGINE_API IRender_DetailModel; class ENGINE_API CLAItem; +class ENGINE_API CEnvironment; struct SThunderboltDesc { // geom IRender_DetailModel* l_model; - // sound - ref_sound snd; - // gradient + // sound + ref_sound snd; + // gradient struct SFlare { - float fOpacity; - Fvector2 fRadius; - shared_str texture; - shared_str shader; - ref_shader hShader; - SFlare() { fOpacity = 0; fRadius.set(0.f,0.f);} + float fOpacity; + Fvector2 fRadius; + shared_str texture; + shared_str shader; + ref_shader hShader; + SFlare() { fOpacity = 0; fRadius.set(0.f,0.f);} }; - SFlare m_GradientTop; - SFlare m_GradientCenter; - shared_str name; + SFlare* m_GradientTop; + SFlare* m_GradientCenter; + shared_str name; CLAItem* color_anim; public: - SThunderboltDesc (CInifile* pIni, LPCSTR sect); - ~SThunderboltDesc (); + SThunderboltDesc (); + ~SThunderboltDesc (); + void load (CInifile& pIni, shared_str const& sect); + void create_top_gradient (CInifile& pIni, shared_str const& sect); + void create_center_gradient (CInifile& pIni, shared_str const& sect); }; struct SThunderboltCollection @@ -41,8 +45,9 @@ struct SThunderboltCollection DescVec palette; shared_str section; public: - SThunderboltCollection (CInifile* pIni, LPCSTR sect); + SThunderboltCollection (); ~SThunderboltCollection (); + void load (CInifile* pIni, CInifile* thunderbolts, LPCSTR sect); SThunderboltDesc* GetRandomDesc (){VERIFY(palette.size()>0); return palette[Random.randI(palette.size())];} }; @@ -55,49 +60,39 @@ class ENGINE_API CEffect_Thunderbolt CollectionVec collection; SThunderboltDesc* current; private: - Fmatrix current_xform; + Fmatrix current_xform; Fvector3 current_direction; ref_geom hGeom_model; - // states + // states enum EState { - stIdle, + stIdle, stWorking }; EState state; ref_geom hGeom_gradient; - Fvector lightning_center; - float lightning_size; - float lightning_phase; + Fvector lightning_center; + float lightning_size; + float lightning_phase; - float life_time; - float current_time; - float next_lightning_time; + float life_time; + float current_time; + float next_lightning_time; BOOL bEnabled; - - // params - Fvector2 p_var_alt; - float p_var_long; - float p_min_dist; - float p_tilt; - float p_second_prop; - float p_sky_color; - float p_sun_color; - float p_fog_color; private: BOOL RayPick (const Fvector& s, const Fvector& d, float& range); - void Bolt (int id, float period, float life_time); -public: + void Bolt (shared_str id, float period, float life_time); +public: CEffect_Thunderbolt (); ~CEffect_Thunderbolt(); - void OnFrame (int id,float period, float duration); + void OnFrame (shared_str id,float period, float duration); void Render (); - int AppendDef (CInifile* pIni, LPCSTR sect); + shared_str AppendDef (CEnvironment& environment, CInifile* pIni, CInifile* thunderbolts, LPCSTR sect); }; #endif //ThunderboltH diff --git a/trunk/xray/xr_3da/x_ray.cpp b/trunk/xray/xr_3da/x_ray.cpp index e7686504..3c3c4c1a 100644 --- a/trunk/xray/xr_3da/x_ray.cpp +++ b/trunk/xray/xr_3da/x_ray.cpp @@ -61,6 +61,7 @@ namespace std { #endif // #ifdef NDEBUG*/ void draw_multiline_text(CGameFont* F, float fTargetWidth, LPCSTR pszText); +void draw_multiline_text2(CGameFont* F, float fTargetWidth, float _x, float _y, LPCSTR pszText); void compute_build_id () { @@ -901,6 +902,7 @@ CApplication::CApplication() // App Title app_title[ 0 ] = '\0'; + ls_title[0] = '\0'; } CApplication::~CApplication() @@ -1373,19 +1375,18 @@ void CApplication::load_draw_internal() VERIFY (pFontSystem); pFontSystem->Clear (); pFontSystem->SetColor (color_rgba(35,71,74,255)); + back_size.set (float(_w)/2.f,585.0f*k.y); + pFontSystem->OutSet (back_size.x, back_size.y); pFontSystem->SetAligment (CGameFont::alCenter); - pFontSystem->OutI (0.f,0.524f,app_title); - pFontSystem->OnRender (); + pFontSystem->OutNext (app_title); + pFontSystem->OutNext (""); + pFontSystem->OutNext (""); // Kondr48: Ñîâåòû, ïðè çàãðóçêå èãðû. - VERIFY (pFontSystem); - pFontSystem->Clear (); - pFontSystem->SetColor (color_rgba(35,71,74,255)); - pFontSystem->SetAligment (CGameFont::alCenter); - float fTargetWidth = 600.0f * k.x * (b_ws ? 0.8f : 1.0f); - //draw_multiline_text (pFontSystem, fTargetWidth, ls_title); - pFontSystem->OutI (0.f,0.625f,ls_title); - pFontSystem->OnRender (); + float fTargetWidth = 600.0f * k.x * (b_ws ? 0.8f : 1.0f); + draw_multiline_text (pFontSystem, fTargetWidth, ls_title); + + pFontSystem->OnRender (); //draw level-specific screenshot if(hLevelLogo){ @@ -1470,4 +1471,4 @@ void draw_multiline_text(CGameFont* F, float fTargetWidth, LPCSTR pszText) break; } } -} +} \ No newline at end of file diff --git a/trunk/xray/xr_3da/xrCPU_Pipe/3DNow!Lib.cpp b/trunk/xray/xr_3da/xrCPU_Pipe/3DNow!Lib.cpp index ca9fd7b9..5528ecfc 100644 --- a/trunk/xray/xr_3da/xrCPU_Pipe/3DNow!Lib.cpp +++ b/trunk/xray/xr_3da/xrCPU_Pipe/3DNow!Lib.cpp @@ -53,7 +53,7 @@ static const __int32 one = 0x3F800000; static const __int32 half = 0x3F000000; static const __int32 two = 0x40000000; static const __int32 oob = 0x00000000; -static const __int32 nan = 0x7fffffff; +static const __int32 Nan = 0x7fffffff; static const __int32 pnan = 0x7fc00000; static const __int32 n0 = 0x40A008EF; static const __int32 n1 = 0x3DAA7B3D; diff --git a/trunk/xray/xr_3da/xrCPU_Pipe/xrCPU_Pipe.vcxproj b/trunk/xray/xr_3da/xrCPU_Pipe/xrCPU_Pipe.vcxproj index afff3dff..639fc4f7 100644 --- a/trunk/xray/xr_3da/xrCPU_Pipe/xrCPU_Pipe.vcxproj +++ b/trunk/xray/xr_3da/xrCPU_Pipe/xrCPU_Pipe.vcxproj @@ -1,5 +1,5 @@  - + Debug @@ -50,45 +50,59 @@ DynamicLibrary false MultiByte + v140 DynamicLibrary false MultiByte + v140 DynamicLibrary false MultiByte + v140 DynamicLibrary false MultiByte + v140 DynamicLibrary false MultiByte true + v140 DynamicLibrary false MultiByte true + v140 DynamicLibrary false MultiByte true + v140 DynamicLibrary false MultiByte true + v140 + + + v140 + + + v140 diff --git a/trunk/xray/xr_3da/xrGame/CustomMonster.cpp b/trunk/xray/xr_3da/xrGame/CustomMonster.cpp index fad28c0e..07bc9ab1 100644 --- a/trunk/xray/xr_3da/xrGame/CustomMonster.cpp +++ b/trunk/xray/xr_3da/xrGame/CustomMonster.cpp @@ -540,9 +540,9 @@ void CCustomMonster::update_range_fov (float &new_range, float &new_fov, float s { const float standard_far_plane = eye_range; - float current_fog_density = GamePersistent().Environment().CurrentEnv.fog_density ; + float current_fog_density = GamePersistent().Environment().CurrentEnv->fog_density ; // 0=no_fog, 1=full_fog, >1 = super-fog - float current_far_plane = GamePersistent().Environment().CurrentEnv.far_plane ; + float current_far_plane = GamePersistent().Environment().CurrentEnv->far_plane ; // 300=standart, 50=super-fog new_fov = start_fov; diff --git a/trunk/xray/xr_3da/xrGame/GamePersistent.cpp b/trunk/xray/xr_3da/xrGame/GamePersistent.cpp index 7d85fae6..65c3895b 100644 --- a/trunk/xray/xr_3da/xrGame/GamePersistent.cpp +++ b/trunk/xray/xr_3da/xrGame/GamePersistent.cpp @@ -42,11 +42,18 @@ CGamePersistent::CGamePersistent(void) { m_bPickableDOF = false; m_game_params.m_e_game_type = GAME_ANY; - ambient_sound_next_time = 0; ambient_effect_next_time = 0; ambient_effect_stop_time = 0; ambient_particles = 0; + ambient_effect_wind_start = 0.f; + ambient_effect_wind_in_time = 0.f; + ambient_effect_wind_end = 0.f; + ambient_effect_wind_out_time= 0.f; + ambient_effect_wind_on = false; + + ZeroMemory (ambient_sound_next_time, sizeof(ambient_sound_next_time)); + m_pUI_core = NULL; m_pMainMenu = NULL; m_intro = NULL; @@ -217,17 +224,58 @@ void CGamePersistent::WeathersUpdate() BOOL bIndoor = TRUE; if (actor) bIndoor = actor->renderable_ROS()->get_luminocity_hemi()<0.05f; - int data_set = (Random.randF()<(1.f-Environment().CurrentEnv.weight))?0:1; - CEnvDescriptor* _env = Environment().Current[data_set]; VERIFY(_env); - if (!_env) - Msg("!ERROR: Environment().Current[%d] == NULL", data_set); // alpet: ñèÿ ïðîáëåìà âñïëûâàåò, ïðè âûçîâå level.on_frame â ñêðèïòàõ - CEnvAmbient* env_amb = _env ? _env->env_ambient : NULL; // _env->env_ambient; // - if (env_amb){ - // start sound - if (Device.dwTimeGlobal > ambient_sound_next_time){ + int data_set = (Random.randF()<(1.f-Environment().CurrentEnv->weight))?0:1; + + CEnvDescriptor* const current_env = Environment().Current[0]; + VERIFY (current_env); + + CEnvDescriptor* const _env = Environment().Current[data_set]; + VERIFY (_env); + + CEnvAmbient* env_amb = _env->env_ambient; + if (env_amb) { + CEnvAmbient::SSndChannelVec& vec = current_env->env_ambient->get_snd_channels(); + CEnvAmbient::SSndChannelVecIt I = vec.begin(); + CEnvAmbient::SSndChannelVecIt E = vec.end(); + + for (u32 idx=0; I!=E; ++I,++idx) { + CEnvAmbient::SSndChannel& ch = **I; + R_ASSERT (idx<20); + if(ambient_sound_next_time[idx]==0)//first + { + ambient_sound_next_time[idx] = Device.dwTimeGlobal + ch.get_rnd_sound_first_time(); + }else + if(Device.dwTimeGlobal > ambient_sound_next_time[idx]) + { + ref_sound& snd = ch.get_rnd_sound(); + + Fvector pos; + float angle = ::Random.randF(PI_MUL_2); + pos.x = _cos(angle); + pos.y = 0; + pos.z = _sin(angle); + pos.normalize ().mul(ch.get_rnd_sound_dist()).add(Device.vCameraPosition); + pos.y += 10.f; + snd.play_at_pos (0,pos); + +#ifdef DEBUG + if (!snd._handle() && strstr(Core.Params,"-nosound")) + continue; +#endif // DEBUG + + VERIFY (snd._handle()); + u32 _length_ms = iFloor(snd.get_length_sec()*1000.0f); + ambient_sound_next_time[idx] = Device.dwTimeGlobal + _length_ms + ch.get_rnd_sound_time(); +// Msg("- Playing ambient sound channel [%s] file[%s]",ch.m_load_section.c_str(),snd._handle()->file_name()); + } + } +/* + if (Device.dwTimeGlobal > ambient_sound_next_time) + { ref_sound* snd = env_amb->get_rnd_sound(); ambient_sound_next_time = Device.dwTimeGlobal + env_amb->get_rnd_sound_time(); - if (snd){ + if (snd) + { Fvector pos; float angle = ::Random.randF(PI_MUL_2); pos.x = _cos(angle); @@ -238,7 +286,7 @@ void CGamePersistent::WeathersUpdate() snd->play_at_pos (0,pos); } } - +*/ // start effect if ((FALSE==bIndoor) && (0==ambient_particles) && Device.dwTimeGlobal>ambient_effect_next_time){ CEnvAmbient::SEffect* eff = env_amb->get_rnd_effect(); @@ -246,18 +294,88 @@ void CGamePersistent::WeathersUpdate() Environment().wind_gust_factor = eff->wind_gust_factor; ambient_effect_next_time = Device.dwTimeGlobal + env_amb->get_rnd_effect_time(); ambient_effect_stop_time = Device.dwTimeGlobal + eff->life_time; + ambient_effect_wind_start = Device.fTimeGlobal; + ambient_effect_wind_in_time = Device.fTimeGlobal + eff->wind_blast_in_time; + ambient_effect_wind_end = Device.fTimeGlobal + eff->life_time/1000.f; + ambient_effect_wind_out_time = Device.fTimeGlobal + eff->life_time/1000.f + eff->wind_blast_out_time; + ambient_effect_wind_on = true; + ambient_particles = CParticlesObject::Create(eff->particles.c_str(),FALSE,false); Fvector pos; pos.add (Device.vCameraPosition,eff->offset); ambient_particles->play_at_pos (pos); if (eff->sound._handle()) eff->sound.play_at_pos(0,pos); + + + Environment().wind_blast_strength_start_value=Environment().wind_strength_factor; + Environment().wind_blast_strength_stop_value=eff->wind_blast_strength; + + if (Environment().wind_blast_strength_start_value==0.f) + { + Environment().wind_blast_start_time.set(0.f,eff->wind_blast_direction.x,eff->wind_blast_direction.y,eff->wind_blast_direction.z); + } + else + { + Environment().wind_blast_start_time.set(0.f,Environment().wind_blast_direction.x,Environment().wind_blast_direction.y,Environment().wind_blast_direction.z); + } + Environment().wind_blast_stop_time.set(0.f,eff->wind_blast_direction.x,eff->wind_blast_direction.y,eff->wind_blast_direction.z); } } } + if (Device.fTimeGlobal>=ambient_effect_wind_start && Device.fTimeGlobal<=ambient_effect_wind_in_time && ambient_effect_wind_on) + { + float delta=ambient_effect_wind_in_time-ambient_effect_wind_start; + float t; + if (delta!=0.f) + { + float cur_in=Device.fTimeGlobal-ambient_effect_wind_start; + t=cur_in/delta; + } + else + { + t=0.f; + } + Environment().wind_blast_current.slerp(Environment().wind_blast_start_time,Environment().wind_blast_stop_time,t); + + Environment().wind_blast_direction.set(Environment().wind_blast_current.x,Environment().wind_blast_current.y,Environment().wind_blast_current.z); + Environment().wind_strength_factor=Environment().wind_blast_strength_start_value+t*(Environment().wind_blast_strength_stop_value-Environment().wind_blast_strength_start_value); + } + // stop if time exceed or indoor if (bIndoor || Device.dwTimeGlobal>=ambient_effect_stop_time){ if (ambient_particles) ambient_particles->Stop(); - Environment().wind_gust_factor = 0.f; + + Environment().wind_gust_factor = 0.f; + } + + if (Device.fTimeGlobal>=ambient_effect_wind_end && ambient_effect_wind_on) + { + Environment().wind_blast_strength_start_value=Environment().wind_strength_factor; + Environment().wind_blast_strength_stop_value =0.f; + + ambient_effect_wind_on=false; + } + + if (Device.fTimeGlobal>=ambient_effect_wind_end && Device.fTimeGlobal<=ambient_effect_wind_out_time) + { + float delta=ambient_effect_wind_out_time-ambient_effect_wind_end; + float t; + if (delta!=0.f) + { + float cur_in=Device.fTimeGlobal-ambient_effect_wind_end; + t=cur_in/delta; + } + else + { + t=0.f; + } + Environment().wind_strength_factor=Environment().wind_blast_strength_start_value+t*(Environment().wind_blast_strength_stop_value-Environment().wind_blast_strength_start_value); + } + if (Device.fTimeGlobal>ambient_effect_wind_out_time && ambient_effect_wind_out_time!=0.f ) + { + Environment().wind_strength_factor=0.0; + } + // if particles not playing - destroy if (ambient_particles&&!ambient_particles->IsPlaying()) CParticlesObject::Destroy(ambient_particles); diff --git a/trunk/xray/xr_3da/xrGame/GamePersistent.h b/trunk/xray/xr_3da/xrGame/GamePersistent.h index 31765e2a..6dd7c220 100644 --- a/trunk/xray/xr_3da/xrGame/GamePersistent.h +++ b/trunk/xray/xr_3da/xrGame/GamePersistent.h @@ -15,9 +15,15 @@ class CGamePersistent: { // ambient particles CParticlesObject* ambient_particles; - u32 ambient_sound_next_time; + u32 ambient_sound_next_time [20]; //max snd channels u32 ambient_effect_next_time; u32 ambient_effect_stop_time; + + float ambient_effect_wind_start; + float ambient_effect_wind_in_time; + float ambient_effect_wind_end; + float ambient_effect_wind_out_time; + bool ambient_effect_wind_on; bool m_bPickableDOF; diff --git a/trunk/xray/xr_3da/xrGame/HUDTarget.cpp b/trunk/xray/xr_3da/xrGame/HUDTarget.cpp index 0e532855..dd4666d5 100644 --- a/trunk/xray/xr_3da/xrGame/HUDTarget.cpp +++ b/trunk/xray/xr_3da/xrGame/HUDTarget.cpp @@ -108,7 +108,7 @@ void CHUDTarget::CursorOnFrame () // Render cursor if(Level().CurrentEntity()){ RQ.O = 0; - RQ.range = g_pGamePersistent->Environment().CurrentEnv.far_plane*0.99f; + RQ.range = g_pGamePersistent->Environment().CurrentEnv->far_plane*0.99f; RQ.element = -1; collide::ray_defs RD(p1, dir, RQ.range, CDB::OPT_CULL, collide::rqtBoth); diff --git a/trunk/xray/xr_3da/xrGame/Level.cpp b/trunk/xray/xr_3da/xrGame/Level.cpp index 88a03b4a..a5cc0061 100644 --- a/trunk/xray/xr_3da/xrGame/Level.cpp +++ b/trunk/xray/xr_3da/xrGame/Level.cpp @@ -622,8 +622,7 @@ void CLevel::OnFrame () } } -// g_pGamePersistent->Environment().SetGameTime (GetGameDayTimeSec(),GetGameTimeFactor()); - g_pGamePersistent->Environment().SetGameTime (GetEnvironmentGameDayTimeSec(),GetGameTimeFactor()); + g_pGamePersistent->Environment().SetGameTime (GetEnvironmentGameDayTimeSec(),game->GetEnvironmentGameTimeFactor()); //Device.Statistic->cripting.Begin (); if (!g_dedicated_server) diff --git a/trunk/xray/xr_3da/xrGame/Level_load.cpp b/trunk/xray/xr_3da/xrGame/Level_load.cpp index dc07db68..336021cc 100644 --- a/trunk/xray/xr_3da/xrGame/Level_load.cpp +++ b/trunk/xray/xr_3da/xrGame/Level_load.cpp @@ -110,6 +110,7 @@ BOOL CLevel::Load_GameSpecific_After() } BlockCheatLoad(); + return TRUE; } diff --git a/trunk/xray/xr_3da/xrGame/NET_Queue.h b/trunk/xray/xr_3da/xrGame/NET_Queue.h index 43430c9e..af8dca5a 100644 --- a/trunk/xray/xr_3da/xrGame/NET_Queue.h +++ b/trunk/xray/xr_3da/xrGame/NET_Queue.h @@ -45,7 +45,7 @@ class NET_Event P.r (&*data.begin(),size); } } - void export (NET_Packet& P) + void Export (NET_Packet& P) { u16 ID = M_EVENT; P.w_begin (ID ); diff --git a/trunk/xray/xr_3da/xrGame/PHCharacter.h b/trunk/xray/xr_3da/xrGame/PHCharacter.h index 6dbff6c8..4b6ce51e 100644 --- a/trunk/xray/xr_3da/xrGame/PHCharacter.h +++ b/trunk/xray/xr_3da/xrGame/PHCharacter.h @@ -10,13 +10,12 @@ class ICollisionDamageInfo; class CElevatorState; class CPHActorCharacter; class CPHAICharacter; - static enum EEnvironment - { - peOnGround, - peAtWall, - peInAir - }; - +enum EEnvironment +{ + peOnGround, + peAtWall, + peInAir +}; class CPHCharacter : public CPHObject, diff --git a/trunk/xray/xr_3da/xrGame/StdAfx.h b/trunk/xray/xr_3da/xrGame/StdAfx.h index deb9fe28..9769a173 100644 --- a/trunk/xray/xr_3da/xrGame/StdAfx.h +++ b/trunk/xray/xr_3da/xrGame/StdAfx.h @@ -3,7 +3,7 @@ #pragma warning(disable:4995) #include "../stdafx.h" -#include +#include "dplay8.h" #pragma warning(default:4995) #pragma warning( 4 : 4018 ) #pragma warning( 4 : 4244 ) diff --git a/trunk/xray/xr_3da/xrGame/actor_memory.cpp b/trunk/xray/xr_3da/xrGame/actor_memory.cpp index 21084a6d..f7f79c96 100644 --- a/trunk/xray/xr_3da/xrGame/actor_memory.cpp +++ b/trunk/xray/xr_3da/xrGame/actor_memory.cpp @@ -46,5 +46,5 @@ void CActorMemory::camera ( field_of_view = deg2rad(camera.f_fov); aspect_ratio = camera.f_aspect; near_plane = .1f; - far_plane = g_pGamePersistent->Environment().CurrentEnv.far_plane; + far_plane = g_pGamePersistent->Environment().CurrentEnv->far_plane; } diff --git a/trunk/xray/xr_3da/xrGame/console_commands.cpp b/trunk/xray/xr_3da/xrGame/console_commands.cpp index 0a2a579e..d6b02f4b 100644 --- a/trunk/xray/xr_3da/xrGame/console_commands.cpp +++ b/trunk/xray/xr_3da/xrGame/console_commands.cpp @@ -1591,8 +1591,9 @@ void CCC_RegisterCommands() #ifndef MASTER_GOLD CMD1(CCC_StartTimeSingle, "start_time_single"); - CMD4(CCC_TimeFactorSingle, "time_factor_single", &g_fTimeFactor, 0.f,flt_max); #endif // MASTER_GOLD + CMD4(CCC_TimeFactorSingle, "time_factor_single", &g_fTimeFactor, 0.f,flt_max); +//#endif // MASTER_GOLD g_uCommonFlags.zero(); diff --git a/trunk/xray/xr_3da/xrGame/dpaddr.h b/trunk/xray/xr_3da/xrGame/dpaddr.h new file mode 100644 index 00000000..6e3fccf6 --- /dev/null +++ b/trunk/xray/xr_3da/xrGame/dpaddr.h @@ -0,0 +1,392 @@ +/*==========================================================================; + * + * Copyright (C) 2000-2002 Microsoft Corporation. All Rights Reserved. + * + * File: dpaddr.h + * Content: DirectPlayAddress include file + ***************************************************************************/ + +#ifndef __DIRECTPLAYADDRESS__ +#define __DIRECTPLAYADDRESS__ + +#include // for DECLARE_INTERFACE_ and HRESULT + +#ifdef __cplusplus +extern "C" { +#endif + +#include "dplay8.h" + + + +/**************************************************************************** + * + * DirectPlay8Address CLSIDs + * + ****************************************************************************/ + +// {934A9523-A3CA-4bc5-ADA0-D6D95D979421} +DEFINE_GUID(CLSID_DirectPlay8Address, +0x934a9523, 0xa3ca, 0x4bc5, 0xad, 0xa0, 0xd6, 0xd9, 0x5d, 0x97, 0x94, 0x21); + + +/**************************************************************************** + * + * DirectPlay8Address Interface IIDs + * + ****************************************************************************/ + + +typedef REFIID DPNAREFIID; + +// {83783300-4063-4c8a-9DB3-82830A7FEB31} +DEFINE_GUID(IID_IDirectPlay8Address, +0x83783300, 0x4063, 0x4c8a, 0x9d, 0xb3, 0x82, 0x83, 0xa, 0x7f, 0xeb, 0x31); + +// {E5A0E990-2BAD-430b-87DA-A142CF75DE58} +DEFINE_GUID(IID_IDirectPlay8AddressIP, +0xe5a0e990, 0x2bad, 0x430b, 0x87, 0xda, 0xa1, 0x42, 0xcf, 0x75, 0xde, 0x58); + + + +/**************************************************************************** + * + * DirectPlay8Address Interface Pointer definitions + * + ****************************************************************************/ + +typedef struct IDirectPlay8Address *PDIRECTPLAY8ADDRESS, *LPDIRECTPLAY8ADDRESS; +typedef struct IDirectPlay8AddressIP *PDIRECTPLAY8ADDRESSIP, *LPDIRECTPLAY8ADDRESSIP; + + +/**************************************************************************** + * + * DirectPlay8Address Forward Declarations For External Types + * + ****************************************************************************/ + +typedef struct sockaddr SOCKADDR; + +/**************************************************************************** + * + * DirectPlay8Address Constants + * + ****************************************************************************/ +// +// Asynchronous operation flags +// +#define DPNA_DATATYPE_STRING 0x00000001 +#define DPNA_DATATYPE_DWORD 0x00000002 +#define DPNA_DATATYPE_GUID 0x00000003 +#define DPNA_DATATYPE_BINARY 0x00000004 +#define DPNA_DATATYPE_STRING_ANSI 0x00000005 + +#define DPNA_DPNSVR_PORT 6073 + +#define DPNA_INDEX_INVALID 0xFFFFFFFF + +/**************************************************************************** + * + * DirectPlay8Address Address Elements + * + ****************************************************************************/ + +#define DPNA_SEPARATOR_KEYVALUE L'=' +#define DPNA_SEPARATOR_USERDATA L'#' +#define DPNA_SEPARATOR_COMPONENT L';' +#define DPNA_ESCAPECHAR L'%' + +// Header +#define DPNA_HEADER L"x-directplay:/" + +// key names for address components +#define DPNA_KEY_NAT_RESOLVER L"natresolver" +#define DPNA_KEY_NAT_RESOLVER_USER_STRING L"natresolveruserstring" +#define DPNA_KEY_APPLICATION_INSTANCE L"applicationinstance" +#define DPNA_KEY_DEVICE L"device" +#define DPNA_KEY_HOSTNAME L"hostname" +#define DPNA_KEY_PORT L"port" +#define DPNA_KEY_NAMEINFO L"nameinfo" +#define DPNA_KEY_PROCESSOR L"processor" +#define DPNA_KEY_PROGRAM L"program" +#define DPNA_KEY_PROVIDER L"provider" +#define DPNA_KEY_SCOPE L"scope" +#define DPNA_KEY_TRAVERSALMODE L"traversalmode" +#define DPNA_KEY_BAUD L"baud" +#define DPNA_KEY_FLOWCONTROL L"flowcontrol" +#define DPNA_KEY_PARITY L"parity" +#define DPNA_KEY_PHONENUMBER L"phonenumber" +#define DPNA_KEY_STOPBITS L"stopbits" + +// values for baud rate +#define DPNA_BAUD_RATE_9600 9600 +#define DPNA_BAUD_RATE_14400 14400 +#define DPNA_BAUD_RATE_19200 19200 +#define DPNA_BAUD_RATE_38400 38400 +#define DPNA_BAUD_RATE_56000 56000 +#define DPNA_BAUD_RATE_57600 57600 +#define DPNA_BAUD_RATE_115200 115200 + +// values for stop bits +#define DPNA_STOP_BITS_ONE L"1" +#define DPNA_STOP_BITS_ONE_FIVE L"1.5" +#define DPNA_STOP_BITS_TWO L"2" + +// values for parity +#define DPNA_PARITY_NONE L"NONE" +#define DPNA_PARITY_EVEN L"EVEN" +#define DPNA_PARITY_ODD L"ODD" +#define DPNA_PARITY_MARK L"MARK" +#define DPNA_PARITY_SPACE L"SPACE" + +// values for flow control +#define DPNA_FLOW_CONTROL_NONE L"NONE" +#define DPNA_FLOW_CONTROL_XONXOFF L"XONXOFF" +#define DPNA_FLOW_CONTROL_RTS L"RTS" +#define DPNA_FLOW_CONTROL_DTR L"DTR" +#define DPNA_FLOW_CONTROL_RTSDTR L"RTSDTR" +// values for traversal mode +#define DPNA_TRAVERSALMODE_NONE 0 +#define DPNA_TRAVERSALMODE_PORTREQUIRED 1 +#define DPNA_TRAVERSALMODE_PORTRECOMMENDED 2 +// Shortcut values +// +// These can be used instead of the corresponding CLSID_DP8SP_XXXX guids +// +#define DPNA_VALUE_TCPIPPROVIDER L"IP" +#define DPNA_VALUE_IPXPROVIDER L"IPX" +#define DPNA_VALUE_MODEMPROVIDER L"MODEM" +#define DPNA_VALUE_SERIALPROVIDER L"SERIAL" + +//// ANSI DEFINITIONS + +// Header +#define DPNA_HEADER_A "x-directplay:/" +#define DPNA_SEPARATOR_KEYVALUE_A '=' +#define DPNA_SEPARATOR_USERDATA_A '#' +#define DPNA_SEPARATOR_COMPONENT_A ';' +#define DPNA_ESCAPECHAR_A '%' + +// key names for address components +#define DPNA_KEY_NAT_RESOLVER_A "natresolver" +#define DPNA_KEY_NAT_RESOLVER_USER_STRING_A "natresolveruserstring" +#define DPNA_KEY_APPLICATION_INSTANCE_A "applicationinstance" +#define DPNA_KEY_DEVICE_A "device" +#define DPNA_KEY_HOSTNAME_A "hostname" +#define DPNA_KEY_PORT_A "port" +#define DPNA_KEY_NAMEINFO_A "nameinfo" +#define DPNA_KEY_PROCESSOR_A "processor" +#define DPNA_KEY_PROGRAM_A "program" +#define DPNA_KEY_PROVIDER_A "provider" +#define DPNA_KEY_SCOPE_A "scope" +#define DPNA_KEY_TRAVERSALMODE_A "traversalmode" +#define DPNA_KEY_BAUD_A "baud" +#define DPNA_KEY_FLOWCONTROL_A "flowcontrol" +#define DPNA_KEY_PARITY_A "parity" +#define DPNA_KEY_PHONENUMBER_A "phonenumber" +#define DPNA_KEY_STOPBITS_A "stopbits" + +// values for stop bits +#define DPNA_STOP_BITS_ONE_A "1" +#define DPNA_STOP_BITS_ONE_FIVE_A "1.5" +#define DPNA_STOP_BITS_TWO_A "2" + +// values for parity +#define DPNA_PARITY_NONE_A "NONE" +#define DPNA_PARITY_EVEN_A "EVEN" +#define DPNA_PARITY_ODD_A "ODD" +#define DPNA_PARITY_MARK_A "MARK" +#define DPNA_PARITY_SPACE_A "SPACE" + +// values for flow control +#define DPNA_FLOW_CONTROL_NONE_A "NONE" +#define DPNA_FLOW_CONTROL_XONXOFF_A "XONXOFF" +#define DPNA_FLOW_CONTROL_RTS_A "RTS" +#define DPNA_FLOW_CONTROL_DTR_A "DTR" +#define DPNA_FLOW_CONTROL_RTSDTR_A "RTSDTR" +// Shortcut values +// +// These can be used instead of the corresponding CLSID_DP8SP_XXXX guids +// +#define DPNA_VALUE_TCPIPPROVIDER_A "IP" +#define DPNA_VALUE_IPXPROVIDER_A "IPX" +#define DPNA_VALUE_MODEMPROVIDER_A "MODEM" +#define DPNA_VALUE_SERIALPROVIDER_A "SERIAL" + +/**************************************************************************** + * + * DirectPlay8Address Functions + * + ****************************************************************************/ + + +/* + * + * This function is no longer supported. It is recommended that CoCreateInstance be used to create + * DirectPlay8 address objects. + * + * HRESULT WINAPI DirectPlay8AddressCreate( const GUID * pcIID, void **ppvInterface, IUnknown *pUnknown); + * + */ + + +/**************************************************************************** + * + * DirectPlay8Address Application Interfaces + * + ****************************************************************************/ + +// +// COM definition for IDirectPlay8Address Generic Interface +// +#undef INTERFACE // External COM Implementation +#define INTERFACE IDirectPlay8Address +DECLARE_INTERFACE_(IDirectPlay8Address,IUnknown) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface) (THIS_ DPNAREFIID, LPVOID *) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + /*** IDirectPlay8Address methods ***/ + STDMETHOD(BuildFromURLW)(THIS_ WCHAR *pwszSourceURL ) PURE; + STDMETHOD(BuildFromURLA)(THIS_ CHAR *pszSourceURL ) PURE; + STDMETHOD(Duplicate)(THIS_ PDIRECTPLAY8ADDRESS *ppdpaNewAddress ) PURE; + STDMETHOD(SetEqual)(THIS_ PDIRECTPLAY8ADDRESS pdpaAddress ) PURE; + STDMETHOD(IsEqual)(THIS_ PDIRECTPLAY8ADDRESS pdpaAddress ) PURE; + STDMETHOD(Clear)(THIS ) PURE; + STDMETHOD(GetURLW)(THIS_ WCHAR *pwszURL, PDWORD pdwNumChars ) PURE; + STDMETHOD(GetURLA)(THIS_ CHAR *pszURL, PDWORD pdwNumChars) PURE; + STDMETHOD(GetSP)(THIS_ GUID *pguidSP ) PURE; + STDMETHOD(GetUserData)(THIS_ void *pvUserData, PDWORD pdwBufferSize) PURE; + STDMETHOD(SetSP)(THIS_ const GUID * const pguidSP ) PURE; + STDMETHOD(SetUserData)(THIS_ const void * const pvUserData, const DWORD dwDataSize) PURE; + STDMETHOD(GetNumComponents)(THIS_ PDWORD pdwNumComponents ) PURE; + STDMETHOD(GetComponentByName)(THIS_ const WCHAR * const pwszName, void *pvBuffer, PDWORD pdwBufferSize, PDWORD pdwDataType ) PURE; + STDMETHOD(GetComponentByIndex)(THIS_ const DWORD dwComponentID, WCHAR * pwszName, PDWORD pdwNameLen, void *pvBuffer, PDWORD pdwBufferSize, PDWORD pdwDataType ) PURE; + STDMETHOD(AddComponent)(THIS_ const WCHAR * const pwszName, const void * const lpvData, const DWORD dwDataSize, const DWORD dwDataType ) PURE; + STDMETHOD(GetDevice)(THIS_ GUID * ) PURE; + STDMETHOD(SetDevice)(THIS_ const GUID * const) PURE; + STDMETHOD(BuildFromDPADDRESS)( THIS_ LPVOID pvAddress, DWORD dwDataSize ) PURE; +}; + +// +// COM definition for IDirectPlay8AddressIP Generic Interface +// +#undef INTERFACE // External COM Implementation +#define INTERFACE IDirectPlay8AddressIP +DECLARE_INTERFACE_(IDirectPlay8AddressIP,IUnknown) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface) (THIS_ DPNAREFIID, PVOID *) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + /*** IDirectPlay8AddressIP methods ***/ + + // Constructs a IDirectPlay8 TCP Address from a SOCKADDR structure + STDMETHOD(BuildFromSockAddr)(THIS_ const SOCKADDR * const ) PURE; + + // Constructs a TCP Address from a string (hostname) and port + STDMETHOD(BuildAddress)(THIS_ const WCHAR * const wszAddress, const USHORT usPort ) PURE; + + // Builds a local TCP Address + STDMETHOD(BuildLocalAddress)(THIS_ const GUID * const pguidAdapter, const USHORT usPort ) PURE; + + // Gets the address from the structure in SOCKADR format + STDMETHOD(GetSockAddress)(THIS_ SOCKADDR *, PDWORD ) PURE; + + // Gets the local afddress + STDMETHOD(GetLocalAddress)(THIS_ GUID *pguidAdapter, USHORT *pusPort ) PURE; + + // Gets the remote address + STDMETHOD(GetAddress)(THIS_ WCHAR *wszAddress, PDWORD pdwAddressLength, USHORT *psPort ) PURE; +}; + + +/**************************************************************************** + * + * IDirectPlay8 application interface macros + * + ****************************************************************************/ + +#if !defined(__cplusplus) || defined(CINTERFACE) + +#define IDirectPlay8Address_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirectPlay8Address_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectPlay8Address_Release(p) (p)->lpVtbl->Release(p) +#define IDirectPlay8Address_BuildFromURLW(p,a) (p)->lpVtbl->BuildFromURLW(p,a) +#define IDirectPlay8Address_BuildFromURLA(p,a) (p)->lpVtbl->BuildFromURLA(p,a) +#define IDirectPlay8Address_Duplicate(p,a) (p)->lpVtbl->Duplicate(p,a) +#define IDirectPlay8Address_SetEqual(p,a) (p)->lpVtbl->SetEqual(p,a) +#define IDirectPlay8Address_IsEqual(p,a) (p)->lpVtbl->IsEqual(p,a) +#define IDirectPlay8Address_Clear(p) (p)->lpVtbl->Clear(p) +#define IDirectPlay8Address_GetURLW(p,a,b) (p)->lpVtbl->GetURLW(p,a,b) +#define IDirectPlay8Address_GetURLA(p,a,b) (p)->lpVtbl->GetURLA(p,a,b) +#define IDirectPlay8Address_GetSP(p,a) (p)->lpVtbl->GetSP(p,a) +#define IDirectPlay8Address_GetUserData(p,a,b) (p)->lpVtbl->GetUserData(p,a,b) +#define IDirectPlay8Address_SetSP(p,a) (p)->lpVtbl->SetSP(p,a) +#define IDirectPlay8Address_SetUserData(p,a,b) (p)->lpVtbl->SetUserData(p,a,b) +#define IDirectPlay8Address_GetNumComponents(p,a) (p)->lpVtbl->GetNumComponents(p,a) +#define IDirectPlay8Address_GetComponentByName(p,a,b,c,d) (p)->lpVtbl->GetComponentByName(p,a,b,c,d) +#define IDirectPlay8Address_GetComponentByIndex(p,a,b,c,d,e,f) (p)->lpVtbl->GetComponentByIndex(p,a,b,c,d,e,f) +#define IDirectPlay8Address_AddComponent(p,a,b,c,d) (p)->lpVtbl->AddComponent(p,a,b,c,d) +#define IDirectPlay8Address_SetDevice(p,a) (p)->lpVtbl->SetDevice(p,a) +#define IDirectPlay8Address_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) +#define IDirectPlay8Address_BuildFromDirectPlay4Address(p,a,b) (p)->lpVtbl->BuildFromDirectPlay4Address(p,a,b) + +#define IDirectPlay8AddressIP_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirectPlay8AddressIP_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectPlay8AddressIP_Release(p) (p)->lpVtbl->Release(p) +#define IDirectPlay8AddressIP_BuildFromSockAddr(p,a) (p)->lpVtbl->BuildFromSockAddr(p,a) +#define IDirectPlay8AddressIP_BuildAddress(p,a,b) (p)->lpVtbl->BuildAddress(p,a,b) +#define IDirectPlay8AddressIP_BuildLocalAddress(p,a,b) (p)->lpVtbl->BuildLocalAddress(p,a,b) +#define IDirectPlay8AddressIP_GetSockAddress(p,a,b) (p)->lpVtbl->GetSockAddress(p,a,b) +#define IDirectPlay8AddressIP_GetLocalAddress(p,a,b) (p)->lpVtbl->GetLocalAddress(p,a,b) +#define IDirectPlay8AddressIP_GetAddress(p,a,b,c) (p)->lpVtbl->GetAddress(p,a,b,c) + +#else /* C++ */ + +#define IDirectPlay8Address_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirectPlay8Address_AddRef(p) (p)->AddRef() +#define IDirectPlay8Address_Release(p) (p)->Release() +#define IDirectPlay8Address_BuildFromURLW(p,a) (p)->BuildFromURLW(a) +#define IDirectPlay8Address_BuildFromURLA(p,a) (p)->BuildFromURLA(a) +#define IDirectPlay8Address_Duplicate(p,a) (p)->Duplicate(a) +#define IDirectPlay8Address_SetEqual(p,a) (p)->SetEqual(a) +#define IDirectPlay8Address_IsEqual(p,a) (p)->IsEqual(a) +#define IDirectPlay8Address_Clear(p) (p)->Clear() +#define IDirectPlay8Address_GetURLW(p,a,b) (p)->GetURLW(a,b) +#define IDirectPlay8Address_GetURLA(p,a,b) (p)->GetURLA(a,b) +#define IDirectPlay8Address_GetSP(p,a) (p)->GetSP(a) +#define IDirectPlay8Address_GetUserData(p,a,b) (p)->GetUserData(a,b) +#define IDirectPlay8Address_SetSP(p,a) (p)->SetSP(a) +#define IDirectPlay8Address_SetUserData(p,a,b) (p)->SetUserData(a,b) +#define IDirectPlay8Address_GetNumComponents(p,a) (p)->GetNumComponents(a) +#define IDirectPlay8Address_GetComponentByName(p,a,b,c,d) (p)->GetComponentByName(a,b,c,d) +#define IDirectPlay8Address_GetComponentByIndex(p,a,b,c,d,e,f) (p)->GetComponentByIndex(a,b,c,d,e,f) +#define IDirectPlay8Address_AddComponent(p,a,b,c,d) (p)->AddComponent(a,b,c,d) +#define IDirectPlay8Address_SetDevice(p,a) (p)->SetDevice(a) +#define IDirectPlay8Address_GetDevice(p,a) (p)->GetDevice(a) +#define IDirectPlay8Address_BuildFromDirectPlay4Address(p,a,b) (p)->BuildFromDirectPlay4Address(a,b) + +#define IDirectPlay8AddressIP_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirectPlay8AddressIP_AddRef(p) (p)->AddRef() +#define IDirectPlay8AddressIP_Release(p) (p)->Release() +#define IDirectPlay8AddressIP_BuildFromSockAddr(p,a) (p)->BuildFromSockAddr(a) +#define IDirectPlay8AddressIP_BuildAddress(p,a,b) (p)->BuildAddress(a,b) +#define IDirectPlay8AddressIP_BuildLocalAddress(p,a,b) (p)->BuildLocalAddress(a,b) +#define IDirectPlay8AddressIP_GetSockAddress(p,a,b) (p)->GetSockAddress(a,b) +#define IDirectPlay8AddressIP_GetLocalAddress(p,a,b) (p)->GetLocalAddress(a,b) +#define IDirectPlay8AddressIP_GetAddress(p,a,b,c) (p)->GetAddress(a,b,c) + +#endif + + +#ifdef __cplusplus +} +#endif + +#endif + + diff --git a/trunk/xray/xr_3da/xrGame/dplay8.h b/trunk/xray/xr_3da/xrGame/dplay8.h new file mode 100644 index 00000000..c6799a9d --- /dev/null +++ b/trunk/xray/xr_3da/xrGame/dplay8.h @@ -0,0 +1,1456 @@ +/*========================================================================== + * + * Copyright (C) 1998-2002 Microsoft Corporation. All Rights Reserved. + * + * File: DPlay8.h + * Content: DirectPlay8 include file + * + ***************************************************************************/ + +#ifndef __DIRECTPLAY8_H__ +#define __DIRECTPLAY8_H__ + +#include // for DECLARE_INTERFACE_ and HRESULT + +#include "dpaddr.h" + + +#ifdef __cplusplus +extern "C" { +#endif + + + +/**************************************************************************** + * + * DirectPlay8 CLSIDs + * + ****************************************************************************/ + +// {743F1DC6-5ABA-429f-8BDF-C54D03253DC2} +DEFINE_GUID(CLSID_DirectPlay8Client, +0x743f1dc6, 0x5aba, 0x429f, 0x8b, 0xdf, 0xc5, 0x4d, 0x3, 0x25, 0x3d, 0xc2); + +// {DA825E1B-6830-43d7-835D-0B5AD82956A2} +DEFINE_GUID(CLSID_DirectPlay8Server, +0xda825e1b, 0x6830, 0x43d7, 0x83, 0x5d, 0xb, 0x5a, 0xd8, 0x29, 0x56, 0xa2); + +// {286F484D-375E-4458-A272-B138E2F80A6A} +DEFINE_GUID(CLSID_DirectPlay8Peer, +0x286f484d, 0x375e, 0x4458, 0xa2, 0x72, 0xb1, 0x38, 0xe2, 0xf8, 0xa, 0x6a); + + +// CLSIDs added for DirectX 9 + +// {FC47060E-6153-4b34-B975-8E4121EB7F3C} +DEFINE_GUID(CLSID_DirectPlay8ThreadPool, +0xfc47060e, 0x6153, 0x4b34, 0xb9, 0x75, 0x8e, 0x41, 0x21, 0xeb, 0x7f, 0x3c); + +// {E4C1D9A2-CBF7-48bd-9A69-34A55E0D8941} +DEFINE_GUID(CLSID_DirectPlay8NATResolver, +0xe4c1d9a2, 0xcbf7, 0x48bd, 0x9a, 0x69, 0x34, 0xa5, 0x5e, 0xd, 0x89, 0x41); + +/**************************************************************************** + * + * DirectPlay8 Interface IIDs + * + ****************************************************************************/ + +typedef REFIID DP8REFIID; + + +// {5102DACD-241B-11d3-AEA7-006097B01411} +DEFINE_GUID(IID_IDirectPlay8Client, +0x5102dacd, 0x241b, 0x11d3, 0xae, 0xa7, 0x0, 0x60, 0x97, 0xb0, 0x14, 0x11); + +// {5102DACE-241B-11d3-AEA7-006097B01411} +DEFINE_GUID(IID_IDirectPlay8Server, +0x5102dace, 0x241b, 0x11d3, 0xae, 0xa7, 0x0, 0x60, 0x97, 0xb0, 0x14, 0x11); + +// {5102DACF-241B-11d3-AEA7-006097B01411} +DEFINE_GUID(IID_IDirectPlay8Peer, +0x5102dacf, 0x241b, 0x11d3, 0xae, 0xa7, 0x0, 0x60, 0x97, 0xb0, 0x14, 0x11); + + +// IIDs added for DirectX 9 + +// {0D22EE73-4A46-4a0d-89B2-045B4D666425} +DEFINE_GUID(IID_IDirectPlay8ThreadPool, +0xd22ee73, 0x4a46, 0x4a0d, 0x89, 0xb2, 0x4, 0x5b, 0x4d, 0x66, 0x64, 0x25); + +// {A9E213F2-9A60-486f-BF3B-53408B6D1CBB} +DEFINE_GUID(IID_IDirectPlay8NATResolver, +0xa9e213f2, 0x9a60, 0x486f, 0xbf, 0x3b, 0x53, 0x40, 0x8b, 0x6d, 0x1c, 0xbb); + +/**************************************************************************** + * + * DirectPlay8 Service Provider GUIDs + * + ****************************************************************************/ + + +// {53934290-628D-11D2-AE0F-006097B01411} +DEFINE_GUID(CLSID_DP8SP_IPX, +0x53934290, 0x628d, 0x11d2, 0xae, 0xf, 0x0, 0x60, 0x97, 0xb0, 0x14, 0x11); + + +// {6D4A3650-628D-11D2-AE0F-006097B01411} +DEFINE_GUID(CLSID_DP8SP_MODEM, +0x6d4a3650, 0x628d, 0x11d2, 0xae, 0xf, 0x0, 0x60, 0x97, 0xb0, 0x14, 0x11); + + +// {743B5D60-628D-11D2-AE0F-006097B01411} +DEFINE_GUID(CLSID_DP8SP_SERIAL, +0x743b5d60, 0x628d, 0x11d2, 0xae, 0xf, 0x0, 0x60, 0x97, 0xb0, 0x14, 0x11); + + +// {EBFE7BA0-628D-11D2-AE0F-006097B01411} +DEFINE_GUID(CLSID_DP8SP_TCPIP, +0xebfe7ba0, 0x628d, 0x11d2, 0xae, 0xf, 0x0, 0x60, 0x97, 0xb0, 0x14, 0x11); + + +// Service providers added for DirectX 9 + + +// {995513AF-3027-4b9a-956E-C772B3F78006} +DEFINE_GUID(CLSID_DP8SP_BLUETOOTH, +0x995513af, 0x3027, 0x4b9a, 0x95, 0x6e, 0xc7, 0x72, 0xb3, 0xf7, 0x80, 0x6); + + +/**************************************************************************** + * + * DirectPlay8 Interface Pointer definitions + * + ****************************************************************************/ + +typedef struct IDirectPlay8Client *PDIRECTPLAY8CLIENT; + +typedef struct IDirectPlay8Server *PDIRECTPLAY8SERVER; + +typedef struct IDirectPlay8Peer *PDIRECTPLAY8PEER; + + +// Interface pointers added for DirectX 9 + +typedef struct IDirectPlay8ThreadPool *PDIRECTPLAY8THREADPOOL; + +typedef struct IDirectPlay8NATResolver *PDIRECTPLAY8NATRESOLVER; + +/**************************************************************************** + * + * DirectPlay8 Forward Declarations For External Types + * + ****************************************************************************/ + +typedef struct IDirectPlay8LobbiedApplication *PDNLOBBIEDAPPLICATION; +typedef struct IDirectPlay8Address IDirectPlay8Address; + +/**************************************************************************** + * + * DirectPlay8 Callback Functions + * + ****************************************************************************/ + +// +// Callback Function Type Definition +// +typedef HRESULT (WINAPI *PFNDPNMESSAGEHANDLER)(PVOID,DWORD,PVOID); + +/**************************************************************************** + * + * DirectPlay8 Datatypes (Non-Structure / Non-Message) + * + ****************************************************************************/ + +// +// Player IDs. Used to uniquely identify a player in a session +// +typedef DWORD DPNID, *PDPNID; + +// +// Used as identifiers for operations +// +typedef DWORD DPNHANDLE, *PDPNHANDLE; + + + + +/**************************************************************************** + * + * DirectPlay8 Message Identifiers + * + ****************************************************************************/ + +#define DPN_MSGID_OFFSET 0xFFFF0000 +#define DPN_MSGID_ADD_PLAYER_TO_GROUP ( DPN_MSGID_OFFSET | 0x0001 ) +#define DPN_MSGID_APPLICATION_DESC ( DPN_MSGID_OFFSET | 0x0002 ) +#define DPN_MSGID_ASYNC_OP_COMPLETE ( DPN_MSGID_OFFSET | 0x0003 ) +#define DPN_MSGID_CLIENT_INFO ( DPN_MSGID_OFFSET | 0x0004 ) +#define DPN_MSGID_CONNECT_COMPLETE ( DPN_MSGID_OFFSET | 0x0005 ) +#define DPN_MSGID_CREATE_GROUP ( DPN_MSGID_OFFSET | 0x0006 ) +#define DPN_MSGID_CREATE_PLAYER ( DPN_MSGID_OFFSET | 0x0007 ) +#define DPN_MSGID_DESTROY_GROUP ( DPN_MSGID_OFFSET | 0x0008 ) +#define DPN_MSGID_DESTROY_PLAYER ( DPN_MSGID_OFFSET | 0x0009 ) +#define DPN_MSGID_ENUM_HOSTS_QUERY ( DPN_MSGID_OFFSET | 0x000a ) +#define DPN_MSGID_ENUM_HOSTS_RESPONSE ( DPN_MSGID_OFFSET | 0x000b ) +#define DPN_MSGID_GROUP_INFO ( DPN_MSGID_OFFSET | 0x000c ) +#define DPN_MSGID_HOST_MIGRATE ( DPN_MSGID_OFFSET | 0x000d ) +#define DPN_MSGID_INDICATE_CONNECT ( DPN_MSGID_OFFSET | 0x000e ) +#define DPN_MSGID_INDICATED_CONNECT_ABORTED ( DPN_MSGID_OFFSET | 0x000f ) +#define DPN_MSGID_PEER_INFO ( DPN_MSGID_OFFSET | 0x0010 ) +#define DPN_MSGID_RECEIVE ( DPN_MSGID_OFFSET | 0x0011 ) +#define DPN_MSGID_REMOVE_PLAYER_FROM_GROUP ( DPN_MSGID_OFFSET | 0x0012 ) +#define DPN_MSGID_RETURN_BUFFER ( DPN_MSGID_OFFSET | 0x0013 ) +#define DPN_MSGID_SEND_COMPLETE ( DPN_MSGID_OFFSET | 0x0014 ) +#define DPN_MSGID_SERVER_INFO ( DPN_MSGID_OFFSET | 0x0015 ) +#define DPN_MSGID_TERMINATE_SESSION ( DPN_MSGID_OFFSET | 0x0016 ) + +// Messages added for DirectX 9 +#define DPN_MSGID_CREATE_THREAD ( DPN_MSGID_OFFSET | 0x0017 ) +#define DPN_MSGID_DESTROY_THREAD ( DPN_MSGID_OFFSET | 0x0018 ) +#define DPN_MSGID_NAT_RESOLVER_QUERY ( DPN_MSGID_OFFSET | 0x0101 ) + +/**************************************************************************** + * + * DirectPlay8 Constants + * + ****************************************************************************/ + +#define DPNID_ALL_PLAYERS_GROUP 0 + +// +// DESTROY_GROUP reasons +// +#define DPNDESTROYGROUPREASON_NORMAL 0x0001 +#define DPNDESTROYGROUPREASON_AUTODESTRUCTED 0x0002 +#define DPNDESTROYGROUPREASON_SESSIONTERMINATED 0x0003 + +// +// DESTROY_PLAYER reasons +// +#define DPNDESTROYPLAYERREASON_NORMAL 0x0001 +#define DPNDESTROYPLAYERREASON_CONNECTIONLOST 0x0002 +#define DPNDESTROYPLAYERREASON_SESSIONTERMINATED 0x0003 +#define DPNDESTROYPLAYERREASON_HOSTDESTROYEDPLAYER 0x0004 + +#define DPN_MAX_APPDESC_RESERVEDDATA_SIZE 64 + + + +/**************************************************************************** + * + * DirectPlay8 Flags + * + ****************************************************************************/ + +// +// Asynchronous operation flags (for Async Ops) +// +#define DPNOP_SYNC 0x80000000 + +// +// Add player to group flags (for AddPlayerToGroup) +// +#define DPNADDPLAYERTOGROUP_SYNC DPNOP_SYNC + +// +// Cancel flags +// +#define DPNCANCEL_CONNECT 0x00000001 +#define DPNCANCEL_ENUM 0x00000002 +#define DPNCANCEL_SEND 0x00000004 +#define DPNCANCEL_ALL_OPERATIONS 0x00008000 +// Flags added for DirectX 9 +#define DPNCANCEL_PLAYER_SENDS 0x80000000 +#define DPNCANCEL_PLAYER_SENDS_PRIORITY_HIGH (DPNCANCEL_PLAYER_SENDS | 0x00010000) +#define DPNCANCEL_PLAYER_SENDS_PRIORITY_NORMAL (DPNCANCEL_PLAYER_SENDS | 0x00020000) +#define DPNCANCEL_PLAYER_SENDS_PRIORITY_LOW (DPNCANCEL_PLAYER_SENDS | 0x00040000) + +// +// Close flags (for Close, added for DirectX 9) +// +#define DPNCLOSE_IMMEDIATE 0x00000001 + +// +// Connect flags (for Connect) +// +#define DPNCONNECT_SYNC DPNOP_SYNC +#define DPNCONNECT_OKTOQUERYFORADDRESSING 0x0001 + +// +// Create group flags (for CreateGroup) +// +#define DPNCREATEGROUP_SYNC DPNOP_SYNC + +// +// Destroy group flags (for DestroyGroup) +// +#define DPNDESTROYGROUP_SYNC DPNOP_SYNC + +// +// Enumerate clients and groups flags (for EnumPlayersAndGroups) +// +#define DPNENUM_PLAYERS 0x0001 +#define DPNENUM_GROUPS 0x0010 + +// +// Enum hosts flags (for EnumHosts) +// +#define DPNENUMHOSTS_SYNC DPNOP_SYNC +#define DPNENUMHOSTS_OKTOQUERYFORADDRESSING 0x0001 +#define DPNENUMHOSTS_NOBROADCASTFALLBACK 0x0002 + +// +// Enum service provider flags (for EnumSP) +// +#define DPNENUMSERVICEPROVIDERS_ALL 0x0001 + +// +// GetLocalHostAddresses flags (added for DirectX 9) +// +#define DPNGETLOCALHOSTADDRESSES_COMBINED 0x0001 + +// +// Get send queue info flags (for GetSendQueueInfo) +// +#define DPNGETSENDQUEUEINFO_PRIORITY_NORMAL 0x0001 +#define DPNGETSENDQUEUEINFO_PRIORITY_HIGH 0x0002 +#define DPNGETSENDQUEUEINFO_PRIORITY_LOW 0x0004 + +// +// Group information flags (for Group Info) +// +#define DPNGROUP_AUTODESTRUCT 0x0001 + +// +// Host flags (for Host) +// +#define DPNHOST_OKTOQUERYFORADDRESSING 0x0001 + +// +// Set info +// +#define DPNINFO_NAME 0x0001 +#define DPNINFO_DATA 0x0002 + +// +// Initialize flags (for Initialize) +// +#define DPNINITIALIZE_DISABLEPARAMVAL 0x0001 +// Flags added for DirectX 9 +#define DPNINITIALIZE_HINT_LANSESSION 0x0002 +#define DPNINITIALIZE_DISABLELINKTUNING 0x0004 + + +// +// Register Lobby flags +// +#define DPNLOBBY_REGISTER 0x0001 +#define DPNLOBBY_UNREGISTER 0x0002 + +// +// Player information flags (for Player Info / Player Messages) +// +#define DPNPLAYER_LOCAL 0x0002 +#define DPNPLAYER_HOST 0x0004 + +// +// Receive indication flags (added for DirectX 9) +// +#define DPNRECEIVE_GUARANTEED 0x0001 +#define DPNRECEIVE_COALESCED 0x0002 + +// +// Remove player from group flags (for RemovePlayerFromGroup) +// +#define DPNREMOVEPLAYERFROMGROUP_SYNC DPNOP_SYNC + +// +// Send flags (for Send/SendTo) +// +#define DPNSEND_SYNC DPNOP_SYNC +#define DPNSEND_NOCOPY 0x0001 +#define DPNSEND_NOCOMPLETE 0x0002 +#define DPNSEND_COMPLETEONPROCESS 0x0004 +#define DPNSEND_GUARANTEED 0x0008 +#define DPNSEND_NONSEQUENTIAL 0x0010 +#define DPNSEND_NOLOOPBACK 0x0020 +#define DPNSEND_PRIORITY_LOW 0x0040 +#define DPNSEND_PRIORITY_HIGH 0x0080 +// Flag added for DirectX 9 +#define DPNSEND_COALESCE 0x0100 + +// +// Send complete indication flags (added for DirectX 9) +// +#define DPNSENDCOMPLETE_GUARANTEED 0x0001 +#define DPNSENDCOMPLETE_COALESCED 0x0002 + +// +// Session Flags (for DPN_APPLICATION_DESC) +// +#define DPNSESSION_CLIENT_SERVER 0x0001 +#define DPNSESSION_MIGRATE_HOST 0x0004 +#define DPNSESSION_NODPNSVR 0x0040 +#define DPNSESSION_REQUIREPASSWORD 0x0080 +// Flag added for DirectX 9 +#define DPNSESSION_NOENUMS 0x0100 +#define DPNSESSION_FAST_SIGNED 0x0200 +#define DPNSESSION_FULL_SIGNED 0x0400 + +// +// Set client info flags (for SetClientInfo) +// +#define DPNSETCLIENTINFO_SYNC DPNOP_SYNC + +// +// Set group info flags (for SetGroupInfo) +// +#define DPNSETGROUPINFO_SYNC DPNOP_SYNC + +// +// Set peer info flags (for SetPeerInfo) +// +#define DPNSETPEERINFO_SYNC DPNOP_SYNC + +// +// Set server info flags (for SetServerInfo) +// +#define DPNSETSERVERINFO_SYNC DPNOP_SYNC + +// +// SP capabilities flags +// +#define DPNSPCAPS_SUPPORTSDPNSVR 0x0001 +#define DPNSPCAPS_SUPPORTSDPNSRV DPNSPCAPS_SUPPORTSDPNSVR +#define DPNSPCAPS_SUPPORTSBROADCAST 0x0002 +#define DPNSPCAPS_SUPPORTSALLADAPTERS 0x0004 +// Flags added for DirectX 9 +#define DPNSPCAPS_SUPPORTSTHREADPOOL 0x0008 +#define DPNSPCAPS_NETWORKSIMULATOR 0x0010 + +// +// SP information flags (added for DirectX 9) +// +#define DPNSPINFO_NETWORKSIMULATORDEVICE 0x0001 + +/**************************************************************************** + * + * DirectPlay8 Structures (Non-Message) + * + ****************************************************************************/ + +// +// Application description +// +typedef struct _DPN_APPLICATION_DESC +{ + DWORD dwSize; // Size of this structure + DWORD dwFlags; // Flags (DPNSESSION_...) + GUID guidInstance; // Instance GUID + GUID guidApplication; // Application GUID + DWORD dwMaxPlayers; // Maximum # of players allowed (0=no limit) + DWORD dwCurrentPlayers; // Current # of players allowed + WCHAR *pwszSessionName; // Name of the session + WCHAR *pwszPassword; // Password for the session + PVOID pvReservedData; + DWORD dwReservedDataSize; + PVOID pvApplicationReservedData; + DWORD dwApplicationReservedDataSize; +} DPN_APPLICATION_DESC, *PDPN_APPLICATION_DESC; + +// +// Generic Buffer Description +// +typedef struct _BUFFERDESC +{ + DWORD dwBufferSize; + BYTE * pBufferData; +} BUFFERDESC, DPN_BUFFER_DESC, *PDPN_BUFFER_DESC; + +typedef BUFFERDESC FAR * PBUFFERDESC; + +// +// DirectPlay8 capabilities +// +typedef struct _DPN_CAPS +{ + DWORD dwSize; // Size of this structure + DWORD dwFlags; // Flags + DWORD dwConnectTimeout; // ms before a connect request times out + DWORD dwConnectRetries; // # of times to attempt the connection + DWORD dwTimeoutUntilKeepAlive; // ms of inactivity before a keep alive is sent +} DPN_CAPS, *PDPN_CAPS; + +// +// Extended capabilities structures (added for DirectX 9) +// +typedef struct _DPN_CAPS_EX +{ + DWORD dwSize; // Size of this structure + DWORD dwFlags; // Flags + DWORD dwConnectTimeout; // ms before a connect request times out + DWORD dwConnectRetries; // # of times to attempt the connection + DWORD dwTimeoutUntilKeepAlive; // ms of inactivity before a keep alive is sent + DWORD dwMaxRecvMsgSize; // maximum size in bytes of message that can be received + DWORD dwNumSendRetries; // maximum number of send retries before link is considered dead + DWORD dwMaxSendRetryInterval; // maximum period in msec between send retries + DWORD dwDropThresholdRate; // percentage of dropped packets before throttling + DWORD dwThrottleRate; // percentage amount to reduce send window when throttling + DWORD dwNumHardDisconnectSends; // number of hard disconnect frames to send when close immediate flag is specified + DWORD dwMaxHardDisconnectPeriod; // maximum period between hard disconnect sends +} DPN_CAPS_EX, *PDPN_CAPS_EX; + +// +// Connection Statistics information +// +typedef struct _DPN_CONNECTION_INFO +{ + DWORD dwSize; + DWORD dwRoundTripLatencyMS; + DWORD dwThroughputBPS; + DWORD dwPeakThroughputBPS; + + DWORD dwBytesSentGuaranteed; + DWORD dwPacketsSentGuaranteed; + DWORD dwBytesSentNonGuaranteed; + DWORD dwPacketsSentNonGuaranteed; + + DWORD dwBytesRetried; // Guaranteed only + DWORD dwPacketsRetried; // Guaranteed only + DWORD dwBytesDropped; // Non Guaranteed only + DWORD dwPacketsDropped; // Non Guaranteed only + + DWORD dwMessagesTransmittedHighPriority; + DWORD dwMessagesTimedOutHighPriority; + DWORD dwMessagesTransmittedNormalPriority; + DWORD dwMessagesTimedOutNormalPriority; + DWORD dwMessagesTransmittedLowPriority; + DWORD dwMessagesTimedOutLowPriority; + + DWORD dwBytesReceivedGuaranteed; + DWORD dwPacketsReceivedGuaranteed; + DWORD dwBytesReceivedNonGuaranteed; + DWORD dwPacketsReceivedNonGuaranteed; + DWORD dwMessagesReceived; + +} DPN_CONNECTION_INFO, *PDPN_CONNECTION_INFO; + + +// +// Group information structure +// +typedef struct _DPN_GROUP_INFO +{ + DWORD dwSize; // size of this structure + DWORD dwInfoFlags; // information contained + PWSTR pwszName; // Unicode Name + PVOID pvData; // data block + DWORD dwDataSize; // size in BYTES of data block + DWORD dwGroupFlags; // group flags (DPNGROUP_...) +} DPN_GROUP_INFO, *PDPN_GROUP_INFO; + +// +// Player information structure +// +typedef struct _DPN_PLAYER_INFO +{ + DWORD dwSize; // size of this structure + DWORD dwInfoFlags; // information contained + PWSTR pwszName; // Unicode Name + PVOID pvData; // data block + DWORD dwDataSize; // size in BYTES of data block + DWORD dwPlayerFlags; // player flags (DPNPLAYER_...) +} DPN_PLAYER_INFO, *PDPN_PLAYER_INFO; + +typedef struct _DPN_SECURITY_CREDENTIALS DPN_SECURITY_CREDENTIALS, *PDPN_SECURITY_CREDENTIALS; +typedef struct _DPN_SECURITY_DESC DPN_SECURITY_DESC, *PDPN_SECURITY_DESC; + +// +// Service provider & adapter enumeration structure +// +typedef struct _DPN_SERVICE_PROVIDER_INFO +{ + DWORD dwFlags; + GUID guid; // SP Guid + WCHAR *pwszName; // Friendly Name + PVOID pvReserved; + DWORD dwReserved; +} DPN_SERVICE_PROVIDER_INFO, *PDPN_SERVICE_PROVIDER_INFO; + +// +// Service provider caps structure +// +typedef struct _DPN_SP_CAPS +{ + DWORD dwSize; // Size of this structure + DWORD dwFlags; // Flags (DPNSPCAPS_...) + DWORD dwNumThreads; // # of worker threads to use + DWORD dwDefaultEnumCount; // default # of enum requests + DWORD dwDefaultEnumRetryInterval; // default ms between enum requests + DWORD dwDefaultEnumTimeout; // default enum timeout + DWORD dwMaxEnumPayloadSize; // maximum size in bytes for enum payload data + DWORD dwBuffersPerThread; // number of receive buffers per thread + DWORD dwSystemBufferSize; // amount of buffering to do in addition to posted receive buffers +} DPN_SP_CAPS, *PDPN_SP_CAPS; + + +/**************************************************************************** + * + * IDirectPlay8 message handler call back structures + * + ****************************************************************************/ + +// +// Add player to group structure for message handler +// (DPN_MSGID_ADD_PLAYER_TO_GROUP) +// +typedef struct _DPNMSG_ADD_PLAYER_TO_GROUP +{ + DWORD dwSize; // Size of this structure + DPNID dpnidGroup; // DPNID of group + PVOID pvGroupContext; // Group context value + DPNID dpnidPlayer; // DPNID of added player + PVOID pvPlayerContext; // Player context value +} DPNMSG_ADD_PLAYER_TO_GROUP, *PDPNMSG_ADD_PLAYER_TO_GROUP; + +// +// Async operation completion structure for message handler +// (DPN_MSGID_ASYNC_OP_COMPLETE) +// +typedef struct _DPNMSG_ASYNC_OP_COMPLETE +{ + DWORD dwSize; // Size of this structure + DPNHANDLE hAsyncOp; // DirectPlay8 async operation handle + PVOID pvUserContext; // User context supplied + HRESULT hResultCode; // HRESULT of operation +} DPNMSG_ASYNC_OP_COMPLETE, *PDPNMSG_ASYNC_OP_COMPLETE; + +// +// Client info structure for message handler +// (DPN_MSGID_CLIENT_INFO) +// +typedef struct _DPNMSG_CLIENT_INFO +{ + DWORD dwSize; // Size of this structure + DPNID dpnidClient; // DPNID of client + PVOID pvPlayerContext; // Player context value +} DPNMSG_CLIENT_INFO, *PDPNMSG_CLIENT_INFO; + +// +// Connect complete structure for message handler +// (DPN_MSGID_CONNECT_COMPLETE) +// +typedef struct _DPNMSG_CONNECT_COMPLETE +{ + DWORD dwSize; // Size of this structure + DPNHANDLE hAsyncOp; // DirectPlay8 Async operation handle + PVOID pvUserContext; // User context supplied at Connect + HRESULT hResultCode; // HRESULT of connection attempt + PVOID pvApplicationReplyData; // Connection reply data from Host/Server + DWORD dwApplicationReplyDataSize; // Size (in bytes) of pvApplicationReplyData + + // Fields added for DirectX 9 + DPNID dpnidLocal; // DPNID of local player +} DPNMSG_CONNECT_COMPLETE, *PDPNMSG_CONNECT_COMPLETE; + +// +// Create group structure for message handler +// (DPN_MSGID_CREATE_GROUP) +// +typedef struct _DPNMSG_CREATE_GROUP +{ + DWORD dwSize; // Size of this structure + DPNID dpnidGroup; // DPNID of new group + DPNID dpnidOwner; // Owner of newgroup + PVOID pvGroupContext; // Group context value + + // Fields added for DirectX 9 + PVOID pvOwnerContext; // Owner context value +} DPNMSG_CREATE_GROUP, *PDPNMSG_CREATE_GROUP; + +// +// Create player structure for message handler +// (DPN_MSGID_CREATE_PLAYER) +// +typedef struct _DPNMSG_CREATE_PLAYER +{ + DWORD dwSize; // Size of this structure + DPNID dpnidPlayer; // DPNID of new player + PVOID pvPlayerContext; // Player context value +} DPNMSG_CREATE_PLAYER, *PDPNMSG_CREATE_PLAYER; + +// +// Destroy group structure for message handler +// (DPN_MSGID_DESTROY_GROUP) +// +typedef struct _DPNMSG_DESTROY_GROUP +{ + DWORD dwSize; // Size of this structure + DPNID dpnidGroup; // DPNID of destroyed group + PVOID pvGroupContext; // Group context value + DWORD dwReason; // Information only +} DPNMSG_DESTROY_GROUP, *PDPNMSG_DESTROY_GROUP; + +// +// Destroy player structure for message handler +// (DPN_MSGID_DESTROY_PLAYER) +// +typedef struct _DPNMSG_DESTROY_PLAYER +{ + DWORD dwSize; // Size of this structure + DPNID dpnidPlayer; // DPNID of leaving player + PVOID pvPlayerContext; // Player context value + DWORD dwReason; // Information only +} DPNMSG_DESTROY_PLAYER, *PDPNMSG_DESTROY_PLAYER; + +// +// Enumeration request received structure for message handler +// (DPN_MSGID_ENUM_HOSTS_QUERY) +// +typedef struct _DPNMSG_ENUM_HOSTS_QUERY +{ + DWORD dwSize; // Size of this structure. + IDirectPlay8Address *pAddressSender; // Address of client who sent the request + IDirectPlay8Address *pAddressDevice; // Address of device request was received on + PVOID pvReceivedData; // Request data (set on client) + DWORD dwReceivedDataSize; // Request data size (set on client) + DWORD dwMaxResponseDataSize; // Max allowable size of enum response + PVOID pvResponseData; // Optional query repsonse (user set) + DWORD dwResponseDataSize; // Optional query response size (user set) + PVOID pvResponseContext; // Optional query response context (user set) +} DPNMSG_ENUM_HOSTS_QUERY, *PDPNMSG_ENUM_HOSTS_QUERY; + +// +// Enumeration response received structure for message handler +// (DPN_MSGID_ENUM_HOSTS_RESPONSE) +// +typedef struct _DPNMSG_ENUM_HOSTS_RESPONSE +{ + DWORD dwSize; // Size of this structure + IDirectPlay8Address *pAddressSender; // Address of host who responded + IDirectPlay8Address *pAddressDevice; // Device response was received on + const DPN_APPLICATION_DESC *pApplicationDescription; // Application description for the session + PVOID pvResponseData; // Optional response data (set on host) + DWORD dwResponseDataSize; // Optional response data size (set on host) + PVOID pvUserContext; // Context value supplied for enumeration + DWORD dwRoundTripLatencyMS; // Round trip latency in MS +} DPNMSG_ENUM_HOSTS_RESPONSE, *PDPNMSG_ENUM_HOSTS_RESPONSE; + +// +// Group info structure for message handler +// (DPN_MSGID_GROUP_INFO) +// +typedef struct _DPNMSG_GROUP_INFO +{ + DWORD dwSize; // Size of this structure + DPNID dpnidGroup; // DPNID of group + PVOID pvGroupContext; // Group context value +} DPNMSG_GROUP_INFO, *PDPNMSG_GROUP_INFO; + +// +// Migrate host structure for message handler +// (DPN_MSGID_HOST_MIGRATE) +// +typedef struct _DPNMSG_HOST_MIGRATE +{ + DWORD dwSize; // Size of this structure + DPNID dpnidNewHost; // DPNID of new Host player + PVOID pvPlayerContext; // Player context value +} DPNMSG_HOST_MIGRATE, *PDPNMSG_HOST_MIGRATE; + +// +// Indicate connect structure for message handler +// (DPN_MSGID_INDICATE_CONNECT) +// +typedef struct _DPNMSG_INDICATE_CONNECT +{ + DWORD dwSize; // Size of this structure + PVOID pvUserConnectData; // Connecting player data + DWORD dwUserConnectDataSize; // Size (in bytes) of pvUserConnectData + PVOID pvReplyData; // Connection reply data + DWORD dwReplyDataSize; // Size (in bytes) of pvReplyData + PVOID pvReplyContext; // Buffer context for pvReplyData + PVOID pvPlayerContext; // Player context preset + IDirectPlay8Address *pAddressPlayer; // Address of connecting player + IDirectPlay8Address *pAddressDevice; // Address of device receiving connect attempt +} DPNMSG_INDICATE_CONNECT, *PDPNMSG_INDICATE_CONNECT; + +// +// Indicated connect aborted structure for message handler +// (DPN_MSGID_INDICATED_CONNECT_ABORTED) +// +typedef struct _DPNMSG_INDICATED_CONNECT_ABORTED +{ + DWORD dwSize; // Size of this structure + PVOID pvPlayerContext; // Player context preset from DPNMSG_INDICATE_CONNECT +} DPNMSG_INDICATED_CONNECT_ABORTED, *PDPNMSG_INDICATED_CONNECT_ABORTED; + +// +// Peer info structure for message handler +// (DPN_MSGID_PEER_INFO) +// +typedef struct _DPNMSG_PEER_INFO +{ + DWORD dwSize; // Size of this structure + DPNID dpnidPeer; // DPNID of peer + PVOID pvPlayerContext; // Player context value +} DPNMSG_PEER_INFO, *PDPNMSG_PEER_INFO; + +// +// Receive structure for message handler +// (DPN_MSGID_RECEIVE) +// +typedef struct _DPNMSG_RECEIVE +{ + DWORD dwSize; // Size of this structure + DPNID dpnidSender; // DPNID of sending player + PVOID pvPlayerContext; // Player context value of sending player + PBYTE pReceiveData; // Received data + DWORD dwReceiveDataSize; // Size (in bytes) of pReceiveData + DPNHANDLE hBufferHandle; // Buffer handle for pReceiveData + + // Fields added for DirectX 9 + DWORD dwReceiveFlags; // Flags describing how message was received +} DPNMSG_RECEIVE, *PDPNMSG_RECEIVE; + +// +// Remove player from group structure for message handler +// (DPN_MSGID_REMOVE_PLAYER_FROM_GROUP) +// +typedef struct _DPNMSG_REMOVE_PLAYER_FROM_GROUP +{ + DWORD dwSize; // Size of this structure + DPNID dpnidGroup; // DPNID of group + PVOID pvGroupContext; // Group context value + DPNID dpnidPlayer; // DPNID of deleted player + PVOID pvPlayerContext; // Player context value +} DPNMSG_REMOVE_PLAYER_FROM_GROUP, *PDPNMSG_REMOVE_PLAYER_FROM_GROUP; + +// +// Returned buffer structure for message handler +// (DPN_MSGID_RETURN_BUFFER) +// +typedef struct _DPNMSG_RETURN_BUFFER +{ + DWORD dwSize; // Size of this structure + HRESULT hResultCode; // Return value of operation + PVOID pvBuffer; // Buffer being returned + PVOID pvUserContext; // Context associated with buffer +} DPNMSG_RETURN_BUFFER, *PDPNMSG_RETURN_BUFFER; + +// +// Send complete structure for message handler +// (DPN_MSGID_SEND_COMPLETE) +// +typedef struct _DPNMSG_SEND_COMPLETE +{ + DWORD dwSize; // Size of this structure + DPNHANDLE hAsyncOp; // DirectPlay8 Async operation handle + PVOID pvUserContext; // User context supplied at Send/SendTo + HRESULT hResultCode; // HRESULT of send + DWORD dwSendTime; // Send time in ms + + // Fields added for DirectX 9 + DWORD dwFirstFrameRTT; // RTT of the first frame in the message + DWORD dwFirstFrameRetryCount; // Retry count of the first frame + DWORD dwSendCompleteFlags; // Flags describing how message was sent + DPN_BUFFER_DESC *pBuffers; // Pointer to array of buffers sent, if DirectPlay did not make a copy + DWORD dwNumBuffers; // Number of buffers in previous array +} DPNMSG_SEND_COMPLETE, *PDPNMSG_SEND_COMPLETE; + +// +// Server info structure for message handler +// (DPN_MSGID_SERVER_INFO) +// +typedef struct _DPNMSG_SERVER_INFO +{ + DWORD dwSize; // Size of this structure + DPNID dpnidServer; // DPNID of server + PVOID pvPlayerContext; // Player context value +} DPNMSG_SERVER_INFO, *PDPNMSG_SERVER_INFO; + +// +// Terminated session structure for message handler +// (DPN_MSGID_TERMINATE_SESSION) +// +typedef struct _DPNMSG_TERMINATE_SESSION +{ + DWORD dwSize; // Size of this structure + HRESULT hResultCode; // Reason + PVOID pvTerminateData; // Data passed from Host/Server + DWORD dwTerminateDataSize;// Size (in bytes) of pvTerminateData +} DPNMSG_TERMINATE_SESSION, *PDPNMSG_TERMINATE_SESSION; + + +// +// Message structures added for DirectX 9 +// + +// +// Create thread info structure for message handler +// (DPN_MSGID_CREATE_THREAD) +// +typedef struct _DPNMSG_CREATE_THREAD +{ + DWORD dwSize; // Size of this structure + DWORD dwFlags; // Flags describing this thread + DWORD dwProcessorNum; // Index of processor to which thread is bound + PVOID pvUserContext; // Thread context value +} DPNMSG_CREATE_THREAD, *PDPNMSG_CREATE_THREAD; + +// +// Destroy thread info structure for message handler +// (DPN_MSGID_DESTROY_THREAD) +// +typedef struct _DPNMSG_DESTROY_THREAD +{ + DWORD dwSize; // Size of this structure + DWORD dwProcessorNum; // Index of processor to which thread was bound + PVOID pvUserContext; // Thread context value +} DPNMSG_DESTROY_THREAD, *PDPNMSG_DESTROY_THREAD; + + +// +// Query-to-resolve-NAT-address structure for message handler +// (DPN_MSGID_NAT_RESOLVER_QUERY) +// +typedef struct _DPNMSG_NAT_RESOLVER_QUERY +{ + DWORD dwSize; // Size of this structure. + IDirectPlay8Address *pAddressSender; // Address of client that sent the query + IDirectPlay8Address *pAddressDevice; // Address of device on which query was received + WCHAR *pwszUserString; // User specified string, or NULL if none +} DPNMSG_NAT_RESOLVER_QUERY, *PDPNMSG_NAT_RESOLVER_QUERY; + +/**************************************************************************** + * + * DirectPlay8 Functions + * + ****************************************************************************/ + + + +/* + * This function is no longer supported. It is recommended that CoCreateInstance be used to create + * DirectPlay8 objects. + * + * extern HRESULT WINAPI DirectPlay8Create( const CLSID * pcIID, void **ppvInterface, IUnknown *pUnknown ); + * + */ + + +/**************************************************************************** + * + * DirectPlay8 Application Interfaces + * + ****************************************************************************/ + +// +// COM definition for DirectPlay8 Client interface +// +#undef INTERFACE // External COM Implementation +#define INTERFACE IDirectPlay8Client +DECLARE_INTERFACE_(IDirectPlay8Client,IUnknown) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface) (THIS_ DP8REFIID riid, LPVOID *ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + /*** IDirectPlay8Client methods ***/ + STDMETHOD(Initialize) (THIS_ PVOID const pvUserContext, const PFNDPNMESSAGEHANDLER pfn, const DWORD dwFlags) PURE; + STDMETHOD(EnumServiceProviders) (THIS_ const GUID *const pguidServiceProvider, const GUID *const pguidApplication, DPN_SERVICE_PROVIDER_INFO *const pSPInfoBuffer, PDWORD const pcbEnumData, PDWORD const pcReturned, const DWORD dwFlags) PURE; + STDMETHOD(EnumHosts) (THIS_ PDPN_APPLICATION_DESC const pApplicationDesc,IDirectPlay8Address *const pAddrHost,IDirectPlay8Address *const pDeviceInfo,PVOID const pUserEnumData,const DWORD dwUserEnumDataSize,const DWORD dwEnumCount,const DWORD dwRetryInterval,const DWORD dwTimeOut,PVOID const pvUserContext,DPNHANDLE *const pAsyncHandle,const DWORD dwFlags) PURE; + STDMETHOD(CancelAsyncOperation) (THIS_ const DPNHANDLE hAsyncHandle, const DWORD dwFlags) PURE; + STDMETHOD(Connect) (THIS_ const DPN_APPLICATION_DESC *const pdnAppDesc,IDirectPlay8Address *const pHostAddr,IDirectPlay8Address *const pDeviceInfo,const DPN_SECURITY_DESC *const pdnSecurity,const DPN_SECURITY_CREDENTIALS *const pdnCredentials,const void *const pvUserConnectData,const DWORD dwUserConnectDataSize,void *const pvAsyncContext,DPNHANDLE *const phAsyncHandle,const DWORD dwFlags) PURE; + STDMETHOD(Send) (THIS_ const DPN_BUFFER_DESC *const prgBufferDesc,const DWORD cBufferDesc,const DWORD dwTimeOut,void *const pvAsyncContext,DPNHANDLE *const phAsyncHandle,const DWORD dwFlags) PURE; + STDMETHOD(GetSendQueueInfo) (THIS_ DWORD *const pdwNumMsgs, DWORD *const pdwNumBytes, const DWORD dwFlags) PURE; + STDMETHOD(GetApplicationDesc) (THIS_ DPN_APPLICATION_DESC *const pAppDescBuffer, DWORD *const pcbDataSize, const DWORD dwFlags) PURE; + STDMETHOD(SetClientInfo) (THIS_ const DPN_PLAYER_INFO *const pdpnPlayerInfo,PVOID const pvAsyncContext,DPNHANDLE *const phAsyncHandle, const DWORD dwFlags) PURE; + STDMETHOD(GetServerInfo) (THIS_ DPN_PLAYER_INFO *const pdpnPlayerInfo,DWORD *const pdwSize,const DWORD dwFlags) PURE; + STDMETHOD(GetServerAddress) (THIS_ IDirectPlay8Address **const pAddress,const DWORD dwFlags) PURE; + STDMETHOD(Close) (THIS_ const DWORD dwFlags) PURE; + STDMETHOD(ReturnBuffer) (THIS_ const DPNHANDLE hBufferHandle,const DWORD dwFlags) PURE; + STDMETHOD(GetCaps) (THIS_ DPN_CAPS *const pdpCaps,const DWORD dwFlags) PURE; + STDMETHOD(SetCaps) (THIS_ const DPN_CAPS *const pdpCaps, const DWORD dwFlags) PURE; + STDMETHOD(SetSPCaps) (THIS_ const GUID * const pguidSP, const DPN_SP_CAPS *const pdpspCaps, const DWORD dwFlags ) PURE; + STDMETHOD(GetSPCaps) (THIS_ const GUID * const pguidSP,DPN_SP_CAPS *const pdpspCaps,const DWORD dwFlags) PURE; + STDMETHOD(GetConnectionInfo) (THIS_ DPN_CONNECTION_INFO *const pdpConnectionInfo,const DWORD dwFlags) PURE; + STDMETHOD(RegisterLobby) (THIS_ const DPNHANDLE dpnHandle, struct IDirectPlay8LobbiedApplication *const pIDP8LobbiedApplication,const DWORD dwFlags) PURE; +}; + +// +// COM definition for DirectPlay8 Server interface +// +#undef INTERFACE // External COM Implementation +#define INTERFACE IDirectPlay8Server +DECLARE_INTERFACE_(IDirectPlay8Server,IUnknown) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface) (THIS_ DP8REFIID riid, LPVOID *ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + /*** IDirectPlay8Server methods ***/ + STDMETHOD(Initialize) (THIS_ PVOID const pvUserContext, const PFNDPNMESSAGEHANDLER pfn, const DWORD dwFlags) PURE; + STDMETHOD(EnumServiceProviders) (THIS_ const GUID *const pguidServiceProvider,const GUID *const pguidApplication,DPN_SERVICE_PROVIDER_INFO *const pSPInfoBuffer,PDWORD const pcbEnumData,PDWORD const pcReturned,const DWORD dwFlags) PURE; + STDMETHOD(CancelAsyncOperation) (THIS_ const DPNHANDLE hAsyncHandle,const DWORD dwFlags) PURE; + STDMETHOD(GetSendQueueInfo) (THIS_ const DPNID dpnid,DWORD *const pdwNumMsgs, DWORD *const pdwNumBytes, const DWORD dwFlags) PURE; + STDMETHOD(GetApplicationDesc) (THIS_ DPN_APPLICATION_DESC *const pAppDescBuffer, DWORD *const pcbDataSize, const DWORD dwFlags) PURE; + STDMETHOD(SetServerInfo) (THIS_ const DPN_PLAYER_INFO *const pdpnPlayerInfo,PVOID const pvAsyncContext, DPNHANDLE *const phAsyncHandle, const DWORD dwFlags) PURE; + STDMETHOD(GetClientInfo) (THIS_ const DPNID dpnid,DPN_PLAYER_INFO *const pdpnPlayerInfo,DWORD *const pdwSize,const DWORD dwFlags) PURE; + STDMETHOD(GetClientAddress) (THIS_ const DPNID dpnid,IDirectPlay8Address **const pAddress,const DWORD dwFlags) PURE; + STDMETHOD(GetLocalHostAddresses) (THIS_ IDirectPlay8Address **const prgpAddress,DWORD *const pcAddress,const DWORD dwFlags) PURE; + STDMETHOD(SetApplicationDesc) (THIS_ const DPN_APPLICATION_DESC *const pad, const DWORD dwFlags) PURE; + STDMETHOD(Host) (THIS_ const DPN_APPLICATION_DESC *const pdnAppDesc,IDirectPlay8Address **const prgpDeviceInfo,const DWORD cDeviceInfo,const DPN_SECURITY_DESC *const pdnSecurity,const DPN_SECURITY_CREDENTIALS *const pdnCredentials,void *const pvPlayerContext,const DWORD dwFlags) PURE; + STDMETHOD(SendTo) (THIS_ const DPNID dpnid,const DPN_BUFFER_DESC *const prgBufferDesc,const DWORD cBufferDesc,const DWORD dwTimeOut,void *const pvAsyncContext,DPNHANDLE *const phAsyncHandle,const DWORD dwFlags) PURE; + STDMETHOD(CreateGroup) (THIS_ const DPN_GROUP_INFO *const pdpnGroupInfo,void *const pvGroupContext,void *const pvAsyncContext,DPNHANDLE *const phAsyncHandle,const DWORD dwFlags) PURE; + STDMETHOD(DestroyGroup) (THIS_ const DPNID idGroup, PVOID const pvAsyncContext, DPNHANDLE *const phAsyncHandle, const DWORD dwFlags) PURE; + STDMETHOD(AddPlayerToGroup) (THIS_ const DPNID idGroup, const DPNID idClient, PVOID const pvAsyncContext, DPNHANDLE *const phAsyncHandle, const DWORD dwFlags) PURE; + STDMETHOD(RemovePlayerFromGroup) (THIS_ const DPNID idGroup, const DPNID idClient, PVOID const pvAsyncContext, DPNHANDLE *const phAsyncHandle, const DWORD dwFlags) PURE; + STDMETHOD(SetGroupInfo) (THIS_ const DPNID dpnid,DPN_GROUP_INFO *const pdpnGroupInfo,PVOID const pvAsyncContext,DPNHANDLE *const phAsyncHandle, const DWORD dwFlags) PURE; + STDMETHOD(GetGroupInfo) (THIS_ const DPNID dpnid,DPN_GROUP_INFO *const pdpnGroupInfo,DWORD *const pdwSize,const DWORD dwFlags) PURE; + STDMETHOD(EnumPlayersAndGroups) (THIS_ DPNID *const prgdpnid, DWORD *const pcdpnid, const DWORD dwFlags) PURE; + STDMETHOD(EnumGroupMembers) (THIS_ const DPNID dpnid, DPNID *const prgdpnid, DWORD *const pcdpnid, const DWORD dwFlags) PURE; + STDMETHOD(Close) (THIS_ const DWORD dwFlags) PURE; + STDMETHOD(DestroyClient) (THIS_ const DPNID dpnidClient, const void *const pvDestroyData, const DWORD dwDestroyDataSize, const DWORD dwFlags) PURE; + STDMETHOD(ReturnBuffer) (THIS_ const DPNHANDLE hBufferHandle,const DWORD dwFlags) PURE; + STDMETHOD(GetPlayerContext) (THIS_ const DPNID dpnid,PVOID *const ppvPlayerContext,const DWORD dwFlags) PURE; + STDMETHOD(GetGroupContext) (THIS_ const DPNID dpnid,PVOID *const ppvGroupContext,const DWORD dwFlags) PURE; + STDMETHOD(GetCaps) (THIS_ DPN_CAPS *const pdpCaps,const DWORD dwFlags) PURE; + STDMETHOD(SetCaps) (THIS_ const DPN_CAPS *const pdpCaps, const DWORD dwFlags) PURE; + STDMETHOD(SetSPCaps) (THIS_ const GUID * const pguidSP, const DPN_SP_CAPS *const pdpspCaps, const DWORD dwFlags ) PURE; + STDMETHOD(GetSPCaps) (THIS_ const GUID * const pguidSP, DPN_SP_CAPS *const pdpspCaps,const DWORD dwFlags) PURE; + STDMETHOD(GetConnectionInfo) (THIS_ const DPNID dpnid, DPN_CONNECTION_INFO *const pdpConnectionInfo,const DWORD dwFlags) PURE; + STDMETHOD(RegisterLobby) (THIS_ const DPNHANDLE dpnHandle, struct IDirectPlay8LobbiedApplication *const pIDP8LobbiedApplication,const DWORD dwFlags) PURE; +}; + +// +// COM definition for DirectPlay8 Peer interface +// +#undef INTERFACE // External COM Implementation +#define INTERFACE IDirectPlay8Peer +DECLARE_INTERFACE_(IDirectPlay8Peer,IUnknown) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface) (THIS_ DP8REFIID riid, LPVOID *ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + /*** IDirectPlay8Peer methods ***/ + STDMETHOD(Initialize) (THIS_ PVOID const pvUserContext, const PFNDPNMESSAGEHANDLER pfn, const DWORD dwFlags) PURE; + STDMETHOD(EnumServiceProviders) (THIS_ const GUID *const pguidServiceProvider, const GUID *const pguidApplication, DPN_SERVICE_PROVIDER_INFO *const pSPInfoBuffer, DWORD *const pcbEnumData, DWORD *const pcReturned, const DWORD dwFlags) PURE; + STDMETHOD(CancelAsyncOperation) (THIS_ const DPNHANDLE hAsyncHandle, const DWORD dwFlags) PURE; + STDMETHOD(Connect) (THIS_ const DPN_APPLICATION_DESC *const pdnAppDesc,IDirectPlay8Address *const pHostAddr,IDirectPlay8Address *const pDeviceInfo,const DPN_SECURITY_DESC *const pdnSecurity,const DPN_SECURITY_CREDENTIALS *const pdnCredentials,const void *const pvUserConnectData,const DWORD dwUserConnectDataSize,void *const pvPlayerContext,void *const pvAsyncContext,DPNHANDLE *const phAsyncHandle,const DWORD dwFlags) PURE; + STDMETHOD(SendTo) (THIS_ const DPNID dpnid,const DPN_BUFFER_DESC *const prgBufferDesc,const DWORD cBufferDesc,const DWORD dwTimeOut,void *const pvAsyncContext,DPNHANDLE *const phAsyncHandle,const DWORD dwFlags) PURE; + STDMETHOD(GetSendQueueInfo) (THIS_ const DPNID dpnid, DWORD *const pdwNumMsgs, DWORD *const pdwNumBytes, const DWORD dwFlags) PURE; + STDMETHOD(Host) (THIS_ const DPN_APPLICATION_DESC *const pdnAppDesc,IDirectPlay8Address **const prgpDeviceInfo,const DWORD cDeviceInfo,const DPN_SECURITY_DESC *const pdnSecurity,const DPN_SECURITY_CREDENTIALS *const pdnCredentials,void *const pvPlayerContext,const DWORD dwFlags) PURE; + STDMETHOD(GetApplicationDesc) (THIS_ DPN_APPLICATION_DESC *const pAppDescBuffer, DWORD *const pcbDataSize, const DWORD dwFlags) PURE; + STDMETHOD(SetApplicationDesc) (THIS_ const DPN_APPLICATION_DESC *const pad, const DWORD dwFlags) PURE; + STDMETHOD(CreateGroup) (THIS_ const DPN_GROUP_INFO *const pdpnGroupInfo,void *const pvGroupContext,void *const pvAsyncContext,DPNHANDLE *const phAsyncHandle,const DWORD dwFlags) PURE; + STDMETHOD(DestroyGroup) (THIS_ const DPNID idGroup, PVOID const pvAsyncContext, DPNHANDLE *const phAsyncHandle, const DWORD dwFlags) PURE; + STDMETHOD(AddPlayerToGroup) (THIS_ const DPNID idGroup, const DPNID idClient, PVOID const pvAsyncContext, DPNHANDLE *const phAsyncHandle, const DWORD dwFlags) PURE; + STDMETHOD(RemovePlayerFromGroup) (THIS_ const DPNID idGroup, const DPNID idClient, PVOID const pvAsyncContext, DPNHANDLE *const phAsyncHandle, const DWORD dwFlags) PURE; + STDMETHOD(SetGroupInfo) (THIS_ const DPNID dpnid,DPN_GROUP_INFO *const pdpnGroupInfo,PVOID const pvAsyncContext,DPNHANDLE *const phAsyncHandle, const DWORD dwFlags) PURE; + STDMETHOD(GetGroupInfo) (THIS_ const DPNID dpnid,DPN_GROUP_INFO *const pdpnGroupInfo,DWORD *const pdwSize,const DWORD dwFlags) PURE; + STDMETHOD(EnumPlayersAndGroups) (THIS_ DPNID *const prgdpnid, DWORD *const pcdpnid, const DWORD dwFlags) PURE; + STDMETHOD(EnumGroupMembers) (THIS_ const DPNID dpnid, DPNID *const prgdpnid, DWORD *const pcdpnid, const DWORD dwFlags) PURE; + STDMETHOD(SetPeerInfo) (THIS_ const DPN_PLAYER_INFO *const pdpnPlayerInfo,PVOID const pvAsyncContext,DPNHANDLE *const phAsyncHandle, const DWORD dwFlags) PURE; + STDMETHOD(GetPeerInfo) (THIS_ const DPNID dpnid,DPN_PLAYER_INFO *const pdpnPlayerInfo,DWORD *const pdwSize,const DWORD dwFlags) PURE; + STDMETHOD(GetPeerAddress) (THIS_ const DPNID dpnid,IDirectPlay8Address **const ppAddress,const DWORD dwFlags) PURE; + STDMETHOD(GetLocalHostAddresses) (THIS_ IDirectPlay8Address **const prgpAddress,DWORD *const pcAddress,const DWORD dwFlags) PURE; + STDMETHOD(Close) (THIS_ const DWORD dwFlags) PURE; + STDMETHOD(EnumHosts) (THIS_ PDPN_APPLICATION_DESC const pApplicationDesc,IDirectPlay8Address *const pAddrHost,IDirectPlay8Address *const pDeviceInfo,PVOID const pUserEnumData,const DWORD dwUserEnumDataSize,const DWORD dwEnumCount,const DWORD dwRetryInterval,const DWORD dwTimeOut,PVOID const pvUserContext,DPNHANDLE *const pAsyncHandle,const DWORD dwFlags) PURE; + STDMETHOD(DestroyPeer) (THIS_ const DPNID dpnidClient, const void *const pvDestroyData, const DWORD dwDestroyDataSize, const DWORD dwFlags) PURE; + STDMETHOD(ReturnBuffer) (THIS_ const DPNHANDLE hBufferHandle,const DWORD dwFlags) PURE; + STDMETHOD(GetPlayerContext) (THIS_ const DPNID dpnid,PVOID *const ppvPlayerContext,const DWORD dwFlags) PURE; + STDMETHOD(GetGroupContext) (THIS_ const DPNID dpnid,PVOID *const ppvGroupContext,const DWORD dwFlags) PURE; + STDMETHOD(GetCaps) (THIS_ DPN_CAPS *const pdpCaps,const DWORD dwFlags) PURE; + STDMETHOD(SetCaps) (THIS_ const DPN_CAPS *const pdpCaps, const DWORD dwFlags) PURE; + STDMETHOD(SetSPCaps) (THIS_ const GUID * const pguidSP, const DPN_SP_CAPS *const pdpspCaps, const DWORD dwFlags ) PURE; + STDMETHOD(GetSPCaps) (THIS_ const GUID * const pguidSP, DPN_SP_CAPS *const pdpspCaps,const DWORD dwFlags) PURE; + STDMETHOD(GetConnectionInfo) (THIS_ const DPNID dpnid, DPN_CONNECTION_INFO *const pdpConnectionInfo,const DWORD dwFlags) PURE; + STDMETHOD(RegisterLobby) (THIS_ const DPNHANDLE dpnHandle, struct IDirectPlay8LobbiedApplication *const pIDP8LobbiedApplication,const DWORD dwFlags) PURE; + STDMETHOD(TerminateSession) (THIS_ void *const pvTerminateData,const DWORD dwTerminateDataSize,const DWORD dwFlags) PURE; +}; + + + +// +// COM definition for DirectPlay8 Thread Pool interface +// +#undef INTERFACE // External COM Implementation +#define INTERFACE IDirectPlay8ThreadPool +DECLARE_INTERFACE_(IDirectPlay8ThreadPool,IUnknown) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface) (THIS_ DP8REFIID riid, LPVOID *ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + /*** IDirectPlay8ThreadPool methods ***/ + STDMETHOD(Initialize) (THIS_ PVOID const pvUserContext, const PFNDPNMESSAGEHANDLER pfn, const DWORD dwFlags) PURE; + STDMETHOD(Close) (THIS_ const DWORD dwFlags) PURE; + STDMETHOD(GetThreadCount) (THIS_ const DWORD dwProcessorNum, DWORD *const pdwNumThreads, const DWORD dwFlags) PURE; + STDMETHOD(SetThreadCount) (THIS_ const DWORD dwProcessorNum, const DWORD dwNumThreads, const DWORD dwFlags) PURE; + STDMETHOD(DoWork) (THIS_ const DWORD dwAllowedTimeSlice, const DWORD dwFlags) PURE; +}; + + +// +// COM definition for DirectPlay8 NAT Resolver interface +// +#undef INTERFACE // External COM Implementation +#define INTERFACE IDirectPlay8NATResolver +DECLARE_INTERFACE_(IDirectPlay8NATResolver,IUnknown) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface) (THIS_ DP8REFIID riid, LPVOID *ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + /*** IDirectPlay8NATResolver methods ***/ + STDMETHOD(Initialize) (THIS_ PVOID const pvUserContext, const PFNDPNMESSAGEHANDLER pfn, const DWORD dwFlags) PURE; + STDMETHOD(Start) (THIS_ IDirectPlay8Address **const ppDevices, const DWORD dwNumDevices, const DWORD dwFlags) PURE; + STDMETHOD(Close) (THIS_ const DWORD dwFlags) PURE; + STDMETHOD(EnumDevices) (THIS_ DPN_SERVICE_PROVIDER_INFO *const pSPInfoBuffer, PDWORD const pdwBufferSize, PDWORD const pdwNumDevices, const DWORD dwFlags) PURE; + STDMETHOD(GetAddresses) (THIS_ IDirectPlay8Address **const ppAddresses, DWORD *const pdwNumAddresses, const DWORD dwFlags) PURE; +}; + + +/**************************************************************************** + * + * IDirectPlay8 application interface macros + * + ****************************************************************************/ + +#if !defined(__cplusplus) || defined(CINTERFACE) + +#define IDirectPlay8Client_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirectPlay8Client_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectPlay8Client_Release(p) (p)->lpVtbl->Release(p) +#define IDirectPlay8Client_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c) +#define IDirectPlay8Client_EnumServiceProviders(p,a,b,c,d,e,f) (p)->lpVtbl->EnumServiceProviders(p,a,b,c,d,e,f) +#define IDirectPlay8Client_EnumHosts(p,a,b,c,d,e,f,g,h,i,j,k) (p)->lpVtbl->EnumHosts(p,a,b,c,d,e,f,g,h,i,j,k) +#define IDirectPlay8Client_CancelAsyncOperation(p,a,b) (p)->lpVtbl->CancelAsyncOperation(p,a,b) +#define IDirectPlay8Client_Connect(p,a,b,c,d,e,f,g,h,i,j) (p)->lpVtbl->Connect(p,a,b,c,d,e,f,g,h,i,j) +#define IDirectPlay8Client_Send(p,a,b,c,d,e,f) (p)->lpVtbl->Send(p,a,b,c,d,e,f) +#define IDirectPlay8Client_GetSendQueueInfo(p,a,b,c) (p)->lpVtbl->GetSendQueueInfo(p,a,b,c) +#define IDirectPlay8Client_GetApplicationDesc(p,a,b,c) (p)->lpVtbl->GetApplicationDesc(p,a,b,c) +#define IDirectPlay8Client_SetClientInfo(p,a,b,c,d) (p)->lpVtbl->SetClientInfo(p,a,b,c,d) +#define IDirectPlay8Client_GetServerInfo(p,a,b,c) (p)->lpVtbl->GetServerInfo(p,a,b,c) +#define IDirectPlay8Client_GetServerAddress(p,a,b) (p)->lpVtbl->GetServerAddress(p,a,b) +#define IDirectPlay8Client_Close(p,a) (p)->lpVtbl->Close(p,a) +#define IDirectPlay8Client_ReturnBuffer(p,a,b) (p)->lpVtbl->ReturnBuffer(p,a,b) +#define IDirectPlay8Client_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b) +#define IDirectPlay8Client_SetCaps(p,a,b) (p)->lpVtbl->SetCaps(p,a,b) +#define IDirectPlay8Client_SetSPCaps(p,a,b,c) (p)->lpVtbl->SetSPCaps(p,a,b,c) +#define IDirectPlay8Client_GetSPCaps(p,a,b,c) (p)->lpVtbl->GetSPCaps(p,a,b,c) +#define IDirectPlay8Client_GetConnectionInfo(p,a,b) (p)->lpVtbl->GetConnectionInfo(p,a,b) +#define IDirectPlay8Client_RegisterLobby(p,a,b,c) (p)->lpVtbl->RegisterLobby(p,a,b,c) + +#define IDirectPlay8Server_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirectPlay8Server_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectPlay8Server_Release(p) (p)->lpVtbl->Release(p) +#define IDirectPlay8Server_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c) +#define IDirectPlay8Server_EnumServiceProviders(p,a,b,c,d,e,f) (p)->lpVtbl->EnumServiceProviders(p,a,b,c,d,e,f) +#define IDirectPlay8Server_CancelAsyncOperation(p,a,b) (p)->lpVtbl->CancelAsyncOperation(p,a,b) +#define IDirectPlay8Server_GetSendQueueInfo(p,a,b,c,d) (p)->lpVtbl->GetSendQueueInfo(p,a,b,c,d) +#define IDirectPlay8Server_GetApplicationDesc(p,a,b,c) (p)->lpVtbl->GetApplicationDesc(p,a,b,c) +#define IDirectPlay8Server_SetServerInfo(p,a,b,c,d) (p)->lpVtbl->SetServerInfo(p,a,b,c,d) +#define IDirectPlay8Server_GetClientInfo(p,a,b,c,d) (p)->lpVtbl->GetClientInfo(p,a,b,c,d) +#define IDirectPlay8Server_GetClientAddress(p,a,b,c) (p)->lpVtbl->GetClientAddress(p,a,b,c) +#define IDirectPlay8Server_GetLocalHostAddresses(p,a,b,c) (p)->lpVtbl->GetLocalHostAddresses(p,a,b,c) +#define IDirectPlay8Server_SetApplicationDesc(p,a,b) (p)->lpVtbl->SetApplicationDesc(p,a,b) +#define IDirectPlay8Server_Host(p,a,b,c,d,e,f,g) (p)->lpVtbl->Host(p,a,b,c,d,e,f,g) +#define IDirectPlay8Server_SendTo(p,a,b,c,d,e,f,g) (p)->lpVtbl->SendTo(p,a,b,c,d,e,f,g) +#define IDirectPlay8Server_CreateGroup(p,a,b,c,d,e) (p)->lpVtbl->CreateGroup(p,a,b,c,d,e) +#define IDirectPlay8Server_DestroyGroup(p,a,b,c,d) (p)->lpVtbl->DestroyGroup(p,a,b,c,d) +#define IDirectPlay8Server_AddPlayerToGroup(p,a,b,c,d,e) (p)->lpVtbl->AddPlayerToGroup(p,a,b,c,d,e) +#define IDirectPlay8Server_RemovePlayerFromGroup(p,a,b,c,d,e) (p)->lpVtbl->RemovePlayerFromGroup(p,a,b,c,d,e) +#define IDirectPlay8Server_SetGroupInfo(p,a,b,c,d,e) (p)->lpVtbl->SetGroupInfo(p,a,b,c,d,e) +#define IDirectPlay8Server_GetGroupInfo(p,a,b,c,d) (p)->lpVtbl->GetGroupInfo(p,a,b,c,d) +#define IDirectPlay8Server_EnumPlayersAndGroups(p,a,b,c) (p)->lpVtbl->EnumPlayersAndGroups(p,a,b,c) +#define IDirectPlay8Server_EnumGroupMembers(p,a,b,c,d) (p)->lpVtbl->EnumGroupMembers(p,a,b,c,d) +#define IDirectPlay8Server_Close(p,a) (p)->lpVtbl->Close(p,a) +#define IDirectPlay8Server_DestroyClient(p,a,b,c,d) (p)->lpVtbl->DestroyClient(p,a,b,c,d) +#define IDirectPlay8Server_ReturnBuffer(p,a,b) (p)->lpVtbl->ReturnBuffer(p,a,b) +#define IDirectPlay8Server_GetPlayerContext(p,a,b,c) (p)->lpVtbl->GetPlayerContext(p,a,b,c) +#define IDirectPlay8Server_GetGroupContext(p,a,b,c) (p)->lpVtbl->GetGroupContext(p,a,b,c) +#define IDirectPlay8Server_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b) +#define IDirectPlay8Server_SetCaps(p,a,b) (p)->lpVtbl->SetCaps(p,a,b) +#define IDirectPlay8Server_SetSPCaps(p,a,b,c) (p)->lpVtbl->SetSPCaps(p,a,b,c) +#define IDirectPlay8Server_GetSPCaps(p,a,b,c) (p)->lpVtbl->GetSPCaps(p,a,b,c) +#define IDirectPlay8Server_GetConnectionInfo(p,a,b,c) (p)->lpVtbl->GetConnectionInfo(p,a,b,c) +#define IDirectPlay8Server_RegisterLobby(p,a,b,c) (p)->lpVtbl->RegisterLobby(p,a,b,c) + +#define IDirectPlay8Peer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirectPlay8Peer_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectPlay8Peer_Release(p) (p)->lpVtbl->Release(p) +#define IDirectPlay8Peer_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c) +#define IDirectPlay8Peer_EnumServiceProviders(p,a,b,c,d,e,f) (p)->lpVtbl->EnumServiceProviders(p,a,b,c,d,e,f) +#define IDirectPlay8Peer_CancelAsyncOperation(p,a,b) (p)->lpVtbl->CancelAsyncOperation(p,a,b) +#define IDirectPlay8Peer_Connect(p,a,b,c,d,e,f,g,h,i,j,k) (p)->lpVtbl->Connect(p,a,b,c,d,e,f,g,h,i,j,k) +#define IDirectPlay8Peer_SendTo(p,a,b,c,d,e,f,g) (p)->lpVtbl->SendTo(p,a,b,c,d,e,f,g) +#define IDirectPlay8Peer_GetSendQueueInfo(p,a,b,c,d) (p)->lpVtbl->GetSendQueueInfo(p,a,b,c,d) +#define IDirectPlay8Peer_Host(p,a,b,c,d,e,f,g) (p)->lpVtbl->Host(p,a,b,c,d,e,f,g) +#define IDirectPlay8Peer_GetApplicationDesc(p,a,b,c) (p)->lpVtbl->GetApplicationDesc(p,a,b,c) +#define IDirectPlay8Peer_SetApplicationDesc(p,a,b) (p)->lpVtbl->SetApplicationDesc(p,a,b) +#define IDirectPlay8Peer_CreateGroup(p,a,b,c,d,e) (p)->lpVtbl->CreateGroup(p,a,b,c,d,e) +#define IDirectPlay8Peer_DestroyGroup(p,a,b,c,d) (p)->lpVtbl->DestroyGroup(p,a,b,c,d) +#define IDirectPlay8Peer_AddPlayerToGroup(p,a,b,c,d,e) (p)->lpVtbl->AddPlayerToGroup(p,a,b,c,d,e) +#define IDirectPlay8Peer_RemovePlayerFromGroup(p,a,b,c,d,e) (p)->lpVtbl->RemovePlayerFromGroup(p,a,b,c,d,e) +#define IDirectPlay8Peer_SetGroupInfo(p,a,b,c,d,e) (p)->lpVtbl->SetGroupInfo(p,a,b,c,d,e) +#define IDirectPlay8Peer_GetGroupInfo(p,a,b,c,d) (p)->lpVtbl->GetGroupInfo(p,a,b,c,d) +#define IDirectPlay8Peer_EnumPlayersAndGroups(p,a,b,c) (p)->lpVtbl->EnumPlayersAndGroups(p,a,b,c) +#define IDirectPlay8Peer_EnumGroupMembers(p,a,b,c,d) (p)->lpVtbl->EnumGroupMembers(p,a,b,c,d) +#define IDirectPlay8Peer_SetPeerInfo(p,a,b,c,d) (p)->lpVtbl->SetPeerInfo(p,a,b,c,d) +#define IDirectPlay8Peer_GetPeerInfo(p,a,b,c,d) (p)->lpVtbl->GetPeerInfo(p,a,b,c,d) +#define IDirectPlay8Peer_GetPeerAddress(p,a,b,c) (p)->lpVtbl->GetPeerAddress(p,a,b,c) +#define IDirectPlay8Peer_GetLocalHostAddresses(p,a,b,c) (p)->lpVtbl->GetLocalHostAddresses(p,a,b,c) +#define IDirectPlay8Peer_Close(p,a) (p)->lpVtbl->Close(p,a) +#define IDirectPlay8Peer_EnumHosts(p,a,b,c,d,e,f,g,h,i,j,k) (p)->lpVtbl->EnumHosts(p,a,b,c,d,e,f,g,h,i,j,k) +#define IDirectPlay8Peer_DestroyPeer(p,a,b,c,d) (p)->lpVtbl->DestroyPeer(p,a,b,c,d) +#define IDirectPlay8Peer_ReturnBuffer(p,a,b) (p)->lpVtbl->ReturnBuffer(p,a,b) +#define IDirectPlay8Peer_GetPlayerContext(p,a,b,c) (p)->lpVtbl->GetPlayerContext(p,a,b,c) +#define IDirectPlay8Peer_GetGroupContext(p,a,b,c) (p)->lpVtbl->GetGroupContext(p,a,b,c) +#define IDirectPlay8Peer_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b) +#define IDirectPlay8Peer_SetCaps(p,a,b) (p)->lpVtbl->SetCaps(p,a,b) +#define IDirectPlay8Peer_SetSPCaps(p,a,b,c) (p)->lpVtbl->SetSPCaps(p,a,b,c) +#define IDirectPlay8Peer_GetSPCaps(p,a,b,c) (p)->lpVtbl->GetSPCaps(p,a,b,c) +#define IDirectPlay8Peer_GetConnectionInfo(p,a,b,c) (p)->lpVtbl->GetConnectionInfo(p,a,b,c) +#define IDirectPlay8Peer_RegisterLobby(p,a,b,c) (p)->lpVtbl->RegisterLobby(p,a,b,c) +#define IDirectPlay8Peer_TerminateSession(p,a,b,c) (p)->lpVtbl->TerminateSession(p,a,b,c) + +#define IDirectPlay8ThreadPool_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirectPlay8ThreadPool_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectPlay8ThreadPool_Release(p) (p)->lpVtbl->Release(p) +#define IDirectPlay8ThreadPool_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c) +#define IDirectPlay8ThreadPool_Close(p,a) (p)->lpVtbl->Close(p,a) +#define IDirectPlay8ThreadPool_GetThreadCount(p,a,b,c) (p)->lpVtbl->GetThreadCount(p,a,b,c) +#define IDirectPlay8ThreadPool_SetThreadCount(p,a,b,c) (p)->lpVtbl->SetThreadCount(p,a,b,c) +#define IDirectPlay8ThreadPool_DoWork(p,a,b) (p)->lpVtbl->DoWork(p,a,b) + +#define IDirectPlay8NATResolver_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirectPlay8NATResolver_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectPlay8NATResolver_Release(p) (p)->lpVtbl->Release(p) +#define IDirectPlay8NATResolver_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c) +#define IDirectPlay8NATResolver_Start(p,a,b,c) (p)->lpVtbl->Start(p,a,b,c) +#define IDirectPlay8NATResolver_Close(p,a) (p)->lpVtbl->Close(p,a) +#define IDirectPlay8NATResolver_EnumDevices(p,a,b,c,d) (p)->lpVtbl->EnumDevices(p,a,b,c,d) +#define IDirectPlay8NATResolver_GetAddresses(p,a,b,c) (p)->lpVtbl->GetAddresses(p,a,b,c) + +#else /* C++ */ + +#define IDirectPlay8Client_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirectPlay8Client_AddRef(p) (p)->AddRef() +#define IDirectPlay8Client_Release(p) (p)->Release() +#define IDirectPlay8Client_Initialize(p,a,b,c) (p)->Initialize(a,b,c) +#define IDirectPlay8Client_EnumServiceProviders(p,a,b,c,d,e,f) (p)->EnumServiceProviders(a,b,c,d,e,f) +#define IDirectPlay8Client_EnumHosts(p,a,b,c,d,e,f,g,h,i,j,k) (p)->EnumHosts(a,b,c,d,e,f,g,h,i,j,k) +#define IDirectPlay8Client_CancelAsyncOperation(p,a,b) (p)->CancelAsyncOperation(a,b) +#define IDirectPlay8Client_Connect(p,a,b,c,d,e,f,g,h,i,j) (p)->Connect(a,b,c,d,e,f,g,h,i,j) +#define IDirectPlay8Client_Send(p,a,b,c,d,e,f) (p)->Send(a,b,c,d,e,f) +#define IDirectPlay8Client_GetSendQueueInfo(p,a,b,c) (p)->GetSendQueueInfo(a,b,c) +#define IDirectPlay8Client_GetApplicationDesc(p,a,b,c) (p)->GetApplicationDesc(a,b,c) +#define IDirectPlay8Client_SetClientInfo(p,a,b,c,d) (p)->SetClientInfo(a,b,c,d) +#define IDirectPlay8Client_GetServerInfo(p,a,b,c) (p)->GetServerInfo(a,b,c) +#define IDirectPlay8Client_GetServerAddress(p,a,b) (p)->GetServerAddress(a,b) +#define IDirectPlay8Client_Close(p,a) (p)->Close(a) +#define IDirectPlay8Client_ReturnBuffer(p,a,b) (p)->ReturnBuffer(a,b) +#define IDirectPlay8Client_GetCaps(p,a,b) (p)->GetCaps(a,b) +#define IDirectPlay8Client_SetCaps(p,a,b) (p)->SetCaps(a,b) +#define IDirectPlay8Client_SetSPCaps(p,a,b,c) (p)->SetSPCaps(a,b,c) +#define IDirectPlay8Client_GetSPCaps(p,a,b,c) (p)->GetSPCaps(a,b,c) +#define IDirectPlay8Client_GetConnectionInfo(p,a,b) (p)->GetConnectionInfo(a,b) +#define IDirectPlay8Client_RegisterLobby(p,a,b,c) (p)->RegisterLobby(a,b,c) + +#define IDirectPlay8Server_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirectPlay8Server_AddRef(p) (p)->AddRef() +#define IDirectPlay8Server_Release(p) (p)->Release() +#define IDirectPlay8Server_Initialize(p,a,b,c) (p)->Initialize(a,b,c) +#define IDirectPlay8Server_EnumServiceProviders(p,a,b,c,d,e,f) (p)->EnumServiceProviders(a,b,c,d,e,f) +#define IDirectPlay8Server_CancelAsyncOperation(p,a,b) (p)->CancelAsyncOperation(a,b) +#define IDirectPlay8Server_GetSendQueueInfo(p,a,b,c,d) (p)->GetSendQueueInfo(a,b,c,d) +#define IDirectPlay8Server_GetApplicationDesc(p,a,b,c) (p)->GetApplicationDesc(a,b,c) +#define IDirectPlay8Server_SetServerInfo(p,a,b,c,d) (p)->SetServerInfo(a,b,c,d) +#define IDirectPlay8Server_GetClientInfo(p,a,b,c,d) (p)->GetClientInfo(a,b,c,d) +#define IDirectPlay8Server_GetClientAddress(p,a,b,c) (p)->GetClientAddress(a,b,c) +#define IDirectPlay8Server_GetLocalHostAddresses(p,a,b,c) (p)->GetLocalHostAddresses(a,b,c) +#define IDirectPlay8Server_SetApplicationDesc(p,a,b) (p)->SetApplicationDesc(a,b) +#define IDirectPlay8Server_Host(p,a,b,c,d,e,f,g) (p)->Host(a,b,c,d,e,f,g) +#define IDirectPlay8Server_SendTo(p,a,b,c,d,e,f,g) (p)->SendTo(a,b,c,d,e,f,g) +#define IDirectPlay8Server_CreateGroup(p,a,b,c,d,e) (p)->CreateGroup(a,b,c,d,e) +#define IDirectPlay8Server_DestroyGroup(p,a,b,c,d) (p)->DestroyGroup(a,b,c,d) +#define IDirectPlay8Server_AddPlayerToGroup(p,a,b,c,d,e) (p)->AddPlayerToGroup(a,b,c,d,e) +#define IDirectPlay8Server_RemovePlayerFromGroup(p,a,b,c,d,e) (p)->RemovePlayerFromGroup(a,b,c,d,e) +#define IDirectPlay8Server_SetGroupInfo(p,a,b,c,d,e) (p)->SetGroupInfo(a,b,c,d,e) +#define IDirectPlay8Server_GetGroupInfo(p,a,b,c,d) (p)->GetGroupInfo(a,b,c,d) +#define IDirectPlay8Server_EnumPlayersAndGroups(p,a,b,c) (p)->EnumPlayersAndGroups(a,b,c) +#define IDirectPlay8Server_EnumGroupMembers(p,a,b,c,d) (p)->EnumGroupMembers(a,b,c,d) +#define IDirectPlay8Server_Close(p,a) (p)->Close(a) +#define IDirectPlay8Server_DestroyClient(p,a,b,c,d) (p)->DestroyClient(a,b,c,d) +#define IDirectPlay8Server_ReturnBuffer(p,a,b) (p)->ReturnBuffer(a,b) +#define IDirectPlay8Server_GetPlayerContext(p,a,b,c) (p)->GetPlayerContext(a,b,c) +#define IDirectPlay8Server_GetGroupContext(p,a,b,c) (p)->GetGroupContext(a,b,c) +#define IDirectPlay8Server_GetCaps(p,a,b) (p)->GetCaps(a,b) +#define IDirectPlay8Server_SetCaps(p,a,b) (p)->SetCaps(a,b) +#define IDirectPlay8Server_SetSPCaps(p,a,b,c) (p)->SetSPCaps(a,b,c) +#define IDirectPlay8Server_GetSPCaps(p,a,b,c) (p)->GetSPCaps(a,b,c) +#define IDirectPlay8Server_GetConnectionInfo(p,a,b,c) (p)->GetConnectionInfo(a,b,c) +#define IDirectPlay8Server_RegisterLobby(p,a,b,c) (p)->RegisterLobby(a,b,c) + +#define IDirectPlay8Peer_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirectPlay8Peer_AddRef(p) (p)->AddRef() +#define IDirectPlay8Peer_Release(p) (p)->Release() +#define IDirectPlay8Peer_Initialize(p,a,b,c) (p)->Initialize(a,b,c) +#define IDirectPlay8Peer_EnumServiceProviders(p,a,b,c,d,e,f) (p)->EnumServiceProviders(a,b,c,d,e,f) +#define IDirectPlay8Peer_CancelAsyncOperation(p,a,b) (p)->CancelAsyncOperation(a,b) +#define IDirectPlay8Peer_Connect(p,a,b,c,d,e,f,g,h,i,j,k) (p)->Connect(a,b,c,d,e,f,g,h,i,j,k) +#define IDirectPlay8Peer_SendTo(p,a,b,c,d,e,f,g) (p)->SendTo(a,b,c,d,e,f,g) +#define IDirectPlay8Peer_GetSendQueueInfo(p,a,b,c,d) (p)->GetSendQueueInfo(a,b,c,d) +#define IDirectPlay8Peer_Host(p,a,b,c,d,e,f,g) (p)->Host(a,b,c,d,e,f,g) +#define IDirectPlay8Peer_GetApplicationDesc(p,a,b,c) (p)->GetApplicationDesc(a,b,c) +#define IDirectPlay8Peer_SetApplicationDesc(p,a,b) (p)->SetApplicationDesc(a,b) +#define IDirectPlay8Peer_CreateGroup(p,a,b,c,d,e) (p)->CreateGroup(a,b,c,d,e) +#define IDirectPlay8Peer_DestroyGroup(p,a,b,c,d) (p)->DestroyGroup(a,b,c,d) +#define IDirectPlay8Peer_AddPlayerToGroup(p,a,b,c,d,e) (p)->AddPlayerToGroup(a,b,c,d,e) +#define IDirectPlay8Peer_RemovePlayerFromGroup(p,a,b,c,d,e) (p)->RemovePlayerFromGroup(a,b,c,d,e) +#define IDirectPlay8Peer_SetGroupInfo(p,a,b,c,d,e) (p)->SetGroupInfo(a,b,c,d,e) +#define IDirectPlay8Peer_GetGroupInfo(p,a,b,c,d) (p)->GetGroupInfo(a,b,c,d) +#define IDirectPlay8Peer_EnumPlayersAndGroups(p,a,b,c) (p)->EnumPlayersAndGroups(a,b,c) +#define IDirectPlay8Peer_EnumGroupMembers(p,a,b,c,d) (p)->EnumGroupMembers(a,b,c,d) +#define IDirectPlay8Peer_SetPeerInfo(p,a,b,c,d) (p)->SetPeerInfo(a,b,c,d) +#define IDirectPlay8Peer_GetPeerInfo(p,a,b,c,d) (p)->GetPeerInfo(a,b,c,d) +#define IDirectPlay8Peer_GetPeerAddress(p,a,b,c) (p)->GetPeerAddress(a,b,c) +#define IDirectPlay8Peer_GetLocalHostAddresses(p,a,b,c) (p)->GetLocalHostAddresses(a,b,c) +#define IDirectPlay8Peer_Close(p,a) (p)->Close(a) +#define IDirectPlay8Peer_EnumHosts(p,a,b,c,d,e,f,g,h,i,j,k) (p)->EnumHosts(a,b,c,d,e,f,g,h,i,j,k) +#define IDirectPlay8Peer_DestroyPeer(p,a,b,c,d) (p)->DestroyPeer(a,b,c,d) +#define IDirectPlay8Peer_ReturnBuffer(p,a,b) (p)->ReturnBuffer(a,b) +#define IDirectPlay8Peer_GetPlayerContext(p,a,b,c) (p)->GetPlayerContext(a,b,c) +#define IDirectPlay8Peer_GetGroupContext(p,a,b,c) (p)->GetGroupContext(a,b,c) +#define IDirectPlay8Peer_GetCaps(p,a,b) (p)->GetCaps(a,b) +#define IDirectPlay8Peer_SetCaps(p,a,b) (p)->SetCaps(a,b) +#define IDirectPlay8Peer_SetSPCaps(p,a,b,c) (p)->SetSPCaps(a,b,c) +#define IDirectPlay8Peer_GetSPCaps(p,a,b,c) (p)->GetSPCaps(a,b,c) +#define IDirectPlay8Peer_GetConnectionInfo(p,a,b,c) (p)->GetConnectionInfo(a,b,c) +#define IDirectPlay8Peer_RegisterLobby(p,a,b,c) (p)->RegisterLobby(a,b,c) +#define IDirectPlay8Peer_TerminateSession(p,a,b,c) (p)->TerminateSession(a,b,c) + +#define IDirectPlay8ThreadPool_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirectPlay8ThreadPool_AddRef(p) (p)->AddRef() +#define IDirectPlay8ThreadPool_Release(p) (p)->Release() +#define IDirectPlay8ThreadPool_Initialize(p,a,b,c) (p)->Initialize(a,b,c) +#define IDirectPlay8ThreadPool_Close(p,a) (p)->Close(a) +#define IDirectPlay8ThreadPool_GetThreadCount(p,a,b,c) (p)->GetThreadCount(a,b,c) +#define IDirectPlay8ThreadPool_SetThreadCount(p,a,b,c) (p)->SetThreadCount(a,b,c) +#define IDirectPlay8ThreadPool_DoWork(p,a,b) (p)->DoWork(a,b) + +#define IDirectPlay8NATResolver_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirectPlay8NATResolver_AddRef(p) (p)->AddRef() +#define IDirectPlay8NATResolver_Release(p) (p)->Release() +#define IDirectPlay8NATResolver_Initialize(p,a,b,c) (p)->Initialize(a,b,c) +#define IDirectPlay8NATResolver_Start(p,a,b,c) (p)->Start(a,b,c) +#define IDirectPlay8NATResolver_Close(p,a) (p)->Close(a) +#define IDirectPlay8NATResolver_EnumDevices(p,a,b,c,d) (p)->EnumDevices(a,b,c,d) +#define IDirectPlay8NATResolver_GetAddresses(p,a,b,c) (p)->GetAddresses(a,b,c) + +#endif + + + +/**************************************************************************** + * + * DIRECTPLAY8 ERRORS + * + * Errors are represented by negative values and cannot be combined. + * + ****************************************************************************/ + +#define _DPN_FACILITY_CODE 0x015 +#define _DPNHRESULT_BASE 0x8000 +#define MAKE_DPNHRESULT( code ) MAKE_HRESULT( 1, _DPN_FACILITY_CODE, ( code + _DPNHRESULT_BASE ) ) + +#define DPN_OK S_OK + +#define DPNSUCCESS_EQUAL MAKE_HRESULT( 0, _DPN_FACILITY_CODE, ( 0x5 + _DPNHRESULT_BASE ) ) +#define DPNSUCCESS_NOPLAYERSINGROUP MAKE_HRESULT( 0, _DPN_FACILITY_CODE, ( 0x8 + _DPNHRESULT_BASE ) ) // added for DirectX 9 +#define DPNSUCCESS_NOTEQUAL MAKE_HRESULT( 0, _DPN_FACILITY_CODE, (0x0A + _DPNHRESULT_BASE ) ) +#define DPNSUCCESS_PENDING MAKE_HRESULT( 0, _DPN_FACILITY_CODE, (0x0e + _DPNHRESULT_BASE ) ) + +#define DPNERR_ABORTED MAKE_DPNHRESULT( 0x30 ) +#define DPNERR_ADDRESSING MAKE_DPNHRESULT( 0x40 ) +#define DPNERR_ALREADYCLOSING MAKE_DPNHRESULT( 0x50 ) +#define DPNERR_ALREADYCONNECTED MAKE_DPNHRESULT( 0x60 ) +#define DPNERR_ALREADYDISCONNECTING MAKE_DPNHRESULT( 0x70 ) +#define DPNERR_ALREADYINITIALIZED MAKE_DPNHRESULT( 0x80 ) +#define DPNERR_ALREADYREGISTERED MAKE_DPNHRESULT( 0x90 ) +#define DPNERR_BUFFERTOOSMALL MAKE_DPNHRESULT( 0x100 ) +#define DPNERR_CANNOTCANCEL MAKE_DPNHRESULT( 0x110 ) +#define DPNERR_CANTCREATEGROUP MAKE_DPNHRESULT( 0x120 ) +#define DPNERR_CANTCREATEPLAYER MAKE_DPNHRESULT( 0x130 ) +#define DPNERR_CANTLAUNCHAPPLICATION MAKE_DPNHRESULT( 0x140 ) +#define DPNERR_CONNECTING MAKE_DPNHRESULT( 0x150 ) +#define DPNERR_CONNECTIONLOST MAKE_DPNHRESULT( 0x160 ) +#define DPNERR_CONVERSION MAKE_DPNHRESULT( 0x170 ) +#define DPNERR_DATATOOLARGE MAKE_DPNHRESULT( 0x175 ) +#define DPNERR_DOESNOTEXIST MAKE_DPNHRESULT( 0x180 ) +#define DPNERR_DPNSVRNOTAVAILABLE MAKE_DPNHRESULT( 0x185 ) +#define DPNERR_DUPLICATECOMMAND MAKE_DPNHRESULT( 0x190 ) +#define DPNERR_ENDPOINTNOTRECEIVING MAKE_DPNHRESULT( 0x200 ) +#define DPNERR_ENUMQUERYTOOLARGE MAKE_DPNHRESULT( 0x210 ) +#define DPNERR_ENUMRESPONSETOOLARGE MAKE_DPNHRESULT( 0x220 ) +#define DPNERR_EXCEPTION MAKE_DPNHRESULT( 0x230 ) +#define DPNERR_GENERIC E_FAIL +#define DPNERR_GROUPNOTEMPTY MAKE_DPNHRESULT( 0x240 ) +#define DPNERR_HOSTING MAKE_DPNHRESULT( 0x250 ) +#define DPNERR_HOSTREJECTEDCONNECTION MAKE_DPNHRESULT( 0x260 ) +#define DPNERR_HOSTTERMINATEDSESSION MAKE_DPNHRESULT( 0x270 ) +#define DPNERR_INCOMPLETEADDRESS MAKE_DPNHRESULT( 0x280 ) +#define DPNERR_INVALIDADDRESSFORMAT MAKE_DPNHRESULT( 0x290 ) +#define DPNERR_INVALIDAPPLICATION MAKE_DPNHRESULT( 0x300 ) +#define DPNERR_INVALIDCOMMAND MAKE_DPNHRESULT( 0x310 ) +#define DPNERR_INVALIDDEVICEADDRESS MAKE_DPNHRESULT( 0x320 ) +#define DPNERR_INVALIDENDPOINT MAKE_DPNHRESULT( 0x330 ) +#define DPNERR_INVALIDFLAGS MAKE_DPNHRESULT( 0x340 ) +#define DPNERR_INVALIDGROUP MAKE_DPNHRESULT( 0x350 ) +#define DPNERR_INVALIDHANDLE MAKE_DPNHRESULT( 0x360 ) +#define DPNERR_INVALIDHOSTADDRESS MAKE_DPNHRESULT( 0x370 ) +#define DPNERR_INVALIDINSTANCE MAKE_DPNHRESULT( 0x380 ) +#define DPNERR_INVALIDINTERFACE MAKE_DPNHRESULT( 0x390 ) +#define DPNERR_INVALIDOBJECT MAKE_DPNHRESULT( 0x400 ) +#define DPNERR_INVALIDPARAM E_INVALIDARG +#define DPNERR_INVALIDPASSWORD MAKE_DPNHRESULT( 0x410 ) +#define DPNERR_INVALIDPLAYER MAKE_DPNHRESULT( 0x420 ) +#define DPNERR_INVALIDPOINTER E_POINTER +#define DPNERR_INVALIDPRIORITY MAKE_DPNHRESULT( 0x430 ) +#define DPNERR_INVALIDSTRING MAKE_DPNHRESULT( 0x440 ) +#define DPNERR_INVALIDURL MAKE_DPNHRESULT( 0x450 ) +#define DPNERR_INVALIDVERSION MAKE_DPNHRESULT( 0x460 ) +#define DPNERR_NOCAPS MAKE_DPNHRESULT( 0x470 ) +#define DPNERR_NOCONNECTION MAKE_DPNHRESULT( 0x480 ) +#define DPNERR_NOHOSTPLAYER MAKE_DPNHRESULT( 0x490 ) +#define DPNERR_NOINTERFACE E_NOINTERFACE +#define DPNERR_NOMOREADDRESSCOMPONENTS MAKE_DPNHRESULT( 0x500 ) +#define DPNERR_NORESPONSE MAKE_DPNHRESULT( 0x510 ) +#define DPNERR_NOTALLOWED MAKE_DPNHRESULT( 0x520 ) +#define DPNERR_NOTHOST MAKE_DPNHRESULT( 0x530 ) +#define DPNERR_NOTREADY MAKE_DPNHRESULT( 0x540 ) +#define DPNERR_NOTREGISTERED MAKE_DPNHRESULT( 0x550 ) +#define DPNERR_OUTOFMEMORY E_OUTOFMEMORY +#define DPNERR_PENDING DPNSUCCESS_PENDING +#define DPNERR_PLAYERALREADYINGROUP MAKE_DPNHRESULT( 0x560 ) +#define DPNERR_PLAYERLOST MAKE_DPNHRESULT( 0x570 ) +#define DPNERR_PLAYERNOTINGROUP MAKE_DPNHRESULT( 0x580 ) +#define DPNERR_PLAYERNOTREACHABLE MAKE_DPNHRESULT( 0x590 ) +#define DPNERR_SENDTOOLARGE MAKE_DPNHRESULT( 0x600 ) +#define DPNERR_SESSIONFULL MAKE_DPNHRESULT( 0x610 ) +#define DPNERR_TABLEFULL MAKE_DPNHRESULT( 0x620 ) +#define DPNERR_TIMEDOUT MAKE_DPNHRESULT( 0x630 ) +#define DPNERR_UNINITIALIZED MAKE_DPNHRESULT( 0x640 ) +#define DPNERR_UNSUPPORTED E_NOTIMPL +#define DPNERR_USERCANCEL MAKE_DPNHRESULT( 0x650 ) + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/trunk/xray/xr_3da/xrGame/game_cl_base.cpp b/trunk/xray/xr_3da/xrGame/game_cl_base.cpp index 050af13d..f7e55396 100644 --- a/trunk/xray/xr_3da/xrGame/game_cl_base.cpp +++ b/trunk/xray/xr_3da/xrGame/game_cl_base.cpp @@ -60,8 +60,12 @@ void game_cl_GameState::net_import_GameTime (NET_Packet& P) u64 OldTime = Level().GetEnvironmentGameTime(); Level().SetEnvironmentGameTimeFactor (GameEnvironmentTime,EnvironmentTimeFactor); - if (OldTime > GameEnvironmentTime) - GamePersistent().Environment().Invalidate(); + + // SkyLoader: õàê íà ðåçêóþ ñìåíó ïîãîäû ïðè ñêðèïòîâîé ñìåíå öèêëà + // Ïî êàêîé-òî ïðè÷èíå âðåìÿ íå ýêñïîðòèðóåòñÿ èëè ýêïîðòèðóåòñÿ êðèâî + // Ïîñëå èñïðàâëåíèÿ ýêñïîðòà âðåìåíè ðàñêîììåíòèòü ýòîò êîä + //if (OldTime > GameEnvironmentTime) + // GamePersistent().Environment().Invalidate(); } void game_cl_GameState::net_import_state (NET_Packet& P) diff --git a/trunk/xray/xr_3da/xrGame/game_sv_single.cpp b/trunk/xray/xr_3da/xrGame/game_sv_single.cpp index 22beac98..4c09574e 100644 --- a/trunk/xray/xr_3da/xrGame/game_sv_single.cpp +++ b/trunk/xray/xr_3da/xrGame/game_sv_single.cpp @@ -190,7 +190,10 @@ void game_sv_Single::SetGameTimeFactor (const float fTimeFactor) ALife::_TIME_ID game_sv_Single::GetEnvironmentGameTime () { - return(inherited::GetGameTime()); + if (ai().get_alife() && ai().alife().initialized()) + return(alife().time_manager().game_time()); + else + return(inherited::GetGameTime()); } float game_sv_Single::GetEnvironmentGameTimeFactor () @@ -200,7 +203,7 @@ float game_sv_Single::GetEnvironmentGameTimeFactor () void game_sv_Single::SetEnvironmentGameTimeFactor (const float fTimeFactor) { -// return(inherited::SetGameTimeFactor(fTimeFactor)); + return(inherited::SetGameTimeFactor(fTimeFactor)); } bool game_sv_Single::change_level (NET_Packet &net_packet, ClientID sender) diff --git a/trunk/xray/xr_3da/xrGame/level_script.cpp b/trunk/xray/xr_3da/xrGame/level_script.cpp index 8819b8ed..32f7d3ed 100644 --- a/trunk/xray/xr_3da/xrGame/level_script.cpp +++ b/trunk/xray/xr_3da/xrGame/level_script.cpp @@ -129,11 +129,26 @@ bool set_weather_fx (LPCSTR weather_name) return (g_pGamePersistent->Environment().SetWeatherFX(weather_name)); } +bool start_weather_fx_from_time (LPCSTR weather_name, float time) +{ + return (g_pGamePersistent->Environment().StartWeatherFXFromTime(weather_name, time)); +} + bool is_wfx_playing () { return (g_pGamePersistent->Environment().IsWFXPlaying()); } +float get_wfx_time () +{ + return (g_pGamePersistent->Environment().wfx_time); +} + +void stop_weather_fx() +{ + g_pGamePersistent->Environment().StopWFX(); +} + void set_time_factor(float time_factor) { if (!OnServer()) @@ -161,35 +176,35 @@ ESingleGameDifficulty get_game_difficulty() u32 get_time_year() { u32 year = 0, month = 0, day = 0, hours = 0, mins = 0, secs = 0, milisecs = 0; - split_time(Level().GetGameTime(), year, month, day, hours, mins, secs, milisecs); + split_time((g_pGameLevel && Level().game) ? Level().GetGameTime() : ai().alife().time_manager().game_time(), year, month, day, hours, mins, secs, milisecs); return year; } u32 get_time_month() { u32 year = 0, month = 0, day = 0, hours = 0, mins = 0, secs = 0, milisecs = 0; - split_time(Level().GetGameTime(), year, month, day, hours, mins, secs, milisecs); + split_time((g_pGameLevel && Level().game) ? Level().GetGameTime() : ai().alife().time_manager().game_time(), year, month, day, hours, mins, secs, milisecs); return month; } u32 get_time_days() { u32 year = 0, month = 0, day = 0, hours = 0, mins = 0, secs = 0, milisecs = 0; - split_time(Level().GetGameTime(), year, month, day, hours, mins, secs, milisecs); + split_time((g_pGameLevel && Level().game) ? Level().GetGameTime() : ai().alife().time_manager().game_time(), year, month, day, hours, mins, secs, milisecs); return day; } u32 get_time_hours() { u32 year = 0, month = 0, day = 0, hours = 0, mins = 0, secs = 0, milisecs = 0; - split_time(Level().GetGameTime(), year, month, day, hours, mins, secs, milisecs); + split_time((g_pGameLevel && Level().game) ? Level().GetGameTime() : ai().alife().time_manager().game_time(), year, month, day, hours, mins, secs, milisecs); return hours; } u32 get_time_minutes() { u32 year = 0, month = 0, day = 0, hours = 0, mins = 0, secs = 0, milisecs = 0; - split_time(Level().GetGameTime(), year, month, day, hours, mins, secs, milisecs); + split_time((g_pGameLevel && Level().game) ? Level().GetGameTime() : ai().alife().time_manager().game_time(), year, month, day, hours, mins, secs, milisecs); return mins; } @@ -215,7 +230,7 @@ float cover_in_direction(u32 level_vertex_id, const Fvector &direction) float rain_factor() { - return (g_pGamePersistent->Environment().CurrentEnv.rain_density); + return (g_pGamePersistent->Environment().CurrentEnv->rain_density); } u32 vertex_in_direction(u32 level_vertex_id, Fvector direction, float max_distance) @@ -433,7 +448,7 @@ CEnvironment *environment() CEnvDescriptor *current_environment(CEnvironment *self) { - return (&self->CurrentEnv); + return (self->CurrentEnv); } extern bool g_bDisableAllInput; void disable_input() @@ -756,7 +771,10 @@ void CLevel::script_register(lua_State *L) def("get_weather", get_weather), def("set_weather", set_weather), def("set_weather_fx", set_weather_fx), + def("start_weather_fx_from_time", start_weather_fx_from_time), def("is_wfx_playing", is_wfx_playing), + def("get_wfx_time", get_wfx_time), + def("stop_weather_fx", stop_weather_fx), def("environment", environment), diff --git a/trunk/xray/xr_3da/xrGame/space_restriction_manager.cpp b/trunk/xray/xr_3da/xrGame/space_restriction_manager.cpp index 485184df..c8ebfafb 100644 --- a/trunk/xray/xr_3da/xrGame/space_restriction_manager.cpp +++ b/trunk/xray/xr_3da/xrGame/space_restriction_manager.cpp @@ -93,7 +93,7 @@ shared_str CSpaceRestrictionManager::base_out_restrictions (ALife::_OBJECT_ID i return ((*I).second.m_base_out_restrictions); } -IC CSpaceRestrictionManager::CRestrictionPtr CSpaceRestrictionManager::restriction (ALife::_OBJECT_ID id) +CSpaceRestrictionManager::CRestrictionPtr CSpaceRestrictionManager::restriction (ALife::_OBJECT_ID id) { CLIENT_RESTRICTIONS::iterator I = m_clients->find(id); VERIFY (m_clients->end() != I); diff --git a/trunk/xray/xr_3da/xrGame/space_restriction_manager.h b/trunk/xray/xr_3da/xrGame/space_restriction_manager.h index 81e1b469..da480341 100644 --- a/trunk/xray/xr_3da/xrGame/space_restriction_manager.h +++ b/trunk/xray/xr_3da/xrGame/space_restriction_manager.h @@ -42,7 +42,7 @@ class CSpaceRestrictionManager : public CSpaceRestrictionHolder { protected: IC void join_restrictions (shared_str &restrictions, shared_str update); IC void difference_restrictions (shared_str &restrictions, shared_str update); - IC CRestrictionPtr restriction (ALife::_OBJECT_ID id); + CRestrictionPtr restriction (ALife::_OBJECT_ID id); CRestrictionPtr restriction (shared_str out_restrictors, shared_str in_restrictors); IC void collect_garbage (); virtual void on_default_restrictions_changed (); diff --git a/trunk/xray/xr_3da/xrGame/stalker_animation_manager_update.cpp b/trunk/xray/xr_3da/xrGame/stalker_animation_manager_update.cpp index 41e4ff75..21725386 100644 --- a/trunk/xray/xr_3da/xrGame/stalker_animation_manager_update.cpp +++ b/trunk/xray/xr_3da/xrGame/stalker_animation_manager_update.cpp @@ -14,7 +14,7 @@ #include "profiler.h" #include "stalker_movement_manager.h" -IC void CStalkerAnimationManager::play_delayed_callbacks () +void CStalkerAnimationManager::play_delayed_callbacks () { if (!m_call_script_callback) return; diff --git a/trunk/xray/xr_3da/xrGame/xrD3D9-Null/xrD3D9-Null.vcxproj b/trunk/xray/xr_3da/xrGame/xrD3D9-Null/xrD3D9-Null.vcxproj index 5fddb80d..5b10b562 100644 --- a/trunk/xray/xr_3da/xrGame/xrD3D9-Null/xrD3D9-Null.vcxproj +++ b/trunk/xray/xr_3da/xrGame/xrD3D9-Null/xrD3D9-Null.vcxproj @@ -1,5 +1,5 @@  - + Debug @@ -35,29 +35,35 @@ DynamicLibrary MultiByte true + v140 DynamicLibrary MultiByte true + v140 DynamicLibrary MultiByte true + v140 DynamicLibrary MultiByte true + v140 DynamicLibrary MultiByte + v140 DynamicLibrary MultiByte + v140 diff --git a/trunk/xray/xr_3da/xrGame/xrGame.vcxproj b/trunk/xray/xr_3da/xrGame/xrGame.vcxproj index 410577dc..3da23ef2 100644 --- a/trunk/xray/xr_3da/xrGame/xrGame.vcxproj +++ b/trunk/xray/xr_3da/xrGame/xrGame.vcxproj @@ -1,5 +1,5 @@  - + Debug_Priquel @@ -76,76 +76,96 @@ false MultiByte true + v140 DynamicLibrary false MultiByte true + v140 DynamicLibrary false MultiByte + v140 DynamicLibrary false MultiByte + v140 DynamicLibrary false MultiByte + v140 DynamicLibrary false MultiByte + v140 DynamicLibrary false MultiByte true + v140 DynamicLibrary false MultiByte true + v140 DynamicLibrary false MultiByte true + v140 DynamicLibrary false MultiByte true + v140 DynamicLibrary false MultiByte + v140 DynamicLibrary false MultiByte + v140 DynamicLibrary false MultiByte + v140 DynamicLibrary false MultiByte + v140 + + + v140 + + + v140 diff --git a/trunk/xray/xr_3da/xrGame/xrGameSpy/xrGameSpy.vcxproj b/trunk/xray/xr_3da/xrGame/xrGameSpy/xrGameSpy.vcxproj index e7a85d4d..33875dcc 100644 --- a/trunk/xray/xr_3da/xrGame/xrGameSpy/xrGameSpy.vcxproj +++ b/trunk/xray/xr_3da/xrGame/xrGameSpy/xrGameSpy.vcxproj @@ -1,5 +1,5 @@  - + Debug @@ -35,29 +35,35 @@ DynamicLibrary MultiByte true + v140 DynamicLibrary MultiByte true + v140 DynamicLibrary MultiByte true + v140 DynamicLibrary MultiByte true + v140 DynamicLibrary MultiByte + v140 DynamicLibrary MultiByte + v140 diff --git a/trunk/xray/xr_3da/xrRender/DetailManager_VS.cpp b/trunk/xray/xr_3da/xrRender/DetailManager_VS.cpp index 6efc2005..d4251c69 100644 --- a/trunk/xray/xr_3da/xrRender/DetailManager_VS.cpp +++ b/trunk/xray/xr_3da/xrRender/DetailManager_VS.cpp @@ -174,11 +174,11 @@ void CDetailManager::hw_Render_dump (ref_constant x_array, u32 var_id, u32 lod_ vis_list& list = m_visibles [var_id]; - CEnvDescriptor& desc = g_pGamePersistent->Environment().CurrentEnv; + CEnvDescriptor* desc = g_pGamePersistent->Environment().CurrentEnv; Fvector c_sun,c_ambient,c_hemi; - c_sun.set (desc.sun_color.x, desc.sun_color.y, desc.sun_color.z); c_sun.mul(.5f); - c_ambient.set (desc.ambient.x, desc.ambient.y, desc.ambient.z); - c_hemi.set (desc.hemi_color.x, desc.hemi_color.y, desc.hemi_color.z); + c_sun.set (desc->sun_color.x, desc->sun_color.y, desc->sun_color.z); c_sun.mul(.5f); + c_ambient.set (desc->ambient.x, desc->ambient.y, desc->ambient.z); + c_hemi.set (desc->hemi_color.x, desc->hemi_color.y, desc->hemi_color.z); // Iterate for (u32 O=0; OEnvironment().CurrentEnv; - Fvector accum = { desc.ambient.x, desc.ambient.y, desc.ambient.z }; - Fvector hemi = { desc.hemi_color.x, desc.hemi_color.y, desc.hemi_color.z }; - Fvector sun_ = { desc.sun_color.x, desc.sun_color.y, desc.sun_color.z }; + CEnvDescriptor* desc = g_pGamePersistent->Environment().CurrentEnv; + Fvector accum = { desc->ambient.x, desc->ambient.y, desc->ambient.z }; + Fvector hemi = { desc->hemi_color.x, desc->hemi_color.y, desc->hemi_color.z }; + Fvector sun_ = { desc->sun_color.x, desc->sun_color.y, desc->sun_color.z }; if (MODE & IRender_ObjectSpecific::TRACE_HEMI ) hemi.mul(hemi_smooth); else hemi.mul(.2f); accum.add ( hemi ); if (MODE & IRender_ObjectSpecific::TRACE_SUN ) sun_.mul(sun_smooth); else sun_.mul(.2f); diff --git a/trunk/xray/xr_3da/xrRender/Light_DB.cpp b/trunk/xray/xr_3da/xrRender/Light_DB.cpp index 87ff1342..7ccde956 100644 --- a/trunk/xray/xr_3da/xrRender/Light_DB.cpp +++ b/trunk/xray/xr_3da/xrRender/Light_DB.cpp @@ -131,7 +131,7 @@ void CLight_DB::add_light (light* L) L->frame_render = Device.dwFrame ; if (RImplementation.o.noshadows) L->flags.bShadow = FALSE; if (L->flags.bStatic && !ps_r2_ls_flags.test(R2FLAG_R1LIGHTS)) return; - L->export (package); + L->Export (package); } #endif @@ -142,46 +142,46 @@ void CLight_DB::Update () { light* _sun_original = (light*) sun_original._get(); light* _sun_adapted = (light*) sun_adapted._get(); - CEnvDescriptor& E = g_pGamePersistent->Environment().CurrentEnv; - VERIFY (_valid(E.sun_dir)); + CEnvDescriptor* E = g_pGamePersistent->Environment().CurrentEnv; + VERIFY (_valid(E->sun_dir)); #ifdef DEBUG if(E.sun_dir.y>=0) { - Log("sect_name", E.sect_name.c_str()); - Log("E.sun_dir", E.sun_dir); - Log("E.wind_direction",E.wind_direction); - Log("E.wind_velocity",E.wind_velocity); - Log("E.sun_color",E.sun_color); - Log("E.rain_color",E.rain_color); - Log("E.rain_density",E.rain_density); - Log("E.fog_distance",E.fog_distance); - Log("E.fog_density",E.fog_density); - Log("E.fog_color",E.fog_color); - Log("E.far_plane",E.far_plane); - Log("E.sky_rotation",E.sky_rotation); - Log("E.sky_color",E.sky_color); + Log("sect_name", E->sect_name.c_str()); + Log("E->sun_dir", E->sun_dir); + Log("E->wind_direction",E->wind_direction); + Log("E->wind_velocity",E->wind_velocity); + Log("E->sun_color",E->sun_color); + Log("E->rain_color",E->rain_color); + Log("E->rain_density",E->rain_density); + Log("E->fog_distance",E->fog_distance); + Log("E->fog_density",E->fog_density); + Log("E->fog_color",E->fog_color); + Log("E->far_plane",E->far_plane); + Log("E->sky_rotation",E->sky_rotation); + Log("E->sky_color",E->sky_color); } #endif - VERIFY2 (E.sun_dir.y<0,"Invalid sun direction settings in evironment-config"); + VERIFY2 (E->sun_dir.y<0,"Invalid sun direction settings in evironment-config"); Fvector OD,OP,AD,AP; - OD.set (E.sun_dir).normalize (); + OD.set (E->sun_dir).normalize (); OP.mad (Device.vCameraPosition,OD,-500.f); - AD.set(0,-.75f,0).add (E.sun_dir); + AD.set(0,-.75f,0).add (E->sun_dir); // for some reason E.sun_dir can point-up int counter = 0; while (AD.magnitude()<0.001 && counter<10) { - AD.add(E.sun_dir); counter++; + AD.add(E->sun_dir); counter++; } AD.normalize (); AP.mad (Device.vCameraPosition,AD,-500.f); sun_original->set_rotation (OD,_sun_original->right ); sun_original->set_position (OP); - sun_original->set_color (E.sun_color.x,E.sun_color.y,E.sun_color.z); + sun_original->set_color (E->sun_color.x,E->sun_color.y,E->sun_color.z); sun_original->set_range (600.f); sun_adapted->set_rotation (AD, _sun_adapted->right ); sun_adapted->set_position (AP ); - sun_adapted->set_color (E.sun_color.x*ps_r2_sun_lumscale,E.sun_color.y*ps_r2_sun_lumscale,E.sun_color.z*ps_r2_sun_lumscale); + sun_adapted->set_color (E->sun_color.x*ps_r2_sun_lumscale,E->sun_color.y*ps_r2_sun_lumscale,E->sun_color.z*ps_r2_sun_lumscale); sun_adapted->set_range (600.f ); if (ps_r2_ls_flags.test(R2FLAG_TRUE_SHADOWS)) diff --git a/trunk/xray/xr_3da/xrRender/light.cpp b/trunk/xray/xr_3da/xrRender/light.cpp index e2620917..605d2c8c 100644 --- a/trunk/xray/xr_3da/xrRender/light.cpp +++ b/trunk/xray/xr_3da/xrRender/light.cpp @@ -261,7 +261,7 @@ void light::xform_calc () static Fvector cmNorm[6] = {{0.f,1.f,0.f}, {0.f,1.f,0.f}, {0.f,0.f,-1.f},{0.f,0.f,1.f}, {0.f,1.f,0.f}, {0.f,1.f,0.f}}; static Fvector cmDir[6] = {{1.f,0.f,0.f}, {-1.f,0.f,0.f},{0.f,1.f,0.f}, {0.f,-1.f,0.f},{0.f,0.f,1.f}, {0.f,0.f,-1.f}}; -void light::export (light_Package& package) +void light::Export (light_Package& package) { if (flags.bShadow) { switch (flags.type) { diff --git a/trunk/xray/xr_3da/xrRender/light.h b/trunk/xray/xr_3da/xrRender/light.h index 4dc95873..ad35927a 100644 --- a/trunk/xray/xr_3da/xrRender/light.h +++ b/trunk/xray/xr_3da/xrRender/light.h @@ -132,7 +132,7 @@ class light : public IRender_Light, public ISpatial void xform_calc (); void vis_prepare (); void vis_update (); - void export (light_Package& dest); + void Export (light_Package& dest); #endif float get_LOD (); diff --git a/trunk/xray/xr_3da/xrRender/r__dsgraph_render.cpp b/trunk/xray/xr_3da/xrRender/r__dsgraph_render.cpp index e6fa49c6..6ec6e535 100644 --- a/trunk/xray/xr_3da/xrRender/r__dsgraph_render.cpp +++ b/trunk/xray/xr_3da/xrRender/r__dsgraph_render.cpp @@ -371,7 +371,7 @@ void R_dsgraph_structure::r_dsgraph_render_hud_emissive () Device.mProject.build_projection( deg2rad(psHUD_FOV*Device.fFOV /* *Device.fASPECT*/ ), Device.fASPECT, VIEWPORT_NEAR, - g_pGamePersistent->Environment().CurrentEnv.far_plane); + g_pGamePersistent->Environment().CurrentEnv->far_plane); Device.mFullTransform.mul (Device.mProject, Device.mView); RCache.set_xform_project (Device.mProject); @@ -402,7 +402,7 @@ void R_dsgraph_structure::r_dsgraph_render_hud_sorted () Device.mProject.build_projection( deg2rad(psHUD_FOV*Device.fFOV /* *Device.fASPECT*/ ), Device.fASPECT, VIEWPORT_NEAR, - g_pGamePersistent->Environment().CurrentEnv.far_plane); + g_pGamePersistent->Environment().CurrentEnv->far_plane); Device.mFullTransform.mul (Device.mProject, Device.mView); RCache.set_xform_project (Device.mProject); @@ -432,7 +432,7 @@ void R_dsgraph_structure::r_dsgraph_render_hud () Device.mProject.build_projection( deg2rad(psHUD_FOV*Device.fFOV /* *Device.fASPECT*/ ), Device.fASPECT, VIEWPORT_NEAR, - g_pGamePersistent->Environment().CurrentEnv.far_plane); + g_pGamePersistent->Environment().CurrentEnv->far_plane); Device.mFullTransform.mul (Device.mProject, Device.mView); RCache.set_xform_project (Device.mProject); diff --git a/trunk/xray/xr_3da/xrRender/r__sector_traversal.cpp b/trunk/xray/xr_3da/xrRender/r__sector_traversal.cpp index f599b2af..dfd51807 100644 --- a/trunk/xray/xr_3da/xrRender/r__sector_traversal.cpp +++ b/trunk/xray/xr_3da/xrRender/r__sector_traversal.cpp @@ -96,7 +96,7 @@ void CPortalTraverser::fade_render () u32 _offset = 0; FVF::L* _v = (FVF::L*)RCache.Vertex.Lock(_pcount*3,f_geom.stride(),_offset); float ssaRange = r_ssaLOD_A - r_ssaLOD_B; - Fvector _ambient_f = g_pGamePersistent->Environment().CurrentEnv.ambient; + Fvector _ambient_f = g_pGamePersistent->Environment().CurrentEnv->ambient; u32 _ambient = color_rgba_f (_ambient_f.x,_ambient_f.y,_ambient_f.z,0); for (u32 _it = 0; _itEnvironment().CurrentEnv.far_plane) +#define MAX_GlowsDist1 float(g_pGamePersistent->Environment().CurrentEnv->far_plane) #define MAX_GlowsDist2 float(MAX_GlowsDist1*MAX_GlowsDist1) diff --git a/trunk/xray/xr_3da/xrRender_R2/r2.cpp b/trunk/xray/xr_3da/xrRender_R2/r2.cpp index 894e14a1..c998566d 100644 --- a/trunk/xray/xr_3da/xrRender_R2/r2.cpp +++ b/trunk/xray/xr_3da/xrRender_R2/r2.cpp @@ -57,9 +57,8 @@ static class cl_water_intensity : public R_constant_setup { virtual void setup (R_constant* C) { - //CEnvDescriptor& E = *g_pGamePersistent->Environment().CurrentEnv; - CEnvDescriptor& E = g_pGamePersistent->Environment().CurrentEnv; - float fValue = E.m_fWaterIntensity; + CEnvDescriptor* E = g_pGamePersistent->Environment().CurrentEnv; + float fValue = E->m_fWaterIntensity; RCache.set_c (C, fValue, fValue, fValue, 0); } } binder_water_intensity; @@ -67,9 +66,8 @@ static class cl_sun_shafts_intensity : public R_constant_setup { virtual void setup (R_constant* C) { - //CEnvDescriptor& E = *g_pGamePersistent->Environment().CurrentEnv; - CEnvDescriptor& E = g_pGamePersistent->Environment().CurrentEnv; - float fValue = E.m_fSunShaftsIntensity; + CEnvDescriptor* E = g_pGamePersistent->Environment().CurrentEnv; + float fValue = E->m_fSunShaftsIntensity; RCache.set_c (C, fValue, fValue, fValue, 0); } } binder_sun_shafts_intensity; diff --git a/trunk/xray/xr_3da/xrRender_R2/r2_R_render.cpp b/trunk/xray/xr_3da/xrRender_R2/r2_R_render.cpp index 571d8303..7f5a8fb4 100644 --- a/trunk/xray/xr_3da/xrRender_R2/r2_R_render.cpp +++ b/trunk/xray/xr_3da/xrRender_R2/r2_R_render.cpp @@ -225,7 +225,7 @@ void CRender::Render () m_project.build_projection ( deg2rad(Device.fFOV/* *Device.fASPECT*/), Device.fASPECT, VIEWPORT_NEAR, - z_distance * g_pGamePersistent->Environment().CurrentEnv.far_plane); + z_distance * g_pGamePersistent->Environment().CurrentEnv->far_plane); m_zfill.mul (m_project,Device.mView); r_pmask (true,false); // enable priority "0" set_Recorder (NULL) ; diff --git a/trunk/xray/xr_3da/xrRender_R2/r2_R_sun.cpp b/trunk/xray/xr_3da/xrRender_R2/r2_R_sun.cpp index 2d73a205..49ba23dd 100644 --- a/trunk/xray/xr_3da/xrRender_R2/r2_R_sun.cpp +++ b/trunk/xray/xr_3da/xrRender_R2/r2_R_sun.cpp @@ -732,7 +732,7 @@ void CRender::render_sun () // calculate view-frustum bounds in world space Fmatrix ex_project, ex_full, ex_full_inverse; { - float _far_ = min(OLES_SUN_LIMIT_27_01_07, g_pGamePersistent->Environment().CurrentEnv.far_plane); + float _far_ = min(OLES_SUN_LIMIT_27_01_07, g_pGamePersistent->Environment().CurrentEnv->far_plane); //ex_project.build_projection (deg2rad(Device.fFOV/* *Device.fASPECT*/),Device.fASPECT,ps_r2_sun_near,_far_); ex_project.build_projection (deg2rad(Device.fFOV/* *Device.fASPECT*/),Device.fASPECT,VIEWPORT_NEAR,_far_); ex_full.mul (ex_project,Device.mView); diff --git a/trunk/xray/xr_3da/xrRender_R2/r2_rendertarget.cpp b/trunk/xray/xr_3da/xrRender_R2/r2_rendertarget.cpp index bdbc771a..9b32695c 100644 --- a/trunk/xray/xr_3da/xrRender_R2/r2_rendertarget.cpp +++ b/trunk/xray/xr_3da/xrRender_R2/r2_rendertarget.cpp @@ -581,8 +581,8 @@ bool CRenderTarget::need_to_render_sunshafts() return false; { - CEnvDescriptor& E = g_pGamePersistent->Environment().CurrentEnv; - float fValue = E.m_fSunShaftsIntensity; + CEnvDescriptor* E = g_pGamePersistent->Environment().CurrentEnv; + float fValue = E->m_fSunShaftsIntensity; // TODO: add multiplication by sun color here if (fValue<0.0001) return false; } diff --git a/trunk/xray/xr_3da/xrRender_R2/r2_rendertarget_accum_direct.cpp b/trunk/xray/xr_3da/xrRender_R2/r2_rendertarget_accum_direct.cpp index 9777e5c6..68a53908 100644 --- a/trunk/xray/xr_3da/xrRender_R2/r2_rendertarget_accum_direct.cpp +++ b/trunk/xray/xr_3da/xrRender_R2/r2_rendertarget_accum_direct.cpp @@ -136,8 +136,8 @@ void CRenderTarget::accum_direct (u32 sub_phase) static float w_shift = 0; Fmatrix m_xform; Fvector direction = fuckingsun->direction ; - float w_dir = g_pGamePersistent->Environment().CurrentEnv.wind_direction ; - //float w_speed = g_pGamePersistent->Environment().CurrentEnv.wind_velocity ; + float w_dir = g_pGamePersistent->Environment().CurrentEnv->wind_direction ; + //float w_speed = g_pGamePersistent->Environment().CurrentEnv->wind_velocity ; Fvector normal ; normal.setHP(w_dir,0); w_shift += 0.003f*Device.fTimeDelta; Fvector position; position.set(0,0,0); @@ -332,7 +332,7 @@ void CRenderTarget::accum_direct_cascade ( u32 sub_phase, Fmatrix& xform, Fmatri static float w_shift = 0; Fmatrix m_xform; Fvector direction = fuckingsun->direction ; - float w_dir = g_pGamePersistent->Environment().CurrentEnv.wind_direction ; + float w_dir = g_pGamePersistent->Environment().CurrentEnv->wind_direction ; //float w_speed = g_pGamePersistent->Environment().CurrentEnv->wind_velocity ; Fvector normal ; normal.setHP(w_dir,0); w_shift += 0.003f*Device.fTimeDelta; @@ -732,8 +732,8 @@ void CRenderTarget::accum_direct_volumetric (u32 sub_phase, const u32 Offset, co return; { - CEnvDescriptor& E = g_pGamePersistent->Environment().CurrentEnv; - float fValue = E.m_fSunShaftsIntensity; + CEnvDescriptor* E = g_pGamePersistent->Environment().CurrentEnv; + float fValue = E->m_fSunShaftsIntensity; // TODO: add multiplication by sun color here if (fValue<0.0001) return; } diff --git a/trunk/xray/xr_3da/xrRender_R2/r2_rendertarget_accum_point.cpp b/trunk/xray/xr_3da/xrRender_R2/r2_rendertarget_accum_point.cpp index f81467ca..4b06b540 100644 --- a/trunk/xray/xr_3da/xrRender_R2/r2_rendertarget_accum_point.cpp +++ b/trunk/xray/xr_3da/xrRender_R2/r2_rendertarget_accum_point.cpp @@ -17,7 +17,7 @@ void CRenderTarget::accum_point (light* L) Pold = Device.mProject; FTold = Device.mFullTransform; Device.mProject.build_projection(deg2rad(psHUD_FOV * Device.fFOV /* *Device.fASPECT*/), Device.fASPECT, - VIEWPORT_NEAR, g_pGamePersistent->Environment().CurrentEnv.far_plane); + VIEWPORT_NEAR, g_pGamePersistent->Environment().CurrentEnv->far_plane); Device.mFullTransform.mul(Device.mProject, Device.mView); RCache.set_xform_project(Device.mProject); diff --git a/trunk/xray/xr_3da/xrRender_R2/r2_rendertarget_phase_combine.cpp b/trunk/xray/xr_3da/xrRender_R2/r2_rendertarget_phase_combine.cpp index 6bace04d..a714f59d 100644 --- a/trunk/xray/xr_3da/xrRender_R2/r2_rendertarget_phase_combine.cpp +++ b/trunk/xray/xr_3da/xrRender_R2/r2_rendertarget_phase_combine.cpp @@ -69,16 +69,12 @@ void CRenderTarget::phase_combine () { // Compute params Fmatrix m_v2w; m_v2w.invert (Device.mView ); - CEnvDescriptorMixer& envdesc= g_pGamePersistent->Environment().CurrentEnv ; + CEnvDescriptorMixer* envdesc= g_pGamePersistent->Environment().CurrentEnv ; const float minamb = 0.001f; - Fvector4 ambclr = { _max(envdesc.ambient.x*2,minamb), _max(envdesc.ambient.y*2,minamb), _max(envdesc.ambient.z*2,minamb), 0 }; + Fvector4 ambclr = { _max(envdesc->ambient.x*2,minamb), _max(envdesc->ambient.y*2,minamb), _max(envdesc->ambient.z*2,minamb), 0 }; ambclr.mul (ps_r2_sun_lumscale_amb); -#ifdef COP_WEATHER_MANAGER - Fvector4 envclr = { envdesc.hemi_color.x*2+EPS, envdesc.hemi_color.y*2+EPS, envdesc.hemi_color.z*2+EPS, envdesc.weight }; -#else - Fvector4 envclr = { envdesc.sky_color.x*2+EPS, envdesc.sky_color.y*2+EPS, envdesc.sky_color.z*2+EPS, envdesc.weight }; -#endif - Fvector4 fogclr = { envdesc.fog_color.x, envdesc.fog_color.y, envdesc.fog_color.z, 0 }; + Fvector4 envclr = { envdesc->hemi_color.x*2+EPS, envdesc->hemi_color.y*2+EPS, envdesc->hemi_color.z*2+EPS, envdesc->weight }; + Fvector4 fogclr = { envdesc->fog_color.x, envdesc->fog_color.y, envdesc->fog_color.z, 0 }; envclr.x *= 2*ps_r2_sun_lumscale_hemi; envclr.y *= 2*ps_r2_sun_lumscale_hemi; envclr.z *= 2*ps_r2_sun_lumscale_hemi; @@ -127,8 +123,8 @@ void CRenderTarget::phase_combine () RCache.Vertex.Unlock (4,g_combine_VP->vb_stride); // Setup textures - IDirect3DBaseTexture9* e0 = _menu_pp?0:envdesc.sky_r_textures_env[0].second->surface_get(); - IDirect3DBaseTexture9* e1 = _menu_pp?0:envdesc.sky_r_textures_env[1].second->surface_get(); + IDirect3DBaseTexture9* e0 = _menu_pp?0:envdesc->sky_r_textures_env[0].second->surface_get(); + IDirect3DBaseTexture9* e1 = _menu_pp?0:envdesc->sky_r_textures_env[1].second->surface_get(); t_envmap_0->surface_set (e0); _RELEASE(e0); t_envmap_1->surface_set (e1); _RELEASE(e1); @@ -395,17 +391,12 @@ void CRenderTarget::phase_combine_volumetric() { // Compute params Fmatrix m_v2w; m_v2w.invert (Device.mView ); - //CEnvDescriptorMixer& envdesc= *g_pGamePersistent->Environment().CurrentEnv ; - CEnvDescriptorMixer& envdesc= g_pGamePersistent->Environment().CurrentEnv ; + CEnvDescriptorMixer* envdesc= g_pGamePersistent->Environment().CurrentEnv ; const float minamb = 0.001f; - Fvector4 ambclr = { _max(envdesc.ambient.x*2,minamb), _max(envdesc.ambient.y*2,minamb), _max(envdesc.ambient.z*2,minamb), 0 }; + Fvector4 ambclr = { _max(envdesc->ambient.x*2,minamb), _max(envdesc->ambient.y*2,minamb), _max(envdesc->ambient.z*2,minamb), 0 }; ambclr.mul (ps_r2_sun_lumscale_amb); -#ifdef COP_WEATHER_MANAGER - Fvector4 envclr = { envdesc.hemi_color.x*2+EPS, envdesc.hemi_color.y*2+EPS, envdesc.hemi_color.z*2+EPS, envdesc.weight }; -#else - Fvector4 envclr = { envdesc.sky_color.x*2+EPS, envdesc.sky_color.y*2+EPS, envdesc.sky_color.z*2+EPS, envdesc.weight }; -#endif - Fvector4 fogclr = { envdesc.fog_color.x, envdesc.fog_color.y, envdesc.fog_color.z, 0 }; + Fvector4 envclr = { envdesc->hemi_color.x*2+EPS, envdesc->hemi_color.y*2+EPS, envdesc->hemi_color.z*2+EPS, envdesc->weight }; + Fvector4 fogclr = { envdesc->fog_color.x, envdesc->fog_color.y, envdesc->fog_color.z, 0 }; envclr.x *= 2*ps_r2_sun_lumscale_hemi; envclr.y *= 2*ps_r2_sun_lumscale_hemi; envclr.z *= 2*ps_r2_sun_lumscale_hemi; diff --git a/trunk/xray/xr_3da/xrRender_R2/r2_rendertarget_phase_rain_drops.cpp b/trunk/xray/xr_3da/xrRender_R2/r2_rendertarget_phase_rain_drops.cpp index ffeb13bd..942b91b0 100644 --- a/trunk/xray/xr_3da/xrRender_R2/r2_rendertarget_phase_rain_drops.cpp +++ b/trunk/xray/xr_3da/xrRender_R2/r2_rendertarget_phase_rain_drops.cpp @@ -26,7 +26,7 @@ void CRenderTarget::phase_rain_drops () p0.set (.5f/_w, .5f/_h); p1.set ((_w+.5f)/_w, (_h+.5f)/_h ); - CEnvDescriptorMixer& envdesc= g_pGamePersistent->Environment().CurrentEnv ; + CEnvDescriptorMixer* envdesc= g_pGamePersistent->Environment().CurrentEnv ; // Set RT's u_setrt (rt_Generic_0,0,0,HW.pBaseZB); @@ -41,8 +41,8 @@ void CRenderTarget::phase_rain_drops () pv->p.set(float(_w+EPS),EPS, EPS,1.f); pv->uv0.set(p1.x, p0.y);pv->uv1.set(p1.x-ddw,p0.y-ddh);pv->uv2.set(p1.x+ddw,p0.y+ddh);pv->uv3.set(p1.x+ddw,p0.y-ddh);pv->uv4.set(p1.x-ddw,p0.y+ddh);pv->uv5.set(p1.x-ddw,p0.y,p0.y,p1.x+ddw);pv->uv6.set(p1.x,p0.y-ddh,p0.y+ddh,p1.x);pv++; RCache.Vertex.Unlock (4,g_aa_AA->vb_stride); - if (envdesc.rain_density > 0) - rain_drops_intensity += 0.005f * envdesc.rain_density; + if (envdesc->rain_density > 0) + rain_drops_intensity += 0.005f * envdesc->rain_density; else rain_drops_intensity -= 0.0025f; diff --git a/trunk/xray/xr_3da/xrRender_R2/r2_rendertarget_phase_scene.cpp b/trunk/xray/xr_3da/xrRender_R2/r2_rendertarget_phase_scene.cpp index 9c9a9e2f..34c68892 100644 --- a/trunk/xray/xr_3da/xrRender_R2/r2_rendertarget_phase_scene.cpp +++ b/trunk/xray/xr_3da/xrRender_R2/r2_rendertarget_phase_scene.cpp @@ -18,9 +18,8 @@ void CRenderTarget::phase_scene_prepare () //CHK_DX ( HW.pDevice->Clear ( 0L, NULL, D3DCLEAR_ZBUFFER|D3DCLEAR_STENCIL, 0x0, 1.0f, 0L) ); // Igor: soft particles - //CEnvDescriptor& E = *g_pGamePersistent->Environment().CurrentEnv; - CEnvDescriptor& E = g_pGamePersistent->Environment().CurrentEnv; - float fValue = E.m_fSunShaftsIntensity; + CEnvDescriptor* E = g_pGamePersistent->Environment().CurrentEnv; + float fValue = E->m_fSunShaftsIntensity; // TODO: add multiplication by sun color here //if (fValue<0.0001) FlagSunShafts = 0; diff --git a/trunk/xray/xr_3da/xrRender_R2/xrRender_R2.vcxproj b/trunk/xray/xr_3da/xrRender_R2/xrRender_R2.vcxproj index af78c068..919618e8 100644 --- a/trunk/xray/xr_3da/xrRender_R2/xrRender_R2.vcxproj +++ b/trunk/xray/xr_3da/xrRender_R2/xrRender_R2.vcxproj @@ -1,5 +1,5 @@  - + Debug @@ -42,38 +42,46 @@ DynamicLibrary MultiByte + v140 DynamicLibrary MultiByte + v140 DynamicLibrary MultiByte true + v140 DynamicLibrary MultiByte true + v140 DynamicLibrary MultiByte true + v140 DynamicLibrary MultiByte true + v140 DynamicLibrary MultiByte + v140 DynamicLibrary MultiByte + v140 diff --git a/trunk/xray/xr_3da/xr_efflensflare.cpp b/trunk/xray/xr_3da/xr_efflensflare.cpp index d2d41c2d..2cb00117 100644 --- a/trunk/xray/xr_3da/xr_efflensflare.cpp +++ b/trunk/xray/xr_3da/xr_efflensflare.cpp @@ -7,17 +7,18 @@ #include "Environment.h" #include "SkeletonCustom.h" #include "cl_intersect.h" -#include "..\..\build_config_defines.h" + +#include "xrGame/object_broker.h" #ifdef _EDITOR - #include "ui_toolscustom.h" - #include "ui_main.h" + #include "ui_toolscustom.h" + #include "ui_main.h" #else #include "xr_object.h" #include "igame_level.h" #endif -#define FAR_DIST g_pGamePersistent->Environment().CurrentEnv.far_plane +#define FAR_DIST g_pGamePersistent->Environment().CurrentEnv->far_plane #define MAX_Flares 24 ////////////////////////////////////////////////////////////////////////////// @@ -30,17 +31,17 @@ void CLensFlareDescriptor::SetSource(float fRadius, BOOL ign_color, LPCSTR tex_name, LPCSTR sh_name) { m_Source.fRadius = fRadius; - m_Source.shader = sh_name; - m_Source.texture = tex_name; - m_Source.ignore_color=ign_color; + m_Source.shader = sh_name; + m_Source.texture = tex_name; + m_Source.ignore_color=ign_color; } void CLensFlareDescriptor::SetGradient(float fMaxRadius, float fOpacity, LPCSTR tex_name, LPCSTR sh_name) { m_Gradient.fRadius = fMaxRadius; m_Gradient.fOpacity = fOpacity; - m_Gradient.shader = sh_name; - m_Gradient.texture = tex_name; + m_Gradient.shader = sh_name; + m_Gradient.texture = tex_name; } void CLensFlareDescriptor::AddFlare(float fRadius, float fOpacity, float fPosition, LPCSTR tex_name, LPCSTR sh_name) @@ -48,9 +49,9 @@ void CLensFlareDescriptor::AddFlare(float fRadius, float fOpacity, float fPositi SFlare F; F.fRadius = fRadius; F.fOpacity = fOpacity; - F.fPosition = fPosition; - F.shader = sh_name; - F.texture = tex_name; + F.fPosition = fPosition; + F.shader = sh_name; + F.texture = tex_name; m_Flares.push_back (F); } @@ -64,8 +65,6 @@ ref_shader CLensFlareDescriptor::CreateShader(LPCSTR tex_name, LPCSTR sh_name) void CLensFlareDescriptor::load(CInifile* pIni, LPCSTR sect) { section = sect; - -#ifdef COP_WEATHER_MANAGER m_Flags.set (flSource,pIni->r_bool(sect,"sun" )); if (m_Flags.is(flSource)){ LPCSTR S= pIni->r_string ( sect,"sun_shader" ); @@ -74,26 +73,15 @@ void CLensFlareDescriptor::load(CInifile* pIni, LPCSTR sect) BOOL i = pIni->r_bool ( sect,"sun_ignore_color" ); SetSource(r,i,T,S); } -#else - m_Flags.set (flSource,pIni->r_bool(sect,"source" )); - if (m_Flags.is(flSource)){ - LPCSTR S= pIni->r_string ( sect,"source_shader" ); - LPCSTR T= pIni->r_string ( sect,"sourcen_texture" ); - float r = pIni->r_float ( sect,"source_radius" ); - BOOL i = pIni->r_bool ( sect,"source_ignore_color" ); - SetSource(r,i,T,S); - } -#endif - m_Flags.set (flFlare,pIni->r_bool ( sect,"flares" )); if (m_Flags.is(flFlare)){ - LPCSTR S= pIni->r_string ( sect,"flare_shader" ); + LPCSTR S= pIni->r_string ( sect,"flare_shader" ); LPCSTR T= pIni->r_string ( sect,"flare_textures" ); LPCSTR R= pIni->r_string ( sect,"flare_radius" ); LPCSTR O= pIni->r_string ( sect,"flare_opacity"); LPCSTR P= pIni->r_string ( sect,"flare_position"); u32 tcnt= _GetItemCount(T); - string256 name; + string256 name; for (u32 i=0; ir_float ( sect,"gradient_opacity" ); SetGradient(r,o,T,S); } - m_StateBlendUpSpeed = 1.f/(_max(pIni->r_float( sect,"blend_rise_time" ),0.f)+EPS_S); - m_StateBlendDnSpeed = 1.f/(_max(pIni->r_float( sect,"blend_down_time" ),0.f)+EPS_S); + m_StateBlendUpSpeed = 1.f/(_max(pIni->r_float( sect,"blend_rise_time" ),0.f)+EPS_S); + m_StateBlendDnSpeed = 1.f/(_max(pIni->r_float( sect,"blend_down_time" ),0.f)+EPS_S); OnDeviceCreate(); } @@ -121,15 +109,15 @@ void CLensFlareDescriptor::OnDeviceCreate() // shaders m_Gradient.hShader = CreateShader (*m_Gradient.texture,*m_Gradient.shader); m_Source.hShader = CreateShader (*m_Source.texture,*m_Source.shader); - for (FlareIt it=m_Flares.begin(); it!=m_Flares.end(); it++) it->hShader = CreateShader(*it->texture,*it->shader); + for (FlareIt it=m_Flares.begin(); it!=m_Flares.end(); it++) it->hShader = CreateShader(*it->texture,*it->shader); } void CLensFlareDescriptor::OnDeviceDestroy() { // shaders - m_Gradient.hShader.destroy (); - m_Source.hShader.destroy (); - for (FlareIt it=m_Flares.begin(); it!=m_Flares.end(); it++) it->hShader.destroy(); + m_Gradient.hShader.destroy (); + m_Source.hShader.destroy (); + for (FlareIt it=m_Flares.begin(); it!=m_Flares.end(); it++) it->hShader.destroy(); } //------------------------------------------------------------------------------ @@ -140,14 +128,14 @@ CLensFlare::CLensFlare() fBlend = 0.f; - LightColor.set ( 0xFFFFFFFF ); + LightColor.set ( 0xFFFFFFFF ); fGradientValue = 0.f; - hGeom = 0; + hGeom = 0; m_Current = 0; - m_State = lfsNone; - m_StateBlend = 0.f; + m_State = lfsNone; + m_StateBlend = 0.f; #ifndef _EDITOR m_ray_cache.verts[0].set (0,0,0); @@ -162,6 +150,7 @@ CLensFlare::CLensFlare() CLensFlare::~CLensFlare() { OnDeviceDestroy (); + delete_data (m_Palette); } #ifndef _EDITOR @@ -209,7 +198,7 @@ IC void blend_lerp (float& cur, float tgt, float speed, float dt) cur += (diff/diff_a)*mot; } -void CLensFlare::OnFrame(int id) +void CLensFlare::OnFrame(shared_str id) { if (dwFrame==Device.dwFrame)return; #ifndef _EDITOR @@ -217,34 +206,36 @@ void CLensFlare::OnFrame(int id) #endif dwFrame = Device.dwFrame; - vSunDir.mul (g_pGamePersistent->Environment().CurrentEnv.sun_dir,-1); + R_ASSERT ( _valid(g_pGamePersistent->Environment().CurrentEnv->sun_dir) ); + vSunDir.mul (g_pGamePersistent->Environment().CurrentEnv->sun_dir,-1); + R_ASSERT ( _valid(vSunDir) ); // color - float tf = g_pGamePersistent->Environment().fTimeFactor; - Fvector& c = g_pGamePersistent->Environment().CurrentEnv.sun_color; + float tf = g_pGamePersistent->Environment().fTimeFactor; + Fvector& c = g_pGamePersistent->Environment().CurrentEnv->sun_color; LightColor.set (c.x,c.y,c.z,1.f); - CLensFlareDescriptor* desc = (id==-1)?0:&m_Palette[id]; - - switch(m_State){ - case lfsNone: m_State=lfsShow; m_Current=desc; break; - case lfsIdle: if (desc!=m_Current) m_State=lfsHide; break; - case lfsShow: - m_StateBlend = m_Current?(m_StateBlend + m_Current->m_StateBlendUpSpeed * Device.fTimeDelta * tf):1.f+EPS; - if (m_StateBlend>=1.f) m_State=lfsIdle; - break; - case lfsHide: - m_StateBlend = m_Current?(m_StateBlend - m_Current->m_StateBlendDnSpeed * Device.fTimeDelta * tf):0.f-EPS; - if (m_StateBlend<=0.f){ - m_State = lfsShow; - m_Current = desc; - m_StateBlend= m_Current?m_Current->m_StateBlendUpSpeed * Device.fTimeDelta * tf:0; - } - break; - } - clamp(m_StateBlend,0.f,1.f); - - if ((m_Current==0)||(LightColor.magnitude_rgb()==0.f)){bRender=false; return;} + CLensFlareDescriptor* desc = id.size() ? g_pGamePersistent->Environment().add_flare(m_Palette, id) : 0; + + switch(m_State){ + case lfsNone: m_State=lfsShow; m_Current=desc; break; + case lfsIdle: if (desc!=m_Current) m_State=lfsHide; break; + case lfsShow: + m_StateBlend = m_Current?(m_StateBlend + m_Current->m_StateBlendUpSpeed * Device.fTimeDelta * tf):1.f+EPS; + if (m_StateBlend>=1.f) m_State=lfsIdle; + break; + case lfsHide: + m_StateBlend = m_Current?(m_StateBlend - m_Current->m_StateBlendDnSpeed * Device.fTimeDelta * tf):0.f-EPS; + if (m_StateBlend<=0.f){ + m_State = lfsShow; + m_Current = desc; + m_StateBlend= m_Current?m_Current->m_StateBlendUpSpeed * Device.fTimeDelta * tf:0; + } + break; + } + clamp(m_StateBlend,0.f,1.f); + + if ((m_Current==0)||(LightColor.magnitude_rgb()==0.f)){bRender=false; return;} // // Compute center and axis of flares @@ -289,11 +280,13 @@ void CLensFlare::OnFrame(int id) vecX.set(1.0f, 0.0f, 0.0f); matEffCamPos.transform_dir(vecX); vecX.normalize(); + R_ASSERT( _valid(vecX) ); vecY.crossproduct(vecX, vecDir); + R_ASSERT( _valid(vecY) ); #ifdef _EDITOR float dist = UI->ZFar(); - if (Tools->RayPick(Device.m_Camera.GetPosition(),vSunDir,dist)) + if (Tools->RayPick(Device.m_Camera.GetPosition(),vSunDir,dist)) fBlend = fBlend - BLEND_DEC_SPEED * Device.fTimeDelta; else fBlend = fBlend + BLEND_INC_SPEED * Device.fTimeDelta; @@ -322,7 +315,7 @@ void CLensFlare::OnFrame(int id) // gradient if (m_Current->m_Flags.is(CLensFlareDescriptor::flGradient)) - { + { Fvector scr_pos; Device.mFullTransform.transform ( scr_pos, vecLight ); float kx = 1, ky = 1; @@ -334,7 +327,7 @@ void CLensFlare::OnFrame(int id) if (_abs(scr_pos.y) > sun_blend) ky = ((sun_max - (float)_abs(scr_pos.y))) / (sun_max - sun_blend); if (!((_abs(scr_pos.x) > sun_max) || (_abs(scr_pos.y) > sun_max))){ - float op = m_StateBlend*m_Current->m_Gradient.fOpacity; + float op = m_StateBlend*m_Current->m_Gradient.fOpacity; fGradientValue = kx * ky * op * fBlend; }else fGradientValue = 0; @@ -361,60 +354,60 @@ void CLensFlare::Render(BOOL bSun, BOOL bFlares, BOOL bGradient) float fDistance = FAR_DIST*0.75f; if (bSun){ - if (m_Current->m_Flags.is(CLensFlareDescriptor::flSource)){ - vecSx.mul (vecX, m_Current->m_Source.fRadius*fDistance); - vecSy.mul (vecY, m_Current->m_Source.fRadius*fDistance); - if (m_Current->m_Source.ignore_color) color.set(1.f,1.f,1.f,1.f); - else color.set(dwLight); - color.a *= m_StateBlend; - u32 c = color.get(); - pv->set (vecLight.x+vecSx.x-vecSy.x, vecLight.y+vecSx.y-vecSy.y, vecLight.z+vecSx.z-vecSy.z, c, 0, 0); pv++; - pv->set (vecLight.x+vecSx.x+vecSy.x, vecLight.y+vecSx.y+vecSy.y, vecLight.z+vecSx.z+vecSy.z, c, 0, 1); pv++; - pv->set (vecLight.x-vecSx.x-vecSy.x, vecLight.y-vecSx.y-vecSy.y, vecLight.z-vecSx.z-vecSy.z, c, 1, 0); pv++; - pv->set (vecLight.x-vecSx.x+vecSy.x, vecLight.y-vecSx.y+vecSy.y, vecLight.z-vecSx.z+vecSy.z, c, 1, 1); pv++; - _2render.push_back (m_Current->m_Source.hShader); - } + if (m_Current->m_Flags.is(CLensFlareDescriptor::flSource)){ + vecSx.mul (vecX, m_Current->m_Source.fRadius*fDistance); + vecSy.mul (vecY, m_Current->m_Source.fRadius*fDistance); + if (m_Current->m_Source.ignore_color) color.set(1.f,1.f,1.f,1.f); + else color.set(dwLight); + color.a *= m_StateBlend; + u32 c = color.get(); + pv->set (vecLight.x+vecSx.x-vecSy.x, vecLight.y+vecSx.y-vecSy.y, vecLight.z+vecSx.z-vecSy.z, c, 0, 0); pv++; + pv->set (vecLight.x+vecSx.x+vecSy.x, vecLight.y+vecSx.y+vecSy.y, vecLight.z+vecSx.z+vecSy.z, c, 0, 1); pv++; + pv->set (vecLight.x-vecSx.x-vecSy.x, vecLight.y-vecSx.y-vecSy.y, vecLight.z-vecSx.z-vecSy.z, c, 1, 0); pv++; + pv->set (vecLight.x-vecSx.x+vecSy.x, vecLight.y-vecSx.y+vecSy.y, vecLight.z-vecSx.z+vecSy.z, c, 1, 1); pv++; + _2render.push_back (m_Current->m_Source.hShader); + } } if (fBlend>=EPS_L) { if(bFlares){ vecDx.normalize (vecAxis); vecDy.crossproduct (vecDx, vecDir); - if (m_Current->m_Flags.is(CLensFlareDescriptor::flFlare)){ - for (CLensFlareDescriptor::FlareIt it=m_Current->m_Flares.begin(); it!=m_Current->m_Flares.end(); it++){ - CLensFlareDescriptor::SFlare& F = *it; - vec.mul (vecAxis, F.fPosition); - vec.add (vecCenter); - vecSx.mul (vecDx, F.fRadius*fDistance); - vecSy.mul (vecDy, F.fRadius*fDistance); - float cl = F.fOpacity * fBlend * m_StateBlend; - color.set ( dwLight ); - color.mul_rgba ( cl ); - u32 c = color.get(); - pv->set (vec.x+vecSx.x-vecSy.x, vec.y+vecSx.y-vecSy.y, vec.z+vecSx.z-vecSy.z, c, 0, 0); pv++; - pv->set (vec.x+vecSx.x+vecSy.x, vec.y+vecSx.y+vecSy.y, vec.z+vecSx.z+vecSy.z, c, 0, 1); pv++; - pv->set (vec.x-vecSx.x-vecSy.x, vec.y-vecSx.y-vecSy.y, vec.z-vecSx.z-vecSy.z, c, 1, 0); pv++; - pv->set (vec.x-vecSx.x+vecSy.x, vec.y-vecSx.y+vecSy.y, vec.z-vecSx.z+vecSy.z, c, 1, 1); pv++; - _2render.push_back (it->hShader); - } - } + if (m_Current->m_Flags.is(CLensFlareDescriptor::flFlare)){ + for (CLensFlareDescriptor::FlareIt it=m_Current->m_Flares.begin(); it!=m_Current->m_Flares.end(); it++){ + CLensFlareDescriptor::SFlare& F = *it; + vec.mul (vecAxis, F.fPosition); + vec.add (vecCenter); + vecSx.mul (vecDx, F.fRadius*fDistance); + vecSy.mul (vecDy, F.fRadius*fDistance); + float cl = F.fOpacity * fBlend * m_StateBlend; + color.set ( dwLight ); + color.mul_rgba ( cl ); + u32 c = color.get(); + pv->set (vec.x+vecSx.x-vecSy.x, vec.y+vecSx.y-vecSy.y, vec.z+vecSx.z-vecSy.z, c, 0, 0); pv++; + pv->set (vec.x+vecSx.x+vecSy.x, vec.y+vecSx.y+vecSy.y, vec.z+vecSx.z+vecSy.z, c, 0, 1); pv++; + pv->set (vec.x-vecSx.x-vecSy.x, vec.y-vecSx.y-vecSy.y, vec.z-vecSx.z-vecSy.z, c, 1, 0); pv++; + pv->set (vec.x-vecSx.x+vecSy.x, vec.y-vecSx.y+vecSy.y, vec.z-vecSx.z+vecSy.z, c, 1, 1); pv++; + _2render.push_back (it->hShader); + } + } } // gradient if (bGradient&&(fGradientValue>=EPS_L)){ - if (m_Current->m_Flags.is(CLensFlareDescriptor::flGradient)){ - vecSx.mul (vecX, m_Current->m_Gradient.fRadius*fGradientValue*fDistance); - vecSy.mul (vecY, m_Current->m_Gradient.fRadius*fGradientValue*fDistance); - - color.set ( dwLight ); - color.mul_rgba ( fGradientValue*m_StateBlend ); - - u32 c = color.get (); - pv->set (vecLight.x+vecSx.x-vecSy.x, vecLight.y+vecSx.y-vecSy.y, vecLight.z+vecSx.z-vecSy.z, c, 0, 0); pv++; - pv->set (vecLight.x+vecSx.x+vecSy.x, vecLight.y+vecSx.y+vecSy.y, vecLight.z+vecSx.z+vecSy.z, c, 0, 1); pv++; - pv->set (vecLight.x-vecSx.x-vecSy.x, vecLight.y-vecSx.y-vecSy.y, vecLight.z-vecSx.z-vecSy.z, c, 1, 0); pv++; - pv->set (vecLight.x-vecSx.x+vecSy.x, vecLight.y-vecSx.y+vecSy.y, vecLight.z-vecSx.z+vecSy.z, c, 1, 1); pv++; - _2render.push_back (m_Current->m_Gradient.hShader); - } + if (m_Current->m_Flags.is(CLensFlareDescriptor::flGradient)){ + vecSx.mul (vecX, m_Current->m_Gradient.fRadius*fGradientValue*fDistance); + vecSy.mul (vecY, m_Current->m_Gradient.fRadius*fGradientValue*fDistance); + + color.set ( dwLight ); + color.mul_rgba ( fGradientValue*m_StateBlend ); + + u32 c = color.get (); + pv->set (vecLight.x+vecSx.x-vecSy.x, vecLight.y+vecSx.y-vecSy.y, vecLight.z+vecSx.z-vecSy.z, c, 0, 0); pv++; + pv->set (vecLight.x+vecSx.x+vecSy.x, vecLight.y+vecSx.y+vecSy.y, vecLight.z+vecSx.z+vecSy.z, c, 0, 1); pv++; + pv->set (vecLight.x-vecSx.x-vecSy.x, vecLight.y-vecSx.y-vecSy.y, vecLight.z-vecSx.z-vecSy.z, c, 1, 0); pv++; + pv->set (vecLight.x-vecSx.x+vecSy.x, vecLight.y-vecSx.y+vecSy.y, vecLight.z-vecSx.z+vecSy.z, c, 1, 1); pv++; + _2render.push_back (m_Current->m_Gradient.hShader); + } } } RCache.Vertex.Unlock (_2render.size()*4,hGeom.stride()); @@ -423,24 +416,23 @@ void CLensFlare::Render(BOOL bSun, BOOL bFlares, BOOL bGradient) RCache.set_Geometry (hGeom); for (u32 i=0; i<_2render.size(); i++) { - if (_2render[i]) + if (_2render[i]) { u32 vBase = i*4+VS_Offset; RCache.set_Shader (_2render[i]); RCache.Render (D3DPT_TRIANGLELIST,vBase, 0,4,0,2); - } + } } } -int CLensFlare::AppendDef(CInifile* pIni, LPCSTR sect) +shared_str CLensFlare::AppendDef(CEnvironment& environment, CInifile* pIni, LPCSTR sect) { - if (!sect||(0==sect[0])) return -1; - for (LensFlareDescIt it=m_Palette.begin(); it!=m_Palette.end(); it++) - if (0==xr_strcmp(*it->section,sect)) return int(it-m_Palette.begin()); - m_Palette.push_back (CLensFlareDescriptor()); - CLensFlareDescriptor& lf = m_Palette.back(); - lf.load (pIni,sect); - return m_Palette.size()-1; + if (!sect||(0==sect[0])) return ""; + for (LensFlareDescIt it=m_Palette.begin(); it!=m_Palette.end(); it++) + if (0==xr_strcmp(*(*it)->section,sect)) return sect; + + environment.add_flare(m_Palette, sect); + return sect; } void CLensFlare::OnDeviceCreate() @@ -449,15 +441,15 @@ void CLensFlare::OnDeviceCreate() hGeom.create (FVF::F_LIT,RCache.Vertex.Buffer(),RCache.QuadIB); // palette - for (LensFlareDescIt it=m_Palette.begin(); it!=m_Palette.end(); it++) - it->OnDeviceCreate(); + for (LensFlareDescIt it=m_Palette.begin(); it!=m_Palette.end(); it++) + (*it)->OnDeviceCreate(); } void CLensFlare::OnDeviceDestroy() { // palette - for (LensFlareDescIt it=m_Palette.begin(); it!=m_Palette.end(); it++) - it->OnDeviceDestroy(); + for (LensFlareDescIt it=m_Palette.begin(); it!=m_Palette.end(); it++) + (*it)->OnDeviceDestroy(); // VS hGeom.destroy(); diff --git a/trunk/xray/xr_3da/xr_efflensflare.h b/trunk/xray/xr_3da/xr_efflensflare.h index 845b1b1f..cd35b496 100644 --- a/trunk/xray/xr_3da/xr_efflensflare.h +++ b/trunk/xray/xr_3da/xr_efflensflare.h @@ -4,56 +4,57 @@ #include "xr_collide_defs.h" class ENGINE_API CInifile; +class ENGINE_API CEnvironment; class ENGINE_API CLensFlareDescriptor { public: struct SFlare { - float fOpacity; - float fRadius; - float fPosition; - shared_str texture; - shared_str shader; - ref_shader hShader; - SFlare() { fOpacity = fRadius = fPosition = 0; } + float fOpacity; + float fRadius; + float fPosition; + shared_str texture; + shared_str shader; + ref_shader hShader; + SFlare() { fOpacity = fRadius = fPosition = 0; } }; - struct SSource: public SFlare - { - BOOL ignore_color; - }; - DEFINE_VECTOR (SFlare,FlareVec,FlareIt); - FlareVec m_Flares; + struct SSource: public SFlare + { + BOOL ignore_color; + }; + DEFINE_VECTOR (SFlare,FlareVec,FlareIt); + FlareVec m_Flares; enum { - flFlare = (1<<0), - flSource = (1<<1), - flGradient = (1<<2) - }; + flFlare = (1<<0), + flSource = (1<<1), + flGradient = (1<<2) + }; Flags32 m_Flags; - + // source - SSource m_Source; - + SSource m_Source; + // gradient - SFlare m_Gradient; + SFlare m_Gradient; - float m_StateBlendUpSpeed; - float m_StateBlendDnSpeed; - + float m_StateBlendUpSpeed; + float m_StateBlendDnSpeed; + void SetGradient (float fMaxRadius, float fOpacity, LPCSTR tex_name, LPCSTR sh_name); - void SetSource (float fRadius, BOOL ign_color, LPCSTR tex_name, LPCSTR sh_name); - void AddFlare (float fRadius, float fOpacity, float fPosition, LPCSTR tex_name, LPCSTR sh_name); - ref_shader CreateShader (LPCSTR tex_name, LPCSTR sh_name); + void SetSource (float fRadius, BOOL ign_color, LPCSTR tex_name, LPCSTR sh_name); + void AddFlare (float fRadius, float fOpacity, float fPosition, LPCSTR tex_name, LPCSTR sh_name); + ref_shader CreateShader (LPCSTR tex_name, LPCSTR sh_name); shared_str section; public: - CLensFlareDescriptor(){m_Flags.zero();section=0;m_StateBlendUpSpeed=m_StateBlendDnSpeed=0.1f;} - void load (CInifile* pIni, LPCSTR section); + CLensFlareDescriptor(){m_Flags.zero();section=0;m_StateBlendUpSpeed=m_StateBlendDnSpeed=0.1f;} + void load (CInifile* pIni, LPCSTR section); void OnDeviceCreate (); void OnDeviceDestroy (); }; -DEFINE_VECTOR(CLensFlareDescriptor,LensFlareDescVec,LensFlareDescIt); +DEFINE_VECTOR(CLensFlareDescriptor*,LensFlareDescVec,LensFlareDescIt); class ENGINE_API CLensFlare @@ -71,22 +72,23 @@ class ENGINE_API CLensFlare BOOL bRender; // variable - Fcolor LightColor; + Fcolor LightColor; float fGradientValue; ref_geom hGeom; - LensFlareDescVec m_Palette; + LensFlareDescVec m_Palette; CLensFlareDescriptor* m_Current; - enum LFState{ - lfsNone, - lfsIdle, - lfsHide, - lfsShow, - }; - LFState m_State; - float m_StateBlend; + enum LFState{ + lfsNone, + lfsIdle, + lfsHide, + lfsShow, + }; +protected: + LFState m_State; + float m_StateBlend; public: #ifndef _EDITOR @@ -96,12 +98,12 @@ class ENGINE_API CLensFlare CLensFlare (); virtual ~CLensFlare (); - void OnFrame (int id); - void __fastcall Render (BOOL bSun, BOOL bFlares, BOOL bGradient); - void OnDeviceCreate (); + void OnFrame (shared_str id); + void __fastcall Render (BOOL bSun, BOOL bFlares, BOOL bGradient); + void OnDeviceCreate (); void OnDeviceDestroy (); - int AppendDef (CInifile* pIni, LPCSTR sect); + shared_str AppendDef (CEnvironment& environment, CInifile* pIni, LPCSTR sect); void Invalidate (){m_State=lfsNone;} };