2
3
mirror of https://foundry.openuru.org/gitblit/r/CWE-ou-minkata.git synced 2025-07-15 10:54:18 +00:00

Compare commits

..

59 Commits

Author SHA1 Message Date
f03a837642 Add more functionality to the bink stubs to make them behave more like the previous implementation did when built without BINK_SDK_AVAILABLE.
In particular, the intro movie now exits immediately again rather than staying indefinitely.

The important difference is to send the completion callback in plBinkPlayer::NextFrame(), i.e. act as if we had reached the end of the movie.

Storing the filename is to keep plClient::IHandleMovieMsg() from deleting and recreating the plBinkPlayer on every message.

The changed return values are just to better match the previous behavior and probably don?t matter.
2012-12-18 15:49:41 +01:00
30d140b8a0 stub out plClient Bink support 2012-12-15 23:58:34 -05:00
431bb5ff90 Merged in Skoader/cwe-ou/window-size (pull request #18)
Fix improperly calculated window size in initial Windowed mode.

User visible effect: This changeset removes an (in)visible grid of seams or blurriness in the client window. They are most noticeable when moving the cursor over them.

Window shouldn't have a resizing border.
2012-10-13 00:47:35 +02:00
1d309e3ce5 Merged in Skoader/cwe-ou/window-cursor (pull request #21, update for #17)
Free the cursor

Allows the cursor to leave the client window and disables mouse recentering at load time.
2012-10-13 00:33:55 +02:00
78bfdad9c4 Merged in cwalther/cwe/cursors2 (pull request #10)
Improved Cursors

This is the second attempt at getting the following improvements to the Uru mouse cursors into CWE-ou:

* fix the blurriness
* add a subtle shadow to fix cursors being invisible on light backgrounds
* cleaner, more regular appearance

A (slightly outdated) picture for comparison is at http://forums.openuru.org/viewtopic.php?t=558&p=4265#p4265 , and anyone who has played on Gehn, TOC, or any other shard using the H'uru client has already seen the new cursors.

In order to do this properly, in a way that will continue to work in a cross-platform future, a lot of work done by Deledrius in the H'uru fork is included: He added PNG support to Plasma and introduced a client resource manager that loads resources such as the cursors, but also voice chat indicators and the loading linking book animation, which were also replaced by higher-quality recreations, fromfile instead of from Windows resources. resource.data

This also opens the way for other applications of PNG, such as saving the local copies of KI pictures in a lossless format instead of the heavily compressed JPEG we currently have.

Note: the new code requires a newer version of libpng than included with the CWE sources. Like other library dependencies, this must be installed separately. Instructions for that are at http://wiki.openuru.org/index.php?title=Build_the_client_with_MSVC_2003#Build_steps .
2012-10-13 00:28:09 +02:00
368d757bf8 Merged in Lyrositor/cwe-ou/jpeg (pull request #15)
Fix various JPEG issues.

These three commits fix various issues with JPEG images in Uru.
2012-10-13 00:14:10 +02:00
ca58d0e701 Merged in Lyrositor/cwe-ou/clickables-afk (pull request #14)
Allow clickables to function while sitting or AFK.

Fix from Hoikas. Original pull request: https://github.com/H-uru/Plasma/pull/176
2012-10-13 00:10:46 +02:00
a3592d9a0a Merged in Skoader/cwe-ou/msvc10 (pull request #11)
Update for Visual Studio 2010

Update for MSVC10 as briefly discussed in the forums.

This was done over several commits to make it easier to identify the changes that were required and to assist the review process. It adds VC10 project files for the client, most of the Plasma apps and the required Plasma libraries.

Dependencies. The new projects are configured to find 3rd party libraries in the same locations as the 2003 projects with the following exceptions - VS2010 doesn't like the old speex lib in the repository, and will instead look in - xiph/include/speex and xiph/lib. And the ogg and vorbis libraries are also expected to be in the same directory - xiph/include/ogg, xiph/include/vorbis and xiph/lib.

Project Configurations. Configurations have been setup for debug and release builds of the both the internal and external live client.
2012-10-13 00:08:52 +02:00
3cf35d0bc0 Merged in Lyrositor/cwe-ou (pull request #12)
Fixed console documentation

Fixed console documentation. Prompting for brief HTML documentation no longer appends a new group to the previous one (see https://github.com/H-uru/Plasma/issues/170). This has been tested both by myself and by H'uru members.
2012-10-13 00:04:54 +02:00
76ee9975b7 Window shouldn't have a resizing border.
This removes the WS_THICKFRAME & WS_MAXIMIZEBOX window styles in windowed mode.
2012-10-02 12:11:30 +10:00
7f3d416290 Fix no cursor when not the top level window.
WM_MOUSEMOVE messages were only processed when the window was active.
2012-09-27 22:40:37 +10:00
ec29c270e4 Fix clicking on the title bar does not activate the window. 2012-09-27 22:32:41 +10:00
357d4aa7d1 Fix no cursor on window frame and title bar.
Remove mouse capture and handle visibility via WM_SETCURSOR messages instead of
window activation events.
2012-09-27 22:25:38 +10:00
91a4f8ab3e Update MSVC10 projects. 2012-07-01 20:52:45 +02:00
48ded426a9 Merge msvc10 into cursors2 2012-06-24 16:01:01 +02:00
eba0968808 Avoid truncated window size after going from fullscreen to a window of the same size.
Must set the window size after the display resolution, otherwise Windows may clamp it to a smaller size than specified.
2012-06-17 00:38:07 +02:00
97b9503cb1 Merge MOULa build 912 from Cyan
- Update Scripts/Python/plasma/* with our changes from MOULSCRIPT-ou (apparently their build process uses or produces these, ours doesn't).
- Bump build ID.
2012-06-15 10:24:25 +02:00
68ba122afe Build 912 2012-06-14 17:09:15 -07:00
743419d9e5 Better centering and header consistency. 2012-05-13 09:14:47 -04:00
5951a11e86 Add static keyword back. 2012-05-13 08:51:32 -04:00
46810aa990 Fixed console documentation. Prompting for brief HTML documentation no longer appends a new group to the previous one (see https://github.com/H-uru/Plasma/issues/170). 2012-05-11 17:21:40 -04:00
fdc8e28c2f Allow clickables to function while sitting or AFK.
Less special casing FTW!
2012-03-09 23:30:31 -05:00
1cac4f85da Fix a potential crash in pyVaultImageNode.
Fixes a crash which can occur when attempting to fetch
an unsupported image type.
2012-02-09 23:47:22 -08:00
487f63f60b Fix mouse recentering.
Existing fix didn't apply until after SecurePreloader completed.
This disables the mouse recentering earlier.
2012-01-20 05:18:04 -08:00
a7271982d5 Show notification when missing required resource data file. 2012-01-04 23:20:49 -08:00
1d23f50bf6 Merge open source re-licensing into added files
(from git 4f01583)
2012-04-09 23:35:26 +02:00
f67e52eeb2 Change indentation to tabs and line endings to CRLF on the added files, to match the rest of the code. 2012-04-09 23:21:13 +02:00
0b57fd1339 Include a pre-built resource.dat
since the prerequisites for building it can be a bit of a hassle to install, and it should rarely change.
2012-04-09 23:10:40 +02:00
f4b3a43026 Fix improperly calculated window size in initial Windowed mode. 2011-07-20 23:07:46 -07:00
1530af77f7 Improve detail rendition (in particular of thin lines) on the cursors
by rendering them at higher resolution and then running them through a
gamma-aware down-scaling algorithm.
2011-07-20 16:15:24 +02:00
487d7b4923 Higher-quality cursors with a shadow to make them visible on light backgrounds.
Same look as in 760606d except for the linking book, which got a slight
curvature on the pages (inspired by Deledrius' one, 99bda8c).

The SVG is hand-tweaked to work around some differences in rendering between
rsvg and Inkscape. I hope editing it in Inkscape again won't break the tweaks,
check the diff closely if you do!

Effects (blurred shadows) appear to be clipped to the SVG viewport by rsvg,
which is why drawing the whole SVG shifted for the book cursors no longer
works and we shift individual layers inside the SVG instead.
2011-07-20 13:48:08 +02:00
9553ecd05b Ignore empty resource items in plClientResMgr list on destruction. 2011-07-21 11:53:18 -07:00
3c552912fa Removed ClipCursor which prevented cursor from leaving client window.
Disabled cursor being re-centered during progress screen.
2011-07-10 19:10:51 -07:00
603bc51cfd Cope with unknown resource name extensions.
(E.g. a mistakenly included Thumbs.db)
2011-06-29 22:23:55 +02:00
ae5f410eee Changed font for UPDATING text image to match original. 2011-07-02 11:37:40 -07:00
f892871a33 Fix rotation to match original clockwise direction.
Cyan's resources were loaded into the array in reverse order,
requiring the images to appear count-clockwise.  This is no
longer the case, as the array is now built in frame order.
2011-06-29 15:17:28 -07:00
ff9aa4ac84 Add automatic creation of external plClient resources. 2011-06-24 18:04:47 -07:00
40611119c0 Normalize cursor resource names. 2011-06-16 23:51:24 -07:00
d0e842aec2 Cleanup of additional unnecessary resources and dependencies. 2011-06-16 23:31:20 -07:00
d751f371b5 Remove embedded-resource code. 2011-06-16 23:13:57 -07:00
5da91faed0 Add support for external resource Linking and Update text. 2011-06-16 23:04:16 -07:00
043adb2d7c Remove unnecessary resources. 2011-06-16 22:23:34 -07:00
508e431a99 Refactor plPlates CreateResource function names.
Add support for external resource Cursors.
Add support for external resource Progress Linking Book.
Add support for external resource Voice Chat indicators.
2011-06-16 22:16:50 -07:00
197e24a746 Add functions to load a specified resource from the plClientResMgr onto a plate. 2011-06-16 22:05:49 -07:00
f3344fc544 Add new plClientResMgr for graphic resources external to client executable. 2011-06-01 12:54:30 -07:00
6538d78d9f Fix for plPNG::IRead improperly handling 24-bit RGB and non-transparent paletted images. 2011-06-25 20:22:53 -07:00
7998b3bcc4 Fix for plPNG::IRead not reading final end block of image. 2011-05-30 16:44:46 -07:00
86251807fc plPageOptimizer now needs libpng too. 2012-04-07 18:01:09 +02:00
da4003b7fc Add Python function and glue for PNG saving. 2011-05-11 17:02:14 -07:00
7af3a02c66 AStyle formatting fixes. 2011-05-11 00:17:55 -07:00
7523f6fa1f Add PNG write support to plPNG. 2011-05-10 23:47:27 -07:00
c3657d20a4 Fix incorrect JPEG file IO. 2011-05-10 02:56:28 -07:00
8cee080878 Add PNG read support to plPNG. 2011-05-09 22:09:27 -07:00
3e34e30308 Add libPNG support stubs. 2011-05-07 15:37:35 -07:00
503012c700 Replace libpng and zlib by newer versions.
As for other library dependencies, source and binaries are no longer included but must be installed separately.

The file layout has changed in one detail: zlib headers are now under XPlatform/zlib rather than XPlatform/zlib/inc. Rather than working around that by moving the headers after the build, I've updated those projects relying on that that I could find, hope it doesn't upset any that are not here.

Installation instructions:

1. Download zlib126.zip (or a newer version) from http://www.zlib.net/ , extract the zlib-1.2.6 folder it contains and move/rename it to MOULOpenSourceClientPlugin/StaticSDKs/XPlatform/zlib .
2. Download lpng1510.zip (or a newer version) from http://libpng.org/pub/png/libpng.html , extract the lpng1510 folder it contains and move/rename it to MOULOpenSourceClientPlugin/StaticSDKs/XPlatform/png .
3. Open png/projects/visualc71/libpng.sln in Visual Studio 2003.
4. Select "LIB Debug" from the Solution Configurations popup menu in the toolbar, then Build > Build Solution.
5. Select the "LIB Release" configuration and build the solution.
6. Make a new folder png/lib and move png/projects/visualc71/Win32_LIB_Debug/libpngd.lib as well as png/projects/visualc71/Win32_LIB_Release/libpng.lib into it.
7. Make a new folder zlib/lib and move png/projects/visualc71/Win32_LIB_Debug/ZLib/zlibd.lib as well as png/projects/visualc71/Win32_LIB_Release/ZLib/zlib.lib into it.
2012-04-07 15:54:35 +02:00
ced3c03fed Merge cursor alignment fixes into default. 2012-04-05 22:35:44 +02:00
ff435650b8 Display cursors pixel-by-pixel rather than scaling them to 34.56x34.56 pixels.
This fixes the blurring caused by scaling up the 32x32 px cursor bitmaps.
2011-04-16 21:05:23 +02:00
259f07462f Properly align plates by compensating for the half-pixel offset of Direct3D 9. 2011-04-16 20:35:16 +02:00
a87b691e33 Fix output height in plJPEG writer 2011-04-10 14:27:10 -07:00
314 changed files with 10760 additions and 73134 deletions

View File

@ -5,10 +5,12 @@ syntax: glob
*.user
*.sdf
*.opensdf
*.pyc
Release*/
Debug*/
ipch/
syntax: regexp
^MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/Apps/plClient/external/render/
^MOULOpenSourceClientPlugin/Plasma20/test/
^MOULOpenSourceClientPlugin/Plasma20/tools/
^MOULOpenSourceClientPlugin/StaticSDKs/

View File

@ -192,6 +192,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "plClientPatcher", "..\plCli
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "plClipboard", "..\..\PubUtilLib\plClipboard\plClipboard.vcxproj", "{CA2D4E65-EA68-465F-843A-4AF75243B474}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "plClientResMgr", "..\..\PubUtilLib\plClientResMgr\plClientResMgr.vcxproj", "{D005F6EF-6A43-1957-7458-10ED3CA39F02}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug_Internal|Win32 = Debug_Internal|Win32
@ -968,6 +970,14 @@ Global
{CA2D4E65-EA68-465F-843A-4AF75243B474}.Release_Internal|Win32.Build.0 = Release_Internal|Win32
{CA2D4E65-EA68-465F-843A-4AF75243B474}.Release|Win32.ActiveCfg = Release|Win32
{CA2D4E65-EA68-465F-843A-4AF75243B474}.Release|Win32.Build.0 = Release|Win32
{D005F6EF-6A43-1957-7458-10ED3CA39F02}.Debug_Internal|Win32.ActiveCfg = Debug_Internal|Win32
{D005F6EF-6A43-1957-7458-10ED3CA39F02}.Debug_Internal|Win32.Build.0 = Debug_Internal|Win32
{D005F6EF-6A43-1957-7458-10ED3CA39F02}.Debug|Win32.ActiveCfg = Debug|Win32
{D005F6EF-6A43-1957-7458-10ED3CA39F02}.Debug|Win32.Build.0 = Debug|Win32
{D005F6EF-6A43-1957-7458-10ED3CA39F02}.Release_Internal|Win32.ActiveCfg = Release_Internal|Win32
{D005F6EF-6A43-1957-7458-10ED3CA39F02}.Release_Internal|Win32.Build.0 = Release_Internal|Win32
{D005F6EF-6A43-1957-7458-10ED3CA39F02}.Release|Win32.ActiveCfg = Release|Win32
{D005F6EF-6A43-1957-7458-10ED3CA39F02}.Release|Win32.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

View File

@ -106,10 +106,10 @@
<StringPooling>true</StringPooling>
</ClCompile>
<Link>
<AdditionalDependencies>winhttp.lib;ws2_32.lib;strmiids.lib;vfw32.lib;version.lib;Rpcrt4.lib;d3dx9.lib;dinput8.lib;dxerr9.lib;dxguid.lib;dsound.lib;OpenAL32.lib;libeay32.lib;NxCharacter.lib;PhysXLoader.lib;libogg_static.lib;libvorbis_static.lib;libvorbisfile_static.lib;libspeex.lib;libjpeg.lib;zlibd.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>winhttp.lib;ws2_32.lib;strmiids.lib;vfw32.lib;version.lib;Rpcrt4.lib;d3dx9.lib;dinput8.lib;dxerr9.lib;dxguid.lib;dsound.lib;OpenAL32.lib;libeay32.lib;NxCharacter.lib;PhysXLoader.lib;libogg_static.lib;libvorbis_static.lib;libvorbisfile_static.lib;libspeex.lib;libjpeg.lib;zlibd.lib;libpngd.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
<SuppressStartupBanner>true</SuppressStartupBanner>
<AdditionalLibraryDirectories>..\..\..\..\..\StaticSDKs\Win32\DX9.0c\Lib\x86;..\..\..\..\..\StaticSDKs\Win32\OpenAL 1.1 with EFX SDK\libs\Win32;..\..\..\..\..\StaticSDKs\Win32\OpenSSL\lib;..\..\..\..\..\StaticSDKs\Win32\PhysX\lib\win32;..\..\..\..\..\StaticSDKs\Win32\xiph\lib\Debug;..\..\..\..\..\StaticSDKs\XPlatform\expat-1.95.7\StaticLibs\Win32;..\..\..\..\..\StaticSDKs\XPlatform\jpeg-8c-rgba;..\..\..\..\..\StaticSDKs\XPlatform\zlib\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>..\..\..\..\..\StaticSDKs\Win32\DX9.0c\Lib\x86;..\..\..\..\..\StaticSDKs\Win32\OpenAL 1.1 with EFX SDK\libs\Win32;..\..\..\..\..\StaticSDKs\Win32\OpenSSL\lib;..\..\..\..\..\StaticSDKs\Win32\PhysX\lib\win32;..\..\..\..\..\StaticSDKs\Win32\xiph\lib\Debug;..\..\..\..\..\StaticSDKs\XPlatform\expat-1.95.7\StaticLibs\Win32;..\..\..\..\..\StaticSDKs\XPlatform\jpeg-8c-rgba;..\..\..\..\..\StaticSDKs\XPlatform\zlib\lib;..\..\..\..\..\StaticSDKs\XPlatform\png\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<IgnoreSpecificDefaultLibraries>libc.lib;libcd.lib;libci.lib;libcid.lib;libcmtd.lib;libcmt.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AssemblyDebug>true</AssemblyDebug>
@ -158,10 +158,10 @@
<StringPooling>true</StringPooling>
</ClCompile>
<Link>
<AdditionalDependencies>winhttp.lib;ws2_32.lib;strmiids.lib;vfw32.lib;version.lib;Rpcrt4.lib;d3dx9.lib;dinput8.lib;dxerr9.lib;dxguid.lib;dsound.lib;OpenAL32.lib;libeay32.lib;NxCharacter.lib;PhysXLoader.lib;libogg_static.lib;libvorbis_static.lib;libvorbisfile_static.lib;libspeex.lib;libjpeg.lib;zlibd.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>winhttp.lib;ws2_32.lib;strmiids.lib;vfw32.lib;version.lib;Rpcrt4.lib;d3dx9.lib;dinput8.lib;dxerr9.lib;dxguid.lib;dsound.lib;OpenAL32.lib;libeay32.lib;NxCharacter.lib;PhysXLoader.lib;libogg_static.lib;libvorbis_static.lib;libvorbisfile_static.lib;libspeex.lib;libjpeg.lib;zlibd.lib;libpngd.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
<SuppressStartupBanner>true</SuppressStartupBanner>
<AdditionalLibraryDirectories>..\..\..\..\..\StaticSDKs\Win32\DX9.0c\Lib\x86;..\..\..\..\..\StaticSDKs\Win32\OpenAL 1.1 with EFX SDK\libs\Win32;..\..\..\..\..\StaticSDKs\Win32\OpenSSL\lib;..\..\..\..\..\StaticSDKs\Win32\PhysX\lib\win32;..\..\..\..\..\StaticSDKs\Win32\xiph\lib\Debug;..\..\..\..\..\StaticSDKs\XPlatform\expat-1.95.7\StaticLibs\Win32;..\..\..\..\..\StaticSDKs\XPlatform\jpeg-8c-rgba;..\..\..\..\..\StaticSDKs\XPlatform\zlib\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>..\..\..\..\..\StaticSDKs\Win32\DX9.0c\Lib\x86;..\..\..\..\..\StaticSDKs\Win32\OpenAL 1.1 with EFX SDK\libs\Win32;..\..\..\..\..\StaticSDKs\Win32\OpenSSL\lib;..\..\..\..\..\StaticSDKs\Win32\PhysX\lib\win32;..\..\..\..\..\StaticSDKs\Win32\xiph\lib\Debug;..\..\..\..\..\StaticSDKs\XPlatform\expat-1.95.7\StaticLibs\Win32;..\..\..\..\..\StaticSDKs\XPlatform\jpeg-8c-rgba;..\..\..\..\..\StaticSDKs\XPlatform\zlib\lib;..\..\..\..\..\StaticSDKs\XPlatform\png\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<IgnoreSpecificDefaultLibraries>libc.lib;libcd.lib;libci.lib;libcid.lib;libcmtd.lib;libcmt.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AssemblyDebug>true</AssemblyDebug>
@ -214,10 +214,10 @@
<BufferSecurityCheck>true</BufferSecurityCheck>
</ClCompile>
<Link>
<AdditionalDependencies>winhttp.lib;ws2_32.lib;strmiids.lib;vfw32.lib;version.lib;Rpcrt4.lib;d3dx9.lib;dinput8.lib;dxerr9.lib;dxguid.lib;dsound.lib;OpenAL32.lib;libeay32.lib;NxCharacter.lib;PhysXLoader.lib;libogg_static.lib;libvorbis_static.lib;libvorbisfile_static.lib;libspeex.lib;libjpeg.lib;zlib.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>winhttp.lib;ws2_32.lib;strmiids.lib;vfw32.lib;version.lib;Rpcrt4.lib;d3dx9.lib;dinput8.lib;dxerr9.lib;dxguid.lib;dsound.lib;OpenAL32.lib;libeay32.lib;NxCharacter.lib;PhysXLoader.lib;libogg_static.lib;libvorbis_static.lib;libvorbisfile_static.lib;libspeex.lib;libjpeg.lib;zlib.lib;libpng.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
<SuppressStartupBanner>true</SuppressStartupBanner>
<AdditionalLibraryDirectories>..\..\..\..\..\StaticSDKs\Win32\DX9.0c\Lib\x86;..\..\..\..\..\StaticSDKs\Win32\OpenAL 1.1 with EFX SDK\libs\Win32;..\..\..\..\..\StaticSDKs\Win32\OpenSSL\lib;..\..\..\..\..\StaticSDKs\Win32\PhysX\lib\win32;..\..\..\..\..\StaticSDKs\Win32\xiph\lib\Release;..\..\..\..\..\StaticSDKs\XPlatform\expat-1.95.7\StaticLibs\Win32;..\..\..\..\..\StaticSDKs\XPlatform\jpeg-8c-rgba;..\..\..\..\..\StaticSDKs\XPlatform\zlib\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>..\..\..\..\..\StaticSDKs\Win32\DX9.0c\Lib\x86;..\..\..\..\..\StaticSDKs\Win32\OpenAL 1.1 with EFX SDK\libs\Win32;..\..\..\..\..\StaticSDKs\Win32\OpenSSL\lib;..\..\..\..\..\StaticSDKs\Win32\PhysX\lib\win32;..\..\..\..\..\StaticSDKs\Win32\xiph\lib\Release;..\..\..\..\..\StaticSDKs\XPlatform\expat-1.95.7\StaticLibs\Win32;..\..\..\..\..\StaticSDKs\XPlatform\jpeg-8c-rgba;..\..\..\..\..\StaticSDKs\XPlatform\zlib\lib;..\..\..\..\..\StaticSDKs\XPlatform\png\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<IgnoreSpecificDefaultLibraries>libc.lib;libci.lib;libcmt.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<GenerateDebugInformation>false</GenerateDebugInformation>
<AssemblyDebug>false</AssemblyDebug>
@ -274,10 +274,10 @@
<BufferSecurityCheck>true</BufferSecurityCheck>
</ClCompile>
<Link>
<AdditionalDependencies>winhttp.lib;ws2_32.lib;strmiids.lib;vfw32.lib;version.lib;Rpcrt4.lib;d3dx9.lib;dinput8.lib;dxerr9.lib;dxguid.lib;dsound.lib;OpenAL32.lib;libeay32.lib;NxCharacter.lib;PhysXLoader.lib;libogg_static.lib;libvorbis_static.lib;libvorbisfile_static.lib;libspeex.lib;libjpeg.lib;zlib.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>winhttp.lib;ws2_32.lib;strmiids.lib;vfw32.lib;version.lib;Rpcrt4.lib;d3dx9.lib;dinput8.lib;dxerr9.lib;dxguid.lib;dsound.lib;OpenAL32.lib;libeay32.lib;NxCharacter.lib;PhysXLoader.lib;libogg_static.lib;libvorbis_static.lib;libvorbisfile_static.lib;libspeex.lib;libjpeg.lib;zlib.lib;libpng.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
<SuppressStartupBanner>true</SuppressStartupBanner>
<AdditionalLibraryDirectories>..\..\..\..\..\StaticSDKs\Win32\DX9.0c\Lib\x86;..\..\..\..\..\StaticSDKs\Win32\OpenAL 1.1 with EFX SDK\libs\Win32;..\..\..\..\..\StaticSDKs\Win32\OpenSSL\lib;..\..\..\..\..\StaticSDKs\Win32\PhysX\lib\win32;..\..\..\..\..\StaticSDKs\Win32\xiph\lib\Release;..\..\..\..\..\StaticSDKs\XPlatform\expat-1.95.7\StaticLibs\Win32;..\..\..\..\..\StaticSDKs\XPlatform\jpeg-8c-rgba;..\..\..\..\..\StaticSDKs\XPlatform\zlib\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>..\..\..\..\..\StaticSDKs\Win32\DX9.0c\Lib\x86;..\..\..\..\..\StaticSDKs\Win32\OpenAL 1.1 with EFX SDK\libs\Win32;..\..\..\..\..\StaticSDKs\Win32\OpenSSL\lib;..\..\..\..\..\StaticSDKs\Win32\PhysX\lib\win32;..\..\..\..\..\StaticSDKs\Win32\xiph\lib\Release;..\..\..\..\..\StaticSDKs\XPlatform\expat-1.95.7\StaticLibs\Win32;..\..\..\..\..\StaticSDKs\XPlatform\jpeg-8c-rgba;..\..\..\..\..\StaticSDKs\XPlatform\zlib\lib;..\..\..\..\..\StaticSDKs\XPlatform\png\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<IgnoreSpecificDefaultLibraries>libc.lib;libci.lib;libcmt.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<GenerateDebugInformation>false</GenerateDebugInformation>
<AssemblyDebug>false</AssemblyDebug>
@ -406,53 +406,9 @@
</ItemGroup>
<ItemGroup>
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\banner.bmp" />
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\bitmap1.bmp" />
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\bitmap2.bmp" />
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\bitmap3.bmp" />
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\bmp00001.bmp" />
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\bmp00002.bmp" />
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\bmp00003.bmp" />
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\bmp00004.bmp" />
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\bmp00005.bmp" />
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\book.bmp" />
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\book_cli.bmp" />
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\book_hig.bmp" />
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\cnsl1.bin" />
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\cursor_clicked.bmp" />
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\cursor_disabled.bmp" />
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\cursor_down.bmp" />
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\cursor_grab.bmp" />
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\cursor_left.bmp" />
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\cursor_open.bmp" />
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\cursor_poised.bmp" />
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\cursor_right.bmp" />
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\cursor_u.bmp" />
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\cursor_up.bmp" />
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\cursor_upward.bmp" />
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\Dirt.ICO" />
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\headspin.ico" />
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\Microphone.bmp" />
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\Speaker.bmp" />
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.01.jpg" />
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.02.jpg" />
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.03.jpg" />
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.04.jpg" />
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.05.jpg" />
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.06.jpg" />
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.07.jpg" />
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.08.jpg" />
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.09.jpg" />
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.10.jpg" />
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.11.jpg" />
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.12.jpg" />
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.13.jpg" />
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.14.jpg" />
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.15.jpg" />
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.16.jpg" />
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.17.jpg" />
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.18.jpg" />
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking_Text.jpg" />
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Updating_Text.jpg" />
<None Include="..\..\..\..\Docs\ReleaseNotes\ReleaseNotes.txt" />
</ItemGroup>
<ItemGroup>
@ -672,6 +628,10 @@
<Project>{7e6c6f09-c580-4b4d-95e2-c02248122da2}</Project>
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
</ProjectReference>
<ProjectReference Include="..\..\PubUtilLib\plClientResMgr\plClientResMgr.vcxproj">
<Project>{d005f6ef-6a43-1957-7458-10ed3ca39f02}</Project>
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
</ProjectReference>
<ProjectReference Include="..\..\PubUtilLib\plClipboard\plClipboard.vcxproj">
<Project>{ca2d4e65-ea68-465f-843a-4af75243b474}</Project>
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>

View File

@ -50,147 +50,15 @@
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\banner.bmp">
<Filter>Resource Files</Filter>
</None>
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\bitmap1.bmp">
<Filter>Resource Files</Filter>
</None>
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\bitmap2.bmp">
<Filter>Resource Files</Filter>
</None>
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\bitmap3.bmp">
<Filter>Resource Files</Filter>
</None>
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\bmp00001.bmp">
<Filter>Resource Files</Filter>
</None>
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\bmp00002.bmp">
<Filter>Resource Files</Filter>
</None>
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\bmp00003.bmp">
<Filter>Resource Files</Filter>
</None>
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\bmp00004.bmp">
<Filter>Resource Files</Filter>
</None>
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\bmp00005.bmp">
<Filter>Resource Files</Filter>
</None>
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\book.bmp">
<Filter>Resource Files</Filter>
</None>
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\book_cli.bmp">
<Filter>Resource Files</Filter>
</None>
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\book_hig.bmp">
<Filter>Resource Files</Filter>
</None>
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\cnsl1.bin">
<Filter>Resource Files</Filter>
</None>
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\cursor_clicked.bmp">
<Filter>Resource Files</Filter>
</None>
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\cursor_disabled.bmp">
<Filter>Resource Files</Filter>
</None>
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\cursor_down.bmp">
<Filter>Resource Files</Filter>
</None>
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\cursor_grab.bmp">
<Filter>Resource Files</Filter>
</None>
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\cursor_left.bmp">
<Filter>Resource Files</Filter>
</None>
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\cursor_open.bmp">
<Filter>Resource Files</Filter>
</None>
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\cursor_poised.bmp">
<Filter>Resource Files</Filter>
</None>
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\cursor_right.bmp">
<Filter>Resource Files</Filter>
</None>
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\cursor_u.bmp">
<Filter>Resource Files</Filter>
</None>
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\cursor_up.bmp">
<Filter>Resource Files</Filter>
</None>
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\cursor_upward.bmp">
<Filter>Resource Files</Filter>
</None>
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\Dirt.ICO">
<Filter>Resource Files</Filter>
</None>
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\headspin.ico">
<Filter>Resource Files</Filter>
</None>
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\Microphone.bmp">
<Filter>Resource Files</Filter>
</None>
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\Speaker.bmp">
<Filter>Resource Files</Filter>
</None>
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.01.jpg">
<Filter>Resource Files</Filter>
</None>
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.02.jpg">
<Filter>Resource Files</Filter>
</None>
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.03.jpg">
<Filter>Resource Files</Filter>
</None>
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.04.jpg">
<Filter>Resource Files</Filter>
</None>
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.05.jpg">
<Filter>Resource Files</Filter>
</None>
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.06.jpg">
<Filter>Resource Files</Filter>
</None>
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.07.jpg">
<Filter>Resource Files</Filter>
</None>
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.08.jpg">
<Filter>Resource Files</Filter>
</None>
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.09.jpg">
<Filter>Resource Files</Filter>
</None>
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.10.jpg">
<Filter>Resource Files</Filter>
</None>
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.11.jpg">
<Filter>Resource Files</Filter>
</None>
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.12.jpg">
<Filter>Resource Files</Filter>
</None>
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.13.jpg">
<Filter>Resource Files</Filter>
</None>
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.14.jpg">
<Filter>Resource Files</Filter>
</None>
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.15.jpg">
<Filter>Resource Files</Filter>
</None>
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.16.jpg">
<Filter>Resource Files</Filter>
</None>
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.17.jpg">
<Filter>Resource Files</Filter>
</None>
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.18.jpg">
<Filter>Resource Files</Filter>
</None>
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking_Text.jpg">
<Filter>Resource Files</Filter>
</None>
<None Include="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Updating_Text.jpg">
<Filter>Resource Files</Filter>
</None>
<None Include="..\..\..\..\Docs\ReleaseNotes\ReleaseNotes.txt">
<Filter>Text</Filter>
</None>

View File

@ -61,9 +61,9 @@
<StringPooling>true</StringPooling>
</ClCompile>
<Link>
<AdditionalDependencies>CoreLib.lib;CoreLibExe.lib;pfAnimation.lib;pfAudio.lib;pfCamera.lib;pfCharacter.lib;pfConditional.lib;pfGameGUIMgr.lib;pfGameMgr.lib;pfGameScoreMgr.lib;pfJournalBook.lib;pfLocalizationMgr.lib;pfMessage.lib;pfPython.lib;pfSurface.lib;pnAddrInfo.lib;pnAsyncCore.lib;pnAsyncCoreExe.lib;pnDispatch.lib;pnFactory.lib;pnGameMgr.lib;pnIni.lib;pnIniExe.lib;pnInputCore.lib;pnKeyedObject.lib;pnMessage.lib;pnModifier.lib;pnNetBase.lib;pnNetCli.lib;pnNetCommon.lib;pnNetProtocol.lib;pnNucleusInc.lib;pnProduct.lib;pnSceneObject.lib;pnTimer.lib;pnUtils.lib;pnUtilsExe.lib;plAgeDescription.lib;plAgeLoader.lib;plAudible.lib;plAudio.lib;plAudioCore.lib;plAvatar.lib;plCompression.lib;plContainer.lib;plDrawable.lib;plEncryption.lib;plFile.lib;plGImage.lib;plGLight.lib;plInputCore.lib;plInterp.lib;plIntersect.lib;plJPEG.lib;plMath.lib;plMessage.lib;plModifier.lib;plNetClient.lib;plNetClientComm.lib;plNetClientRecorder.lib;plNetCommon.lib;plNetGameLib.lib;plNetMessage.lib;plNetTransport.lib;plParticleSystem.lib;plPhysical.lib;plPhysX.lib;plPipeline.lib;plProgressMgr.lib;plResMgr.lib;plScene.lib;plSDL.lib;plStatusLog.lib;plSurface.lib;plTransform.lib;plUnifiedTime.lib;plUUID.lib;plVault.lib;winhttp.lib;ws2_32.lib;strmiids.lib;vfw32.lib;Rpcrt4.lib;pythoncore_static.lib;d3dx9.lib;dinput8.lib;dxerr9.lib;dxguid.lib;dsound.lib;OpenAL32.lib;libeay32.lib;NxCharacter.lib;PhysXLoader.lib;libogg_static.lib;libvorbis_static.lib;libvorbisfile_static.lib;libspeex.lib;libjpeg.lib;zlibd.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>CoreLib.lib;CoreLibExe.lib;pfAnimation.lib;pfAudio.lib;pfCamera.lib;pfCharacter.lib;pfConditional.lib;pfGameGUIMgr.lib;pfGameMgr.lib;pfGameScoreMgr.lib;pfJournalBook.lib;pfLocalizationMgr.lib;pfMessage.lib;pfPython.lib;pfSurface.lib;pnAddrInfo.lib;pnAsyncCore.lib;pnAsyncCoreExe.lib;pnDispatch.lib;pnFactory.lib;pnGameMgr.lib;pnIni.lib;pnIniExe.lib;pnInputCore.lib;pnKeyedObject.lib;pnMessage.lib;pnModifier.lib;pnNetBase.lib;pnNetCli.lib;pnNetCommon.lib;pnNetProtocol.lib;pnNucleusInc.lib;pnProduct.lib;pnSceneObject.lib;pnTimer.lib;pnUtils.lib;pnUtilsExe.lib;plAgeDescription.lib;plAgeLoader.lib;plAudible.lib;plAudio.lib;plAudioCore.lib;plAvatar.lib;plClientResMgr.lib;plCompression.lib;plContainer.lib;plDrawable.lib;plEncryption.lib;plFile.lib;plGImage.lib;plGLight.lib;plInputCore.lib;plInterp.lib;plIntersect.lib;plJPEG.lib;plMath.lib;plMessage.lib;plModifier.lib;plNetClient.lib;plNetClientComm.lib;plNetClientRecorder.lib;plNetCommon.lib;plNetGameLib.lib;plNetMessage.lib;plNetTransport.lib;plParticleSystem.lib;plPhysical.lib;plPhysX.lib;plPipeline.lib;plProgressMgr.lib;plResMgr.lib;plScene.lib;plSDL.lib;plStatusLog.lib;plSurface.lib;plTransform.lib;plUnifiedTime.lib;plUUID.lib;plVault.lib;winhttp.lib;ws2_32.lib;strmiids.lib;vfw32.lib;Rpcrt4.lib;pythoncore_static.lib;d3dx9.lib;dinput8.lib;dxerr9.lib;dxguid.lib;dsound.lib;OpenAL32.lib;libeay32.lib;NxCharacter.lib;PhysXLoader.lib;libogg_static.lib;libvorbis_static.lib;libvorbisfile_static.lib;libspeex.lib;libjpeg.lib;libpngd.lib;zlibd.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
<AdditionalLibraryDirectories>..\..\CoreLib\Debug;..\..\CoreLibExe\Debug;..\..\FeatureLib\pfAnimation\Debug;..\..\FeatureLib\pfAudio\Debug;..\..\FeatureLib\pfCamera\Debug;..\..\FeatureLib\pfCharacter\Debug;..\..\FeatureLib\pfConditional\Debug;..\..\FeatureLib\pfGameGUIMgr\Debug;..\..\FeatureLib\pfGameMgr\Debug;..\..\FeatureLib\pfGameScoreMgr\Debug;..\..\FeatureLib\pfJournalBook\Debug;..\..\FeatureLib\pfLocalizationMgr\Debug;..\..\FeatureLib\pfMessage\Debug;..\..\FeatureLib\pfPython\Debug;..\..\FeatureLib\pfSurface\Debug;..\..\NucleusLib\pnAddrInfo\Debug;..\..\NucleusLib\pnAsyncCore\Debug;..\..\NucleusLib\pnAsyncCoreExe\Debug;..\..\NucleusLib\pnDispatch\Debug;..\..\NucleusLib\pnFactory\Debug;..\..\NucleusLib\pnGameMgr\Debug;..\..\NucleusLib\pnIni\Debug;..\..\NucleusLib\pnIniExe\Debug;..\..\NucleusLib\pnInputCore\Debug;..\..\NucleusLib\pnKeyedObject\Debug;..\..\NucleusLib\pnMessage\Debug;..\..\NucleusLib\pnModifier\Debug;..\..\NucleusLib\pnNetBase\Debug;..\..\NucleusLib\pnNetCli\Debug;..\..\NucleusLib\pnNetCommon\Debug;..\..\NucleusLib\pnNetProtocol\Debug;..\..\NucleusLib\pnNucleusInc\Debug;..\..\NucleusLib\pnProduct\Debug;..\..\NucleusLib\pnSceneObject\Debug;..\..\NucleusLib\pnTimer\Debug;..\..\NucleusLib\pnUtils\Debug;..\..\NucleusLib\pnUtilsExe\Debug;..\..\PubUtilLib\plAgeDescription\Debug;..\..\PubUtilLib\plAgeLoader\Debug;..\..\PubUtilLib\plAudible\Debug;..\..\PubUtilLib\plAudio\Debug;..\..\PubUtilLib\plAudioCore\Debug;..\..\PubUtilLib\plAvatar\Debug;..\..\PubUtilLib\plCompression\Debug;..\..\PubUtilLib\plContainer\Debug;..\..\PubUtilLib\plDrawable\Debug;..\..\PubUtilLib\plEncryption\Debug;..\..\PubUtilLib\plFile\Debug;..\..\PubUtilLib\plGImage\Debug;..\..\PubUtilLib\plGLight\Debug;..\..\PubUtilLib\plInputCore\Debug;..\..\PubUtilLib\plInterp\Debug;..\..\PubUtilLib\plIntersect\Debug;..\..\PubUtilLib\plJPEG\Debug;..\..\PubUtilLib\plMath\Debug;..\..\PubUtilLib\plMessage\Debug;..\..\PubUtilLib\plModifier\Debug;..\..\PubUtilLib\plNetClient\Debug;..\..\PubUtilLib\plNetClientComm\Debug;..\..\PubUtilLib\plNetClientRecorder\Debug;..\..\PubUtilLib\plNetCommon\Debug;..\..\PubUtilLib\plNetGameLib\Debug;..\..\PubUtilLib\plNetMessage\Debug;..\..\PubUtilLib\plNetTransport\Debug;..\..\PubUtilLib\plParticleSystem\Debug;..\..\PubUtilLib\plPhysical\Debug;..\..\PubUtilLib\plPhysX\Debug;..\..\PubUtilLib\plPipeline\Debug;..\..\PubUtilLib\plProgressMgr\Debug;..\..\PubUtilLib\plResMgr\Debug;..\..\PubUtilLib\plScene\Debug;..\..\PubUtilLib\plSDL\Debug;..\..\PubUtilLib\plStatusLog\Debug;..\..\PubUtilLib\plSurface\Debug;..\..\PubUtilLib\plTransform\Debug;..\..\PubUtilLib\plUnifiedTime\Debug;..\..\PubUtilLib\plUUID\Debug;..\..\PubUtilLib\plVault\Debug;..\..\..\..\SDKs\XPlatform\Cypython-2.3.3\PCbuild\Debug;..\..\..\..\..\StaticSDKs\Win32\DX9.0c\Lib\x86;..\..\..\..\..\StaticSDKs\Win32\OpenAL 1.1 with EFX SDK\libs\Win32;..\..\..\..\..\StaticSDKs\Win32\OpenSSL\lib;..\..\..\..\..\StaticSDKs\Win32\PhysX\lib\win32;..\..\..\..\..\StaticSDKs\Win32\xiph\lib\Debug;..\..\..\..\..\StaticSDKs\XPlatform\expat-1.95.7\StaticLibs\Win32;..\..\..\..\..\StaticSDKs\XPlatform\jpeg-8c-rgba;..\..\..\..\..\StaticSDKs\XPlatform\zlib\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>..\..\CoreLib\Debug;..\..\CoreLibExe\Debug;..\..\FeatureLib\pfAnimation\Debug;..\..\FeatureLib\pfAudio\Debug;..\..\FeatureLib\pfCamera\Debug;..\..\FeatureLib\pfCharacter\Debug;..\..\FeatureLib\pfConditional\Debug;..\..\FeatureLib\pfGameGUIMgr\Debug;..\..\FeatureLib\pfGameMgr\Debug;..\..\FeatureLib\pfGameScoreMgr\Debug;..\..\FeatureLib\pfJournalBook\Debug;..\..\FeatureLib\pfLocalizationMgr\Debug;..\..\FeatureLib\pfMessage\Debug;..\..\FeatureLib\pfPython\Debug;..\..\FeatureLib\pfSurface\Debug;..\..\NucleusLib\pnAddrInfo\Debug;..\..\NucleusLib\pnAsyncCore\Debug;..\..\NucleusLib\pnAsyncCoreExe\Debug;..\..\NucleusLib\pnDispatch\Debug;..\..\NucleusLib\pnFactory\Debug;..\..\NucleusLib\pnGameMgr\Debug;..\..\NucleusLib\pnIni\Debug;..\..\NucleusLib\pnIniExe\Debug;..\..\NucleusLib\pnInputCore\Debug;..\..\NucleusLib\pnKeyedObject\Debug;..\..\NucleusLib\pnMessage\Debug;..\..\NucleusLib\pnModifier\Debug;..\..\NucleusLib\pnNetBase\Debug;..\..\NucleusLib\pnNetCli\Debug;..\..\NucleusLib\pnNetCommon\Debug;..\..\NucleusLib\pnNetProtocol\Debug;..\..\NucleusLib\pnNucleusInc\Debug;..\..\NucleusLib\pnProduct\Debug;..\..\NucleusLib\pnSceneObject\Debug;..\..\NucleusLib\pnTimer\Debug;..\..\NucleusLib\pnUtils\Debug;..\..\NucleusLib\pnUtilsExe\Debug;..\..\PubUtilLib\plAgeDescription\Debug;..\..\PubUtilLib\plAgeLoader\Debug;..\..\PubUtilLib\plAudible\Debug;..\..\PubUtilLib\plAudio\Debug;..\..\PubUtilLib\plAudioCore\Debug;..\..\PubUtilLib\plAvatar\Debug;..\..\PubUtilLib\plClientResMgr\Debug;..\..\PubUtilLib\plCompression\Debug;..\..\PubUtilLib\plContainer\Debug;..\..\PubUtilLib\plDrawable\Debug;..\..\PubUtilLib\plEncryption\Debug;..\..\PubUtilLib\plFile\Debug;..\..\PubUtilLib\plGImage\Debug;..\..\PubUtilLib\plGLight\Debug;..\..\PubUtilLib\plInputCore\Debug;..\..\PubUtilLib\plInterp\Debug;..\..\PubUtilLib\plIntersect\Debug;..\..\PubUtilLib\plJPEG\Debug;..\..\PubUtilLib\plMath\Debug;..\..\PubUtilLib\plMessage\Debug;..\..\PubUtilLib\plModifier\Debug;..\..\PubUtilLib\plNetClient\Debug;..\..\PubUtilLib\plNetClientComm\Debug;..\..\PubUtilLib\plNetClientRecorder\Debug;..\..\PubUtilLib\plNetCommon\Debug;..\..\PubUtilLib\plNetGameLib\Debug;..\..\PubUtilLib\plNetMessage\Debug;..\..\PubUtilLib\plNetTransport\Debug;..\..\PubUtilLib\plParticleSystem\Debug;..\..\PubUtilLib\plPhysical\Debug;..\..\PubUtilLib\plPhysX\Debug;..\..\PubUtilLib\plPipeline\Debug;..\..\PubUtilLib\plProgressMgr\Debug;..\..\PubUtilLib\plResMgr\Debug;..\..\PubUtilLib\plScene\Debug;..\..\PubUtilLib\plSDL\Debug;..\..\PubUtilLib\plStatusLog\Debug;..\..\PubUtilLib\plSurface\Debug;..\..\PubUtilLib\plTransform\Debug;..\..\PubUtilLib\plUnifiedTime\Debug;..\..\PubUtilLib\plUUID\Debug;..\..\PubUtilLib\plVault\Debug;..\..\..\..\SDKs\XPlatform\Cypython-2.3.3\PCbuild\Debug;..\..\..\..\..\StaticSDKs\Win32\DX9.0c\Lib\x86;..\..\..\..\..\StaticSDKs\Win32\OpenAL 1.1 with EFX SDK\libs\Win32;..\..\..\..\..\StaticSDKs\Win32\OpenSSL\lib;..\..\..\..\..\StaticSDKs\Win32\PhysX\lib\win32;..\..\..\..\..\StaticSDKs\Win32\xiph\lib\Debug;..\..\..\..\..\StaticSDKs\XPlatform\expat-1.95.7\StaticLibs\Win32;..\..\..\..\..\StaticSDKs\XPlatform\jpeg-8c-rgba;..\..\..\..\..\StaticSDKs\XPlatform\png\lib;..\..\..\..\..\StaticSDKs\XPlatform\zlib\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<IgnoreSpecificDefaultLibraries>libc.lib;libcd.lib;libci.lib;libcid.lib;libcmt.lib;libcmtd.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<GenerateDebugInformation>true</GenerateDebugInformation>
<ProgramDatabaseFile>$(OutDir)$(TargetName).pdb</ProgramDatabaseFile>
@ -95,9 +95,9 @@
<IntrinsicFunctions>true</IntrinsicFunctions>
</ClCompile>
<Link>
<AdditionalDependencies>CoreLib.lib;CoreLibExe.lib;pfAnimation.lib;pfAudio.lib;pfCamera.lib;pfCharacter.lib;pfConditional.lib;pfGameGUIMgr.lib;pfGameMgr.lib;pfGameScoreMgr.lib;pfJournalBook.lib;pfLocalizationMgr.lib;pfMessage.lib;pfPython.lib;pfSurface.lib;pnAddrInfo.lib;pnAsyncCore.lib;pnAsyncCoreExe.lib;pnDispatch.lib;pnFactory.lib;pnGameMgr.lib;pnIni.lib;pnIniExe.lib;pnInputCore.lib;pnKeyedObject.lib;pnMessage.lib;pnModifier.lib;pnNetBase.lib;pnNetCli.lib;pnNetCommon.lib;pnNetProtocol.lib;pnNucleusInc.lib;pnProduct.lib;pnSceneObject.lib;pnTimer.lib;pnUtils.lib;pnUtilsExe.lib;plAgeDescription.lib;plAgeLoader.lib;plAudible.lib;plAudio.lib;plAudioCore.lib;plAvatar.lib;plCompression.lib;plContainer.lib;plDrawable.lib;plEncryption.lib;plFile.lib;plGImage.lib;plGLight.lib;plInputCore.lib;plInterp.lib;plIntersect.lib;plJPEG.lib;plMath.lib;plMessage.lib;plModifier.lib;plNetClient.lib;plNetClientComm.lib;plNetClientRecorder.lib;plNetCommon.lib;plNetGameLib.lib;plNetMessage.lib;plNetTransport.lib;plParticleSystem.lib;plPhysical.lib;plPhysX.lib;plPipeline.lib;plProgressMgr.lib;plResMgr.lib;plScene.lib;plSDL.lib;plStatusLog.lib;plSurface.lib;plTransform.lib;plUnifiedTime.lib;plUUID.lib;plVault.lib;winhttp.lib;ws2_32.lib;strmiids.lib;vfw32.lib;Rpcrt4.lib;pythoncore_static.lib;d3dx9.lib;dinput8.lib;dxerr9.lib;dxguid.lib;dsound.lib;OpenAL32.lib;libeay32.lib;NxCharacter.lib;PhysXLoader.lib;libogg_static.lib;libvorbis_static.lib;libvorbisfile_static.lib;libspeex.lib;libjpeg.lib;zlib.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>CoreLib.lib;CoreLibExe.lib;pfAnimation.lib;pfAudio.lib;pfCamera.lib;pfCharacter.lib;pfConditional.lib;pfGameGUIMgr.lib;pfGameMgr.lib;pfGameScoreMgr.lib;pfJournalBook.lib;pfLocalizationMgr.lib;pfMessage.lib;pfPython.lib;pfSurface.lib;pnAddrInfo.lib;pnAsyncCore.lib;pnAsyncCoreExe.lib;pnDispatch.lib;pnFactory.lib;pnGameMgr.lib;pnIni.lib;pnIniExe.lib;pnInputCore.lib;pnKeyedObject.lib;pnMessage.lib;pnModifier.lib;pnNetBase.lib;pnNetCli.lib;pnNetCommon.lib;pnNetProtocol.lib;pnNucleusInc.lib;pnProduct.lib;pnSceneObject.lib;pnTimer.lib;pnUtils.lib;pnUtilsExe.lib;plAgeDescription.lib;plAgeLoader.lib;plAudible.lib;plAudio.lib;plAudioCore.lib;plAvatar.lib;plClientResMgr.lib;plCompression.lib;plContainer.lib;plDrawable.lib;plEncryption.lib;plFile.lib;plGImage.lib;plGLight.lib;plInputCore.lib;plInterp.lib;plIntersect.lib;plJPEG.lib;plMath.lib;plMessage.lib;plModifier.lib;plNetClient.lib;plNetClientComm.lib;plNetClientRecorder.lib;plNetCommon.lib;plNetGameLib.lib;plNetMessage.lib;plNetTransport.lib;plParticleSystem.lib;plPhysical.lib;plPhysX.lib;plPipeline.lib;plProgressMgr.lib;plResMgr.lib;plScene.lib;plSDL.lib;plStatusLog.lib;plSurface.lib;plTransform.lib;plUnifiedTime.lib;plUUID.lib;plVault.lib;winhttp.lib;ws2_32.lib;strmiids.lib;vfw32.lib;Rpcrt4.lib;pythoncore_static.lib;d3dx9.lib;dinput8.lib;dxerr9.lib;dxguid.lib;dsound.lib;OpenAL32.lib;libeay32.lib;NxCharacter.lib;PhysXLoader.lib;libogg_static.lib;libvorbis_static.lib;libvorbisfile_static.lib;libspeex.lib;libjpeg.lib;libpng.lib;zlib.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
<AdditionalLibraryDirectories>..\..\CoreLib\Release;..\..\CoreLibExe\Release;..\..\FeatureLib\pfAnimation\Release;..\..\FeatureLib\pfAudio\Release;..\..\FeatureLib\pfCamera\Release;..\..\FeatureLib\pfCharacter\Release;..\..\FeatureLib\pfConditional\Release;..\..\FeatureLib\pfGameGUIMgr\Release;..\..\FeatureLib\pfGameMgr\Release;..\..\FeatureLib\pfGameScoreMgr\Release;..\..\FeatureLib\pfJournalBook\Release;..\..\FeatureLib\pfLocalizationMgr\Release;..\..\FeatureLib\pfMessage\Release;..\..\FeatureLib\pfPython\Release;..\..\FeatureLib\pfSurface\Release;..\..\NucleusLib\pnAddrInfo\Release;..\..\NucleusLib\pnAsyncCore\Release;..\..\NucleusLib\pnAsyncCoreExe\Release;..\..\NucleusLib\pnDispatch\Release;..\..\NucleusLib\pnFactory\Release;..\..\NucleusLib\pnGameMgr\Release;..\..\NucleusLib\pnIni\Release;..\..\NucleusLib\pnIniExe\Release;..\..\NucleusLib\pnInputCore\Release;..\..\NucleusLib\pnKeyedObject\Release;..\..\NucleusLib\pnMessage\Release;..\..\NucleusLib\pnModifier\Release;..\..\NucleusLib\pnNetBase\Release;..\..\NucleusLib\pnNetCli\Release;..\..\NucleusLib\pnNetCommon\Release;..\..\NucleusLib\pnNetProtocol\Release;..\..\NucleusLib\pnNucleusInc\Release;..\..\NucleusLib\pnProduct\Release;..\..\NucleusLib\pnSceneObject\Release;..\..\NucleusLib\pnTimer\Release;..\..\NucleusLib\pnUtils\Release;..\..\NucleusLib\pnUtilsExe\Release;..\..\PubUtilLib\plAgeDescription\Release;..\..\PubUtilLib\plAgeLoader\Release;..\..\PubUtilLib\plAudible\Release;..\..\PubUtilLib\plAudio\Release;..\..\PubUtilLib\plAudioCore\Release;..\..\PubUtilLib\plAvatar\Release;..\..\PubUtilLib\plCompression\Release;..\..\PubUtilLib\plContainer\Release;..\..\PubUtilLib\plDrawable\Release;..\..\PubUtilLib\plEncryption\Release;..\..\PubUtilLib\plFile\Release;..\..\PubUtilLib\plGImage\Release;..\..\PubUtilLib\plGLight\Release;..\..\PubUtilLib\plInputCore\Release;..\..\PubUtilLib\plInterp\Release;..\..\PubUtilLib\plIntersect\Release;..\..\PubUtilLib\plJPEG\Release;..\..\PubUtilLib\plMath\Release;..\..\PubUtilLib\plMessage\Release;..\..\PubUtilLib\plModifier\Release;..\..\PubUtilLib\plNetClient\Release;..\..\PubUtilLib\plNetClientComm\Release;..\..\PubUtilLib\plNetClientRecorder\Release;..\..\PubUtilLib\plNetCommon\Release;..\..\PubUtilLib\plNetGameLib\Release;..\..\PubUtilLib\plNetMessage\Release;..\..\PubUtilLib\plNetTransport\Release;..\..\PubUtilLib\plParticleSystem\Release;..\..\PubUtilLib\plPhysical\Release;..\..\PubUtilLib\plPhysX\Release;..\..\PubUtilLib\plPipeline\Release;..\..\PubUtilLib\plProgressMgr\Release;..\..\PubUtilLib\plResMgr\Release;..\..\PubUtilLib\plScene\Release;..\..\PubUtilLib\plSDL\Release;..\..\PubUtilLib\plStatusLog\Release;..\..\PubUtilLib\plSurface\Release;..\..\PubUtilLib\plTransform\Release;..\..\PubUtilLib\plUnifiedTime\Release;..\..\PubUtilLib\plUUID\Release;..\..\PubUtilLib\plVault\Release;..\..\..\..\SDKs\XPlatform\Cypython-2.3.3\PCbuild\Release;..\..\..\..\..\StaticSDKs\Win32\DX9.0c\Lib\x86;..\..\..\..\..\StaticSDKs\Win32\OpenAL 1.1 with EFX SDK\libs\Win32;..\..\..\..\..\StaticSDKs\Win32\OpenSSL\lib;..\..\..\..\..\StaticSDKs\Win32\PhysX\lib\win32;..\..\..\..\..\StaticSDKs\Win32\xiph\lib\Release;..\..\..\..\..\StaticSDKs\XPlatform\expat-1.95.7\StaticLibs\Win32;..\..\..\..\..\StaticSDKs\XPlatform\jpeg-8c-rgba;..\..\..\..\..\StaticSDKs\XPlatform\zlib\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>..\..\CoreLib\Release;..\..\CoreLibExe\Release;..\..\FeatureLib\pfAnimation\Release;..\..\FeatureLib\pfAudio\Release;..\..\FeatureLib\pfCamera\Release;..\..\FeatureLib\pfCharacter\Release;..\..\FeatureLib\pfConditional\Release;..\..\FeatureLib\pfGameGUIMgr\Release;..\..\FeatureLib\pfGameMgr\Release;..\..\FeatureLib\pfGameScoreMgr\Release;..\..\FeatureLib\pfJournalBook\Release;..\..\FeatureLib\pfLocalizationMgr\Release;..\..\FeatureLib\pfMessage\Release;..\..\FeatureLib\pfPython\Release;..\..\FeatureLib\pfSurface\Release;..\..\NucleusLib\pnAddrInfo\Release;..\..\NucleusLib\pnAsyncCore\Release;..\..\NucleusLib\pnAsyncCoreExe\Release;..\..\NucleusLib\pnDispatch\Release;..\..\NucleusLib\pnFactory\Release;..\..\NucleusLib\pnGameMgr\Release;..\..\NucleusLib\pnIni\Release;..\..\NucleusLib\pnIniExe\Release;..\..\NucleusLib\pnInputCore\Release;..\..\NucleusLib\pnKeyedObject\Release;..\..\NucleusLib\pnMessage\Release;..\..\NucleusLib\pnModifier\Release;..\..\NucleusLib\pnNetBase\Release;..\..\NucleusLib\pnNetCli\Release;..\..\NucleusLib\pnNetCommon\Release;..\..\NucleusLib\pnNetProtocol\Release;..\..\NucleusLib\pnNucleusInc\Release;..\..\NucleusLib\pnProduct\Release;..\..\NucleusLib\pnSceneObject\Release;..\..\NucleusLib\pnTimer\Release;..\..\NucleusLib\pnUtils\Release;..\..\NucleusLib\pnUtilsExe\Release;..\..\PubUtilLib\plAgeDescription\Release;..\..\PubUtilLib\plAgeLoader\Release;..\..\PubUtilLib\plAudible\Release;..\..\PubUtilLib\plAudio\Release;..\..\PubUtilLib\plAudioCore\Release;..\..\PubUtilLib\plAvatar\Release;..\..\PubUtilLib\plClientResMgr\Release;..\..\PubUtilLib\plCompression\Release;..\..\PubUtilLib\plContainer\Release;..\..\PubUtilLib\plDrawable\Release;..\..\PubUtilLib\plEncryption\Release;..\..\PubUtilLib\plFile\Release;..\..\PubUtilLib\plGImage\Release;..\..\PubUtilLib\plGLight\Release;..\..\PubUtilLib\plInputCore\Release;..\..\PubUtilLib\plInterp\Release;..\..\PubUtilLib\plIntersect\Release;..\..\PubUtilLib\plJPEG\Release;..\..\PubUtilLib\plMath\Release;..\..\PubUtilLib\plMessage\Release;..\..\PubUtilLib\plModifier\Release;..\..\PubUtilLib\plNetClient\Release;..\..\PubUtilLib\plNetClientComm\Release;..\..\PubUtilLib\plNetClientRecorder\Release;..\..\PubUtilLib\plNetCommon\Release;..\..\PubUtilLib\plNetGameLib\Release;..\..\PubUtilLib\plNetMessage\Release;..\..\PubUtilLib\plNetTransport\Release;..\..\PubUtilLib\plParticleSystem\Release;..\..\PubUtilLib\plPhysical\Release;..\..\PubUtilLib\plPhysX\Release;..\..\PubUtilLib\plPipeline\Release;..\..\PubUtilLib\plProgressMgr\Release;..\..\PubUtilLib\plResMgr\Release;..\..\PubUtilLib\plScene\Release;..\..\PubUtilLib\plSDL\Release;..\..\PubUtilLib\plStatusLog\Release;..\..\PubUtilLib\plSurface\Release;..\..\PubUtilLib\plTransform\Release;..\..\PubUtilLib\plUnifiedTime\Release;..\..\PubUtilLib\plUUID\Release;..\..\PubUtilLib\plVault\Release;..\..\..\..\SDKs\XPlatform\Cypython-2.3.3\PCbuild\Release;..\..\..\..\..\StaticSDKs\Win32\DX9.0c\Lib\x86;..\..\..\..\..\StaticSDKs\Win32\OpenAL 1.1 with EFX SDK\libs\Win32;..\..\..\..\..\StaticSDKs\Win32\OpenSSL\lib;..\..\..\..\..\StaticSDKs\Win32\PhysX\lib\win32;..\..\..\..\..\StaticSDKs\Win32\xiph\lib\Release;..\..\..\..\..\StaticSDKs\XPlatform\expat-1.95.7\StaticLibs\Win32;..\..\..\..\..\StaticSDKs\XPlatform\jpeg-8c-rgba;..\..\..\..\..\StaticSDKs\XPlatform\png\lib;..\..\..\..\..\StaticSDKs\XPlatform\zlib\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<IgnoreSpecificDefaultLibraries>libc.lib;libci.lib;libcmt.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<GenerateDebugInformation>
</GenerateDebugInformation>

View File

@ -276,22 +276,6 @@
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<ClCompile Include="..\..\..\..\Sources\Plasma\FeatureLib\pfSurface\plLayerBink.cpp">
<Optimization Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">Disabled</Optimization>
<Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">EnableFastChecks</BasicRuntimeChecks>
<BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
<Optimization Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">MaxSpeed</Optimization>
<Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<ClCompile Include="..\..\..\..\Sources\Plasma\FeatureLib\pfSurface\plLayerMovie.cpp">
<Optimization Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">Disabled</Optimization>
<Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>

View File

@ -26,9 +26,6 @@
<ClCompile Include="..\..\..\..\Sources\Plasma\FeatureLib\pfSurface\plLayerAVI.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\Sources\Plasma\FeatureLib\pfSurface\plLayerBink.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\Sources\Plasma\FeatureLib\pfSurface\plLayerMovie.cpp">
<Filter>Source Files</Filter>
</ClCompile>

View File

@ -328,6 +328,7 @@
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<ClCompile Include="..\..\..\..\Sources\Plasma\PubUtilLib\plAvatar\plAntiGravAction.cpp" />
<ClCompile Include="..\..\..\..\Sources\Plasma\PubUtilLib\plAvatar\plArmatureEffects.cpp">
<Optimization Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">Disabled</Optimization>
<Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
@ -554,6 +555,7 @@
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<ClCompile Include="..\..\..\..\Sources\Plasma\PubUtilLib\plAvatar\plAvCallbackAction.cpp" />
<ClCompile Include="..\..\..\..\Sources\Plasma\PubUtilLib\plAvatar\plAvLadderModifier.cpp">
<Optimization Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">Disabled</Optimization>
<Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
@ -805,6 +807,7 @@
<ClInclude Include="..\..\..\..\Sources\Plasma\PubUtilLib\plAvatar\plAGMasterSDLModifier.h" />
<ClInclude Include="..\..\..\..\Sources\Plasma\PubUtilLib\plAvatar\plAGModifier.h" />
<ClInclude Include="..\..\..\..\Sources\Plasma\PubUtilLib\plAvatar\plAnimStage.h" />
<ClInclude Include="..\..\..\..\Sources\Plasma\PubUtilLib\plAvatar\plAntiGravAction.h" />
<ClInclude Include="..\..\..\..\Sources\Plasma\PubUtilLib\plAvatar\plArmatureEffects.h" />
<ClInclude Include="..\..\..\..\Sources\Plasma\PubUtilLib\plAvatar\plArmatureMod.h" />
<ClInclude Include="..\..\..\..\Sources\Plasma\PubUtilLib\plAvatar\plAvatarClothing.h" />
@ -822,6 +825,7 @@
<ClInclude Include="..\..\..\..\Sources\Plasma\PubUtilLib\plAvatar\plAvBrainHuman.h" />
<ClInclude Include="..\..\..\..\Sources\Plasma\PubUtilLib\plAvatar\plAvBrainRideAnimatedPhysical.h" />
<ClInclude Include="..\..\..\..\Sources\Plasma\PubUtilLib\plAvatar\plAvBrainSwim.h" />
<ClInclude Include="..\..\..\..\Sources\Plasma\PubUtilLib\plAvatar\plAvCallbackAction.h" />
<ClInclude Include="..\..\..\..\Sources\Plasma\PubUtilLib\plAvatar\plAvDefs.h" />
<ClInclude Include="..\..\..\..\Sources\Plasma\PubUtilLib\plAvatar\plAvLadderModifier.h" />
<ClInclude Include="..\..\..\..\Sources\Plasma\PubUtilLib\plAvatar\plAvTask.h" />

View File

@ -35,6 +35,9 @@
<ClCompile Include="..\..\..\..\Sources\Plasma\PubUtilLib\plAvatar\plAnimStage.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\Sources\Plasma\PubUtilLib\plAvatar\plAntiGravAction.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\Sources\Plasma\PubUtilLib\plAvatar\plArmatureEffects.cpp">
<Filter>Source Files</Filter>
</ClCompile>
@ -83,6 +86,9 @@
<ClCompile Include="..\..\..\..\Sources\Plasma\PubUtilLib\plAvatar\plAvBrainSwim.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\Sources\Plasma\PubUtilLib\plAvatar\plAvCallbackAction.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\Sources\Plasma\PubUtilLib\plAvatar\plAvLadderModifier.cpp">
<Filter>Source Files</Filter>
</ClCompile>
@ -157,6 +163,9 @@
<ClInclude Include="..\..\..\..\Sources\Plasma\PubUtilLib\plAvatar\plAnimStage.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\Sources\Plasma\PubUtilLib\plAvatar\plAntiGravAction.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\Sources\Plasma\PubUtilLib\plAvatar\plArmatureEffects.h">
<Filter>Header Files</Filter>
</ClInclude>
@ -208,6 +217,9 @@
<ClInclude Include="..\..\..\..\Sources\Plasma\PubUtilLib\plAvatar\plAvBrainSwim.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\Sources\Plasma\PubUtilLib\plAvatar\plAvCallbackAction.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\Sources\Plasma\PubUtilLib\plAvatar\plAvDefs.h">
<Filter>Header Files</Filter>
</ClInclude>

View File

@ -0,0 +1,212 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug_Internal|Win32">
<Configuration>Debug_Internal</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release_Internal|Win32">
<Configuration>Release_Internal</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{D005F6EF-6A43-1957-7458-10ED3CA39F02}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<SccProjectName />
<SccLocalPath />
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseOfMfc>false</UseOfMfc>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseOfMfc>false</UseOfMfc>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseOfMfc>false</UseOfMfc>
<CharacterSet>MultiByte</CharacterSet>
<WholeProgramOptimization>false</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseOfMfc>false</UseOfMfc>
<CharacterSet>MultiByte</CharacterSet>
<WholeProgramOptimization>false</WholeProgramOptimization>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">$(Configuration)\</OutDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">$(Configuration)\</IntDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</IntDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">$(Configuration)\</OutDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">$(Configuration)\</IntDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</IntDir>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
<AdditionalIncludeDirectories>../../../../Sources/Plasma/CoreLib;../../../../Sources/Plasma/NucleusLib/inc;../../../../Sources/Plasma/NucleusLib;../../../../Sources/Plasma/PubUtilLib</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;BUILD_TYPE=BUILD_TYPE_LIVE;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>true</StringPooling>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<FunctionLevelLinking>
</FunctionLevelLinking>
<ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope>
<PrecompiledHeaderOutputFile>
</PrecompiledHeaderOutputFile>
<AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
<ObjectFileName>$(IntDir)</ObjectFileName>
<ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
<WarningLevel>Level3</WarningLevel>
<SuppressStartupBanner>true</SuppressStartupBanner>
<DebugInformationFormat>
</DebugInformationFormat>
<CompileAs>Default</CompileAs>
<IntrinsicFunctions>true</IntrinsicFunctions>
<BufferSecurityCheck>true</BufferSecurityCheck>
<DisableSpecificWarnings>4800</DisableSpecificWarnings>
</ClCompile>
<Lib>
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
<SuppressStartupBanner>true</SuppressStartupBanner>
</Lib>
<ResourceCompile>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<Culture>0x0409</Culture>
</ResourceCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
<AdditionalIncludeDirectories>../../../../Sources/Plasma/CoreLib;../../../../Sources/Plasma/NucleusLib/inc;../../../../Sources/Plasma/NucleusLib;../../../../Sources/Plasma/PubUtilLib</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;PLASMA_EXTERNAL_RELEASE;BUILD_TYPE=BUILD_TYPE_LIVE;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>true</StringPooling>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<FunctionLevelLinking>
</FunctionLevelLinking>
<ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope>
<PrecompiledHeaderOutputFile>
</PrecompiledHeaderOutputFile>
<AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
<ObjectFileName>$(IntDir)</ObjectFileName>
<ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
<WarningLevel>Level3</WarningLevel>
<SuppressStartupBanner>true</SuppressStartupBanner>
<DebugInformationFormat>
</DebugInformationFormat>
<CompileAs>Default</CompileAs>
<IntrinsicFunctions>true</IntrinsicFunctions>
<BufferSecurityCheck>true</BufferSecurityCheck>
<DisableSpecificWarnings>4800</DisableSpecificWarnings>
</ClCompile>
<Lib>
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
<SuppressStartupBanner>true</SuppressStartupBanner>
</Lib>
<ResourceCompile>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<Culture>0x0409</Culture>
</ResourceCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>../../../../Sources/Plasma/CoreLib;../../../../Sources/Plasma/NucleusLib/inc;../../../../Sources/Plasma/NucleusLib;../../../../Sources/Plasma/PubUtilLib</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;BUILD_TYPE=BUILD_TYPE_LIVE;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope>
<PrecompiledHeaderOutputFile>
</PrecompiledHeaderOutputFile>
<AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
<ObjectFileName>$(IntDir)</ObjectFileName>
<ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
<WarningLevel>Level3</WarningLevel>
<SuppressStartupBanner>true</SuppressStartupBanner>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<CompileAs>Default</CompileAs>
<StringPooling>true</StringPooling>
<DisableSpecificWarnings>4800</DisableSpecificWarnings>
</ClCompile>
<Lib>
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
<SuppressStartupBanner>true</SuppressStartupBanner>
</Lib>
<ResourceCompile>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<Culture>0x0409</Culture>
</ResourceCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>../../../../Sources/Plasma/CoreLib;../../../../Sources/Plasma/NucleusLib/inc;../../../../Sources/Plasma/NucleusLib;../../../../Sources/Plasma/PubUtilLib</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;PLASMA_EXTERNAL_RELEASE;BUILD_TYPE=BUILD_TYPE_LIVE;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope>
<PrecompiledHeaderOutputFile>
</PrecompiledHeaderOutputFile>
<AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
<ObjectFileName>$(IntDir)</ObjectFileName>
<ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
<WarningLevel>Level3</WarningLevel>
<SuppressStartupBanner>true</SuppressStartupBanner>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<CompileAs>Default</CompileAs>
<StringPooling>true</StringPooling>
<DisableSpecificWarnings>4800</DisableSpecificWarnings>
</ClCompile>
<Lib>
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
<SuppressStartupBanner>true</SuppressStartupBanner>
</Lib>
<ResourceCompile>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<Culture>0x0409</Culture>
</ResourceCompile>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="..\..\..\..\Sources\Plasma\PubUtilLib\plClientResMgr\plClientResMgr.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\..\Sources\Plasma\PubUtilLib\plClientResMgr\plClientResMgr.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{cc91b05f-c1df-bb82-d45a-44c78b160984}</UniqueIdentifier>
<Extensions>cpp;c;cxx;rc;def;r;odl;idl;hpj;bat</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{c84f95f0-9c5b-3f0c-1219-72629c0c7b9c}</UniqueIdentifier>
<Extensions>h;hpp;hxx;hm;inl</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\..\..\Sources\Plasma\PubUtilLib\plClientResMgr\plClientResMgr.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\..\Sources\Plasma\PubUtilLib\plClientResMgr\plClientResMgr.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
</Project>

View File

@ -78,7 +78,7 @@
<ClCompile>
<Optimization>Full</Optimization>
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
<AdditionalIncludeDirectories>../../../../../StaticSDKs/XPlatform/zlib/inc;../../../../Sources/Plasma/CoreLib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../../../../StaticSDKs/XPlatform/zlib;../../../../Sources/Plasma/CoreLib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;BUILD_TYPE=BUILD_TYPE_LIVE;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>true</StringPooling>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
@ -111,7 +111,7 @@
<ClCompile>
<Optimization>Full</Optimization>
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
<AdditionalIncludeDirectories>../../../../../StaticSDKs/XPlatform/zlib/inc;../../../../Sources/Plasma/CoreLib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../../../../StaticSDKs/XPlatform/zlib;../../../../Sources/Plasma/CoreLib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;PLASMA_EXTERNAL_RELEASE;BUILD_TYPE=BUILD_TYPE_LIVE;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>true</StringPooling>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
@ -143,7 +143,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>../../../../../StaticSDKs/XPlatform/zlib/inc;../../../../Sources/Plasma/CoreLib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../../../../StaticSDKs/XPlatform/zlib;../../../../Sources/Plasma/CoreLib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;BUILD_TYPE=BUILD_TYPE_LIVE;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
@ -171,7 +171,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>../../../../../StaticSDKs/XPlatform/zlib/inc;../../../../Sources/Plasma/CoreLib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../../../../StaticSDKs/XPlatform/zlib;../../../../Sources/Plasma/CoreLib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;PLASMA_EXTERNAL_RELEASE;BUILD_TYPE=BUILD_TYPE_LIVE;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>

View File

@ -77,7 +77,7 @@
<ClCompile>
<Optimization>Full</Optimization>
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
<AdditionalIncludeDirectories>../../../../../StaticSDKs/XPlatform/zlib/inc;../../../../Sources/Plasma/CoreLib;../../../../Sources/Plasma/NucleusLib/inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../../../Sources/Plasma/CoreLib;../../../../Sources/Plasma/NucleusLib/inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;BUILD_TYPE=BUILD_TYPE_LIVE;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>true</StringPooling>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
@ -111,7 +111,7 @@
<ClCompile>
<Optimization>Full</Optimization>
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
<AdditionalIncludeDirectories>../../../../../StaticSDKs/XPlatform/zlib/inc;../../../../Sources/Plasma/CoreLib;../../../../Sources/Plasma/NucleusLib/inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../../../Sources/Plasma/CoreLib;../../../../Sources/Plasma/NucleusLib/inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;PLASMA_EXTERNAL_RELEASE;BUILD_TYPE=BUILD_TYPE_LIVE;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>true</StringPooling>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
@ -144,7 +144,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>../../../../../StaticSDKs/XPlatform/zlib/inc;../../../../Sources/Plasma/CoreLib;../../../../Sources/Plasma/NucleusLib/inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../../../Sources/Plasma/CoreLib;../../../../Sources/Plasma/NucleusLib/inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;BUILD_TYPE=BUILD_TYPE_LIVE;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
@ -173,7 +173,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>../../../../../StaticSDKs/XPlatform/zlib/inc;../../../../Sources/Plasma/CoreLib;../../../../Sources/Plasma/NucleusLib/inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../../../Sources/Plasma/CoreLib;../../../../Sources/Plasma/NucleusLib/inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;PLASMA_EXTERNAL_RELEASE;BUILD_TYPE=BUILD_TYPE_LIVE;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>

View File

@ -78,7 +78,7 @@
<ClCompile>
<Optimization>Full</Optimization>
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
<AdditionalIncludeDirectories>../../../../Sources/Plasma/NucleusLib/inc;../../../../Sources/Plasma/PubUtilLib/inc;../../../../Sources/Plasma/CoreLib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../../../Sources/Plasma/NucleusLib/inc;../../../../Sources/Plasma/PubUtilLib/inc;../../../../Sources/Plasma/CoreLib;../../../../../StaticSDKs/XPlatform/zlib;../../../../../StaticSDKs/XPlatform/png;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;BUILD_TYPE=BUILD_TYPE_LIVE;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>true</StringPooling>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
@ -111,7 +111,7 @@
<ClCompile>
<Optimization>Full</Optimization>
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
<AdditionalIncludeDirectories>../../../../Sources/Plasma/NucleusLib/inc;../../../../Sources/Plasma/PubUtilLib/inc;../../../../Sources/Plasma/CoreLib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../../../Sources/Plasma/NucleusLib/inc;../../../../Sources/Plasma/PubUtilLib/inc;../../../../Sources/Plasma/CoreLib;../../../../../StaticSDKs/XPlatform/zlib;../../../../../StaticSDKs/XPlatform/png;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;PLASMA_EXTERNAL_RELEASE;BUILD_TYPE=BUILD_TYPE_LIVE;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>true</StringPooling>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
@ -143,7 +143,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>../../../../Sources/Plasma/NucleusLib/inc;../../../../Sources/Plasma/PubUtilLib/inc;../../../../Sources/Plasma/CoreLib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../../../Sources/Plasma/NucleusLib/inc;../../../../Sources/Plasma/PubUtilLib/inc;../../../../Sources/Plasma/CoreLib;../../../../../StaticSDKs/XPlatform/zlib;../../../../../StaticSDKs/XPlatform/png;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;BUILD_TYPE=BUILD_TYPE_LIVE;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
@ -171,7 +171,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>../../../../Sources/Plasma/NucleusLib/inc;../../../../Sources/Plasma/PubUtilLib/inc;../../../../Sources/Plasma/CoreLib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../../../Sources/Plasma/NucleusLib/inc;../../../../Sources/Plasma/PubUtilLib/inc;../../../../Sources/Plasma/CoreLib;../../../../../StaticSDKs/XPlatform/zlib;../../../../../StaticSDKs/XPlatform/png;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;PLASMA_EXTERNAL_RELEASE;BUILD_TYPE=BUILD_TYPE_LIVE;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
@ -405,6 +405,10 @@
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<ClCompile Include="..\..\..\..\Sources\Plasma\PubUtilLib\plGImage\plPNG.cpp">
<Optimization Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">MaxSpeed</Optimization>
<Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
</ClCompile>
<ClCompile Include="..\..\..\..\Sources\Plasma\PubUtilLib\plGImage\plTGAWriter.cpp">
<Optimization Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">Disabled</Optimization>
<Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
@ -454,6 +458,7 @@
<ClInclude Include="..\..\..\..\Sources\Plasma\PubUtilLib\PlGImage\plGImageCreatable.h" />
<ClInclude Include="..\..\..\..\Sources\Plasma\PubUtilLib\plGImage\plLODMipmap.h" />
<ClInclude Include="..\..\..\..\Sources\Plasma\PubUtilLib\plGImage\plMipmap.h" />
<ClInclude Include="..\..\..\..\Sources\Plasma\PubUtilLib\plGImage\plPNG.h" />
<ClInclude Include="..\..\..\..\Sources\Plasma\PubUtilLib\plGImage\plTGAWriter.h" />
<ClInclude Include="..\..\..\..\Sources\Plasma\PubUtilLib\plGImage\plWinFontCache.h" />
</ItemGroup>

View File

@ -50,6 +50,9 @@
<ClCompile Include="..\..\..\..\Sources\Plasma\PubUtilLib\plGImage\plMipmap.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\Sources\Plasma\PubUtilLib\plGImage\plPNG.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\Sources\Plasma\PubUtilLib\plGImage\plTGAWriter.cpp">
<Filter>Source Files</Filter>
</ClCompile>
@ -103,6 +106,9 @@
<ClInclude Include="..\..\..\..\Sources\Plasma\PubUtilLib\plGImage\plMipmap.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\Sources\Plasma\PubUtilLib\plGImage\plPNG.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\Sources\Plasma\PubUtilLib\plGImage\plTGAWriter.h">
<Filter>Header Files</Filter>
</ClInclude>

View File

@ -245,22 +245,6 @@
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<ClCompile Include="..\..\..\..\Sources\Plasma\PubUtilLib\plPipeline\plBinkPlayer.cpp">
<Optimization Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">Disabled</Optimization>
<Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">EnableFastChecks</BasicRuntimeChecks>
<BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
<Optimization Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">MaxSpeed</Optimization>
<Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release_Internal|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<ClCompile Include="..\..\..\..\Sources\Plasma\PubUtilLib\plPipeline\plCaptureRender.cpp">
<Optimization Condition="'$(Configuration)|$(Platform)'=='Debug_Internal|Win32'">Disabled</Optimization>
<Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>

View File

@ -23,9 +23,6 @@
<ClCompile Include="..\..\..\..\Sources\Plasma\PubUtilLib\plPipeline\hsGDDrawDllLoad.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\Sources\Plasma\PubUtilLib\plPipeline\plBinkPlayer.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\Sources\Plasma\PubUtilLib\plPipeline\plCaptureRender.cpp">
<Filter>Source Files</Filter>
</ClCompile>

View File

@ -121,6 +121,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "plClient", "..\plClient\plC
{6CB8A937-3C28-447E-B753-081E275E58FF} = {6CB8A937-3C28-447E-B753-081E275E58FF}
{C28B9838-04AE-4EBD-A93F-A94A64230887} = {C28B9838-04AE-4EBD-A93F-A94A64230887}
{46B6473A-BD67-4DB8-9479-3C26B8626CFA} = {46B6473A-BD67-4DB8-9479-3C26B8626CFA}
{17A0AA3A-8445-4C66-FE58-0A5C222CC474} = {17A0AA3A-8445-4C66-FE58-0A5C222CC474}
{65A72F3C-FE82-4014-81A3-4647938F40AA} = {65A72F3C-FE82-4014-81A3-4647938F40AA}
{A58C3644-55E7-44EB-BE85-0D53773B8BA9} = {A58C3644-55E7-44EB-BE85-0D53773B8BA9}
{28E5E146-D581-4492-9DD7-D56247A9F027} = {28E5E146-D581-4492-9DD7-D56247A9F027}
@ -190,6 +191,10 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "plClientKey", "..\plClientK
ProjectSection(ProjectDependencies) = postProject
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "plClientResMgr", "..\..\PubUtilLib\plClientResMgr\plClientResMgr.vcproj", "{17A0AA3A-8445-4C66-FE58-0A5C222CC474}"
ProjectSection(ProjectDependencies) = postProject
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "plCompression", "..\..\PubUtilLib\plCompression\plCompression.vcproj", "{EF33BFC0-C38B-4BA6-B5B7-E7F90323956F}"
ProjectSection(ProjectDependencies) = postProject
EndProjectSection
@ -489,6 +494,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "plPageOptimizer", "..\plPag
{5CB24835-47C1-4AE7-900E-70CBD1CC1DEA} = {5CB24835-47C1-4AE7-900E-70CBD1CC1DEA}
{6CB8A937-3C28-447E-B753-081E275E58FF} = {6CB8A937-3C28-447E-B753-081E275E58FF}
{46B6473A-BD67-4DB8-9479-3C26B8626CFA} = {46B6473A-BD67-4DB8-9479-3C26B8626CFA}
{17A0AA3A-8445-4C66-FE58-0A5C222CC474} = {17A0AA3A-8445-4C66-FE58-0A5C222CC474}
{65A72F3C-FE82-4014-81A3-4647938F40AA} = {65A72F3C-FE82-4014-81A3-4647938F40AA}
{A58C3644-55E7-44EB-BE85-0D53773B8BA9} = {A58C3644-55E7-44EB-BE85-0D53773B8BA9}
{28E5E146-D581-4492-9DD7-D56247A9F027} = {28E5E146-D581-4492-9DD7-D56247A9F027}
@ -929,6 +935,18 @@ Global
{CE472632-E2F1-446C-ABAB-1CE5BD9F367B}.Release_Patcher.Build.0 = Release|Win32
{CE472632-E2F1-446C-ABAB-1CE5BD9F367B}.Release_Server.ActiveCfg = Release|Win32
{CE472632-E2F1-446C-ABAB-1CE5BD9F367B}.Release_Server.Build.0 = Release|Win32
{17A0AA3A-8445-4C66-FE58-0A5C222CC474}.Debug.ActiveCfg = Debug|Win32
{17A0AA3A-8445-4C66-FE58-0A5C222CC474}.Debug.Build.0 = Debug|Win32
{17A0AA3A-8445-4C66-FE58-0A5C222CC474}.Debug_Patcher.ActiveCfg = Debug|Win32
{17A0AA3A-8445-4C66-FE58-0A5C222CC474}.Debug_Patcher.Build.0 = Debug|Win32
{17A0AA3A-8445-4C66-FE58-0A5C222CC474}.Debug_Server.ActiveCfg = Debug|Win32
{17A0AA3A-8445-4C66-FE58-0A5C222CC474}.Debug_Server.Build.0 = Debug|Win32
{17A0AA3A-8445-4C66-FE58-0A5C222CC474}.Release.ActiveCfg = Release|Win32
{17A0AA3A-8445-4C66-FE58-0A5C222CC474}.Release.Build.0 = Release|Win32
{17A0AA3A-8445-4C66-FE58-0A5C222CC474}.Release_Patcher.ActiveCfg = Release|Win32
{17A0AA3A-8445-4C66-FE58-0A5C222CC474}.Release_Patcher.Build.0 = Release|Win32
{17A0AA3A-8445-4C66-FE58-0A5C222CC474}.Release_Server.ActiveCfg = Release|Win32
{17A0AA3A-8445-4C66-FE58-0A5C222CC474}.Release_Server.Build.0 = Release|Win32
{EF33BFC0-C38B-4BA6-B5B7-E7F90323956F}.Debug.ActiveCfg = Debug|Win32
{EF33BFC0-C38B-4BA6-B5B7-E7F90323956F}.Debug.Build.0 = Debug|Win32
{EF33BFC0-C38B-4BA6-B5B7-E7F90323956F}.Debug_Patcher.ActiveCfg = Debug_Patcher|Win32

View File

@ -39,11 +39,11 @@
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="winhttp.lib ogg_static_d.lib vorbis_static_d.lib vorbisfile_static_d.lib ksproxy.lib strmiids.lib eax.lib wininet.lib vfw32.lib winmm.lib ijl15l.lib libcrypto.a ws2_32.lib version.lib odbc32.lib odbccp32.lib eaxguid.lib libspeex.lib binkw32.lib Rpcrt4.lib largeint.lib Iphlpapi.lib OpenAL32.lib"
AdditionalDependencies="winhttp.lib ogg_static_d.lib vorbis_static_d.lib vorbisfile_static_d.lib ksproxy.lib strmiids.lib eax.lib wininet.lib vfw32.lib winmm.lib ijl15l.lib libcrypto.a ws2_32.lib version.lib odbc32.lib odbccp32.lib eaxguid.lib libspeex.lib binkw32.lib Rpcrt4.lib largeint.lib Iphlpapi.lib OpenAL32.lib libpngd.lib"
OutputFile="Debug/plClient_dbg.exe"
LinkIncremental="1"
SuppressStartupBanner="TRUE"
AdditionalLibraryDirectories="&quot;..\..\..\..\..\StaticSDKs\XPlatform\expat-1.95.7\StaticLibs\Win32&quot;;&quot;..\..\..\..\..\StaticSDKs\Win32\speex-1.0.1\win32\libspeex\Release&quot;;..\..\..\..\..\StaticSDKs\Win32\Bink\lib;..\..\..\..\..\StaticSDKs\Win32\eax\lib;..\..\..\..\..\StaticSDKs\Win32\oggvorbis\lib;..\..\..\..\..\STATICSDKS\XPLATFORM\STLPORT\lib;..\..\..\..\..\STATICSDKS\Win32\ijl\lib;..\..\..\..\..\StaticSDKs\Win32\WMSDK\lib;..\..\..\..\..\StaticSDKs\Win32\OpenSSL\lib;..\..\..\..\..\StaticSDKs\Win32\dx9.0csdk\lib;..\..\..\..\..\StaticSDKs\Win32\PhysX\lib\win32;..\..\..\..\..\StaticSDKs\Win32\OpenAL 1.1 with EFX SDK\libs\Win32;..\..\..\..\..\StaticSDKs\Win32\PlatformSDK\Lib"
AdditionalLibraryDirectories="&quot;..\..\..\..\..\StaticSDKs\XPlatform\expat-1.95.7\StaticLibs\Win32&quot;;&quot;..\..\..\..\..\StaticSDKs\Win32\speex-1.0.1\win32\libspeex\Release&quot;;..\..\..\..\..\StaticSDKs\Win32\Bink\lib;..\..\..\..\..\StaticSDKs\Win32\eax\lib;..\..\..\..\..\StaticSDKs\Win32\oggvorbis\lib;..\..\..\..\..\STATICSDKS\XPLATFORM\STLPORT\lib;..\..\..\..\..\STATICSDKS\Win32\ijl\lib;..\..\..\..\..\StaticSDKs\Win32\WMSDK\lib;..\..\..\..\..\StaticSDKs\Win32\OpenSSL\lib;..\..\..\..\..\StaticSDKs\Win32\dx9.0csdk\lib;..\..\..\..\..\StaticSDKs\Win32\PhysX\lib\win32;..\..\..\..\..\StaticSDKs\Win32\OpenAL 1.1 with EFX SDK\libs\Win32;..\..\..\..\..\StaticSDKs\Win32\PlatformSDK\Lib;&quot;..\..\..\..\..\StaticSDKs\XPlatform\png\lib&quot;"
IgnoreDefaultLibraryNames="libc.lib,libcd.lib,libci.lib,libcid.lib,libcmtd.lib,libcmt.lib"
GenerateDebugInformation="TRUE"
AssemblyDebug="1"
@ -72,6 +72,7 @@ xcopy /Y ..\..\..\..\..\StaticSDKs\Win32\PhysX\Bin\win32\NxCharacter.dll ..\..\.
xcopy /Y ..\..\..\..\..\StaticSDKs\Win32\PhysX\Bin\win32\NxCooking.dll ..\..\..\..\test\
xcopy /Y ..\..\..\..\..\StaticSDKs\Win32\PhysX\Bin\win32\NxExtensions.dll ..\..\..\..\test\
xcopy /Y ..\..\..\..\..\StaticSDKs\Win32\PhysX\Bin\win32\PhysXLoader.dll ..\..\..\..\test\
xcopy /Y ..\..\..\..\Sources\Plasma\Apps\plClient\external\resource.dat ..\..\..\..\test\
"
ExcludedFromBuild="FALSE"/>
<Tool
@ -124,11 +125,11 @@ xcopy /Y ..\..\..\..\..\StaticSDKs\Win32\PhysX\Bin\win32\PhysXLoader.dll ..\..\.
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="winhttp.lib ogg_static.lib vorbis_static.lib vorbisfile_static.lib strmiids.lib wininet.lib vfw32.lib winmm.lib libjpeg.lib libeay32.lib ws2_32.lib version.lib odbc32.lib odbccp32.lib libspeex.lib Rpcrt4.lib largeint.lib Iphlpapi.lib OpenAL32.lib"
AdditionalDependencies="winhttp.lib ogg_static.lib vorbis_static.lib vorbisfile_static.lib strmiids.lib wininet.lib vfw32.lib winmm.lib libjpeg.lib libeay32.lib ws2_32.lib version.lib odbc32.lib odbccp32.lib libspeex.lib Rpcrt4.lib largeint.lib Iphlpapi.lib OpenAL32.lib libpng.lib"
OutputFile=".\Release/plClient.exe"
LinkIncremental="1"
SuppressStartupBanner="TRUE"
AdditionalLibraryDirectories="&quot;..\..\..\..\..\StaticSDKs\XPlatform\expat-1.95.7\StaticLibs\Win32&quot;;&quot;..\..\..\..\..\StaticSDKs\Win32\speex-1.0.1\Win32\libspeex\Release&quot;;..\..\..\..\..\StaticSDKs\Win32\Bink\lib;..\..\..\..\..\StaticSDKs\Win32\oggvorbis\lib;..\..\..\..\..\STATICSDKS\XPLATFORM\STLPORT\lib;..\..\..\..\..\StaticSDKs\Win32\WMSDK\lib;..\..\..\..\..\StaticSDKs\Win32\OpenSSL\lib;..\..\..\..\..\StaticSDKs\Win32\DX9.0c\Lib\x86;..\..\..\..\..\StaticSDKs\Win32\PhysX\lib\win32;&quot;..\..\..\..\..\StaticSDKs\Win32\OpenAL 1.1 with EFX SDK\libs\Win32&quot;;..\..\..\..\..\StaticSDKs\Win32\PlatformSDK\Lib;&quot;..\..\..\..\..\StaticSDKs\XPlatform\jpeg-8c-rgba&quot;"
AdditionalLibraryDirectories="&quot;..\..\..\..\..\StaticSDKs\XPlatform\expat-1.95.7\StaticLibs\Win32&quot;;&quot;..\..\..\..\..\StaticSDKs\Win32\speex-1.0.1\Win32\libspeex\Release&quot;;..\..\..\..\..\StaticSDKs\Win32\Bink\lib;..\..\..\..\..\StaticSDKs\Win32\oggvorbis\lib;..\..\..\..\..\STATICSDKS\XPLATFORM\STLPORT\lib;..\..\..\..\..\StaticSDKs\Win32\WMSDK\lib;..\..\..\..\..\StaticSDKs\Win32\OpenSSL\lib;..\..\..\..\..\StaticSDKs\Win32\DX9.0c\Lib\x86;..\..\..\..\..\StaticSDKs\Win32\PhysX\lib\win32;&quot;..\..\..\..\..\StaticSDKs\Win32\OpenAL 1.1 with EFX SDK\libs\Win32&quot;;..\..\..\..\..\StaticSDKs\Win32\PlatformSDK\Lib;&quot;..\..\..\..\..\StaticSDKs\XPlatform\jpeg-8c-rgba&quot;;&quot;..\..\..\..\..\StaticSDKs\XPlatform\png\lib&quot;"
IgnoreDefaultLibraryNames="libc.lib,libci.lib,libcmt.lib"
GenerateDebugInformation="TRUE"
AssemblyDebug="1"
@ -161,6 +162,7 @@ xcopy /Y ..\..\..\..\..\StaticSDKs\Win32\PhysX\Bin\win32\NxCharacter.dll ..\..\.
xcopy /Y ..\..\..\..\..\StaticSDKs\Win32\PhysX\Bin\win32\NxCooking.dll ..\..\..\..\test\
xcopy /Y ..\..\..\..\..\StaticSDKs\Win32\PhysX\Bin\win32\NxExtensions.dll ..\..\..\..\test\
xcopy /Y ..\..\..\..\..\StaticSDKs\Win32\PhysX\Bin\win32\PhysXLoader.dll ..\..\..\..\test\
xcopy /Y ..\..\..\..\Sources\Plasma\Apps\plClient\external\resource.dat ..\..\..\..\test\
"/>
<Tool
Name="VCPreBuildEventTool"/>
@ -363,84 +365,15 @@ xcopy /Y ..\..\..\..\..\StaticSDKs\Win32\PhysX\Bin\win32\PhysXLoader.dll ..\..\.
<File
RelativePath="..\..\..\..\Sources\Plasma\Apps\plClient\res\banner.bmp">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\Apps\plClient\res\bitmap1.bmp">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\Apps\plClient\res\bitmap2.bmp">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\Apps\plClient\res\bitmap3.bmp">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\Apps\plClient\res\bmp00001.bmp">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\Apps\plClient\res\bmp00002.bmp">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\Apps\plClient\res\bmp00003.bmp">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\Apps\plClient\res\bmp00004.bmp">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\Apps\plClient\res\bmp00005.bmp">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\Apps\plClient\res\book.bmp">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\Apps\plClient\res\book_cli.bmp">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\Apps\plClient\res\book_hig.bmp">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\Apps\plClient\res\cnsl1.bin">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\Apps\plClient\res\cursor_clicked.bmp">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\Apps\plClient\res\cursor_disabled.bmp">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\Apps\plClient\res\cursor_down.bmp">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\Apps\plClient\res\cursor_grab.bmp">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\Apps\plClient\res\cursor_left.bmp">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\Apps\plClient\res\cursor_open.bmp">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\Apps\plClient\res\cursor_poised.bmp">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\Apps\plClient\res\cursor_right.bmp">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\Apps\plClient\res\cursor_u.bmp">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\Apps\plClient\res\cursor_up.bmp">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\Apps\plClient\res\cursor_upward.bmp">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\Apps\plClient\res\Dirt.ICO">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\Apps\plClient\res\headspin.ico">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\Apps\plClient\res\Microphone.bmp">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\Apps\plClient\res\plClient.rc">
<FileConfiguration
@ -461,69 +394,6 @@ xcopy /Y ..\..\..\..\..\StaticSDKs\Win32\PhysX\Bin\win32\PhysXLoader.dll ..\..\.
<File
RelativePath="..\..\..\..\Sources\Plasma\Apps\plClient\res\resource.h">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\Apps\plClient\res\Speaker.bmp">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.01.jpg">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.02.jpg">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.03.jpg">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.04.jpg">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.05.jpg">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.06.jpg">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.07.jpg">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.08.jpg">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.09.jpg">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.10.jpg">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.11.jpg">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.12.jpg">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.13.jpg">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.14.jpg">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.15.jpg">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.16.jpg">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.17.jpg">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking.18.jpg">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Linking_Text.jpg">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\Apps\plClient\res\xLoading_Updating_Text.jpg">
</File>
</Filter>
<Filter
Name="Text"

View File

@ -33,10 +33,10 @@
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="ogg_static.lib vorbis_static.lib vorbisfile_static.lib ksproxy.lib strmiids.lib eax.lib wininet.lib vfw32.lib winmm.lib libcrypto.a ws2_32.lib version.lib odbc32.lib odbccp32.lib eaxguid.lib binkw32.lib d3dx9.lib dinput8.lib dplayx.lib dsound.lib dxerr9.lib dxguid.lib zlibd.lib Rpcrt4.lib ijl15l.lib NxCharacter.lib PhysXLoader.lib libspeex.lib OpenAL32.lib"
AdditionalDependencies="ogg_static.lib vorbis_static.lib vorbisfile_static.lib ksproxy.lib strmiids.lib eax.lib wininet.lib vfw32.lib winmm.lib libcrypto.a ws2_32.lib version.lib odbc32.lib odbccp32.lib eaxguid.lib binkw32.lib d3dx9.lib dinput8.lib dplayx.lib dsound.lib dxerr9.lib dxguid.lib libpngd.lib zlibd.lib Rpcrt4.lib ijl15l.lib NxCharacter.lib PhysXLoader.lib libspeex.lib OpenAL32.lib"
OutputFile="$(OutDir)/plPageOptimizer.exe"
LinkIncremental="2"
AdditionalLibraryDirectories="..\..\..\..\..\StaticSDKs\Win32\Bink\lib;..\..\..\..\..\StaticSDKs\Win32\eax\lib;..\..\..\..\..\StaticSDKs\Win32\oggvorbis\lib;..\..\..\..\..\STATICSDKS\Win32\ijl\lib;..\..\..\..\..\StaticSDKs\Win32\WMSDK\lib;..\..\..\..\..\StaticSDKs\Win32\OpenSSL\lib;..\..\..\..\..\StaticSDKs\Win32\dx8.1sdk\lib;..\..\..\..\SDKs\XPlatform\ODE\lib\win32;&quot;..\..\..\..\..\StaticSDKs\XPlatform\expat-1.95.7\StaticLibs&quot;;..\..\..\..\..\StaticSDKs\XPlatform\zlib\lib;..\..\..\..\..\StaticSDKs\Win32\PhysX\lib\win32;&quot;..\..\..\..\..\StaticSDKs\XPlatform\expat-1.95.7\StaticLibs\Win32&quot;;&quot;..\..\..\..\..\StaticSDKs\Win32\speex-1.0.1\Win32\libspeex\Debug&quot;;&quot;..\..\..\..\..\StaticSDKs\Win32\OpenAL 1.1 with EFX SDK\libs\Win32&quot;;..\..\..\..\..\StaticSDKs\Win32\dx9.0c\lib"
AdditionalLibraryDirectories="..\..\..\..\..\StaticSDKs\Win32\Bink\lib;..\..\..\..\..\StaticSDKs\Win32\eax\lib;..\..\..\..\..\StaticSDKs\Win32\oggvorbis\lib;..\..\..\..\..\STATICSDKS\Win32\ijl\lib;..\..\..\..\..\StaticSDKs\Win32\WMSDK\lib;..\..\..\..\..\StaticSDKs\Win32\OpenSSL\lib;..\..\..\..\..\StaticSDKs\Win32\dx8.1sdk\lib;..\..\..\..\SDKs\XPlatform\ODE\lib\win32;&quot;..\..\..\..\..\StaticSDKs\XPlatform\expat-1.95.7\StaticLibs&quot;;..\..\..\..\..\StaticSDKs\XPlatform\png\lib;..\..\..\..\..\StaticSDKs\XPlatform\zlib\lib;..\..\..\..\..\StaticSDKs\Win32\PhysX\lib\win32;&quot;..\..\..\..\..\StaticSDKs\XPlatform\expat-1.95.7\StaticLibs\Win32&quot;;&quot;..\..\..\..\..\StaticSDKs\Win32\speex-1.0.1\Win32\libspeex\Debug&quot;;&quot;..\..\..\..\..\StaticSDKs\Win32\OpenAL 1.1 with EFX SDK\libs\Win32&quot;;..\..\..\..\..\StaticSDKs\Win32\dx9.0c\lib"
IgnoreDefaultLibraryNames="libc.lib,libcd.lib,libci.lib"
GenerateDebugInformation="TRUE"
ProgramDatabaseFile="$(OutDir)/plPageOptimizer.pdb"
@ -83,10 +83,10 @@
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="ogg_static.lib vorbis_static.lib vorbisfile_static.lib strmiids.lib wininet.lib vfw32.lib winmm.lib libeay32.lib ws2_32.lib version.lib odbc32.lib odbccp32.lib d3dx9.lib dinput8.lib dplayx.lib dsound.lib dxerr9.lib dxguid.lib zlib.lib libspeex.lib OpenAL32.lib Rpcrt4.lib NxCharacter.lib PhysXLoader.lib libjpeg.lib"
AdditionalDependencies="ogg_static.lib vorbis_static.lib vorbisfile_static.lib strmiids.lib wininet.lib vfw32.lib winmm.lib libeay32.lib ws2_32.lib version.lib odbc32.lib odbccp32.lib d3dx9.lib dinput8.lib dplayx.lib dsound.lib dxerr9.lib dxguid.lib libpng.lib zlib.lib libspeex.lib OpenAL32.lib Rpcrt4.lib NxCharacter.lib PhysXLoader.lib libjpeg.lib"
OutputFile="$(OutDir)/plPageOptimizer.exe"
LinkIncremental="1"
AdditionalLibraryDirectories="..\..\..\..\..\StaticSDKs\Win32\Bink\lib;..\..\..\..\..\StaticSDKs\Win32\eax\lib;..\..\..\..\..\StaticSDKs\Win32\oggvorbis\lib;..\..\..\..\..\STATICSDKS\Win32\ijl\lib;..\..\..\..\..\StaticSDKs\Win32\WMSDK\lib;..\..\..\..\..\StaticSDKs\Win32\OpenSSL\lib;..\..\..\..\..\StaticSDKs\Win32\dx9.0c\lib\x86;..\..\..\..\SDKs\XPlatform\ODE\lib\win32;&quot;..\..\..\..\..\StaticSDKs\XPlatform\expat-1.95.7\StaticLibs&quot;;..\..\..\..\..\StaticSDKs\XPlatform\zlib\lib;&quot;..\..\..\..\..\StaticSDKs\Win32\speex-1.0.1\Win32\libspeex\Release&quot;;&quot;..\..\..\..\..\StaticSDKs\Win32\OpenAL 1.1 with EFX SDK\libs\Win32&quot;;&quot;..\..\..\..\..\StaticSDKs\XPlatform\expat-1.95.7\StaticLibs\Win32&quot;;..\..\..\..\..\StaticSDKs\Win32\PhysX\lib\win32;&quot;../../../../../StaticSDKs/XPlatform/jpeg-8c-rgba&quot;"
AdditionalLibraryDirectories="..\..\..\..\..\StaticSDKs\Win32\Bink\lib;..\..\..\..\..\StaticSDKs\Win32\eax\lib;..\..\..\..\..\StaticSDKs\Win32\oggvorbis\lib;..\..\..\..\..\STATICSDKS\Win32\ijl\lib;..\..\..\..\..\StaticSDKs\Win32\WMSDK\lib;..\..\..\..\..\StaticSDKs\Win32\OpenSSL\lib;..\..\..\..\..\StaticSDKs\Win32\dx9.0c\lib\x86;..\..\..\..\SDKs\XPlatform\ODE\lib\win32;&quot;..\..\..\..\..\StaticSDKs\XPlatform\expat-1.95.7\StaticLibs&quot;;..\..\..\..\..\StaticSDKs\XPlatform\png\lib;..\..\..\..\..\StaticSDKs\XPlatform\zlib\lib;&quot;..\..\..\..\..\StaticSDKs\Win32\speex-1.0.1\Win32\libspeex\Release&quot;;&quot;..\..\..\..\..\StaticSDKs\Win32\OpenAL 1.1 with EFX SDK\libs\Win32&quot;;&quot;..\..\..\..\..\StaticSDKs\XPlatform\expat-1.95.7\StaticLibs\Win32&quot;;..\..\..\..\..\StaticSDKs\Win32\PhysX\lib\win32;&quot;../../../../../StaticSDKs/XPlatform/jpeg-8c-rgba&quot;"
IgnoreDefaultLibraryNames="libc.lib,libci.lib,libcmt.lib"
GenerateDebugInformation="TRUE"
SubSystem="1"

View File

@ -22,7 +22,7 @@
Name="VCCLCompilerTool"
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..\..\..\..\Sources\Plasma\CoreLib,..\..\..\..\Sources\Plasma\PubUtilLib\inc,..\..\..\..\..\StaticSDKs\XPlatform\zlib\inc,..\..\..\..\Sources\AssetMan\Libs\jvCoreUtil"
AdditionalIncludeDirectories="..\..\..\..\Sources\Plasma\CoreLib,..\..\..\..\Sources\Plasma\PubUtilLib\inc,..\..\..\..\..\StaticSDKs\XPlatform\zlib,..\..\..\..\Sources\AssetMan\Libs\jvCoreUtil"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
StringPooling="TRUE"
RuntimeLibrary="2"
@ -89,7 +89,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\..\..\..\Sources\Plasma\CoreLib,..\..\..\..\Sources\Plasma\PubUtilLib\inc,..\..\..\..\..\StaticSDKs\XPlatform\zlib\inc,..\..\..\..\Sources\AssetMan\Libs\jvCoreUtil"
AdditionalIncludeDirectories="..\..\..\..\Sources\Plasma\CoreLib,..\..\..\..\Sources\Plasma\PubUtilLib\inc,..\..\..\..\..\StaticSDKs\XPlatform\zlib,..\..\..\..\Sources\AssetMan\Libs\jvCoreUtil"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
@ -254,7 +254,7 @@
</FileConfiguration>
</File>
<File
RelativePath="..\..\..\..\..\StaticSDKs\XPlatform\zlib\SRC\contrib\minizip\unzip.c">
RelativePath="..\..\..\..\..\StaticSDKs\XPlatform\zlib\contrib\minizip\unzip.c">
<FileConfiguration
Name="Release|Win32">
<Tool
@ -290,7 +290,7 @@
RelativePath="..\..\..\..\Sources\Plasma\Apps\plPlasmaInstaller\plUnzip.h">
</File>
<File
RelativePath="..\..\..\..\..\StaticSDKs\XPlatform\zlib\SRC\contrib\minizip\unzip.h">
RelativePath="..\..\..\..\..\StaticSDKs\XPlatform\zlib\contrib\minizip\unzip.h">
</File>
</Filter>
<Filter

View File

@ -21,7 +21,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\..\..\..\Sources\Plasma\CoreLib;..\..\..\..\Sources\Plasma\NucleusLib\inc;..\..\..\..\Sources\Plasma\PubUtilLib\inc;..\..\..\..\..\StaticSDKs\XPlatform\zlib\inc;..\..\..\..\Sources\AssetMan\Libs\jvCoreUtil;..\..\..\..\Sources\Plasma\PubUtilLib\plHttpServer"
AdditionalIncludeDirectories="..\..\..\..\Sources\Plasma\CoreLib;..\..\..\..\Sources\Plasma\NucleusLib\inc;..\..\..\..\Sources\Plasma\PubUtilLib\inc;..\..\..\..\..\StaticSDKs\XPlatform\zlib;..\..\..\..\Sources\AssetMan\Libs\jvCoreUtil;..\..\..\..\Sources\Plasma\PubUtilLib\plHttpServer"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
@ -89,7 +89,7 @@
Name="VCCLCompilerTool"
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..\..\..\..\Sources\Plasma\CoreLib;..\..\..\..\Sources\Plasma\NucleusLib\inc;..\..\..\..\Sources\Plasma\PubUtilLib\inc;..\..\..\..\..\StaticSDKs\XPlatform\zlib\inc;..\..\..\..\Sources\AssetMan\Libs\jvCoreUtil;..\..\..\..\Sources\Plasma\PubUtilLib\plHttpServer"
AdditionalIncludeDirectories="..\..\..\..\Sources\Plasma\CoreLib;..\..\..\..\Sources\Plasma\NucleusLib\inc;..\..\..\..\Sources\Plasma\PubUtilLib\inc;..\..\..\..\..\StaticSDKs\XPlatform\zlib;..\..\..\..\Sources\AssetMan\Libs\jvCoreUtil;..\..\..\..\Sources\Plasma\PubUtilLib\plHttpServer"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
StringPooling="TRUE"
RuntimeLibrary="2"

View File

@ -21,7 +21,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="../../../../Sources/Plasma/FeatureLib/inc;../../../../Sources/Plasma/NucleusLib/inc;../../../../../StaticSDKs/Win32/Bink/inc;../../../../Sources/Plasma/PubUtilLib/inc;../../../../Sources/Plasma/CoreLib"
AdditionalIncludeDirectories="../../../../Sources/Plasma/FeatureLib/inc;../../../../Sources/Plasma/NucleusLib/inc;../../../../Sources/Plasma/PubUtilLib/inc;../../../../Sources/Plasma/CoreLib"
PreprocessorDefinitions="WIN32;_DEBUG;_LIB"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
@ -73,7 +73,7 @@
Name="VCCLCompilerTool"
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="../../../../Sources/Plasma/FeatureLib/inc;../../../../Sources/Plasma/NucleusLib/inc;../../../../../StaticSDKs/Win32/Bink/inc;../../../../Sources/Plasma/PubUtilLib/inc;../../../../Sources/Plasma/CoreLib"
AdditionalIncludeDirectories="../../../../Sources/Plasma/FeatureLib/inc;../../../../Sources/Plasma/NucleusLib/inc;../../../../Sources/Plasma/PubUtilLib/inc;../../../../Sources/Plasma/CoreLib"
PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
StringPooling="TRUE"
RuntimeLibrary="2"
@ -221,26 +221,6 @@
PreprocessorDefinitions=""/>
</FileConfiguration>
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\FeatureLib\pfSurface\plLayerBink.cpp">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
BasicRuntimeChecks="3"/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32">
<Tool
Name="VCCLCompilerTool"
Optimization="2"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""/>
</FileConfiguration>
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\FeatureLib\pfSurface\plLayerMovie.cpp">
<FileConfiguration

View File

@ -282,6 +282,26 @@
PreprocessorDefinitions=""/>
</FileConfiguration>
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\PubUtilLib\plAvatar\plAntiGravAction.cpp">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
BasicRuntimeChecks="3"/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32">
<Tool
Name="VCCLCompilerTool"
Optimization="2"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""/>
</FileConfiguration>
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\PubUtilLib\plAvatar\plArmatureEffects.cpp">
<FileConfiguration
@ -568,6 +588,26 @@
PreprocessorDefinitions=""/>
</FileConfiguration>
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\PubUtilLib\plAvatar\plAvCallbackAction.cpp">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
BasicRuntimeChecks="3"/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32">
<Tool
Name="VCCLCompilerTool"
Optimization="2"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""/>
</FileConfiguration>
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\PubUtilLib\plAvatar\plAvLadderModifier.cpp">
<FileConfiguration
@ -899,6 +939,9 @@
<File
RelativePath="..\..\..\..\Sources\Plasma\PubUtilLib\plAvatar\plAnimStage.h">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\PubUtilLib\plAvatar\plAntiGravAction.h">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\PubUtilLib\plAvatar\plArmatureEffects.h">
</File>
@ -950,6 +993,9 @@
<File
RelativePath="..\..\..\..\Sources\Plasma\PubUtilLib\plAvatar\plAvBrainSwim.h">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\PubUtilLib\plAvatar\plAvCallbackAction.h">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\PubUtilLib\plAvatar\plAvDefs.h">
</File>

View File

@ -0,0 +1,139 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="7.10"
Name="plClientResMgr"
ProjectGUID="{17A0AA3A-8445-4C66-FE58-0A5C222CC474}"
SccProjectName=""
SccLocalPath="">
<Platforms>
<Platform
Name="Win32"/>
</Platforms>
<Configurations>
<Configuration
Name="Release|Win32"
OutputDirectory=".\Release"
IntermediateDirectory=".\Release"
ConfigurationType="4"
UseOfMFC="0"
ATLMinimizesCRunTimeLibraryUsage="FALSE"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="../../../../Sources/Plasma/CoreLib;../../../../Sources/Plasma/NucleusLib/inc;../../../../Sources/Plasma/NucleusLib;../../../../Sources/Plasma/PubUtilLib"
PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
StringPooling="TRUE"
RuntimeLibrary="2"
EnableFunctionLevelLinking="TRUE"
ForceConformanceInForLoopScope="TRUE"
PrecompiledHeaderFile=""
AssemblerListingLocation=".\Release/"
ObjectFile=".\Release/"
ProgramDataBaseFileName=".\Release/"
WarningLevel="3"
SuppressStartupBanner="TRUE"
DebugInformationFormat="3"
CompileAs="0"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLibrarianTool"
OutputFile=".\Release\plClientResMgr.lib"
SuppressStartupBanner="TRUE"/>
<Tool
Name="VCMIDLTool"/>
<Tool
Name="VCPostBuildEventTool"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="NDEBUG"
Culture="1033"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCXMLDataGeneratorTool"/>
<Tool
Name="VCManagedWrapperGeneratorTool"/>
<Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
</Configuration>
<Configuration
Name="Debug|Win32"
OutputDirectory=".\Debug"
IntermediateDirectory=".\Debug"
ConfigurationType="4"
UseOfMFC="0"
ATLMinimizesCRunTimeLibraryUsage="FALSE"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="../../../../Sources/Plasma/CoreLib;../../../../Sources/Plasma/NucleusLib/inc;../../../../Sources/Plasma/NucleusLib;../../../../Sources/Plasma/PubUtilLib"
PreprocessorDefinitions="WIN32;_DEBUG;_LIB"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
ForceConformanceInForLoopScope="TRUE"
PrecompiledHeaderFile=""
AssemblerListingLocation=".\Debug/"
ObjectFile=".\Debug/"
ProgramDataBaseFileName=".\Debug/"
WarningLevel="3"
SuppressStartupBanner="TRUE"
DebugInformationFormat="3"
CompileAs="0"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLibrarianTool"
OutputFile=".\Debug\plClientResMgr.lib"
SuppressStartupBanner="TRUE"/>
<Tool
Name="VCMIDLTool"/>
<Tool
Name="VCPostBuildEventTool"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="_DEBUG"
Culture="1033"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCXMLDataGeneratorTool"/>
<Tool
Name="VCManagedWrapperGeneratorTool"/>
<Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="Source Files"
Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">
<File
RelativePath="..\..\..\..\Sources\Plasma\PubUtilLib\plClientResMgr\plClientResMgr.cpp">
</File>
</Filter>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl">
<File
RelativePath="..\..\..\..\Sources\Plasma\PubUtilLib\plClientResMgr\plClientResMgr.h">
</File>
</Filter>
</Files>
<Globals>
</Globals>
</VisualStudioProject>

View File

@ -24,7 +24,7 @@
Name="VCCLCompilerTool"
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="../../../../../StaticSDKs\Win32\zlib\inc,../../../../../StaticSDKs\XPlatform\zlib\inc,../../../../Sources/Plasma/CoreLib"
AdditionalIncludeDirectories="../../../../../StaticSDKs\Win32\zlib\inc,../../../../../StaticSDKs\XPlatform\zlib,../../../../Sources/Plasma/CoreLib"
PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
StringPooling="TRUE"
RuntimeLibrary="2"
@ -76,7 +76,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="../../../../../StaticSDKs\XPlatform\zlib\inc,../../../../Sources/Plasma/CoreLib"
AdditionalIncludeDirectories="../../../../../StaticSDKs\XPlatform\zlib,../../../../Sources/Plasma/CoreLib"
PreprocessorDefinitions="WIN32;_DEBUG;_LIB"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
@ -127,7 +127,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="../../../../../StaticSDKs\XPlatform\zlib\inc,../../../../Sources/Plasma/CoreLib"
AdditionalIncludeDirectories="../../../../../StaticSDKs\XPlatform\zlib,../../../../Sources/Plasma/CoreLib"
PreprocessorDefinitions="WIN32;_DEBUG;_LIB;STREAM_LOGGER"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
@ -178,7 +178,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="../../../../../StaticSDKs\XPlatform\zlib\inc,../../../../Sources/Plasma/CoreLib"
AdditionalIncludeDirectories="../../../../../StaticSDKs\XPlatform\zlib,../../../../Sources/Plasma/CoreLib"
PreprocessorDefinitions="WIN32;_DEBUG;_LIB;SERVER"
StringPooling="TRUE"
BasicRuntimeChecks="3"
@ -232,7 +232,7 @@
Name="VCCLCompilerTool"
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="../../../../../StaticSDKs\Win32\zlib\inc,../../../../../StaticSDKs\XPlatform\zlib\inc,../../../../Sources/Plasma/CoreLib"
AdditionalIncludeDirectories="../../../../../StaticSDKs\Win32\zlib\inc,../../../../../StaticSDKs\XPlatform\zlib,../../../../Sources/Plasma/CoreLib"
PreprocessorDefinitions="WIN32;NDEBUG;_LIB;SERVER"
StringPooling="TRUE"
RuntimeLibrary="0"
@ -285,7 +285,7 @@
Name="VCCLCompilerTool"
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="../../../../../StaticSDKs\Win32\zlib\inc,../../../../../StaticSDKs\XPlatform\zlib\inc,../../../../Sources/Plasma/CoreLib"
AdditionalIncludeDirectories="../../../../../StaticSDKs\Win32\zlib\inc,../../../../../StaticSDKs\XPlatform\zlib,../../../../Sources/Plasma/CoreLib"
PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
StringPooling="TRUE"
RuntimeLibrary="0"
@ -336,7 +336,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="../../../../../StaticSDKs\XPlatform\zlib\inc,../../../../Sources/Plasma/CoreLib"
AdditionalIncludeDirectories="../../../../../StaticSDKs\XPlatform\zlib,../../../../Sources/Plasma/CoreLib"
PreprocessorDefinitions="WIN32;_DEBUG;_LIB"
BasicRuntimeChecks="3"
RuntimeLibrary="1"

View File

@ -22,7 +22,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="../../../../../StaticSDKs/XPlatform/zlib/inc;../../../../Sources/Plasma/CoreLib;../../../../Sources/Plasma/NucleusLib/inc"
AdditionalIncludeDirectories="../../../../Sources/Plasma/CoreLib;../../../../Sources/Plasma/NucleusLib/inc"
PreprocessorDefinitions="WIN32;_DEBUG;_LIB;STREAM_LOGGER"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
@ -74,7 +74,7 @@
Name="VCCLCompilerTool"
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="../../../../../StaticSDKs/XPlatform/zlib/inc;../../../../Sources/Plasma/CoreLib;../../../../Sources/Plasma/NucleusLib/inc"
AdditionalIncludeDirectories="../../../../Sources/Plasma/CoreLib;../../../../Sources/Plasma/NucleusLib/inc"
PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
StringPooling="TRUE"
RuntimeLibrary="2"
@ -126,7 +126,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="../../../../../StaticSDKs/XPlatform/zlib/inc;../../../../Sources/Plasma/CoreLib;../../../../Sources/Plasma/NucleusLib/inc"
AdditionalIncludeDirectories="../../../../Sources/Plasma/CoreLib;../../../../Sources/Plasma/NucleusLib/inc"
PreprocessorDefinitions="WIN32;_DEBUG;_LIB"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
@ -178,7 +178,7 @@
Name="VCCLCompilerTool"
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="../../../../../StaticSDKs/XPlatform/zlib/inc;../../../../Sources/Plasma/CoreLib;../../../../Sources/Plasma/NucleusLib/inc"
AdditionalIncludeDirectories="../../../../Sources/Plasma/CoreLib;../../../../Sources/Plasma/NucleusLib/inc"
PreprocessorDefinitions="WIN32;NDEBUG;_LIB;SERVER"
StringPooling="TRUE"
RuntimeLibrary="0"
@ -229,7 +229,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="../../../../../StaticSDKs/XPlatform/zlib/inc;../../../../Sources/Plasma/CoreLib;../../../../Sources/Plasma/NucleusLib/inc"
AdditionalIncludeDirectories="../../../../Sources/Plasma/CoreLib;../../../../Sources/Plasma/NucleusLib/inc"
PreprocessorDefinitions="WIN32;_DEBUG;_LIB;SERVER"
StringPooling="TRUE"
BasicRuntimeChecks="3"
@ -282,7 +282,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="../../../../../StaticSDKs/XPlatform/zlib/inc;../../../../Sources/Plasma/CoreLib;../../../../Sources/Plasma/NucleusLib/inc"
AdditionalIncludeDirectories="../../../../Sources/Plasma/CoreLib;../../../../Sources/Plasma/NucleusLib/inc"
PreprocessorDefinitions="WIN32;_DEBUG;_LIB"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
@ -334,7 +334,7 @@
Name="VCCLCompilerTool"
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="../../../../../StaticSDKs/XPlatform/zlib/inc;../../../../Sources/Plasma/CoreLib;../../../../Sources/Plasma/NucleusLib/inc"
AdditionalIncludeDirectories="../../../../Sources/Plasma/CoreLib;../../../../Sources/Plasma/NucleusLib/inc"
PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
StringPooling="TRUE"
RuntimeLibrary="0"

View File

@ -22,7 +22,7 @@
Name="VCCLCompilerTool"
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="../../../../Sources/Plasma/NucleusLib/inc;../../../../../StaticSDKs/Win32/dx8.1sdk/include;../../../../Sources/Plasma/PubUtilLib/inc;../../../../Sources/Plasma/CoreLib"
AdditionalIncludeDirectories="../../../../Sources/Plasma/NucleusLib/inc;../../../../../StaticSDKs/Win32/dx8.1sdk/include;../../../../../StaticSDKs/XPlatform/zlib;../../../../../StaticSDKs/XPlatform/png;../../../../Sources/Plasma/PubUtilLib/inc;../../../../Sources/Plasma/CoreLib"
PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
StringPooling="TRUE"
RuntimeLibrary="2"
@ -74,7 +74,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="../../../../Sources/Plasma/NucleusLib/inc;../../../../../StaticSDKs/Win32/dx8.1sdk/include;../../../../Sources/Plasma/PubUtilLib/inc;../../../../Sources/Plasma/CoreLib"
AdditionalIncludeDirectories="../../../../Sources/Plasma/NucleusLib/inc;../../../../../StaticSDKs/Win32/dx8.1sdk/include;../../../../../StaticSDKs/XPlatform/zlib;../../../../../StaticSDKs/XPlatform/png;../../../../Sources/Plasma/PubUtilLib/inc;../../../../Sources/Plasma/CoreLib"
PreprocessorDefinitions="WIN32;_DEBUG;_LIB"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
@ -381,6 +381,9 @@
BasicRuntimeChecks="3"/>
</FileConfiguration>
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\PubUtilLib\plGImage\plPNG.cpp">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\PubUtilLib\plGImage\plTGAWriter.cpp">
<FileConfiguration
@ -470,6 +473,9 @@
<File
RelativePath="..\..\..\..\Sources\Plasma\PubUtilLib\plGImage\plMipmap.h">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\PubUtilLib\plGImage\plPNG.h">
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\PubUtilLib\plGImage\plTGAWriter.h">
</File>

View File

@ -21,7 +21,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="../../../../Sources/Plasma/NucleusLib/inc;../../../../../StaticSDKs/Win32/dx9.0c/include;../../../../Sources/Plasma/PubUtilLib/inc;../../../../Sources/Plasma/CoreLib;../../../../../StaticSDKs/Win32/Bink/inc;../../../../Sources/Plasma/FeatureLib/inc"
AdditionalIncludeDirectories="../../../../Sources/Plasma/NucleusLib/inc;../../../../../StaticSDKs/Win32/dx9.0c/include;../../../../Sources/Plasma/PubUtilLib/inc;../../../../Sources/Plasma/CoreLib;../../../../Sources/Plasma/FeatureLib/inc"
PreprocessorDefinitions="WIN32;_DEBUG;_LIB"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
@ -73,7 +73,7 @@
Name="VCCLCompilerTool"
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="../../../../Sources/Plasma/NucleusLib/inc;../../../../../StaticSDKs/Win32/dx9.0c/include;../../../../Sources/Plasma/PubUtilLib/inc;../../../../Sources/Plasma/CoreLib;../../../../../StaticSDKs/Win32/Bink/inc;../../../../Sources/Plasma/FeatureLib/inc"
AdditionalIncludeDirectories="../../../../Sources/Plasma/NucleusLib/inc;../../../../../StaticSDKs/Win32/dx9.0c/include;../../../../Sources/Plasma/PubUtilLib/inc;../../../../Sources/Plasma/CoreLib;../../../../Sources/Plasma/FeatureLib/inc"
PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
StringPooling="TRUE"
RuntimeLibrary="2"
@ -181,26 +181,6 @@
PreprocessorDefinitions=""/>
</FileConfiguration>
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\PubUtilLib\plPipeline\plBinkPlayer.cpp">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
BasicRuntimeChecks="3"/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32">
<Tool
Name="VCCLCompilerTool"
Optimization="2"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""/>
</FileConfiguration>
</File>
<File
RelativePath="..\..\..\..\Sources\Plasma\PubUtilLib\plPipeline\plCaptureRender.cpp">
<FileConfiguration

View File

@ -5480,6 +5480,22 @@ This event record is used to pass a ptKey variable to another python program"""
def addVarNumber(self,name,number):
"""Add a number variable event record to the Notify message
Method will try to pick appropriate variable type
This event record is used to pass a number variable to another python program"""
pass
def addVarFloat(self,name,number):
"""Add a float variable event record to the Notify message
This event record is used to pass a number variable to another python program"""
pass
def addVarInt(self,name,number):
"""Add a integer variable event record to the Notify message
This event record is used to pass a number variable to another python program"""
pass
def addVarNull(self,name):
"""Add a null (no data) variable event record to the Notify message
This event record is used to pass a number variable to another python program"""
pass

View File

@ -215,8 +215,10 @@ class PtNotificationType:
class PtNotifyDataType:
"""(none)"""
kNumber = 1
kFloat = 1
kKey = 2
kInt = 3
kNull = 4
class PtSDLReadWriteOptions:
"""(none)"""

View File

@ -69,7 +69,7 @@ kOfferLinkingBook=PtEventType.kOfferLinkingBook # [1]=offerer, [2]=link panel ID
# OnNotify Var Event Data Types
kVarNumberType=PtNotifyDataType.kNumber
kVarNumberType=PtNotifyDataType.kFloat
kVarKeyType=PtNotifyDataType.kKey
# OnNotify MultiStageEvent - what event types
kEnterStage=PtMultiStageEventType.kEnterStage
@ -179,8 +179,12 @@ def PtAddEvent(notify,event):
elif event[0] == kControlKeyEvent:
notify.addControlKeyEvent(event[1],event[2])
elif event[0] == kVariableEvent:
if event[2] == kVarNumberType:
notify.addVarNumber(event[1],event[3])
if event[2] == PtNotifyDataType.kFloat:
notify.addVarFloat(event[1],event[3])
elif event[2] == PtNotifyDataType.kInt:
notify.addVarInt(event[1],event[3])
elif event[2] == PtNotifyDataType.kNull:
notify.addVarNull(event[1])
elif event[2] == kVarKeyType:
notify.addVarKey(event[1],event[3])
elif event[0] == kFacingEvent:

View File

@ -0,0 +1,864 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="48"
height="48"
id="svg2"
version="1.1"
inkscape:version="0.48.1 r9760"
sodipodi:docname="making of cursors.svg"
inkscape:export-xdpi="360"
inkscape:export-ydpi="360">
<defs
id="defs4">
<filter
inkscape:collect="always"
id="filter6135"
x="-0.5"
width="2"
y="-0.5"
height="2"
inkscape:label="filter6135"
color-interpolation-filters="sRGB">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="1.5"
id="feGaussianBlur6137" />
</filter>
<mask
x="-0.5"
y="-0.5"
width="2"
height="2"
id="mask6840">
<g
id="g6842">
<rect
y="0"
x="0"
height="48"
width="48"
id="rect6844"
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none" />
<use
height="1"
width="1"
id="use6846"
xlink:href="#path4148"
y="0"
x="0"
style="fill:#404040;fill-opacity:1;display:inline" />
<use
height="1"
width="1"
id="use6845"
xlink:href="#path4146"
y="0"
x="0"
style="fill:#404040;fill-opacity:1;display:inline" />
<use
height="1"
width="1"
id="use6844"
xlink:href="#path4144"
y="0"
x="0"
style="fill:#404040;fill-opacity:1;display:inline" />
<use
height="1"
width="1"
id="use6843"
xlink:href="#path4119"
y="0"
x="0"
style="fill:#404040;fill-opacity:1;display:inline" />
</g>
</mask>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="12"
inkscape:cx="24"
inkscape:cy="24"
inkscape:document-units="px"
inkscape:current-layer="layer35"
showgrid="false"
inkscape:window-width="1541"
inkscape:window-height="889"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:object-nodes="true"
inkscape:snap-grids="true">
<inkscape:grid
type="xygrid"
id="grid2985"
empspacing="4"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true" />
<inkscape:grid
type="xygrid"
id="grid3997"
empspacing="8"
visible="true"
enabled="false"
snapvisiblegridlinesonly="true"
spacingx="0.5px"
spacingy="0.5px"
color="#00ff00"
opacity="0.1254902"
empcolor="#00ff00"
empopacity="0.25098039" />
<inkscape:grid
type="xygrid"
id="grid4665"
empspacing="2"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true"
spacingx="24px"
spacingy="24px"
color="#ff00ff"
opacity="0.15686275"
empcolor="#ff00ff"
empopacity="0.4" />
</sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="poised orig in"
inkscape:groupmode="layer"
id="layer1"
style="display:none"
sodipodi:insensitive="true">
<image
y="7.2600002"
x="7.2600002"
id="image3065"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAA3NCSVQICAjb4U/gAAAAvUlEQVRI
ie2UTRKDIAyFn53eK9yM5GYvJ6OLjBnHVrCjCxd8K3yRhPwAMJlMnoGqkmwrJFX1NtftmDNhXn1z
KQWAu5vZsmJm7p7WPu+OjaSIuDtJAK210FMREZL9MIMMIgyAWmsqIpL6JaLQuYiKZ1e2P9wTYKj/
ZFyiJDP4/6gHxOyr6vewpjjsRC+D2BxDYmapxzr0SwEAuLuIhK+8B+E9Jri/fczukdhy8sFYzoTJ
axWfedHubPhkMnkyH5cn3C3UVHXpAAAAAElFTkSuQmCC
"
height="34.560001"
width="34.560001"
inkscape:export-xdpi="333.32999"
inkscape:export-ydpi="333.32999" />
</g>
<g
inkscape:groupmode="layer"
id="layer5"
inkscape:label="poised orig out"
style="display:none"
sodipodi:insensitive="true">
<image
y="6"
x="6"
id="image4063"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAIAAABuYg/PAAAAA3NCSVQICAjb4U/gAAACd0lEQVRI
ie2UvWvqUBiHjyY1iR+kKWgxceoSP1JEKBIIuAtuxe5uDgWdOtq/wdExOKqTICi4OCiYDE6KaKao
CFqraJGamNzB5cKFxtYOd8gznvOe8zsP5+UFwMTExOSnWM4vxXHcbrejKApBEABAVdX9fv/x8bHb
7X7zRSiKXl9fv7y81Gq1t7c3Xdd1XZdluVwup1IpHMcRBPm1pFwut91uNU3TNE3/i9OKJEnpdPqc
q2DjChjmOM5ms/V6vW63y/P8eDwGALAsm0wmo9Gox+OJRCLnhBn82e3tbT6fTyQSw+Gw0+msViuO
40iSBACs12tJkhRFiUajBEGUSqVMJnORGQzDPp/PbrcLgrBareLxeCgUwjAMAPD5+amqaqvV6vf7
8XicoihDM+vX2zabLRAIWCwWnuc5jguFQqIoZrPZ19fX4XDIMIzX661WqyiK0jRtGGZgBkHQzc0N
AGA8HpMkiWFYpVIpFosYhrnd7ufnZ5fLJcsyBEEEQVxq9i84jmMY5nQ6HQ7Hd88amKmqOplMfD4f
y7KDwYAkycfHR7fb7XA4YrHYfD5fLpf39/eKokynU8Mw6OttBEHC4XAgEDgej6eODwaDsVgsEokc
Dod2uz2bzViW9Xq99Xq9VqtdZKYoymg0WiwWDw8Px+NREITJZOJyuQAAy+Vys9nc3d3RND2fzyVJ
utQMhmGKolAU9fv9BEFomtZoNJrNpiAIVquVZVmGYa6urtrttiiK/X7fMM8ABEHS6XShUJjNZrvd
TlXV06w6HA7v7++DwYDn+aenp3Ou+sbUz+fzFEXRNH3q8ul0KoqiJEmyLJdKpR+qmJiYmPyP/AHn
shrr/cpNswAAAABJRU5ErkJggg==
"
height="36"
width="36" />
</g>
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="4wayclosed orig in"
style="display:none"
sodipodi:insensitive="true">
<image
y="7.2599926"
x="7.2600002"
id="image3191"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAA3NCSVQICAjb4U/gAAABQElEQVRI
icVWW5LEIAiU2b0XHCU3CbkZnMz9YIpy0RidxBq+YgLdPLRNSpPGzLMhEyYiOedVHMycc845i8hC
dLPxIl6DfkTUWd61kP5Uo35H0Pd9V9US8ckKOu1eu2UHDUacrDmIaEtv1wMVNMfrQ/6cwCPt6AYs
Zvb3dciFiYiHlSglqGEFDgvs0dRK4MpTN8pfunNPSDy7IAO2dKb6lLlD6R+1pJldIGgOuU/gSbyY
WVX7g6kdRkLeBCklIjqO4wzXGhg++TydqRyvqhJRY+BhY5RjPNtFjuKtDrj/5NpKQUR3UlVENA4i
AgCTORFBxLJRRKSqAHB9IGwL+nO9hXyGpdst2Qg0t0TiC3Yz2aE7uRY7a9pjjWrOefBOHqqgeQM/
/He0/L+olKxLIfrcZtNPKf1MEQAAAGzbNhW11v4AthMpECAoHYUAAAAASUVORK5CYII=
"
height="34.560001"
width="34.560001" />
</g>
<g
inkscape:groupmode="layer"
id="layer6"
inkscape:label="4wayclosed orig out"
style="opacity:0.5;display:none"
sodipodi:insensitive="true">
<image
y="6"
x="6"
id="image4110"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAIAAABuYg/PAAAAA3NCSVQICAjb4U/gAAAFr0lEQVRI
ib1XTUwTWxS+0E6n1tYKrR3TKZAaf0omZtpaGmwTImJCapSFiYkRYmxiDJoad8YVxMS9uFF0pRY3
NFGJFTDdNCUFKg1B1E7JwCBK6TTtNNBJU5oZ27eYF0QfypTne99qcm6+77vnzJlz7wDwP0KyMxqG
YVqtNpPJ/OdmFy5cuH37ttlspml6eXl5Bwpi4XQ6h4aG8vk8QRBXr16tiFtZZg6H4/r1662trWq1
Wi6Xcxy3uLiYTCZF0qsrMjt58mRLS4tWqwUAKJVKq9XqcDjE0yvIDMdxt9ttMplkMpkQgSCoqqqK
pumlpaU/aYZh2I0bN44dO7a2trayspJKpVKpVLFYRBCkurr67du3YkSkIs1Onz6t0WhGR0djsVgu
lxOCtbW1KIomk8n6+vovX76IlNoeXV1de/fu3XJJr9efO3dOjEiVeD8EQaRSqUwmk0gkAACe5wuF
AsdxHMexLPvHzORyuVwu7+/vNxgMjY2NtbW1AIDl5eVIJEKSJEVRz549KxaL4vf9O6eenh6WZUul
UqlUKm9CqVRKpVIvX77s7u4WI/XL7+zAgQNdXV0AAKlU6nQ6ZTLZzMzM48ePHQ6HTqfT6XQdHR0D
AwMMwzidTovFskHs7u7W6XRbam5Rxvb29s7OToIgHj58CMPw/fv3z5w5Mzc35/F4zGYzjuMYhhUK
hXg8PjEx8e3bt97e3pqaGp/Pd/PmTQDA06dPIQj6+PGjz+cjSXKz8g+t73A4Ll68eOrUKRiGV1ZW
VldXURQ1GAwKhWJqaspsNnd2dppMJpVKVSqVcByvq6sLhUKxWMzlcqEoKogsLCxcvnz5xIkTNpvt
3r17Y2NjP2fT2tp669at4eHhTCZTLpfj8fi1a9cAAEajkWGYcrl8/Pjx/v5+YXUDFEXduXPn0qVL
PM9/+PBho/6xWKxcLudyuXfv3t29e9dqtX7PzGw2ezweq9Wq0+kUCgUAoFgsCl+uRCIRem9+fh7D
MJVKtXmLCILo9fpgMCiRSGpqaoQgRVHr6+sAAJVK1dTUZDAYDh065PV6w+FwNQCAZVmpVKrVagWn
X6FQKJRKpc0Rnue37XgYhhEE2b9/P8/z1UKVHz169OrVq38eFjzPC8djc3NzPB7fGFQCaJpmGObo
0aMcxyUSCSFot9uVSqXwnM1m/X7/gwcPJiYmWJb9u0GGh4dpmo7FYu3t7RaLZdeuXUL1CoVCJBJB
UfT8+fMjIyN1dXU4jiMIwvM8TdPBYDCRSJw9ezafz0ejUUHK6XQK1aYoKhAIPHnyZHJyUlj63o3T
09PT09ORSOTKlSs4jtvtdqPRuLa2RpJkOp222Wx+vz8UCs3Ozur1+mKxyDBMIpFQKBRHjhyhaXph
YUHQ0Wg0LMt++vRpZGRkaGhofn5+w+LnI2ZxcZEgCLVajWFYLpebnZ1FUVQul5tMpqamJrlcPjk5
GQ6HCYJQqVQul8vlckEQND4+Ho1GCYJoaGjo6OiYm5vr6enx+/3ZbHaz+Naz8fDhw21tbalU6sWL
FzAMu91ui8XS1ta2b9++3bt3C4OY47h8Pr+0tBQMBsfHxwcHByUSidvthiDI5/NtefGqYOq73e6W
lhabzSZ0eSKRiEajo6Ojr1+/Fi8iClKp2GP2NxB74fF4PBqN5l+aid0vBEF9fX0kSQ4MDFAUBQCw
2+1Op1Oj0SAIEgqFvF7vtiJi35lOp+vr62tubl5fXxemkVKpVKlULMsGAoHe3t5Kr+LbAMOwmZmZ
8o8gSdLj8YhUqODemE6nDQbDwYMHN8YxRVHPnz8fHBxcXV39w2YAgGQyaTQa6+vrYRjOZrPv378P
BALhcFgkvTKzTCbDMExjY2NDQwNJkm/evBkbG0un0/+JGQDg8+fPKIrq9fpwOOz1emOxmHjuTv7P
8vn8169fg8Hg1NTUDugVQ61W79mzp1LWXwDmqKUkUgO0AAAAAElFTkSuQmCC
"
height="36"
width="36" />
</g>
<g
inkscape:groupmode="layer"
id="layer8"
inkscape:label="disabled orig out"
sodipodi:insensitive="true"
style="display:none">
<image
y="6"
x="6"
id="image4210"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAIAAABuYg/PAAAAA3NCSVQICAjb4U/gAAADU0lEQVRI
ie2VzUsqURTAb17xi2LINJlyoGIcMRQDEwoslyEmQitrV+vWrfonghb9A4WL1oLrwlWgEDFGTRmj
TlZ+kE1T6nje4vIe7wMcrQfvLfotzz33/s653DmD0Bdf/N94PJ54PP6xvVtbW3a7fQDTwcFBLpeL
RCIDaTDG6+vrT09Pu7u7NE33tScej+dyOQDI5/PhcLhPk8lkisfjiqIAwMnJydzcXL81RiKRfD4P
AKIoBgIBzXyLxbK6ugoAAJDNZjmO69dECIfDoigCQKPR4DgOY0xRFE3T09PTLMuyLDs1NeVwOIaH
h81mczQaBYButysIwsTExGAmQiAQaDQapF6WZXd2dlKpVLVaJRFRFI+Pjzc3N2OxGACoqipJksVi
+YiJwHEcOVpV1W632+124SdIRFVVACgWizqd7uMmhBDGmGVZchwAHB4eLi4u2u12u90ei8XS6TSJ
X1xcjI2NfcqEEHI4HMlk8kdDjUZDEASe53mev7u7azabJF6r1fb29jRP02ss6/VOpxMhdHR0FI1G
KYqiKOrnhEKhwPP88vLy5OSkpkzjlg0Gg8fjGRoa2t/fr1arfyZcXl4mk0mTyeR2uz8rwxhbrVaE
0PX1davV+jOh2WyKoogxHh0d/azs76Ih63Q6xWIRIbSwsMDz/PPz828JNpvN5/O12+1SqaQpw72X
jUaj3+/3eDyqqhqNRoZhzGbzbwlOp5OiqHQ6nUqlep+m8Rrb7fbV1dXj4+P8/PzMzIzRaMxkMuVy
mfTkdrtpmqZpulKpCIKg2Zm2rFAolMtlr9er1+sRQqlUKpPJIIR8Pl8ikSC/EoPBwDCMpkwDg8EQ
CoXIBJFl+eXlpdPpkA+51WrV6/X7+/tarQYAlUrF6/X2nlhDvU3BYPD09BQhJElSNptVFMXtdpNX
XiqVzs7OBEFgGGZjY2N8fPz9/d3n893c3KiqOlhPOp1uaWmJTFtFUWw2W49kr9f79vZGOna5XANP
5JWVldfXVwCo1+sjIyOalblcLiKTZdnv9w9gWltbe3h4AIDb21syGzXBGLtcLlmWAUCSpFAo1K/M
arVub2+fn5/Pzs72X6JOp/P7/ZIkJRIJzcv4BZvNFgwGB9jwnVAoNJjpiy/+Bd8A15jBvOYCWCMA
AAAASUVORK5CYII=
"
height="36"
width="36" />
</g>
<g
inkscape:groupmode="layer"
id="layer9"
inkscape:label="book orig out"
style="display:none">
<image
y="-3.5"
x="-3.5"
id="image4273"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAIAAABuYg/PAAAAA3NCSVQICAjb4U/gAAAEjklEQVRI
idWWSywzXRzGz3SKtnpD6p5Upei4VGncqpUSRQgh6KZioYnYWViLxEbChj1hScJCkLBziXtVqsVI
1GBo2lSrbq1GW+9i3vB9Dd5W3/f78j6LWcx5/ueXc+Z/njkA/C8qKytjs9mB+zkcTnFxcVAIGAAg
FAqrq6u7u7vFYnFycrLNZnM4HF/UCASClpYWtVpdU1NDJpPDwsJMJlOgMKlUKhaLRSKRVCqVyWSJ
iYkvLy8ul+v+/t7PzePxSktLu7u7Ozo6cnNzn5+f3W63z+fT6XSBwMgAgMjIyPDwcAAAg8FgMBit
ra1SqXRnZ2dqakqv12MYBgBIS0vLzs5WqVR5eXkQBJ2enkZHRwMAIiIi6HR6IKSfMD9FRkby+Xw+
n19fXz87O9vX1wcAGBwcrKqquru7m5+f39/fv7q6qq+vz8/PDxDzKexNDAajtrbWaDQCAKqqqqan
p/V6/czMDLHWnJyc3wnz08DAAIqiQc3uJ1Ioxf8RLC4ujsPhBFsVxDYCAJhMJo1Go1Ao7e3tLS0t
FovlT8GYTKZCoVAoFEVFRbGxsQCAPwjb3NyEIAgAQDy/oSBgJFKo3fQ3dOP39L6NGxsbNpsNQZBA
etpsNh8fHy8sLJhMJiIkA4XZbLaYmBiLxTI+Pv709CSXy5uamhISEj4s2N7eNpvNW1tbVqsVQRAE
QZaWloKAra6unpyclJSUZGZmPjw8aDQajUaTkZEhl8vT0tLerOvr68vLy1tbWwkJCTwej8Vi6fV6
jUaD43iAsPcmZrFYAoFAIpFwuVwMw66vr71eb1ZW1u7ubklJSVhYmMfjwXGcTqczmUwcxw0GA4qi
Dw8PAZL+BSNEp9MLCwvFYjGXy93b27NYLFarNS4uDoKg8vJyDoej1Wq1Wu3Ozo7L5XqfBYI4HA6V
SqXRaMQbt9vtdDpvbm48Hs+nMEIUCqWioqKgoCA9Pf34+HhtbU2tVi8vL5+dna2vr7+8vPwTw2az
k5KS+vv7BQJBRkYGcRwvLi5QFB0eHtZoNA6Hg0B+lQUwDFdWVsIwnJKScn5+vri46PP5/DxsNnt0
dLSxsfHu7u729nZhYcHr9QIAJBIJ8V21Wm1XV9fBwcGv9vhXgiBIIBAcHR0Zjcbe3t6mpqa3IaFQ
2NPTs7KygmFYc3MzDMOhwrhc7uHhoc1m6+3t/dAgl8uNRiOO4w0NDSD0BIEg6Pb21mAwfDhqsVgw
DIMg6NvZ/S4EQbxe78jIyBee6upqn8/X2dkJQl8ZiUQiOuIzeTyet5X9PanvdrsvLi4kEolQKPzQ
EB8fr1Qqb25u7HZ7qDCn04miKI/HUygUHxpSU1NlMpnJZDKbzaHCvF6vyWR6fHxsaGiQy+UIgrwN
xcfHSySStrY2KpV6eXlJZFtwtys/ORyOiYmJqKgokUg0NjaGYdjQ0BCRTEqlUiaTUalUDMMmJydD
vN3+FJlMFgqFzc3NOI5fXV35fL7X19fX11er1arT6ebm5lQqFYPBIMwhnzUAAAAwDNfV1UEQRPwf
AAB2u91sNrtcLhRFHx8ffwslOP0Alp/f+dOOZb8AAAAASUVORK5CYII=
"
height="36"
width="36" />
</g>
<g
inkscape:groupmode="layer"
id="layer4"
inkscape:label="black"
style="display:none"
sodipodi:insensitive="true">
<rect
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
id="rect3988"
width="48"
height="48"
x="0"
y="0" />
</g>
<g
style="display:none"
inkscape:label="green"
id="g6764"
inkscape:groupmode="layer"
sodipodi:insensitive="true">
<rect
y="0"
x="0"
height="48"
width="48"
id="rect6766"
style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline" />
</g>
<g
style="display:inline"
inkscape:label="white"
id="g4621"
inkscape:groupmode="layer"
sodipodi:insensitive="true">
<rect
y="0"
x="0"
height="48"
width="48"
id="rect4623"
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline" />
</g>
<g
inkscape:groupmode="layer"
id="layer7"
inkscape:label="raw material"
style="display:none">
<path
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0"
d="M 24,7 C 15,18 15,30 24,41 33,30 33,18 24,7 z"
style="fill:#ffffff;fill-opacity:1;stroke:none;display:inline"
id="path4130" />
<path
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
d="m 34,24 c -10e-7,6.428573 -3.571428,10 -10,10 -6.428573,0 -10,-3.571427 -10,-10 0,-6.428572 3.571427,-10 10,-10 6.428572,0 10.000003,3.571428 10,10 z"
id="path4132"
inkscape:connector-curvature="0"
sodipodi:nodetypes="sssss" />
<path
sodipodi:nodetypes="sssss"
inkscape:connector-curvature="0"
id="path4348"
d="m 26,8 c -1e-6,2.571429 -1.964286,4 -5.5,4 C 16.964285,12 15,10.571429 15,8 15,5.4285714 16.964285,4 20.5,4 24.035714,4 26.000001,5.4285714 26,8 z"
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
transform="matrix(1.2727273,0,0,1.75,-2.0909091,10)" />
<path
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
d="m 29,24 c -1e-6,3.214286 -1.785714,5 -5,5 -3.214286,0 -5,-1.785714 -5,-5 0,-3.214286 1.785714,-5 5,-5 3.214286,0 5.000001,1.785714 5,5 z"
id="path4350"
inkscape:connector-curvature="0"
sodipodi:nodetypes="sssss" />
<path
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
d="m 27.7,24 c 0,2.378573 -1.321428,3.7 -3.7,3.7 -2.378573,0 -3.7,-1.321427 -3.7,-3.7 0,-2.378572 1.321427,-3.7 3.7,-3.7 2.378572,0 3.700001,1.321428 3.7,3.7 z"
id="path4352"
inkscape:connector-curvature="0"
sodipodi:nodetypes="sssss" />
<path
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
d="m 25.8,24 c 0,1.157143 -0.642857,1.8 -1.8,1.8 -1.157144,0 -1.8,-0.642857 -1.8,-1.8 0,-1.157144 0.642856,-1.8 1.8,-1.8 1.157143,0 1.800001,0.642856 1.8,1.8 z"
id="path4354"
inkscape:connector-curvature="0"
sodipodi:nodetypes="sssss" />
<path
style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 18.5,-1 0,15 -8,4 C 10,19 7,19 6.5,18 l -8,-4 0,-15"
id="path4280"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccc" />
<path
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
d="m 0,-2 0,15 c 3,1 6,2 8,4 L 8,2 C 6,0 3,-1 0,-2 z"
id="path6725"
inkscape:connector-curvature="0" />
<path
id="path6719"
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
d="m 16,0.84375 0,5.5 C 13.81145,7.0854 11.67582,7.87061 10,9.125 l 0,-5.5 C 11.67582,2.37061 13.81145,1.5854 16,0.84375 z M 17,-2 c -3,1 -6,2 -8,4 l 0,15 c 2,-2 5,-3 8,-4 l 0,-15 z"
inkscape:connector-curvature="0" />
</g>
<g
inkscape:groupmode="layer"
id="layer18"
inkscape:label="shapes 1"
style="display:none">
<path
style="fill-rule:evenodd;stroke:none;display:inline"
d="m 24,17 c -4.500001,0 -7,2.5 -7,7 0,4.500001 2.499999,7 7,7 4.5,0 6.999999,-2.499999 7,-7 1e-6,-4.5 -2.5,-7 -7,-7 z m 0,2 c 3.214286,0 5.000001,1.785714 5,5 -1e-6,3.214286 -1.785714,5 -5,5 -3.214286,0 -5,-1.785714 -5,-5 0,-3.214286 1.785714,-5 5,-5 z"
id="path3216"
inkscape:connector-curvature="0" />
<path
style="fill-rule:evenodd;stroke:none;display:inline"
d="m 24,20.3125 c -2.378573,0 -3.6875,1.308928 -3.6875,3.6875 0,2.378573 1.308927,3.6875 3.6875,3.6875 2.378572,0 3.6875,-1.308927 3.6875,-3.6875 1e-6,-2.378572 -1.308928,-3.6875 -3.6875,-3.6875 z m 0,1.875 c 1.157143,0 1.812501,0.655356 1.8125,1.8125 0,1.157143 -0.655357,1.8125 -1.8125,1.8125 -1.157144,0 -1.8125,-0.655357 -1.8125,-1.8125 0,-1.157144 0.655356,-1.8125 1.8125,-1.8125 z"
id="path4001"
inkscape:connector-curvature="0" />
<path
id="path6738"
style="fill-rule:evenodd;stroke:none;display:inline"
d="m 16,0.84375 0,5.5 C 13.81145,7.0854 11.67582,7.87061 10,9.125 l 0,-5.5 C 11.67582,2.37061 13.81145,1.5854 16,0.84375 z M 17,-2 c -3,1 -6,2 -8,4 l 0,15 c 2,-2 5,-3 8,-4 z M 0,-2 0,13 c 3,1 6,2 8,4 L 8,2 C 6,0 3,-1 0,-2 z m -2,1 0,15.3125 c 0,0 5.5231347,2.745942 8.28125,4.125 0.2252675,0.2606 0.4852377,0.47997 0.8125,0.5938 0.4294557,0.14938 0.921131,0.21875 1.40625,0.21875 0.485119,0 0.9767943,-0.0694 1.40625,-0.21875 0.327262,-0.11383 0.587233,-0.3332 0.8125,-0.5938 0,0 5.524469,-2.825606 8.28125,-4.125 L 19,-1 l -1,0 0,14.6875 -7.71875,3.875 -0.15625,0.0625 -0.0625,0.15625 c -0.03556,0.0711 -0.2107057,0.21188 -0.5,0.3125 C 9.2732057,18.19437 8.889881,18.25 8.5,18.25 8.110119,18.25 7.7267943,18.1944 7.4375,18.09375 7.1482057,17.99313 6.9730573,17.85236 6.9375,17.78125 L 6.875,17.625 6.71875,17.5625 -1,13.6875 -1,-1 z"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccccccccccccsscccccccccssccccccc" />
</g>
<g
inkscape:groupmode="layer"
id="layer19"
inkscape:label="shapes 2"
style="display:none">
<path
sodipodi:nodetypes="sssss"
inkscape:connector-curvature="0"
id="path6749"
d="m 27.7,24 c 0,2.378573 -1.321428,3.7 -3.7,3.7 -2.378573,0 -3.7,-1.321427 -3.7,-3.7 0,-2.378572 1.321427,-3.7 3.7,-3.7 2.378572,0 3.700001,1.321428 3.7,3.7 z"
style="fill-rule:evenodd;stroke:none;display:inline" />
<path
style="stroke:none;display:inline"
d="M 24,7 C 21.882173,9.5884549 20.277368,12.23311 19.15625,14.90625 20.523744,14.321333 22.133081,14 24,14 c 1.866918,0 3.476256,0.321333 4.84375,0.90625 C 27.722632,12.23311 26.117827,9.5884549 24,7 z"
id="path4148"
inkscape:connector-curvature="0" />
<path
style="stroke:none;display:inline"
d="M 14.90625,19.15625 C 12.23311,20.277368 9.5884549,21.882173 7,24 c 2.5884549,2.117827 5.23311,3.722632 7.90625,4.84375 C 14.321333,27.476256 14,25.866919 14,24 c 0,-1.866918 0.321333,-3.476256 0.90625,-4.84375 z"
id="path4146"
inkscape:connector-curvature="0" />
<path
style="stroke:none;display:inline"
d="M 33.09375,19.15625 C 33.678667,20.523744 34.000001,22.133082 34,24 34,25.866919 33.678667,27.476256 33.09375,28.84375 35.76689,27.722632 38.411545,26.117827 41,24 38.411545,21.882173 35.76689,20.277368 33.09375,19.15625 z"
id="path4144"
inkscape:connector-curvature="0" />
<path
style="stroke:none;display:inline"
d="M 19.15625,33.09375 C 20.277368,35.76689 21.882173,38.411545 24,41 26.117827,38.411545 27.722632,35.76689 28.84375,33.09375 27.476256,33.678667 25.866918,34 24,34 22.133081,34 20.523744,33.678667 19.15625,33.09375 z"
id="path4119"
inkscape:connector-curvature="0" />
</g>
<g
inkscape:groupmode="layer"
id="layer20"
inkscape:label="shapes 3"
style="display:none">
<path
inkscape:connector-curvature="0"
transform="translate(0,-192)"
id="path6758"
d="m 14.5,205 -1.5,1.5 5.15625,5.15625 C 17.409919,212.77794 17,214.22611 17,216 c 0,1.77389 0.409919,3.22206 1.15625,4.34375 L 13,225.5 l 1.5,1.5 5.15625,-5.15625 C 20.777944,222.59008 22.226111,223 24,223 c 1.773889,0 3.222056,-0.40992 4.34375,-1.15625 L 33.5,227 35,225.5 29.84375,220.34375 C 30.590081,219.22206 31,217.77389 31,216 c 0,-1.77389 -0.409919,-3.22206 -1.15625,-4.34375 L 35,206.5 33.5,205 28.34375,210.15625 C 27.222055,209.40992 25.773889,209 24,209 c -1.773889,0 -3.222056,0.40992 -4.34375,1.15625 L 14.5,205 z m 9.5,6 c 1.128621,0 2.082846,0.23139 2.84375,0.65625 l -1,1 C 25.330626,212.42921 24.710234,212.3125 24,212.3125 c -0.710234,0 -1.330626,0.11671 -1.84375,0.34375 l -1,-1 C 21.917154,211.23139 22.871379,211 24,211 z m -4.34375,2.15625 1,1 c -0.227037,0.51312 -0.34375,1.13352 -0.34375,1.84375 0,0.71023 0.116713,1.33063 0.34375,1.84375 l -1,1 C 19.23139,218.08285 19,217.12862 19,216 c 0,-1.12862 0.23139,-2.08285 0.65625,-2.84375 z m 8.6875,0 C 28.76861,213.91715 29,214.87138 29,216 c 0,1.12862 -0.23139,2.08285 -0.65625,2.84375 l -1,-1 c 0.227038,-0.51312 0.34375,-1.13352 0.34375,-1.84375 0,-0.71023 -0.116712,-1.33063 -0.34375,-1.84375 l 1,-1 z m -6.1875,6.1875 c 0.513124,0.22704 1.133516,0.34375 1.84375,0.34375 0.710234,0 1.330626,-0.11671 1.84375,-0.34375 l 1,1 C 26.082847,220.76861 25.128621,221 24,221 c -1.128621,0 -2.082846,-0.23139 -2.84375,-0.65625 l 1,-1 z"
style="stroke:none;display:inline" />
</g>
<g
inkscape:groupmode="layer"
id="circleOuterShadow"
inkscape:label="shadow outer circle"
style="display:inline">
<use
style="fill:#000000;fill-opacity:0.50196078;display:inline;filter:url(#filter6135)"
x="0"
y="0"
xlink:href="#path3216"
id="use6769"
width="1"
height="1" />
</g>
<g
inkscape:groupmode="layer"
id="circleInnerOpenShadow"
inkscape:label="shadow inner circle open"
style="display:none">
<use
style="fill:#000000;fill-opacity:0.50196078;display:inline;filter:url(#filter6135)"
x="0"
y="0"
xlink:href="#path4001"
id="use6776"
width="240"
height="240" />
</g>
<g
inkscape:groupmode="layer"
id="circleInnerClosedShadow"
inkscape:label="shadow inner circle closed"
style="display:none">
<use
style="fill:#000000;fill-opacity:0.50196078;display:inline;filter:url(#filter6135)"
x="0"
y="0"
xlink:href="#path6749"
id="use6780"
width="240"
height="240" />
</g>
<g
inkscape:groupmode="layer"
id="arrowOpaqueUpperShadow"
inkscape:label="shadow upper arrow opaque"
style="display:none">
<use
style="fill:#000000;fill-opacity:0.50196078;display:inline;filter:url(#filter6135)"
x="0"
y="0"
xlink:href="#path4148"
id="use6784"
width="240"
height="240" />
</g>
<g
inkscape:groupmode="layer"
id="arrowOpaqueLowerShadow"
inkscape:label="shadow lower arrow opaque"
style="display:none">
<use
style="fill:#000000;fill-opacity:0.50196078;display:inline;filter:url(#filter6135)"
x="0"
y="0"
xlink:href="#path4119"
id="use6790"
width="1"
height="1" />
</g>
<g
inkscape:groupmode="layer"
id="arrowOpaqueRightShadow"
inkscape:label="shadow right arrow opaque"
style="display:none">
<use
style="fill:#000000;fill-opacity:0.50196078;display:inline;filter:url(#filter6135)"
x="0"
y="0"
xlink:href="#path4144"
id="use6794"
width="1"
height="1" />
</g>
<g
inkscape:groupmode="layer"
id="arrowOpaqueLeftShadow"
inkscape:label="shadow left arrow opaque"
style="display:none">
<use
style="fill:#000000;fill-opacity:0.50196078;display:inline;filter:url(#filter6135)"
x="0"
y="0"
xlink:href="#path4146"
id="use6799"
width="1"
height="1" />
</g>
<g
style="display:none"
inkscape:label="shadow upper arrow translucent"
id="arrowTranslucentUpperShadow"
inkscape:groupmode="layer">
<use
height="240"
width="240"
id="use6807"
xlink:href="#path4148"
y="0"
x="0"
style="fill:#000000;fill-opacity:0.2;display:inline;filter:url(#filter6135)"
mask="url(#mask6840)" />
</g>
<g
style="display:none"
inkscape:label="shadow lower arrow translucent"
id="arrowTranslucentLowerShadow"
inkscape:groupmode="layer">
<use
height="240"
width="240"
id="use6850"
xlink:href="#path4119"
y="0"
x="0"
style="fill:#000000;fill-opacity:0.2;display:inline;filter:url(#filter6135)"
mask="url(#mask6840)" />
</g>
<g
style="display:none"
inkscape:label="shadow right arrow translucent"
id="arrowTranslucentRightShadow"
inkscape:groupmode="layer">
<use
x="0"
y="0"
xlink:href="#path4144"
id="use6852"
width="240"
height="240"
style="fill:#000000;fill-opacity:0.2;display:inline;filter:url(#filter6135)"
mask="url(#mask6840)" />
</g>
<g
style="display:none"
inkscape:label="shadow left arrow translucent"
id="arrowTranslucentLeftShadow"
inkscape:groupmode="layer">
<use
x="0"
y="0"
xlink:href="#path4146"
id="use6848"
width="240"
height="240"
style="fill:#000000;fill-opacity:0.2;display:inline;filter:url(#filter6135)"
mask="url(#mask6840)" />
</g>
<g
inkscape:groupmode="layer"
id="crossShadow"
inkscape:label="shadow cross"
style="display:none">
<use
style="fill:#000000;fill-opacity:0.50196078;display:inline;filter:url(#filter6135)"
x="0"
y="0"
xlink:href="#path6758"
id="use6861"
width="240"
height="240" />
</g>
<g
inkscape:groupmode="layer"
id="bookShadow"
inkscape:label="shadow book"
style="display:inline">
<use
style="fill:#000000;fill-opacity:0.50196078;display:inline;filter:url(#filter6135)"
x="0"
y="0"
xlink:href="#path6738"
id="use6865"
width="240"
height="240" />
</g>
<g
inkscape:groupmode="layer"
id="circleOuter"
inkscape:label="outer circle"
style="display:inline">
<use
style="fill:#ffffff;fill-opacity:1;display:inline"
x="0"
y="0"
xlink:href="#path3216"
id="use6869"
width="240"
height="240" />
</g>
<g
inkscape:groupmode="layer"
id="circleInnerOpen"
inkscape:label="inner circle open"
style="display:none">
<use
style="fill:#ffffff;fill-opacity:1;display:inline"
x="0"
y="0"
xlink:href="#path4001"
id="use6873"
width="240"
height="240" />
</g>
<g
inkscape:groupmode="layer"
id="circleInnerClosed"
inkscape:label="inner circle closed"
style="display:none">
<use
style="fill:#ffffff;fill-opacity:1;display:inline"
x="0"
y="0"
xlink:href="#path6749"
id="use6877"
width="240"
height="240" />
</g>
<g
inkscape:groupmode="layer"
id="arrowOpaqueUpper"
inkscape:label="upper arrow opaque"
style="display:none">
<use
style="fill:#ffffff;fill-opacity:1;display:inline"
x="0"
y="0"
xlink:href="#path4148"
id="use6881"
width="240"
height="240" />
</g>
<g
inkscape:groupmode="layer"
id="arrowOpaqueLower"
inkscape:label="lower arrow opaque"
style="display:none">
<use
style="fill:#ffffff;fill-opacity:1;display:inline"
x="0"
y="0"
xlink:href="#path4119"
id="use6887"
width="240"
height="240" />
</g>
<g
inkscape:groupmode="layer"
id="arrowOpaqueRight"
inkscape:label="right arrow opaque"
style="display:none">
<use
style="fill:#ffffff;fill-opacity:1;display:inline"
x="0"
y="0"
xlink:href="#path4144"
id="use6885"
width="240"
height="240" />
</g>
<g
inkscape:groupmode="layer"
id="arrowOpaqueLeft"
inkscape:label="left arrow opaque"
style="display:none">
<use
style="fill:#ffffff;fill-opacity:1;display:inline"
x="0"
y="0"
xlink:href="#path4146"
id="use6883"
width="240"
height="240" />
</g>
<g
inkscape:groupmode="layer"
id="arrowTranslucentUpper"
inkscape:label="upper arrow translucent"
style="display:none">
<use
style="fill:#ffffff;fill-opacity:0.50196078;display:inline"
x="0"
y="0"
xlink:href="#path4148"
id="use6903"
width="240"
height="240" />
</g>
<g
inkscape:groupmode="layer"
id="arrowTranslucentLower"
inkscape:label="lower arrow translucent"
style="display:none">
<use
style="fill:#ffffff;fill-opacity:0.50196078;display:inline"
x="0"
y="0"
xlink:href="#path4119"
id="use6909"
width="240"
height="240" />
</g>
<g
inkscape:groupmode="layer"
id="arrowTranslucentRight"
inkscape:label="right arrow translucent"
style="display:none">
<use
style="fill:#ffffff;fill-opacity:0.50196078;display:inline"
x="0"
y="0"
xlink:href="#path4144"
id="use6907"
width="240"
height="240" />
</g>
<g
inkscape:groupmode="layer"
id="arrowTranslucentLeft"
inkscape:label="left arrow translucent"
style="display:none">
<use
style="fill:#ffffff;fill-opacity:0.50196078;display:inline"
x="0"
y="0"
xlink:href="#path4146"
id="use6905"
width="240"
height="240" />
</g>
<g
inkscape:groupmode="layer"
id="cross"
inkscape:label="cross"
style="display:none">
<use
style="fill:#ffffff;fill-opacity:1;display:inline"
x="0"
y="0"
xlink:href="#path6758"
id="use6925"
width="240"
height="240" />
</g>
<g
inkscape:groupmode="layer"
id="book"
inkscape:label="book"
style="display:inline">
<use
style="fill:#ffffff;fill-opacity:1;display:inline"
x="0"
y="0"
xlink:href="#path6738"
id="use6929"
width="240"
height="240" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 31 KiB

View File

@ -0,0 +1,508 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="1175.8176"
height="1177.8379"
id="svg2"
version="1.1"
inkscape:version="0.48.0 r9654"
sodipodi:docname="Linking_Book.svg"
inkscape:export-xdpi="19.561266"
inkscape:export-ydpi="19.561266">
<defs
id="defs4" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.66138134"
inkscape:cx="437.66142"
inkscape:cy="576.10909"
inkscape:document-units="px"
inkscape:current-layer="layer3"
showgrid="false"
showguides="true"
inkscape:guide-bbox="true"
showborder="false"
inkscape:window-width="1680"
inkscape:window-height="998"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:snap-global="true"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0">
<sodipodi:guide
orientation="0,1"
position="-1422.8571,-1.5258789e-005"
id="guide2996" />
<sodipodi:guide
orientation="1,0"
position="0,1562.8571"
id="guide2998" />
<sodipodi:guide
orientation="0,1"
position="-628.31488,1177.8379"
id="guide3000" />
<sodipodi:guide
orientation="1,0"
position="1175.8176,1228.3455"
id="guide3002" />
<sodipodi:guide
orientation="0,1"
position="617.82713,588.96043"
id="guide4160" />
<sodipodi:guide
orientation="1,0"
position="587.89131,597.24623"
id="guide4162" />
</sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:groupmode="layer"
id="background"
inkscape:label="Background"
style="display:inline"
transform="translate(0,125.47572)">
<rect
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
id="rect3004"
width="1175.8176"
height="1177.8379"
x="0"
y="-125.47572"
inkscape:export-xdpi="19.561266"
inkscape:export-ydpi="19.561266" />
</g>
<g
inkscape:groupmode="layer"
id="circles"
inkscape:label="Circles"
style="display:inline"
transform="translate(0,125.47572)">
<path
sodipodi:type="arc"
style="fill:none;stroke:none"
id="circlePath"
sodipodi:cx="587.90881"
sodipodi:cy="463.44324"
sodipodi:rx="587.90881"
sodipodi:ry="588.91895"
d="m 1175.8176,463.44324 c 0,325.25095 -263.21571,588.91896 -587.90879,588.91896 C 263.21574,1052.3622 0,788.69419 0,463.44324 0,138.19228 263.21574,-125.47571 587.90881,-125.47571 c 324.69308,0 587.90879,263.66799 587.90879,588.91895 z"
transform="matrix(0.8793304,0,0,0.8793304,70.94272,55.923509)" />
<g
id="g3224"
transform="translate(-0.03253824,-0.03474644)"
inkscape:export-xdpi="19.561266"
inkscape:export-ydpi="19.561266"
style="fill:#352f42;fill-opacity:1">
<path
inkscape:tile-y0="-85.78605"
inkscape:tile-x0="556.15709"
inkscape:tile-h="63.503456"
inkscape:tile-w="63.50345"
inkscape:tile-cy="463.40173"
inkscape:tile-cx="587.90882"
inkscape:connector-curvature="0"
id="path3883"
d="m 619.66054,-54.034322 c 0,17.535995 -14.21573,31.751728 -31.75173,31.751728 -17.53599,0 -31.75172,-14.215733 -31.75172,-31.751728 0,-17.535995 14.21573,-31.751728 31.75172,-31.751728 17.536,0 31.75173,14.215733 31.75173,31.751728 z"
inkscape:transform-center-y="-517.43605"
style="fill:#352f42;fill-opacity:1;stroke:none" />
<use
height="1052.3622"
width="744.09448"
inkscape:transform-center-y="517.43605"
inkscape:transform-center-x="3e-005"
id="use5519"
transform="matrix(-1,0,0,-1,1175.8176,926.80346)"
xlink:href="#path3883"
inkscape:tiled-clone-of="#path3883"
y="0"
x="0"
style="fill:#352f42;fill-opacity:1" />
<use
height="1052.3622"
width="744.09448"
inkscape:transform-center-y="-4.3e-005"
inkscape:transform-center-x="517.43605"
id="use5521"
transform="matrix(0,-1,1,0,124.50709,1051.3105)"
xlink:href="#path3883"
inkscape:tiled-clone-of="#path3883"
y="0"
x="0"
style="fill:#352f42;fill-opacity:1" />
<use
height="1052.3622"
width="744.09448"
inkscape:transform-center-x="-517.43601"
id="use5525"
transform="matrix(0,1,-1,0,1051.3105,-124.50709)"
xlink:href="#path3883"
inkscape:tiled-clone-of="#path3883"
y="0"
x="0"
style="fill:#352f42;fill-opacity:1" />
<path
inkscape:transform-center-x="-98.74896"
inkscape:tile-y0="-69.933668"
inkscape:tile-x0="661.23414"
inkscape:tile-h="50.812266"
inkscape:tile-w="50.81225"
inkscape:tile-cy="463.40173"
inkscape:tile-cx="587.89131"
inkscape:connector-curvature="0"
id="path3883-1"
d="m 711.57495,-39.680724 c -2.67682,13.771051 -16.01044,22.764699 -29.7815,20.087876 -13.77104,-2.676818 -22.76468,-16.010449 -20.08786,-29.781498 2.67682,-13.771047 16.01044,-22.764697 29.7815,-20.087878 13.77104,2.676823 22.76468,16.010454 20.08786,29.7815 z"
inkscape:transform-center-y="-507.92927"
style="fill:#352f42;fill-opacity:1;stroke:none;display:inline" />
<use
height="1052.3622"
width="744.09448"
inkscape:transform-center-y="98.748955"
inkscape:transform-center-x="-507.92923"
id="use3037"
transform="matrix(0,1,-1,0,1051.293,-124.48958)"
xlink:href="#path3883-1"
inkscape:tiled-clone-of="#path3883-1"
y="0"
x="0"
style="fill:#352f42;fill-opacity:1" />
<use
height="1052.3622"
width="744.09448"
inkscape:transform-center-y="507.92927"
inkscape:transform-center-x="98.74898"
id="use3039"
transform="matrix(-1,0,0,-1,1175.7826,926.80347)"
xlink:href="#path3883-1"
inkscape:tiled-clone-of="#path3883-1"
y="0"
x="0"
style="fill:#352f42;fill-opacity:1" />
<use
height="1052.3622"
width="744.09448"
inkscape:transform-center-y="-98.749005"
inkscape:transform-center-x="507.92927"
id="use3041"
transform="matrix(0,-1,1,0,124.48958,1051.293)"
xlink:href="#path3883-1"
inkscape:tiled-clone-of="#path3883-1"
y="0"
x="0"
style="fill:#352f42;fill-opacity:1" />
<path
inkscape:transform-center-x="98.71521"
inkscape:tile-y0="-69.940277"
inkscape:tile-x0="463.76997"
inkscape:tile-h="50.812269"
inkscape:tile-w="50.812241"
inkscape:tile-cy="463.40169"
inkscape:tile-cx="587.8913"
inkscape:connector-curvature="0"
id="path3883-1-1"
d="m 514.11077,-49.380953 c 2.67682,13.771051 -6.31682,27.104678 -20.08788,29.781501 -13.77103,2.676816 -27.10465,-6.316834 -29.78147,-20.087883 -2.67682,-13.771047 6.3168,-27.104672 20.08786,-29.781499 13.77104,-2.676815 27.10467,6.316835 29.78149,20.087881 z"
inkscape:transform-center-y="-507.93583"
style="fill:#352f42;fill-opacity:1;stroke:none;display:inline" />
<use
height="1052.3622"
width="744.09448"
inkscape:transform-center-y="-98.715213"
inkscape:transform-center-x="-507.93584"
id="use3067"
transform="matrix(0,1,-1,0,1051.293,-124.48962)"
xlink:href="#path3883-1-1"
inkscape:tiled-clone-of="#path3883-1-1"
y="0"
x="0"
style="fill:#352f42;fill-opacity:1" />
<use
height="1052.3622"
width="744.09448"
inkscape:transform-center-y="507.93583"
inkscape:transform-center-x="-98.715201"
id="use3069"
transform="matrix(-1,0,0,-1,1175.7826,926.80337)"
xlink:href="#path3883-1-1"
inkscape:tiled-clone-of="#path3883-1-1"
y="0"
x="0"
style="fill:#352f42;fill-opacity:1" />
<use
height="1052.3622"
width="744.09448"
inkscape:transform-center-y="98.715218"
inkscape:transform-center-x="507.93583"
id="use3071"
transform="matrix(0,-1,1,0,124.48962,1051.293)"
xlink:href="#path3883-1-1"
inkscape:tiled-clone-of="#path3883-1-1"
y="0"
x="0"
style="fill:#352f42;fill-opacity:1" />
<path
inkscape:transform-center-x="-193.85213"
inkscape:tile-y0="-34.138981"
inkscape:tile-x0="763.95777"
inkscape:tile-h="35.571355"
inkscape:tile-w="35.571339"
inkscape:tile-cy="463.40174"
inkscape:tile-cx="587.89131"
inkscape:connector-curvature="0"
id="path3883-1-4"
d="m 798.22966,-9.6924378 c -3.6787,9.10509363 -14.04199,13.5040578 -23.1471,9.82535891 -9.10507,-3.67869161 -13.50403,-14.04199711 -9.82534,-23.14709011 3.6787,-9.10509 14.04199,-13.504057 23.14709,-9.825361 9.10509,3.678696 13.50404,14.042002 9.82535,23.1470922 z"
inkscape:transform-center-y="-479.75504"
style="fill:#352f42;fill-opacity:1;stroke:none;display:inline" />
<use
height="1052.3622"
width="744.09448"
inkscape:transform-center-y="193.85213"
inkscape:transform-center-x="-479.75499"
id="use3097"
transform="matrix(0,1,-1,0,1051.293,-124.48957)"
xlink:href="#path3883-1-4"
inkscape:tiled-clone-of="#path3883-1-4"
y="0"
x="0"
style="fill:#352f42;fill-opacity:1" />
<use
height="1052.3622"
width="744.09448"
inkscape:transform-center-y="479.75504"
inkscape:transform-center-x="193.85215"
id="use3099"
transform="matrix(-1,0,0,-1,1175.7826,926.80347)"
xlink:href="#path3883-1-4"
inkscape:tiled-clone-of="#path3883-1-4"
y="0"
x="0"
style="fill:#352f42;fill-opacity:1" />
<use
height="1052.3622"
width="744.09448"
inkscape:transform-center-y="-193.85218"
inkscape:transform-center-x="479.75504"
id="use3101"
transform="matrix(0,-1,1,0,124.48957,1051.293)"
xlink:href="#path3883-1-4"
inkscape:tiled-clone-of="#path3883-1-4"
y="0"
x="0"
style="fill:#352f42;fill-opacity:1" />
<path
inkscape:transform-center-x="193.8203"
inkscape:tile-y0="-34.151876"
inkscape:tile-x0="376.28534"
inkscape:tile-h="35.571356"
inkscape:tile-w="35.57134"
inkscape:tile-cy="463.4017"
inkscape:tile-cx="587.89131"
inkscape:connector-curvature="0"
id="path3883-1-4-2"
d="m 410.55723,-23.027064 c 3.67869,9.105096 -0.72026,19.4683926 -9.82537,23.14709892 -9.10507,3.67868398 -19.46837,-0.72027955 -23.14707,-9.82536842 -3.67869,-9.1050935 0.72026,-19.4683925 9.82535,-23.1470935 9.10509,-3.678694 19.46839,0.720278 23.14709,9.825363 z"
inkscape:transform-center-y="-479.7679"
style="fill:#352f42;fill-opacity:1;stroke:none;display:inline" />
<use
height="1052.3622"
width="744.09448"
inkscape:transform-center-y="-193.8203"
inkscape:transform-center-x="-479.76789"
id="use3129"
transform="matrix(0,1,-1,0,1051.293,-124.48961)"
xlink:href="#path3883-1-4-2"
inkscape:tiled-clone-of="#path3883-1-4-2"
y="0"
x="0"
style="fill:#352f42;fill-opacity:1" />
<use
height="1052.3622"
width="744.09448"
inkscape:transform-center-y="479.7679"
inkscape:transform-center-x="-193.82028"
id="use3131"
transform="matrix(-1,0,0,-1,1175.7826,926.8034)"
xlink:href="#path3883-1-4-2"
inkscape:tiled-clone-of="#path3883-1-4-2"
y="0"
x="0"
style="fill:#352f42;fill-opacity:1" />
<use
height="1052.3622"
width="744.09448"
inkscape:transform-center-y="193.82029"
inkscape:transform-center-x="479.7679"
id="use3133"
transform="matrix(0,-1,1,0,124.48961,1051.293)"
xlink:href="#path3883-1-4-2"
inkscape:tiled-clone-of="#path3883-1-4-2"
y="0"
x="0"
style="fill:#352f42;fill-opacity:1" />
<path
inkscape:transform-center-x="-281.8321"
inkscape:tile-y0="17.001703"
inkscape:tile-x0="857.27527"
inkscape:tile-h="24.896278"
inkscape:tile-w="24.896273"
inkscape:tile-cy="463.40173"
inkscape:tile-cx="587.89131"
inkscape:connector-curvature="0"
id="path3883-1-4-7"
d="m 880.16207,36.228786 c -3.74392,5.765115 -11.45249,7.403629 -17.21761,3.659715 -5.76511,-3.743903 -7.40362,-11.452487 -3.65971,-17.217603 3.74391,-5.765113 11.45248,-7.403628 17.21761,-3.659718 5.76511,3.743909 7.40361,11.452492 3.65971,17.217606 z"
inkscape:transform-center-y="-433.95189"
style="fill:#352f42;fill-opacity:1;stroke:none;display:inline" />
<use
height="1052.3622"
width="744.09448"
inkscape:transform-center-y="281.8321"
inkscape:transform-center-x="-433.95185"
id="use3171"
transform="matrix(0,1,-1,0,1051.293,-124.48958)"
xlink:href="#path3883-1-4-7"
inkscape:tiled-clone-of="#path3883-1-4-7"
y="0"
x="0"
style="fill:#352f42;fill-opacity:1" />
<use
height="1052.3622"
width="744.09448"
inkscape:transform-center-y="433.95189"
inkscape:transform-center-x="281.83212"
id="use3173"
transform="matrix(-1,0,0,-1,1175.7826,926.80346)"
xlink:href="#path3883-1-4-7"
inkscape:tiled-clone-of="#path3883-1-4-7"
y="0"
x="0"
style="fill:#352f42;fill-opacity:1" />
<use
height="1052.3622"
width="744.09448"
inkscape:transform-center-y="-281.83214"
inkscape:transform-center-x="433.95189"
id="use3175"
transform="matrix(0,-1,1,0,124.48958,1051.293)"
xlink:href="#path3883-1-4-7"
inkscape:tiled-clone-of="#path3883-1-4-7"
y="0"
x="0"
style="fill:#352f42;fill-opacity:1" />
<path
inkscape:transform-center-x="281.80334"
inkscape:tile-y0="16.983003"
inkscape:tile-x0="293.63983"
inkscape:tile-h="24.896278"
inkscape:tile-w="24.896279"
inkscape:tile-cy="463.40171"
inkscape:tile-cx="587.89131"
inkscape:connector-curvature="0"
id="path3883-1-4-7-0"
d="m 316.52663,22.652196 c 3.74391,5.765124 2.10541,13.473696 -3.65971,17.217608 -5.76511,3.743908 -13.47369,2.105398 -17.2176,-3.659718 -3.74392,-5.765114 -2.10542,-13.473687 3.65971,-17.217611 5.76511,-3.743904 13.47369,-2.105386 17.2176,3.659721 z"
inkscape:transform-center-y="-433.97057"
style="fill:#352f42;fill-opacity:1;stroke:none;display:inline" />
<use
height="1052.3622"
width="744.09448"
inkscape:transform-center-y="-281.80334"
inkscape:transform-center-x="-433.97055"
id="use3203"
transform="matrix(0,1,-1,0,1051.293,-124.4896)"
xlink:href="#path3883-1-4-7-0"
inkscape:tiled-clone-of="#path3883-1-4-7-0"
y="0"
x="0"
style="fill:#352f42;fill-opacity:1" />
<use
height="1052.3622"
width="744.09448"
inkscape:transform-center-y="433.97057"
inkscape:transform-center-x="-281.80332"
id="use3205"
transform="matrix(-1,0,0,-1,1175.7826,926.80342)"
xlink:href="#path3883-1-4-7-0"
inkscape:tiled-clone-of="#path3883-1-4-7-0"
y="0"
x="0"
style="fill:#352f42;fill-opacity:1" />
<use
height="1052.3622"
width="744.09448"
inkscape:transform-center-y="281.80332"
inkscape:transform-center-x="433.97057"
id="use3207"
transform="matrix(0,-1,1,0,124.4896,1051.293)"
xlink:href="#path3883-1-4-7-0"
inkscape:tiled-clone-of="#path3883-1-4-7-0"
y="0"
x="0"
style="fill:#352f42;fill-opacity:1" />
</g>
</g>
<g
inkscape:groupmode="layer"
id="book"
inkscape:label="Book"
style="display:inline"
transform="translate(0,125.47572)">
<path
style="fill:#000000;fill-opacity:1;stroke:none"
d="m 628.62755,669.05838 19.4375,-30.625 237.65628,-44.84375 -53.8125,-312.375 -47.09378,-8.21875 -196.92188,29.875 -196.92187,-29.875 -47.0625,8.21875 -53.8125,312.375 237.65625,44.84375 19.40625,30.625 40.73437,6 z"
id="bookShading"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccccccc" />
<path
style="opacity:1;fill:#352f42;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 624.37755,687.02459 c 22.02381,-3.33334 22.99405,-34.51041 32.875,-37.84375 80.95238,-15 246.04608,-40.27455 242.84378,-45 4.6212,-3.15333 -50.402,-325.63145 -57.8438,-325.71875 -0.39,-2.23828 -3.8554,-3.02407 -8.4062,-3.03125 -5.8511,-0.009 -13.5121,1.25745 -18.75,2.3125 2.619,2.61905 7.9077,2.95684 9.8125,7.71875 2.2619,11.90476 56.6832,309.0794 50.9062,308 0.2825,6.37389 -154.51933,22.85268 -231.78123,34.28125 -15.47619,3.45238 -13.81399,34.74851 -28.21875,37.84375 l -27.90625,-0.71875 -27.90625,0.71875 c -14.40476,-3.09524 -12.74256,-34.39137 -28.21875,-37.84375 -77.2619,-11.42857 -232.06378,-27.90736 -231.78125,-34.28125 -5.77694,1.0794 48.64434,-296.09524 50.90625,-308 1.90476,-4.76191 7.19345,-5.0997 9.8125,-7.71875 -5.23791,-1.05505 -12.89897,-2.32173 -18.75,-2.3125 -4.5508,0.007 -8.0162,0.79297 -8.40625,3.03125 -7.44179,0.0873 -62.46496,322.56542 -57.84375,325.71875 -3.20233,4.72545 161.89137,30 242.84375,45 9.88095,3.33334 10.85119,34.51041 32.875,37.84375 l 36.46875,0.71875 z"
id="bookCover"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccscccccccccccscccccc" />
<g
id="bookPages"
transform="translate(-190.45045,127.31819)">
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="bookPageLeft"
d="m 773.87535,479.18577 c -54.0564,-66.01358 -162.66742,-25.90721 -245.12212,-37.36617 15.9429,-99.14492 31.8858,-198.28985 47.8287,-297.43477 63.5225,9.4661 160.67457,-33.38045 190.56751,28.39829 2.98929,101.13779 3.73662,205.26486 6.72591,306.40265 z"
style="fill:#262230;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="bookPageRight"
d="m 782.84323,479.18577 c 54.0564,-66.01358 162.66742,-25.90721 245.12207,-37.36617 -15.9429,-99.14492 -31.88575,-198.28985 -47.82865,-297.43477 -63.5225,9.46609 -160.67457,-33.38046 -190.56751,28.39828 -2.98929,101.1378 -3.73662,205.26487 -6.72591,306.40266 z"
style="fill:#262230;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline" />
</g>
<path
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 615.95128,330.38838 c 31.97315,-40.8005 85.78627,-16.21216 153.82568,-17.97615 4.28396,27.97176 8.30065,61.82377 12.58461,89.79553 -73.28596,5.34568 -92.71946,-20.73283 -164.58516,8.80464 z"
id="bookLinkingPanel"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 20 KiB

View File

@ -0,0 +1,216 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="1386.2081"
height="296.01321"
id="svg2"
version="1.1"
inkscape:version="0.48.0 r9654"
sodipodi:docname="Loading_Text_rasterfont.svg">
<defs
id="defs4" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.74023945"
inkscape:cx="563.12545"
inkscape:cy="89.24182"
inkscape:document-units="px"
inkscape:current-layer="textUpdating"
showgrid="true"
inkscape:window-width="1680"
inkscape:window-height="998"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
showborder="false"
inkscape:snap-global="true"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0">
<sodipodi:guide
position="4.0136719e-006,-1.9531228e-008"
orientation="-296.01321,0"
id="guide3001" />
<sodipodi:guide
position="4.0136719e-006,296.01321"
orientation="0,1386.2081"
id="guide3003" />
<sodipodi:guide
position="1386.2081,296.01321"
orientation="296.01321,0"
id="guide3005" />
<sodipodi:guide
position="1386.2081,-1.9531228e-008"
orientation="0,-1386.2081"
id="guide3007" />
<inkscape:grid
type="xygrid"
id="grid3797"
empspacing="5"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true"
spacingx="10px"
spacingy="10px"
originy="33px"
originx="335px" />
</sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Background"
inkscape:groupmode="layer"
id="background"
transform="translate(314.84811,-319.4097)">
<rect
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
id="rect3009"
width="1386.2081"
height="296.01321"
x="-314.84811"
y="319.4097"
inkscape:export-xdpi="12.465658"
inkscape:export-ydpi="12.465658" />
</g>
<g
inkscape:groupmode="layer"
id="circles"
inkscape:label="Circles"
transform="translate(314.84811,-319.4097)">
<path
sodipodi:type="arc"
style="fill:#3e364e;fill-opacity:1;fill-rule:evenodd;stroke:none"
id="path2999"
sodipodi:cx="-193.18074"
sodipodi:cy="430.94165"
sodipodi:rx="27.018284"
sodipodi:ry="27.018284"
d="m -166.16246,430.94165 c 0,14.92179 -12.09649,27.01828 -27.01828,27.01828 -14.92179,0 -27.01828,-12.09649 -27.01828,-27.01828 0,-14.92179 12.09649,-27.01828 27.01828,-27.01828 14.92179,0 27.01828,12.09649 27.01828,27.01828 z"
transform="translate(5.1990242,36.474655)" />
<path
sodipodi:type="arc"
style="fill:#3e364e;fill-opacity:1;fill-rule:evenodd;stroke:none"
id="path2999-0"
sodipodi:cx="-193.18074"
sodipodi:cy="430.94165"
sodipodi:rx="27.018284"
sodipodi:ry="27.018284"
d="m -166.16246,430.94165 c 0,14.92179 -12.09649,27.01828 -27.01828,27.01828 -14.92179,0 -27.01828,-12.09649 -27.01828,-27.01828 0,-14.92179 12.09649,-27.01828 27.01828,-27.01828 14.92179,0 27.01828,12.09649 27.01828,27.01828 z"
transform="translate(1151.1625,36.474655)" />
</g>
<g
inkscape:groupmode="layer"
id="textLinking"
inkscape:label="Linking Text"
style="display:none"
transform="translate(314.84811,-319.4097)">
<g
style="font-size:195.61486816px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:3px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#3e364e;fill-opacity:1;stroke:none;font-family:Hobo Std;-inkscape-font-specification:Hobo Std Bold"
id="text3799">
<path
d="m 64.536466,548.776 c 1.377337,0.12226 3.072643,0.12226 5.085921,0 2.013073,-0.12226 3.121542,-1.10032 3.32541,-2.93418 -0.07135,-0.78608 -0.776515,-4.27812 -2.11551,-10.47613 -1.339202,-6.198 -2.88478,-12.34167 -4.636736,-18.43104 -1.752156,-6.0893 -3.283244,-9.36399 -4.59327,-9.82408 -1.624161,0.20531 -3.940112,1.64221 -6.947862,4.31071 -3.007925,2.66858 -6.743877,5.33711 -11.207867,8.00562 -4.464142,2.66857 -9.69254,4.10547 -15.685208,4.31072 -5.644286,0.29345 -10.738353,-1.90719 -15.282216,-6.60192 -4.5439543,-4.69466 -6.9483532,-13.64391 -7.2132041,-26.84779 0.2800977,-18.15565 2.2410482,-34.50738 5.8828571,-49.05523 3.641721,-14.54765 7.283487,-26.33509 10.925309,-35.36237 3.641712,-9.027 5.602665,-14.3375 5.882866,-15.93154 -0.06934,-1.70329 -0.517615,-2.79546 -1.344833,-3.27651 -0.827337,-0.48072 -1.617937,-0.69263 -2.371801,-0.63573 l -31.1023638,0 c -1.4594784,0.40259 -3.1130135,5.24603 -4.9606102,14.53033 -1.847639,9.28459 -3.64177,20.59546 -5.382397,33.93263 -1.74066,13.33739 -3.180243,26.28651 -4.318755,38.84738 -1.138534,12.56103 -1.728426,22.31922 -1.769675,29.27462 0.122244,19.32082 0.317856,32.02746 0.586837,38.11995 0.26896,6.09252 2.811918,8.77403 7.628881,8.04456 z"
id="path2998"
inkscape:connector-curvature="0" />
<path
d="m 129.7671,548.776 3.91225,0 c 0.89242,0.0326 1.60152,-0.0815 2.12728,-0.34232 0.52565,-0.26082 0.79462,-0.86396 0.8069,-1.80941 -0.40758,-1.6138 -2.03768,-9.87842 -4.89031,-24.79387 -2.85272,-14.9154 -4.48283,-35.01455 -4.89031,-60.29751 0.43193,-19.41034 2.15984,-35.94772 5.18373,-49.61218 3.02379,-13.66419 4.7517,-21.25231 5.18373,-22.76439 -0.15084,-1.75627 -1.07185,-2.74248 -2.76303,-2.95863 -1.69128,-0.21583 -3.24803,-0.27288 -4.67024,-0.17116 l -21.12614,0 c -0.8757,-0.26983 -2.04631,0.0501 -3.51185,0.95972 -1.46558,0.90996 -2.96018,4.02957 -4.4838,9.35883 -1.523657,5.32956 -2.81042,14.48869 -3.860293,27.47742 -1.049902,12.98898 -1.597002,31.42746 -1.641304,55.3155 0.04225,23.9529 0.609766,40.83833 1.702551,50.65635 1.092758,9.81806 2.457213,15.56085 4.093366,17.22838 1.63612,1.66753 3.29038,2.25196 4.96276,1.75327 z"
id="path3000"
inkscape:connector-curvature="0" />
<path
d="m 273.31853,548.776 c 1.67224,0.49869 3.32649,-0.0857 4.96275,-1.75327 1.63602,-1.66753 3.00047,-7.41032 4.09337,-17.22838 1.09265,-9.81801 1.66017,-26.70345 1.70256,-50.65635 -0.0368,-23.88804 -0.53807,-42.32653 -1.50378,-55.3155 -0.96596,-12.98873 -2.17632,-22.14786 -3.63105,-27.47743 -1.45499,-5.32926 -2.93431,-8.44886 -4.43795,-9.35883 -1.50389,-0.90963 -2.81205,-1.22954 -3.92447,-0.95971 l -14.86654,0 c -1.9603,-0.0813 -3.76156,-0.065 -5.4038,0.0489 -1.64242,0.11427 -2.51452,0.81521 -2.61631,2.10283 0.41558,2.74688 2.07829,10.99519 4.98811,24.74496 2.90964,13.75004 4.57234,30.01845 4.98812,48.80529 0.057,1.66279 0.0407,3.86342 -0.0489,6.60191 -0.0898,2.73865 -0.59509,4.25465 -1.516,4.54799 -0.8722,-0.0855 -1.57314,-0.55009 -2.10283,-1.39374 -0.52988,-0.84351 -0.93741,-1.5526 -1.22258,-2.12728 -12.10511,-22.33593 -22.06201,-39.56429 -29.87073,-51.68513 -7.80886,-12.12058 -13.99841,-20.48119 -18.56869,-25.08186 -4.57037,-4.60035 -8.05033,-6.78831 -10.43989,-6.56387 l -15.45338,0 c -0.8757,-0.26983 -2.04631,0.0501 -3.51185,0.95972 -1.46558,0.90996 -2.96018,4.02957 -4.48381,9.35883 -1.52365,5.32956 -2.81041,14.48869 -3.86029,27.47742 -1.0499,12.98898 -1.597,31.42746 -1.6413,55.3155 0.0422,23.9529 0.60977,40.83833 1.70255,50.65635 1.09276,9.81806 2.45721,15.56085 4.09337,17.22838 1.63612,1.66753 3.29037,2.25196 4.96276,1.75327 l 18.19195,0 c 0.99839,0.0856 2.13131,0.11003 3.39876,0.0734 1.26736,-0.0367 1.96015,-0.64796 2.07838,-1.83386 -0.33421,-4.4624 -1.6709,-12.99598 -4.01005,-25.60077 -2.33924,-12.60473 -3.67592,-32.43491 -4.01005,-59.4906 -0.0471,-1.54308 -0.10509,-4.30338 -0.17388,-8.28093 -0.0689,-3.97735 0.13399,-7.73745 0.60857,-11.28031 0.4745,-3.54265 1.50328,-5.43356 3.08633,-5.67276 2.24467,0.37323 5.23198,3.27843 8.96194,8.71562 3.72986,5.43739 7.2533,11.1681 10.57031,17.19215 3.3169,6.02422 5.47829,10.10309 6.48419,12.23664 9.75036,20.37272 16.02685,35.92026 18.8295,46.64268 2.80248,10.72247 4.65958,18.01083 5.57132,21.86511 0.91157,3.85429 3.40623,5.66552 7.48399,5.43368 z"
id="path3002"
inkscape:connector-curvature="0" />
<path
d="m 393.94758,386.02653 c -2.11923,0.0368 -3.45591,0.40361 -4.01006,1.10032 -0.55432,0.69703 -1.10856,2.09076 -1.6627,4.18121 -3.40277,11.16696 -8.16026,21.78314 -14.27246,31.84859 -6.11235,10.06569 -11.94207,18.30555 -17.4892,24.7196 -5.54723,6.41424 -9.1745,9.72758 -10.88184,9.94001 -1.8502,-0.37891 -2.89347,-2.16387 -3.12979,-5.35489 -0.23641,-3.19083 -0.30161,-5.51372 -0.19562,-6.96869 0.39934,-14.65858 1.99684,-27.54453 4.7925,-38.65789 2.79558,-11.11308 4.39308,-17.00589 4.79251,-17.67847 -0.11823,-1.75627 -0.90884,-2.74248 -2.3718,-2.95863 -1.46307,-0.21583 -2.8894,-0.27288 -4.27902,-0.17116 l -19.75685,0 c -0.87569,-0.26983 -2.04631,0.0501 -3.51185,0.95972 -1.46558,0.90996 -2.96018,4.02957 -4.4838,9.35883 -1.52366,5.32956 -2.81042,14.48869 -3.8603,27.47742 -1.04989,12.98898 -1.59699,31.42746 -1.6413,55.3155 0.0423,23.9529 0.60977,40.83833 1.70255,50.65635 1.09276,9.81806 2.45722,15.56085 4.09337,17.22838 1.63613,1.66753 3.29038,2.25196 4.96276,1.75327 l 23.86471,0 c 1.09619,0.008 1.9846,-0.25266 2.66521,-0.78245 0.68052,-0.52978 1.03099,-1.37744 1.05142,-2.54296 -0.0822,-0.89353 -0.65691,-4.36625 -1.72428,-10.41817 -1.06747,-6.05189 -2.13488,-12.45155 -3.20225,-19.19899 -1.06746,-6.74738 -1.64222,-11.61112 -1.72429,-14.59123 0.6031,-5.94575 3.60249,-11.61035 8.99817,-16.99382 5.39558,-5.38335 9.56864,-8.26048 12.51919,-8.6314 2.29022,-0.0529 6.16986,5.28568 11.63893,16.01576 5.46892,10.7302 8.76172,27.16977 9.87843,49.31877 -0.12642,1.26741 -0.0205,2.84046 0.31787,4.71914 0.33817,1.8787 1.6667,2.91381 3.9856,3.10535 l 23.86471,0 c 2.23312,0.15894 4.17294,0.13448 5.81946,-0.0734 1.64629,-0.20783 2.51024,-1.55267 2.59187,-4.0345 -0.4638,-19.1084 -3.70951,-35.2935 -9.73715,-48.55533 -6.02787,-13.26173 -12.05562,-23.57846 -18.08328,-30.95022 -6.02785,-7.3716 -9.27356,-11.7765 -9.73714,-13.2147 0.41046,-1.47666 3.28426,-5.39132 8.62143,-11.74399 5.33698,-6.35246 10.67405,-14.10691 16.01123,-23.26338 5.33696,-9.15621 8.21077,-18.67841 8.62144,-28.56665 -0.13868,-1.46692 -0.93743,-2.24937 -2.39626,-2.34734 -1.45906,-0.0976 -2.74683,-0.0976 -3.86334,0 z"
id="path3004"
inkscape:connector-curvature="0" />
<path
d="m 484.91374,548.776 3.91224,0 c 0.89243,0.0326 1.60153,-0.0815 2.12729,-0.34232 0.52565,-0.26082 0.79462,-0.86396 0.8069,-1.80941 -0.40758,-1.6138 -2.03768,-9.87842 -4.89031,-24.79387 -2.85273,-14.9154 -4.48283,-35.01455 -4.89031,-60.29751 0.43193,-19.41034 2.15984,-35.94772 5.18372,-49.61218 3.02379,-13.66419 4.7517,-21.25231 5.18373,-22.76439 -0.15083,-1.75627 -1.07184,-2.74248 -2.76302,-2.95863 -1.69129,-0.21583 -3.24803,-0.27288 -4.67024,-0.17116 l -21.12614,0 c -0.8757,-0.26983 -2.04632,0.0501 -3.51185,0.95972 -1.46559,0.90996 -2.96018,4.02957 -4.4838,9.35883 -1.52366,5.32956 -2.81042,14.48869 -3.8603,27.47742 -1.0499,12.98898 -1.597,31.42746 -1.6413,55.3155 0.0423,23.9529 0.60977,40.83833 1.70255,50.65635 1.09276,9.81806 2.45721,15.56085 4.09337,17.22838 1.63612,1.66753 3.29037,2.25196 4.96276,1.75327 z"
id="path3006"
inkscape:connector-curvature="0" />
<path
d="m 628.46517,548.776 c 1.67224,0.49869 3.32649,-0.0857 4.96275,-1.75327 1.63602,-1.66753 3.00047,-7.41032 4.09337,-17.22838 1.09265,-9.81801 1.66017,-26.70345 1.70256,-50.65635 -0.0368,-23.88804 -0.53807,-42.32653 -1.50378,-55.3155 -0.96597,-12.98873 -2.17632,-22.14786 -3.63106,-27.47743 -1.45498,-5.32926 -2.9343,-8.44886 -4.43795,-9.35883 -1.50388,-0.90963 -2.81204,-1.22954 -3.92447,-0.95971 l -14.86653,0 c -1.9603,-0.0813 -3.76157,-0.065 -5.4038,0.0489 -1.64242,0.11427 -2.51453,0.81521 -2.61631,2.10283 0.41558,2.74688 2.07828,10.99519 4.98811,24.74496 2.90963,13.75004 4.57234,30.01845 4.98812,48.80529 0.0569,1.66279 0.0406,3.86342 -0.0489,6.60191 -0.0898,2.73865 -0.59509,4.25465 -1.51599,4.54799 -0.8722,-0.0855 -1.57315,-0.55009 -2.10283,-1.39374 -0.52989,-0.84351 -0.93741,-1.5526 -1.22258,-2.12728 -12.10511,-22.33593 -22.06201,-39.56429 -29.87073,-51.68513 -7.80886,-12.12058 -13.99842,-20.48119 -18.56869,-25.08186 -4.57037,-4.60035 -8.05033,-6.78831 -10.4399,-6.56387 l -15.45337,0 c -0.8757,-0.26983 -2.04632,0.0501 -3.51186,0.95972 -1.46558,0.90996 -2.96018,4.02957 -4.4838,9.35883 -1.52365,5.32956 -2.81042,14.48869 -3.86029,27.47742 -1.0499,12.98898 -1.597,31.42746 -1.6413,55.3155 0.0423,23.9529 0.60976,40.83833 1.70255,50.65635 1.09276,9.81806 2.45721,15.56085 4.09337,17.22838 1.63612,1.66753 3.29037,2.25196 4.96275,1.75327 l 18.19195,0 c 0.9984,0.0856 2.13132,0.11003 3.39876,0.0734 1.26736,-0.0367 1.96016,-0.64796 2.07839,-1.83386 -0.33422,-4.4624 -1.6709,-12.99598 -4.01006,-25.60077 -2.33924,-12.60473 -3.67592,-32.43491 -4.01005,-59.4906 -0.0471,-1.54308 -0.10508,-4.30338 -0.17388,-8.28093 -0.0689,-3.97735 0.13399,-7.73745 0.60857,-11.28031 0.47451,-3.54265 1.50329,-5.43356 3.08633,-5.67276 2.24468,0.37323 5.23199,3.27843 8.96195,8.71562 3.72986,5.43739 7.25329,11.1681 10.57031,17.19215 3.31689,6.02422 5.47829,10.10309 6.48419,12.23664 9.75035,20.37272 16.02684,35.92026 18.82949,46.64268 2.80248,10.72247 4.65959,18.01083 5.57133,21.86511 0.91156,3.85429 3.40622,5.66552 7.48399,5.43368 z"
id="path3008"
inkscape:connector-curvature="0" />
<path
d="m 730.11984,551.71019 c 12.68212,0.0611 23.99502,-2.89751 33.93874,-8.87592 9.94352,-5.97839 15.19244,-15.34332 15.7468,-28.09482 -0.0315,-2.50911 -0.46862,-8.0104 -1.31133,-16.50389 -0.84294,-8.49338 -1.90311,-16.66079 -3.18051,-24.50226 -1.27764,-7.84131 -2.58413,-12.03852 -3.91949,-12.59163 -1.18345,0.13412 -4.64168,1.2136 -10.3747,3.23847 -5.73323,2.02503 -11.33595,4.19125 -16.80818,6.49867 -5.47239,2.30758 -8.40899,3.95217 -8.80979,4.93378 0.19071,1.58309 1.52618,3.09003 4.00643,4.52082 2.48009,1.43093 4.96025,3.4595 7.44051,6.08572 2.48008,2.62634 3.81556,6.52409 4.00643,11.69327 -0.29351,6.77312 -2.98318,11.61452 -8.06901,14.52422 -5.086,2.90976 -10.80765,4.32795 -17.16498,4.25457 -12.53147,-0.49308 -21.01615,-5.13072 -25.45406,-13.91293 -4.43799,-8.78213 -6.51637,-18.7502 -6.23514,-29.90424 -0.058,-9.32772 1.25333,-18.7316 3.93398,-28.21165 2.68057,-9.47984 7.07822,-17.44922 13.19296,-23.90818 6.11464,-6.45869 14.29413,-9.82032 24.53849,-10.0849 7.94515,0.22715 12.94172,1.81619 14.9897,4.76714 2.0478,2.95122 3.1611,5.90231 3.3399,8.85328 0.17862,2.95121 1.43681,4.54026 3.7746,4.76715 6.23096,-0.0325 11.12941,-1.58108 14.69537,-4.6458 3.56573,-3.06447 5.3833,-7.44944 5.4527,-13.15493 -0.21868,-7.00084 -2.69402,-12.58182 -7.42603,-16.74296 -4.73224,-4.16084 -10.40982,-7.14815 -17.03276,-8.96195 -6.62314,-1.81348 -12.88031,-2.69977 -18.77154,-2.65888 -15.61162,0.30204 -28.7925,4.97982 -39.54268,14.03337 -10.75025,9.05386 -18.90318,20.67225 -24.45879,34.85523 -5.55564,14.1832 -8.34734,29.11976 -8.3751,44.80972 -0.008,22.20612 5.63199,40.14539 16.92046,53.81784 11.28843,13.67249 28.27409,20.70638 50.95702,21.10169 z"
id="path3010"
inkscape:connector-curvature="0" />
</g>
</g>
<g
inkscape:groupmode="layer"
id="textUpdating"
inkscape:label="Updating Text"
style="display:inline"
transform="translate(314.84811,-319.4097)">
<g
transform="translate(-2.0722657e-6,0.02741704)"
style="font-size:220px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#3e364e;fill-opacity:1;stroke:none;display:inline;font-family:Collegiate;-inkscape-font-specification:Collegiate Bold"
id="text3799-0">
<path
inkscape:connector-curvature="0"
d="m 25.320627,483.66859 c -0.03675,10.74324 -1.283395,18.73646 -3.739951,23.97969 -3.483362,7.91992 -9.936606,11.87987 -19.3597511,11.87985 -15.5831789,0.0367 -23.3564039,-11.91648 -23.3196999,-35.85954 l 0,-73.25906 c 0.0045,-3.63898 0.105376,-6.8656 0.302495,-9.67987 0.197045,-2.814 0.462875,-5.16063 0.797491,-7.03991 l -29.919615,0 c 0.623315,5.97672 0.916645,10.52333 0.879989,13.63982 l 0.219997,80.07897 c -8e-6,16.05983 4.399931,29.25965 13.19983,39.59949 9.203186,10.74319 21.816345,16.09645 37.8395129,16.05979 15.6197241,-0.0367 28.1595501,-5.46326 37.6195161,-16.27979 8.79978,-10.37651 13.199719,-23.50299 13.19983,-39.37949 l 0,-71.93907 0,-8.1399 c 0.10072,-2.86441 0.229051,-5.44021 0.384995,-7.7274 0.155722,-2.28691 0.394052,-4.25771 0.71499,-5.91242 l -30.139612,0 c 0.439913,1.86095 0.769907,3.91425 0.989984,6.15992 0.219913,2.24594 0.329913,4.73924 0.329999,7.4799 z"
style="font-family:Collegiate;-inkscape-font-specification:Collegiate Bold"
id="path2998-1" />
<path
inkscape:connector-curvature="0"
d="m 117.16073,506.1083 c 14.26308,-5.93988 25.77626,-14.07977 34.53956,-24.41969 9.93644,-11.91644 14.92304,-25.04292 14.9598,-39.37949 -1e-4,-14.11637 -5.06003,-25.70288 -15.1798,-34.75955 -10.15661,-9.23974 -23.50309,-13.85968 -40.03949,-13.85982 l -32.99957,0 c 0.325401,1.86095 0.554564,4.51924 0.687489,7.97489 0.132902,3.45592 0.197068,7.7642 0.192499,12.92484 l 0,105.15864 c 0.03666,7.66325 -0.256673,14.55649 -0.879988,20.67974 l 28.59963,0 c -0.3392,-1.7554 -0.59587,-4.34953 -0.76999,-7.7824 -0.17421,-3.43286 -0.21087,-7.73197 -0.11,-12.89734 l 0,-7.6999 z m -5.05993,-88.43886 c 7.51652,1.2e-4 13.8231,2.20009 18.91975,6.59991 5.71986,4.87672 8.57982,11.4033 8.57989,19.57975 -0.0367,8.57998 -3.70335,16.71986 -10.99986,24.41969 -6.37997,6.81997 -13.85987,11.8799 -22.43971,15.1798 l 0,-65.77915 z"
style="font-family:Collegiate;-inkscape-font-specification:Collegiate Bold"
id="path3000-7" />
<path
inkscape:connector-curvature="0"
d="m 188.44123,393.68975 c 0.62331,3.33676 0.91664,10.30333 0.87999,20.89973 l 0,105.15864 c 0.0366,10.08322 -0.25667,16.97646 -0.87999,20.67974 l 45.97941,0 c 20.86298,0 35.23612,-6.81991 43.11944,-20.45974 6.34315,-10.96316 9.49643,-28.85624 9.45988,-53.67931 -0.0368,-48.39925 -19.32317,-72.59892 -57.85925,-72.59906 z m 71.27908,86.89888 c 0.0778,12.75529 -2.82796,21.94933 -8.71739,27.58214 -5.88958,5.63287 -15.23028,8.392 -28.02213,8.2774 l -6.81992,0 0,-98.99873 5.49993,0 c 14.73975,-0.0365 24.85961,3.11675 30.35961,9.45988 5.09652,5.68337 7.66315,15.87656 7.6999,30.5796 z"
style="font-family:Collegiate;-inkscape-font-specification:Collegiate Bold"
id="path3002-4" />
<path
inkscape:connector-curvature="0"
d="m 328.51225,540.42786 c 0.0366,-2.01664 1.06329,-6.78324 3.07996,-14.29982 l 5.05993,-17.81977 38.27951,0 4.39994,17.81977 c 0.87991,3.6208 1.5399,6.60909 1.97998,8.96489 0.43991,2.3558 0.65991,4.13411 0.65999,5.33493 l 30.57961,0 -8.57989,-32.11959 5.27993,0 0,-23.3197 -11.43985,0 -24.19969,-91.29882 -32.55958,0 -38.71951,146.73811 z m 28.15964,-104.49866 12.31984,49.05937 -25.95967,0 z"
style="font-family:Collegiate;-inkscape-font-specification:Collegiate Bold"
id="path3004-0" />
<path
inkscape:connector-curvature="0"
d="m 497.1829,417.66944 c 4.0607,1.2e-4 7.43398,0.0551 10.11987,0.165 2.68571,0.11012 4.73901,0.27511 6.15992,0.49499 l 0,-24.63968 -90.85883,0 0,24.63968 c 2.45663,-0.43987 7.88322,-0.65987 16.27979,-0.65999 l 15.6198,0 0,102.07868 c 0.0366,9.86322 -0.2567,16.75646 -0.87999,20.67974 l 28.81963,0 c -0.62339,-3.11662 -0.91672,-9.8632 -0.87999,-20.23974 l 0,-102.51868 15.6198,0 z"
style="font-family:Collegiate;-inkscape-font-specification:Collegiate Bold"
id="path3006-9" />
<path
inkscape:connector-curvature="0"
d="m 561.23086,540.42786 c -0.62337,-3.55662 -0.9167,-10.30319 -0.87999,-20.23974 l 0,-106.25863 c -0.0367,-10.1564 0.25662,-16.90298 0.87999,-20.23974 l -29.91962,0 c 0.3254,1.43929 0.55457,3.89592 0.68749,7.3699 0.1329,3.47426 0.19707,7.91086 0.1925,13.30983 l 0,105.37864 c 0.005,4.95912 -0.0596,9.17573 -0.1925,12.64984 -0.13292,3.47412 -0.36209,6.15075 -0.68749,8.0299 z"
style="font-family:Collegiate;-inkscape-font-specification:Collegiate Bold"
id="path3008-4" />
<path
inkscape:connector-curvature="0"
d="m 681.95847,540.64785 c -0.62343,-5.46326 -0.91676,-14.11647 -0.87998,-25.95966 l 0,-97.01875 c -1.1e-4,-8.79976 0.21989,-16.93965 0.65999,-24.41969 l -27.71965,0 c 0.69658,7.70004 1.06324,15.83993 1.09999,24.41969 l 0,46.4194 -43.11944,-70.39909 -29.25963,0 6.59992,12.09984 0,108.01861 c 0.005,5.60078 -0.0596,10.62404 -0.1925,15.0698 -0.13293,4.44578 -0.36209,8.36906 -0.68749,11.76985 l 27.93964,0 c -0.62337,-7.22323 -0.9167,-15.43645 -0.87999,-24.63968 l 0,-69.7391 39.59949,64.01917 c -0.11008,0.55919 -0.16508,1.47584 -0.165,2.74997 -7e-5,1.27417 0.0549,2.85082 0.165,4.72994 -0.0367,5.75661 -0.4034,13.38317 -1.09999,22.8797 z"
style="font-family:Collegiate;-inkscape-font-specification:Collegiate Bold"
id="path3010-8" />
<path
inkscape:connector-curvature="0"
d="m 801.81037,540.42786 c 1.97987,0.21999 3.51985,0.21999 4.61994,0 -0.0368,-1.4254 -0.18344,-3.85454 -0.44,-7.28741 -0.25677,-3.43287 -0.40343,-7.23698 -0.43999,-11.41235 l 0,-25.51967 c -0.005,-3.84074 0.0595,-7.48903 0.1925,-10.94487 0.1328,-3.45573 0.36197,-6.77401 0.68749,-9.95487 l -26.83966,0 c 0.47658,9.67994 0.62325,15.39986 0.44,17.15978 0.0366,17.59981 -7.07665,26.39969 -21.33973,26.39966 -17.41648,-0.0366 -26.14303,-17.34306 -26.17966,-51.91933 -3e-5,-34.13612 10.77982,-51.22255 32.33958,-51.25934 10.33979,-0.0365 20.23966,3.99674 29.69962,12.09985 l 0,-25.07968 c -8.35998,-7.29643 -18.25984,-10.96305 -29.69962,-10.99986 -19.95104,0.0827 -35.04833,6.46256 -45.29192,19.13975 -10.24362,12.67746 -15.38605,31.1572 -15.4273,55.43929 0.0367,50.85603 18.22308,76.30235 54.5593,76.33902 8.13983,-0.0367 15.39973,-1.72331 21.77972,-5.05994 5.05985,-2.82329 8.5798,-5.97658 10.55987,-9.45987 z"
style="font-family:Collegiate;-inkscape-font-specification:Collegiate Bold"
id="path3012" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 22 KiB

View File

@ -0,0 +1,13 @@
SOURCE_DIR = .
BINARY_DIR = .
.PHONY: all clean
all: $(BINARY_DIR)/resource.dat
$(BINARY_DIR)/resource.dat: $(SOURCE_DIR)/makeres.py $(SOURCE_DIR)/render_svg.py $(SOURCE_DIR)/create_resource_dat.py $(SOURCE_DIR)/Cursor_Base.svg $(SOURCE_DIR)/Linking_Book.svg $(SOURCE_DIR)/Loading_Text_rasterfont.svg $(SOURCE_DIR)/Voice_Chat.svg
python $(SOURCE_DIR)/makeres.py --optimize --render --package -i $(SOURCE_DIR) -o $(BINARY_DIR)
clean:
rm -rf $(BINARY_DIR)/render
rm -fv $(BINARY_DIR)/resource.dat

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 48 KiB

View File

@ -0,0 +1,62 @@
#!/usr/bin/env python
from __future__ import print_function
from __future__ import with_statement
import os
import sys
import glob
import struct
from optparse import OptionParser
version = 1
def create_resource_dat(resfilepath, inrespath):
datHeader = 0xCBBCF00D
datVersion = 0x00000001
## Get list of files to archive
resourceList = glob.glob(os.path.join(inrespath, "*"))
resourceList.sort()
if len(resourceList) == 0:
print("No files found in '{0}'. Quitting.\n".format(inrespath))
return False
print("{0} resources found in '{1}'.".format(len(resourceList), inrespath, ))
## Write each resource into the output file
with open(resfilepath, "wb") as datFile:
datFile.write(struct.pack("<I",datHeader))
datFile.write(struct.pack("<I",datVersion))
datFile.write(struct.pack("<I",len(resourceList)))
for res in resourceList:
with open(res, "rb") as resFile:
name = os.path.basename(res)
datFile.write(struct.pack("<I", len(name)))
datFile.write(name)
datFile.write(struct.pack("<I", os.path.getsize(res)))
datFile.write(resFile.read())
print("{0} resources written to '{1}'.\n".format(len(resourceList), resfilepath))
return True
if __name__ == '__main__':
parser = OptionParser(usage="usage: %prog [options]", version="%prog {0}".format(version))
parser.add_option("-q", "--quiet", dest="verbose", default=True, action="store_false", help="Don't print status messages")
parser.add_option("-o", "--outfile", dest="outfile", default="resource.dat", help="Sets name for output file")
parser.add_option("-i", "--inpath", dest="inpath", default=".", help="Sets input path for files to add to resource file")
(options, args) = parser.parse_args()
## Send output to OS's null if unwanted
if not options.verbose:
sys.stdout = open(os.devnull,"w")
sys.stderr = open(os.devnull,"w")
## Compute Paths
outfile = os.path.expanduser(options.outfile)
inpath = os.path.expanduser(options.inpath)
## Do the work!
print("Creating {0}...".format(outfile))
create_resource_dat(outfile, inpath)

View File

@ -0,0 +1,52 @@
#!/usr/bin/env python
import os
import sys
import glob
import subprocess
from optparse import OptionParser
if __name__ == '__main__':
parser = OptionParser(usage="usage: %prog [options]")
parser.add_option("-q", "--quiet", dest="verbose", default=True, action="store_false", help="Don't print status messages")
parser.add_option("-r", "--render", dest="render", default=False, action="store_true", help="Perform SVG Render to images")
parser.add_option("-p", "--package", dest="package", default=False, action="store_true", help="Perform packaging into resource container")
parser.add_option("-z", "--optimize", dest="optimize", default=False, action="store_true", help="Perform PNGCrush optimization on PNG resources")
parser.add_option("-o", "--outpath", dest="outpath", default=".", help="Sets output path for resource container")
parser.add_option("-i", "--inpath", dest="inpath", default=".", help="Sets input path for files to add to resource file")
(options, args) = parser.parse_args()
## Send output to OS's null if unwanted
if not options.verbose:
sys.stdout = open(os.devnull,"w")
sys.stderr = open(os.devnull,"w")
## Compute Paths
outpath = os.path.expanduser(options.outpath)
inpath = os.path.expanduser(options.inpath)
## Do the work!
if options.render:
ret = subprocess.call(["python", os.path.join(inpath, "render_svg.py"), "-i", inpath, "-o", os.path.join(outpath, "render")], stdout=sys.stdout, stderr=sys.stderr)
if ret != 0:
print("An error has occurred. Aborting.")
exit(1)
if options.optimize:
print("Optimizing PNGs with pngcrush...")
for png in glob.glob(os.path.join("render", "*.png")):
#print("pngcrushing - {0}".format(png))
ret = subprocess.call(["pngcrush", "-q", "-l 9", "-brute", png, "temp.png"], stdout=sys.stdout, stderr=sys.stderr)
if ret != 0:
print("An error has occurred. Aborting.")
exit(1)
os.remove(png)
os.rename("temp.png", png)
if options.package:
ret = subprocess.call(["python", os.path.join(inpath, "create_resource_dat.py"), "-i", os.path.join(outpath, "render"), "-o", "resource.dat"], stdout=sys.stdout, stderr=sys.stderr)
if ret != 0:
print("An error has occurred. Aborting.")
exit(1)

View File

@ -0,0 +1,220 @@
#!/usr/bin/env python
from __future__ import print_function
from __future__ import with_statement
import os
import math
from xml.dom.minidom import parse
from optparse import OptionParser
import scalergba
try:
import rsvg
import cairo
except ImportError as e:
print("Rendering SVG resources requires PyGTK. Exiting...")
exit(1)
cursorList = {
"cursor_up": ["circleOuter"],
"cursor_poised": ["circleOuter", "circleInnerOpen"],
"cursor_clicked": ["circleOuter", "circleInnerClosed"],
"cursor_disabled": ["cross"],
"cursor_open": ["circleOuter", "arrowTranslucentUpper", "arrowTranslucentLower"],
"cursor_grab": ["circleOuter", "circleInnerOpen", "arrowTranslucentUpper", "arrowTranslucentLower"],
"cursor_updown_open": ["circleOuter", "circleInnerOpen", "arrowTranslucentUpper", "arrowTranslucentLower"],
"cursor_updown_closed": ["circleOuter", "circleInnerClosed", "arrowOpaqueUpper", "arrowOpaqueLower"],
"cursor_leftright_open": ["circleOuter", "circleInnerOpen", "arrowTranslucentLeft", "arrowTranslucentRight"],
"cursor_leftright_closed": ["circleOuter", "circleInnerClosed", "arrowOpaqueLeft", "arrowOpaqueRight"],
"cursor_4way_open": ["circleOuter", "circleInnerOpen", "arrowTranslucentUpper", "arrowTranslucentRight", "arrowTranslucentLower", "arrowTranslucentLeft"],
"cursor_4way_closed": ["circleOuter", "circleInnerClosed", "arrowOpaqueUpper", "arrowOpaqueRight", "arrowOpaqueLower", "arrowOpaqueLeft"],
"cursor_upward": ["circleOuter", "arrowOpaqueUpper"],
"cursor_right": ["circleOuter", "arrowOpaqueRight"],
"cursor_down": ["circleOuter", "arrowOpaqueLower"],
"cursor_left": ["circleOuter", "arrowOpaqueLeft"],
"cursor_book": ["circleOuter", "book"],
"cursor_book_poised": ["circleOuter", "circleInnerOpen", "book"],
"cursor_book_clicked": ["circleOuter", "circleInnerClosed", "book"],
}
cursorOffsetList = {
"cursor_book": [7, 7],
"cursor_book_poised": [7, 7],
"cursor_book_clicked": [7, 7]
}
textList = {
"xLoading_Linking_Text": ["background", "circles", "textLinking"],
"xLoading_Updating_Text": ["background", "circles", "textUpdating"]
}
voiceList = {
"ui_speaker": ["speakerGrille", "speakerIndicator", "speakerOuterRing"],
"ui_microphone": ["microphoneGrille", "microphoneIndicator", "microphoneOuterRing"]
}
def enable_only_layers(layerlist, layers):
for layer in layers:
if layer in layerlist:
layers[layer].setAttribute("style","")
else:
layers[layer].setAttribute("style","display:none")
# sanity check
for layer in layerlist:
if layer not in layers:
print("warning: unknown layer", layer)
def shift_all_layers(layers, shiftx, shifty):
# note: this assumes that all layers start out with no transform of their own
for layer in layers:
layers[layer].setAttribute("transform", "translate(%g,%g)" % (shiftx, shifty))
def get_layers_from_svg(svgData):
inkscapeNS = "http://www.inkscape.org/namespaces/inkscape"
layers = {}
groups = svgData.getElementsByTagName("g")
for group in groups:
if group.getAttributeNS(inkscapeNS,"groupmode") == "layer":
layers[group.getAttribute("id")] = group
return layers
def render_cursors(inpath, outpath):
scalefactor = 4
with open(os.path.join(inpath,"Cursor_Base.svg"), "r") as svgFile:
cursorSVG = parse(svgFile)
layers = get_layers_from_svg(cursorSVG)
svgwidth = float(cursorSVG.documentElement.getAttribute("width"))
svgheight = float(cursorSVG.documentElement.getAttribute("height"))
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, int(math.ceil(scalefactor*svgwidth)), int(math.ceil(scalefactor*svgheight)))
for cursor in cursorList:
ctx = cairo.Context(surface)
ctx.save()
ctx.set_operator(cairo.OPERATOR_CLEAR)
ctx.paint()
ctx.restore()
enabledlayers = cursorList[cursor]
enabledlayers = enabledlayers + [l + "Shadow" for l in enabledlayers]
enable_only_layers(enabledlayers, layers)
shift_all_layers(layers, *cursorOffsetList.get(cursor, [0, 0]))
svg = rsvg.Handle(data=cursorSVG.toxml())
ctx.scale(scalefactor, scalefactor)
svg.render_cairo(ctx)
outfile = os.path.join(outpath, cursor + ".png")
surface.write_to_png(outfile)
scalergba.scale(outfile, outfile, scalefactor)
def render_loading_books(inpath, outpath):
resSize = {"width":256, "height":256}
with open(os.path.join(inpath,"Linking_Book.svg"), "r") as svgFile:
bookSVG = parse(svgFile)
layers = get_layers_from_svg(bookSVG)
ratioW = resSize["width"] / float(bookSVG.documentElement.getAttribute("width"))
ratioH = resSize["height"] / float(bookSVG.documentElement.getAttribute("height"))
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, resSize["width"], resSize["height"])
for angle in range(0, 18):
ctx = cairo.Context(surface)
# Draw Book and Black Background
enable_only_layers(["background", "book"],layers)
svg = rsvg.Handle(data=bookSVG.toxml())
ctx.save()
ctx.scale(ratioW, ratioH)
svg.render_cairo(ctx)
ctx.restore()
# Draw Circles at appropriate angle
enable_only_layers(["circles"],layers)
svg = rsvg.Handle(data=bookSVG.toxml())
ctx.translate(resSize["height"] / 2, resSize["width"] / 2)
ctx.rotate(math.radians(angle*(5)))
ctx.translate(-resSize["width"] / 2, -resSize["height"] / 2)
ctx.scale(ratioW, ratioH)
svg.render_cairo(ctx)
surface.write_to_png(os.path.join(outpath, "xLoading_Linking.{0:02}.png".format(angle)))
def render_loading_text(inpath, outpath):
resSize = {"width":192, "height":41}
with open(os.path.join(inpath,"Loading_Text_rasterfont.svg"), "r") as svgFile:
textSVG = parse(svgFile)
layers = get_layers_from_svg(textSVG)
ratioW = resSize["width"] / float(textSVG.documentElement.getAttribute("width"))
ratioH = resSize["height"] / float(textSVG.documentElement.getAttribute("height"))
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, resSize["width"], resSize["height"])
for textEntry in textList:
ctx = cairo.Context(surface)
ctx.save()
ctx.set_operator(cairo.OPERATOR_CLEAR)
ctx.paint()
ctx.restore()
enable_only_layers(textList[textEntry], layers)
svg = rsvg.Handle(data=textSVG.toxml())
ctx.scale(ratioW, ratioH)
svg.render_cairo(ctx)
surface.write_to_png(os.path.join(outpath, textEntry + ".png"))
def render_voice_icons(inpath, outpath):
resSize = {"width":32, "height":32}
with open(os.path.join(inpath,"Voice_Chat.svg"), "r") as svgFile:
uiSVG = parse(svgFile)
layers = get_layers_from_svg(uiSVG)
ratioW = resSize["width"] / float(uiSVG.documentElement.getAttribute("width"))
ratioH = resSize["height"] / float(uiSVG.documentElement.getAttribute("height"))
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, resSize["width"], resSize["height"])
for voiceUI in voiceList:
ctx = cairo.Context(surface)
ctx.save()
ctx.set_operator(cairo.OPERATOR_CLEAR)
ctx.paint()
ctx.restore()
enable_only_layers(voiceList[voiceUI], layers)
svg = rsvg.Handle(data=uiSVG.toxml())
ctx.scale(ratioW, ratioH)
svg.render_cairo(ctx)
surface.write_to_png(os.path.join(outpath, voiceUI + ".png"))
if __name__ == '__main__':
parser = OptionParser(usage="usage: %prog [options]")
parser.add_option("-q", "--quiet", dest="verbose", default=True, action="store_false", help="Don't print status messages")
parser.add_option("-o", "--outpath", dest="outpath", default="./out", help="Sets output path for rendered images")
parser.add_option("-i", "--inpath", dest="inpath", default=".", help="Sets input path for SVG files")
(options, args) = parser.parse_args()
## Send output to OS's null if unwanted
if not options.verbose:
sys.stdout = open(os.devnull,"w")
sys.stderr = open(os.devnull,"w")
## Compute Paths
outpath = os.path.expanduser(options.outpath)
inpath = os.path.expanduser(options.inpath)
if not os.path.exists(outpath):
os.mkdir(outpath)
## Do the work!
print("Rendering SVGs...")
render_cursors(inpath, outpath)
render_loading_books(inpath, outpath)
render_loading_text(inpath, outpath)
render_voice_icons(inpath, outpath)

View File

@ -0,0 +1,180 @@
#!/opt/local/bin/python2.7
# Christian Walther 2011-07-20
# Public Domain
# scalergba.py <input> <factor> <output>
#
# Scale image <input> down by <factor> (integer) and save as PNG file <output>.
#
# - Taking into account that adding (averaging) colors must be done in a linear
# color space, not with the power-law-encoded values stored in the files.
# (I know of no image processing application that does this right.)
# Gamma is hardcoded to 2.2.
# - Assuming that alpha compositing will be done directly with the raw
# power-law-encoded values rather than in the linear color space that would
# be correct, which is the way almost all software will do it, in particular
# OpenGL/Direct3D. (Photoshop has an option to do it right, maybe other
# high-end image processing software too.)
from __future__ import division
import sys
import math
try:
import Image
except ImportError:
print("Scaling requires the Python Imaging Library.")
raise
gamma = 2.2
def add(a, b):
for i, y in enumerate(b):
a[i] += y
def sub(a, b):
for i, y in enumerate(b):
a[i] -= y
def subsc(a, b):
for i in range(3):
a[i] -= b
def mul(a, b):
for i, y in enumerate(b):
a[i] *= y
def mulsc(a, b):
for i in range(3):
a[i] *= b
def pixel2linear(p):
l = [math.pow(p[i]/255.0, gamma) for i in range(3)]
if len(p) == 4:
l.append(p[3]/255.0)
else:
l.append(1.0)
return l
def pixel2nonlinear(p):
return [p[i]/255.0 for i in range(3)], p[3]/255.0 if len(p) > 3 else 1.0
def clamp(x):
return 255 if x > 255 else 0 if x < 0 else x
def linear2pixel(l):
p = [clamp(int(math.floor(math.pow(l[i], 1.0/gamma)*255 + 0.5))) for i in range(3)]
if len(l) == 4:
p.append(clamp(int(math.floor(l[3]*255 + 0.5))))
return p
def nonlinear2pixel(l):
return [clamp(int(math.floor(c*255 + 0.5))) for c in l]
def scale(infilename, outfilename, factor):
inimg = Image.open(infilename)
inpix = inimg.load()
outw = inimg.size[0] // factor
outh = inimg.size[1] // factor
outimg = Image.new("RGBA", (outw, outh), None)
outpix = outimg.load()
for oy in range(outh):
for ox in range(outw):
# scale down in linear color space to get a tentative color to compute the fixed points from
sum = [0.0, 0.0, 0.0, 0.0]
for j in range(factor):
for i in range(factor):
l = pixel2linear(inpix[ox*factor+i, oy*factor+j])
mulsc(l, l[3])
add(sum, l)
if sum[3] != 0:
mulsc(sum, 1.0/sum[3])
sum[3] /= factor*factor
# determine the two fixed points (background colors on which we will achieve the correct result) per component
# I used to use constant black and white for that, but later realized that that results in a large error (result too light) on midtones and I can do better by distributing the error more evenly. The dependency of the fixed points on the foreground color is empirical magic that has been experimentally determined to produce visually pleasing results.
fix1 = [0.04*sum[i] for i in range(3)]
fix2 = [0.4 + 0.6*sum[i] for i in range(3)]
fix1n = [math.pow(l, 1.0/gamma) for l in fix1]
fix2n = [math.pow(l, 1.0/gamma) for l in fix2]
# composite against the fixed points in nonlinear color space as that's what the image expects (only matters in areas of medium alpha), then scale down in linear color space again
f1c = [0.0, 0.0, 0.0]
for j in range(factor):
for i in range(factor):
c, a = pixel2nonlinear(inpix[ox*factor+i, oy*factor+j])
mulsc(c, a)
f = fix1n[:]
mulsc(f, 1.0 - a)
add(c, f)
add(f1c, [math.pow(p, gamma) for p in c])
mulsc(f1c, 1.0/(factor*factor))
f2c = [0.0, 0.0, 0.0]
for j in range(factor):
for i in range(factor):
c, a = pixel2nonlinear(inpix[ox*factor+i, oy*factor+j])
mulsc(c, a)
f = fix2n[:]
mulsc(f, 1.0 - a)
add(c, f)
add(f2c, [math.pow(p, gamma) for p in c])
mulsc(f2c, 1.0/(factor*factor))
# go back to gamma-encoded color space, assuming that alpha blending will be done in that
f1cn = [math.pow(l, 1.0/gamma) for l in f1c]
f2cn = [math.pow(l, 1.0/gamma) for l in f2c]
# compute color and alpha
# This gives us three alphas, in general different, but we can only output one - the best thing to do with them I can think of is to average them together and leave the color components alone, this ensures that the alpha deviation does not affect the case where background color equals foreground color.
a = [1.0 - (f2cn[i] - f1cn[i])/(fix2n[i] - fix1n[i]) for i in range(3)]
c = [(f1cn[i] - (1.0-a[i])*fix1n[i])/a[i] if math.floor(a[i]*255 + 0.5) > 0 else 0.0 for i in range(3)]
outpix[ox, oy] = tuple(nonlinear2pixel(c + [(a[0] + a[1] + a[2])/3]))
# collect pixels that ended up with alpha 0
transparent = [0]*outh*outw
for oy in range(outh):
for ox in range(outw):
if outpix[ox, oy][3] == 0:
transparent[oy*outw + ox] = 1
# expand neighboring color values from nonzero-alpha pixels into the zero-alpha region twice, so that bilinear interpolation cannot bleed the arbitrary background color (black here) from zero-alpha into nonzero-alpha territory
for i in range(2):
transp = transparent[:]
for oy in range(outh):
for ox in range(outw):
if transp[oy*outw + ox]:
count = 0
sum = [0, 0, 0]
if ox > 0:
if not transp[oy*outw + ox-1]:
add(sum, outpix[ox-1, oy][0:3])
count += 1
if ox < outw-1:
if not transp[oy*outw + ox+1]:
add(sum, outpix[ox+1, oy][0:3])
count += 1
if oy > 0:
if not transp[(oy-1)*outw + ox]:
add(sum, outpix[ox, oy-1][0:3])
count += 1
if oy < outh-1:
if not transp[(oy+1)*outw + ox]:
add(sum, outpix[ox, oy+1][0:3])
count += 1
if count > 0:
mulsc(sum, 1.0/count)
outpix[ox, oy] = tuple(clamp(int(math.floor(c + 0.5))) for c in sum) + (0,)
transparent[oy*outw + ox] = 0
outimg.save(outfilename, "PNG")
if __name__ == "__main__":
scale(sys.argv[1], sys.argv[3], int(sys.argv[2]))

View File

@ -767,7 +767,7 @@ hsBool plClient::MsgReceive(plMessage* msg)
{
ISetGraphicsDefaults();
ResetDisplayDevice(plPipeline::fDefaultPipeParams.Width, plPipeline::fDefaultPipeParams.Height, plPipeline::fDefaultPipeParams.ColorDepth, plPipeline::fDefaultPipeParams.Windowed,
plPipeline::fDefaultPipeParams.AntiAliasingAmount, plPipeline::fDefaultPipeParams.AnisotropicLevel, plPipeline::fDefaultPipeParams.VSync, true);
plPipeline::fDefaultPipeParams.AntiAliasingAmount, plPipeline::fDefaultPipeParams.AnisotropicLevel, plPipeline::fDefaultPipeParams.VSync);
}
break;
@ -1546,6 +1546,7 @@ hsBool plClient::StartInit()
pfGameGUIMgr::GetInstance()->SetAspectRatio( aspectratio );
plMouseDevice::Instance()->SetDisplayResolution((float)fPipeline->Width(), (float)fPipeline->Height());
plInputManager::SetRecenterMouse(false);
// create the listener for the audio system:
plListener* pLMod = TRACKED_NEW plListener;
@ -2164,55 +2165,61 @@ hsG3DDeviceModeRecord plClient::ILoadDevMode(const char* devModeFile)
return dmr;
}
void plClient::ResetDisplayDevice(int Width, int Height, int ColorDepth, hsBool Windowed, int NumAASamples, int MaxAnisotropicSamples, hsBool VSync, hsBool windowOnly)
void plClient::ResetDisplayDevice(int Width, int Height, int ColorDepth, hsBool Windowed, int NumAASamples, int MaxAnisotropicSamples, hsBool VSync)
{
if(!fPipeline) return;
int BorderWidth = 0, BorderHeight = 0, CaptionHeight = 0;
WindowActivate(false);
int ActualWidth;
int ActualHeight;
if( Windowed )
{
BorderWidth = GetSystemMetrics( SM_CXSIZEFRAME );
BorderHeight = GetSystemMetrics( SM_CYSIZEFRAME );
CaptionHeight = GetSystemMetrics( SM_CYCAPTION );
ActualWidth = Width + BorderWidth * 2;
ActualHeight = Height + BorderHeight * 2 + CaptionHeight;
SetWindowLong( fWindowHndl, GWL_STYLE,
WS_POPUP | WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_VISIBLE);
SetWindowLong(fWindowHndl, GWL_EXSTYLE, 0);
}
else
{
SetWindowLong(fWindowHndl, GWL_STYLE,
WS_POPUP | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_MAXIMIZE | WS_VISIBLE);
SetWindowLong(fWindowHndl, GWL_EXSTYLE, WS_EX_APPWINDOW);
}
if(!windowOnly)
fPipeline->ResetDisplayDevice(Width, Height, ColorDepth, Windowed, NumAASamples, MaxAnisotropicSamples, VSync);
float aspectratio = (float)Width / (float)Height;
plMouseDevice::Instance()->SetDisplayResolution((float)Width, (float)Height);
pfGameGUIMgr::GetInstance()->SetAspectRatio( aspectratio );
UINT flags = SWP_NOCOPYBITS | SWP_NOMOVE | SWP_SHOWWINDOW;
if(Windowed)
{
SetWindowPos( fWindowHndl, HWND_NOTOPMOST, 0, 0, ActualWidth, ActualHeight, flags );
}
else
{
SetWindowPos( fWindowHndl, HWND_TOP, 0, 0, Width, Height, flags );
::ClipCursor(nil);
}
fPipeline->ResetDisplayDevice(Width, Height, ColorDepth, Windowed, NumAASamples, MaxAnisotropicSamples, VSync);
ResizeDisplayDevice(Width, Height, Windowed);
WindowActivate(true);
}
void plClient::ResizeDisplayDevice(int Width, int Height, hsBool Windowed)
{
if (plMouseDevice::Instance())
plMouseDevice::Instance()->SetDisplayResolution((float)Width, (float)Height);
float aspectratio = (float)Width / (float)Height;
if (pfGameGUIMgr::GetInstance())
pfGameGUIMgr::GetInstance()->SetAspectRatio( aspectratio );
UInt32 winStyle, winExStyle;
if( Windowed )
{
// WS_VISIBLE appears necessary to avoid leaving behind framebuffer junk when going from windowed to a smaller window
winStyle = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_VISIBLE;
winExStyle = WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;
} else {
winStyle = WS_POPUP;
winExStyle = WS_EX_APPWINDOW;
}
SetWindowLong(fWindowHndl, GWL_STYLE, winStyle);
SetWindowLong(fWindowHndl, GWL_EXSTYLE, winExStyle);
UInt32 flags = SWP_NOCOPYBITS | SWP_SHOWWINDOW | SWP_FRAMECHANGED;
UInt32 OutsideWidth, OutsideHeight;
HWND insertAfter;
if( Windowed )
{
RECT winRect = { 0, 0, Width, Height };
AdjustWindowRectEx(&winRect, winStyle, false, winExStyle);
OutsideWidth = winRect.right - winRect.left;
OutsideHeight = winRect.bottom - winRect.top;
insertAfter = HWND_NOTOPMOST;
} else {
OutsideWidth = Width;
OutsideHeight = Height;
insertAfter = HWND_TOP;
}
SetWindowPos( fWindowHndl, insertAfter, 0, 0, OutsideWidth, OutsideHeight, flags );
}
void WriteBool(hsStream *stream, char *name, hsBool on )
{

View File

@ -292,7 +292,8 @@ public:
virtual hsBool WindowActive() const { return fWindowActive; }
void SetMessagePumpProc( plMessagePumpProc proc ) { fMessagePumpProc = proc; }
void ResetDisplayDevice(int Width, int Height, int ColorDepth, hsBool Windowed, int NumAASamples, int MaxAnisotropicSamples, hsBool VSync = false, hsBool windowOnly = false);
void ResetDisplayDevice(int Width, int Height, int ColorDepth, hsBool Windowed, int NumAASamples, int MaxAnisotropicSamples, hsBool VSync = false);
void ResizeDisplayDevice(int Width, int Height, hsBool Windowed);
void IDetectAudioVideoSettings();
void IWriteDefaultGraphicsSettings(const wchar* destFile);

View File

@ -63,29 +63,6 @@ END
// Bitmap
//
IDB_CURSOR_UP BITMAP "cursor_up.bmp"
IDB_CURSOR_DOWN BITMAP "cursor_down.bmp"
IDB_CURSOR_LEFT BITMAP "cursor_right.bmp"
IDB_CURSOR_RIGHT BITMAP "cursor_left.bmp"
IDB_CURSOR_OPEN BITMAP "cursor_open.bmp"
IDB_CURSOR_GRAB BITMAP "cursor_grab.bmp"
IDB_CURSOR_CLICKED BITMAP "cursor_clicked.bmp"
IDB_CURSOR_POISED BITMAP "cursor_poised.bmp"
IDB_CURSOR_ARROW BITMAP "cursor_u.bmp"
IDB_CURSOR_4WAYOPEN BITMAP "bitmap1.bmp"
IDB_CURSOR_UPDOWNCLOSED BITMAP "bmp00001.bmp"
IDB_CURSOR_UPDOWNOPEN BITMAP "bitmap2.bmp"
IDB_CURSOR_4WAYCLOSED BITMAP "bitmap3.bmp"
IDB_CURSOR_LEFTRIGHTCLOSED BITMAP "bmp00003.bmp"
IDB_CURSOR_LEFTRIGHTOPEN BITMAP "bmp00002.bmp"
IDB_MICROPHONE BITMAP "Microphone.bmp"
IDB_TALKING BITMAP "Speaker.bmp"
IDB_CURSOR_BOOK_HIGHLIGHT BITMAP "book_hig.bmp"
IDB_CURSOR_BOOK BITMAP "book.bmp"
IDB_CURSOR_BOOK_CLICKED BITMAP "book_cli.bmp"
IDB_CURSOR_DISABLED BITMAP "cursor_disabled.bmp"
IDB_CURSOR_HAND BITMAP "bmp00005.bmp"
IDB_CURSOR_UPWARD BITMAP "cursor_upward.bmp"
IDB_BANNER BITMAP "banner.bmp"
/////////////////////////////////////////////////////////////////////////////
@ -327,32 +304,6 @@ END
//
IDR_CNSL1 CNSL "cnsl1.bin"
/////////////////////////////////////////////////////////////////////////////
//
// JPEG
//
IDR_LOADING_01 JPEG "xLoading_Linking.01.jpg"
IDR_LOADING_02 JPEG "xLoading_Linking.02.jpg"
IDR_LOADING_03 JPEG "xLoading_Linking.03.jpg"
IDR_LOADING_04 JPEG "xLoading_Linking.04.jpg"
IDR_LOADING_05 JPEG "xLoading_Linking.05.jpg"
IDR_LOADING_06 JPEG "xLoading_Linking.06.jpg"
IDR_LOADING_07 JPEG "xLoading_Linking.07.jpg"
IDR_LOADING_08 JPEG "xLoading_Linking.08.jpg"
IDR_LOADING_09 JPEG "xLoading_Linking.09.jpg"
IDR_LOADING_10 JPEG "xLoading_Linking.10.jpg"
IDR_LOADING_11 JPEG "xLoading_Linking.11.jpg"
IDR_LOADING_12 JPEG "xLoading_Linking.12.jpg"
IDR_LOADING_13 JPEG "xLoading_Linking.13.jpg"
IDR_LOADING_14 JPEG "xLoading_Linking.14.jpg"
IDR_LOADING_15 JPEG "xLoading_Linking.15.jpg"
IDR_LOADING_16 JPEG "xLoading_Linking.16.jpg"
IDR_LOADING_17 JPEG "xLoading_Linking.17.jpg"
IDR_LOADING_18 JPEG "xLoading_Linking.18.jpg"
IDR_LOADING_LINKTEXT JPEG "xLoading_Linking_Text.jpg"
IDR_LOADING_UPDATETEXT JPEG "xLoading_Updating_Text.jpg"
#endif // English (U.S.) resources
/////////////////////////////////////////////////////////////////////////////

View File

@ -2,33 +2,10 @@
// Microsoft Visual C++ generated include file.
// Used by plClient.rc
//
#define IDB_CURSOR_UP 112
#define IDB_CURSOR_DOWN 113
#define IDB_CURSOR_RIGHT 114
#define IDB_CURSOR_LEFT 115
#define IDB_CURSOR_OPEN 116
#define IDB_CURSOR_GRAB 117
#define IDB_CURSOR_CLICKED 118
#define IDB_CURSOR_POISED 119
#define IDB_MICROPHONE 121
#define IDB_TALKING 122
#define IDB_CURSOR_ARROW 123
#define IDB_CURSOR_4WAYOPEN 124
#define IDB_CURSOR_UPDOWNCLOSED 125
#define IDB_CURSOR_UPDOWNOPEN 126
#define IDB_CURSOR_4WAYCLOSED 127
#define IDB_CURSOR_LEFTRIGHTCLOSED 128
#define IDB_CURSOR_LEFTRIGHTOPEN 129
#define IDI_ICON_DIRT 135
#define IDD_LOADING 136
#define IDD_EXCEPTION 138
#define IDR_CNSL1 139
#define IDB_CURSOR_BOOK_HIGHLIGHT 141
#define IDB_CURSOR_BOOK 142
#define IDB_CURSOR_BOOK_CLICKED 143
#define IDB_CURSOR_DISABLED 144
#define IDB_CURSOR_HAND 145
#define IDB_CURSOR_UPWARD 147
#define IDD_URUTAP_LOGIN 148
#define IDD_URU_LOGIN 149
#define IDB_BANNER 151
@ -37,26 +14,6 @@
#define IDD_URULOGIN_EULA 154
#define IDD_AUTHFAILED 155
#define IDD_AUTHENTICATING 156
#define IDR_LOADING_01 177
#define IDR_LOADING_02 178
#define IDR_LOADING_03 179
#define IDR_LOADING_04 180
#define IDR_LOADING_05 181
#define IDR_LOADING_06 182
#define IDR_LOADING_07 183
#define IDR_LOADING_08 184
#define IDR_LOADING_09 185
#define IDR_LOADING_10 186
#define IDR_LOADING_11 187
#define IDR_LOADING_12 188
#define IDR_LOADING_13 189
#define IDR_LOADING_14 190
#define IDR_LOADING_15 191
#define IDR_LOADING_16 192
#define IDR_LOADING_17 193
#define IDR_LOADING_18 194
#define IDR_LOADING_LINKTEXT 195
#define IDR_LOADING_UPDATETEXT 196
#define IDC_CRASHINFO 1001
#define IDC_COPY 1002
#define IDC_MSG 1003

View File

@ -54,9 +54,11 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
#include "hsStream.h"
#include "hsUtils.h"
#include "plClient.h"
#include "../plClientResMgr/plClientResMgr.h"
#include "../plNetClient/plNetClientMgr.h"
#include "../plNetClient/plNetLinkingMgr.h"
#include "../plInputCore/plInputManager.h"
#include "../plInputCore/plInputDevice.h"
#include "../plUnifiedTime/plUnifiedTime.h"
#include "plPipeline.h"
#include "../plResMgr/plResManager.h"
@ -452,7 +454,6 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
case WM_LBUTTONUP :
case WM_RBUTTONUP :
case WM_MBUTTONUP : // The middle mouse button was released.
case WM_MOUSEMOVE :
case 0x020A: // fuc&ing windows b.s...
{
if (gClient && gClient->WindowActive() && gClient->GetInputManager())
@ -462,6 +463,13 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
}
break;
case WM_MOUSEMOVE:
{
if (gClient && gClient->GetInputManager())
gClient->GetInputManager()->HandleWin32ControlEvent(message, wParam, lParam, hWnd);
}
break;
#if 0
case WM_KILLFOCUS:
SetForegroundWindow(hWnd);
@ -497,6 +505,31 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
}
break;
case WM_SETCURSOR:
{
static bool winCursor = true;
if (LOWORD(lParam) == HTCLIENT)
{
if (winCursor)
{
winCursor = false;
ShowCursor(FALSE);
plMouseDevice::ShowCursor();
}
}
else
{
if (!winCursor)
{
winCursor = true;
ShowCursor(TRUE);
plMouseDevice::HideCursor();
}
}
return TRUE;
}
break;
case WM_ACTIVATE:
{
bool active = (LOWORD(wParam) == WA_ACTIVE || LOWORD(wParam) == WA_CLICKACTIVE);
@ -508,28 +541,7 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
(LOWORD(wParam) == WA_CLICKACTIVE) ? "true" : "false");
if (gClient && !minimized && !gClient->GetDone())
{
if (LOWORD(wParam) == WA_CLICKACTIVE)
{
// See if they've clicked on the frame, in which case they just want to
// move, not activate, us.
POINT pt;
GetCursorPos(&pt);
ScreenToClient(hWnd, &pt);
RECT rect;
GetClientRect(hWnd, &rect);
if( (pt.x < rect.left)
||(pt.x >= rect.right)
||(pt.y < rect.top)
||(pt.y >= rect.bottom) )
{
active = false;
}
}
gClient->WindowActivate(active);
}
else
{
gPendingActivate = true;
@ -774,6 +786,14 @@ bool InitClient( HWND hWnd )
plResManager *resMgr = TRACKED_NEW plResManager;
resMgr->SetDataPath("dat");
hsgResMgr::Init(resMgr);
if(!plFileUtils::FileExists("resource.dat"))
{
hsMessageBox("Required file 'resource.dat' not found.", "Error", hsMessageBoxNormal);
return false;
}
plClientResMgr::Instance().ILoadResources("resource.dat");
gClient = TRACKED_NEW plClient;
if( gClient == nil )
return false;
@ -785,11 +805,6 @@ bool InitClient( HWND hWnd )
#ifdef DETACH_EXE
hInstance = ((LPCREATESTRUCT) lParam)->hInstance;
#endif
// If in fullscreen mode, get rid of the window borders. Note: this won't take
// effect until the next SetWindowPos call
#ifdef DETACH_EXE
// This Function loads the EXE into Virtual memory...supposedly
HRESULT hr = DetachFromMedium(hInstance, DMDFM_ALWAYS | DMDFM_ALLPAGES);
@ -799,34 +814,7 @@ bool InitClient( HWND hWnd )
gClient->SetDone(true);
else
{
if( gClient->GetPipeline()->IsFullScreen() )
{
SetWindowLong(hWnd, GWL_STYLE, WS_POPUP);
SetWindowLong(hWnd, GWL_EXSTYLE, WS_EX_TOPMOST);
SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
gWinBorderDX = gWinBorderDY = gWinMenuDY = 0;
}
else {
SetWindowLong(hWnd, GWL_STYLE, WS_OVERLAPPED | WS_CAPTION);
SetWindowPos(hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
}
int goodWidth = gClient->GetPipeline()->Width() + gWinBorderDX * 2;
int goodHeight = gClient->GetPipeline()->Height() + gWinBorderDY * 2 + gWinMenuDY;
SetWindowPos(
hWnd,
nil,
0,
0,
goodWidth,
goodHeight,
SWP_NOCOPYBITS
| SWP_NOMOVE
| SWP_NOOWNERZORDER
| SWP_NOZORDER
| SWP_FRAMECHANGED
);
gClient->ResizeDisplayDevice(gClient->GetPipeline()->Width(), gClient->GetPipeline()->Height(), !gClient->GetPipeline()->IsFullScreen());
}
if( gPendingActivate )

View File

@ -155,8 +155,7 @@ void ErrorMinimizeAppWindow () {
// If the application's topmost window is a fullscreen
// popup window, minimize it before displaying an error
HWND appWindow = GetActiveWindow();
if ( ((GetWindowLong(appWindow, GWL_STYLE) & WS_POPUP) != 0) &&
((GetWindowLong(appWindow, GWL_EXSTYLE) & WS_EX_TOPMOST) != 0) )
if ( ((GetWindowLong(appWindow, GWL_STYLE) & WS_POPUP) != 0) )
SetWindowPos(
appWindow,
HWND_NOTOPMOST,

View File

@ -57,7 +57,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
#include "../plAvatar/plAvatarMgr.h"
#include "../plAvatar/plArmatureMod.h"
#include "../plAvatar/plPhysicalControllerCore.h"
#include "../plAvatar/plAvCallbackAction.h"
hsBool plListener::fPrintDbgInfo = false;

View File

@ -63,7 +63,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
#include "../pnSceneObject/plSimulationInterface.h"
#include "../plAvatar/plAvatarMgr.h"
#include "../plAvatar/plArmatureMod.h"
#include "../plAvatar/plPhysicalControllerCore.h"
#include "../plAvatar/plAvCallbackAction.h"
// new stuff

View File

@ -752,7 +752,7 @@ public:
if(strncmp("SampleCmd",c->GetName(), 9) != 0)
{
fprintf(fFile, "<P><I>%s </I><BR>%s </P>\n",c->GetSignature(),
fprintf(fFile, "<p><em>%s </em><br />%s </p>\n",c->GetSignature(),
c->GetHelp());
}
}
@ -760,10 +760,11 @@ public:
{
// if(g->GetFirstCommand() != nil)
{
fprintf(fFile, "<P><B><H%s>Command %sGroup %s </B></H2></P>\n",
fprintf(fFile, "<p><strong><h%s>Command %sGroup %s </strong></h%s></p>\n",
(depth > 0) ? "3" : "2",
(depth > 0) ? "Sub" :"" ,
g->GetName());
g->GetName(),
(depth > 0) ? "3" : "2");
}
return true;
}
@ -781,7 +782,7 @@ public:
if(strncmp("SampleCmd",c->GetName(), 9) != 0)
{
fprintf(fFile, "<I>%s.%s </I> - %s <BR>\n",fGrpName,c->GetSignature(),
fprintf(fFile, "<em>%s.%s </em> - %s <br />\n",fGrpName,c->GetSignature(),
c->GetHelp());
}
}
@ -789,11 +790,14 @@ public:
{
// if(g->GetFirstCommand() != nil)
{
fprintf(fFile, "<BR>\n");
fprintf(fFile, "<br />\n");
if(depth <1)
strcpy(fGrpName, g->GetName());
else
{
pfConsoleCmdGroup *parentGrp;
parentGrp = g->GetParent();
strcpy(fGrpName, parentGrp->GetName());
strcat(fGrpName,".");
strcat(fGrpName,g->GetName());
}
@ -822,7 +826,7 @@ PF_CONSOLE_CMD( Console, CreateDocumentation, "string fileName",
}
fprintf(f, "<CENTER> <H2> Console Commands for Plasma 2.0 Client </H2> <I>Built %s on %s.</I></CENTER><BR>",
fprintf(f, "<h2 style=\"text-align: center;\"> Console Commands for Plasma 2.0 Client </h2> <em style=\"display: block; text-align: center;\">Built %s on %s.</em><br />",
pnBuildDates::fBuildTime, pnBuildDates::fBuildDate );
DocGenIterator iter(f);
@ -852,7 +856,7 @@ PF_CONSOLE_CMD( Console, CreateBriefDocumentation, "string fileName",
return;
}
fprintf(f, "<CENTER> <H3> Console Commands for Plasma 2.0 Client </H3> <I>Built %s on %s.</I></CENTER><BR>",
fprintf(f, "<h2 style=\"text-align: center;\"> Console Commands for Plasma 2.0 Client </h2> <em style=\"display: block; text-align: center;\">Built %s on %s.</em><br />",
pnBuildDates::fBuildTime, pnBuildDates::fBuildDate );
BriefDocGenIterator iter(f);
group = pfConsoleCmdGroup::GetBaseGroup();

View File

@ -176,6 +176,13 @@ void pyImage::SaveAsJPEG(const wchar* fileName, UInt8 quality)
plJPEG::Instance().WriteToFile( fileName, this->GetImage() );
}
#include "../plGImage/plPNG.h"
void pyImage::SaveAsPNG(const wchar* fileName)
{
plPNG::Instance().WriteToFile( fileName, this->GetImage() );
}
#include "hsResMgr.h"
#include "../pnKeyedObject/plUoid.h"
PyObject* pyImage::LoadJPEGFromDisk(const wchar* filename, UInt16 width, UInt16 height)

View File

@ -166,6 +166,7 @@ public:
UInt32 GetWidth(); // returns the width of the image
UInt32 GetHeight(); // returns the height of the image
void SaveAsJPEG(const wchar* fileName, UInt8 quality = 75);
void SaveAsPNG(const wchar* fileName);
static PyObject* LoadJPEGFromDisk(const wchar* filename, UInt16 width, UInt16 height); // returns pyImage
#endif
};

View File

@ -174,6 +174,41 @@ PYTHON_METHOD_DEFINITION(ptImage, saveAsJPEG, args)
PYTHON_RETURN_ERROR;
}
}
PYTHON_METHOD_DEFINITION(ptImage, saveAsPNG, args)
{
PyObject* filenameObj;
if (!PyArg_ParseTuple(args, "O", &filenameObj))
{
PyErr_SetString(PyExc_TypeError, "saveAsPNG expects a string");
PYTHON_RETURN_ERROR;
}
if (PyUnicode_Check(filenameObj))
{
int strLen = PyUnicode_GetSize(filenameObj);
wchar_t* text = TRACKED_NEW wchar_t[strLen + 1];
PyUnicode_AsWideChar((PyUnicodeObject*)filenameObj, text, strLen);
text[strLen] = L'\0';
self->fThis->SaveAsPNG(text);
delete [] text;
PYTHON_RETURN_NONE;
}
else if (PyString_Check(filenameObj))
{
// we'll allow this, just in case something goes weird
char* text = PyString_AsString(filenameObj);
wchar_t* wText = hsStringToWString(text);
self->fThis->SaveAsPNG(wText);
delete [] wText;
PYTHON_RETURN_NONE;
}
else
{
PyErr_SetString(PyExc_TypeError, "saveAsPNG expects a string");
PYTHON_RETURN_ERROR;
}
}
#endif // BUILDING_PYPLASMA
PYTHON_START_METHODS_TABLE(ptImage)
@ -183,6 +218,7 @@ PYTHON_START_METHODS_TABLE(ptImage)
PYTHON_METHOD_NOARGS(ptImage, getWidth, "Returns the width of the image"),
PYTHON_METHOD_NOARGS(ptImage, getHeight, "Returns the height of the image"),
PYTHON_METHOD(ptImage, saveAsJPEG, "Params: filename,quality=75\nSaves this image to disk as a JPEG file"),
PYTHON_METHOD(ptImage, saveAsPNG, "Params: filename\nSaves this image to disk as a PNG file"),
#endif
PYTHON_END_METHODS_TABLE;

View File

@ -545,7 +545,7 @@ hsBool pySceneObject::IsAvatar()
return false;
}
#include "../plAvatar/plPhysicalControllerCore.h"
#include "../plAvatar/plAvCallbackAction.h"
PyObject* pySceneObject::GetAvatarVelocity()
{

View File

@ -171,6 +171,8 @@ PyObject* pyVaultImageNode::Image_GetImage( void )
else
fMipmapKey->RefObject();
}
else
PYTHON_RETURN_NONE;
}
return pyImage::New(fMipmap);

View File

@ -0,0 +1,65 @@
/*==LICENSE==*
CyanWorlds.com Engine - MMOG client, server and tools
Copyright (C) 2011 Cyan Worlds, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Additional permissions under GNU GPL version 3 section 7
If you modify this Program, or any covered work, by linking or
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
(or a modified version of those libraries),
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
licensors of this Program grant you additional
permission to convey the resulting work. Corresponding Source for a
non-source form of such a combination shall include the source code for
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
work.
You can contact Cyan Worlds, Inc. by email legal@cyan.com
or by snail mail at:
Cyan Worlds, Inc.
14617 N Newport Hwy
Mead, WA 99021
*==LICENSE==*/
#ifndef plLayerBink_inc
#define plLayerBink_inc
#include "plLayerMovie.h"
class plLayerBink : public plLayerMovie
{
protected:
virtual Int32 ISecsToFrame(float secs) { return 0; }
virtual hsBool IInit() { return true; }
virtual hsBool IGetCurrentFrame() { return true; }
virtual hsBool IRelease() { return true; }
public:
plLayerBink() { }
virtual ~plLayerBink() { }
CLASSNAME_REGISTER( plLayerBink );
GETINTERFACE_ANY( plLayerBink, plLayerMovie );
};
#endif // plLayerBink_inc

View File

@ -57,7 +57,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
// This line must NEVER be modified manually; it is automatically updated
// by the build server.
#define BUILD_ID 906
#define BUILD_ID 912
COMPILER_ASSERT(BUILD_ID != 0);

View File

@ -66,8 +66,8 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
#include "../plPipeline/plDebugText.h"
#include "../plStatusLog/plStatusLog.h"
#define MICROPHONE 121
#define TALKING 122
#define MICROPHONE "ui_microphone.png"
#define TALKING "ui_speaker.png"
#define NUM_CHANNELS 1
#define VOICE_STOP_MS 2000
#define MAX_DATA_SIZE 1024 * 4 // 4 KB
@ -84,13 +84,13 @@ hsBool plVoicePlayer::fEnabled = true;
plVoiceRecorder::plVoiceRecorder()
{
plPlateManager::Instance().CreatePlate( &fDisabledIcon );
fDisabledIcon->CreateFromResource( MAKEINTRESOURCE( MICROPHONE ) );
fDisabledIcon->CreateFromResource( MICROPHONE );
fDisabledIcon->SetPosition(-0.90, -0.90);
fDisabledIcon->SetSize(0.0675, 0.09);
fDisabledIcon->SetVisible(false);
plPlateManager::Instance().CreatePlate( &fTalkIcon );
fTalkIcon->CreateFromResource( MAKEINTRESOURCE( TALKING ) );
fTalkIcon->CreateFromResource( TALKING );
fTalkIcon->SetPosition(-0.9,-0.9);
fTalkIcon->SetSize(0.0675, 0.09);
fTalkIcon->SetVisible(false);
@ -208,7 +208,7 @@ void plVoiceRecorder::DrawDisabledIcon(hsBool b)
plPlateManager::Instance().CreatePlate( &fDisabledIcon );
if (fDisabledIcon)
{
fDisabledIcon->CreateFromResource( MAKEINTRESOURCE( MICROPHONE ) );
fDisabledIcon->CreateFromResource( MICROPHONE );
fDisabledIcon->SetPosition(-0.90, -0.90);
fDisabledIcon->SetSize(0.0675, 0.09);
fDisabledIcon->SetVisible(false);
@ -225,7 +225,7 @@ void plVoiceRecorder::DrawTalkIcon(hsBool b)
{
plPlateManager::Instance().CreatePlate( &fTalkIcon );
if (fTalkIcon)
{ fTalkIcon->CreateFromResource( MAKEINTRESOURCE( TALKING ) );
{ fTalkIcon->CreateFromResource( TALKING );
fTalkIcon->SetPosition(-0.9,-0.9);
fTalkIcon->SetSize(0.0675, 0.09);
fTalkIcon->SetVisible(false);

View File

@ -39,6 +39,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
Mead, WA 99021
*==LICENSE==*/
#include "plAvCallbackAction.h" // must be first: references havok new
// singular
#include "plAnimStage.h"

View File

@ -0,0 +1,171 @@
/*==LICENSE==*
CyanWorlds.com Engine - MMOG client, server and tools
Copyright (C) 2011 Cyan Worlds, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Additional permissions under GNU GPL version 3 section 7
If you modify this Program, or any covered work, by linking or
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
(or a modified version of those libraries),
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
licensors of this Program grant you additional
permission to convey the resulting work. Corresponding Source for a
non-source form of such a combination shall include the source code for
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
work.
You can contact Cyan Worlds, Inc. by email legal@cyan.com
or by snail mail at:
Cyan Worlds, Inc.
14617 N Newport Hwy
Mead, WA 99021
*==LICENSE==*/
#if 0
// havok first
#include <hkdynamics/entity/rigidbody.h>
#include <hkdynamics/world/subspace.h>
#include "plAntiGravAction.h"
#include "../pnSceneObject/plSceneObject.h"
#include "../plHavok1/plHKPhysical.h"
#include "../plAvatar/plSwimRegion.h"
#include "hsTimer.h"
// This is meant to be a specific physicsAction for the swim behavior
plAntiGravAction::plAntiGravAction(plHKPhysical *physical, plAGApplicator *rootApp) :
plAnimatedCallbackAction(physical, rootApp),
fOnGround(false),
fBuoyancy(1.f),
fSurfaceHeight(0.f),
fCurrentRegion(nil),
fHadContacts(false)
{
}
plSimDefs::ActionType plAntiGravAction::GetType()
{
return plSimDefs::kAntiGravAction;
}
void plAntiGravAction::apply(Havok::Subspace &space, Havok::hkTime time)
{
double elapsed = time.asDouble() - getRefresh().asDouble();
setRefresh(time);
IAdjustBuoyancy();
Havok::RigidBody *body = fPhysical->GetBody();
float mass = body->getMass();
Havok::Vector3 gravity = space.getGravity();
Havok::Vector3 force = -gravity * (mass * fBuoyancy);
body->applyForce(force);
hsVector3 vel;
fPhysical->GetLinearVelocitySim(vel);
fAnimPosVel.fZ = vel.fZ;
hsVector3 linCurrent(0.f, 0.f, 0.f);
hsScalar angCurrent = 0.f;
if (fCurrentRegion != nil)
fCurrentRegion->GetCurrent(fPhysical, linCurrent, angCurrent, (hsScalar)elapsed);
int numContacts = fPhysical->GetNumContacts();
fHadContacts = (numContacts > 0);
const Havok::Vector3 straightUp(0.0f, 0.0f, 1.0f);
fOnGround = false;
int i;
for (i = 0; i < numContacts; i++)
{
const Havok::ContactPoint *contact = fPhysical->GetContactPoint(i);
hsScalar dotUp = straightUp.dot(contact->m_normal);
if (dotUp > .5)
{
fOnGround = true;
break;
}
}
fPhysical->SetLinearVelocitySim(fAnimPosVel + linCurrent);
fPhysical->SetAngularVelocitySim(hsVector3(0.f, 0.f, fAnimAngVel + fTurnStr + angCurrent));
}
void plAntiGravAction::SetSurface(plSwimRegionInterface *region, hsScalar surfaceHeight)
{
fCurrentRegion = region;
if (region != nil)
fSurfaceHeight = surfaceHeight;
}
void plAntiGravAction::IAdjustBuoyancy()
{
// "surface depth" refers to the depth our handle object should be below
// the surface for the avatar to be "at the surface"
static const float surfaceDepth = 4.0f;
// 1.0 = neutral buoyancy
// 0 = no buoyancy (normal gravity)
// 2.0 = opposite of gravity, floating upwards
static const float buoyancyAtSurface = 1.0f;
if (fCurrentRegion == nil)
{
fBuoyancy = 0.f;
return;
}
hsMatrix44 l2w, w2l;
fPhysical->GetTransform(l2w, w2l);
float depth = fSurfaceHeight - surfaceDepth - l2w.GetTranslate().fZ;
if (depth < -1)
fBuoyancy = 0.f; // Same as being above ground. Plain old gravity.
else if (depth < 0)
fBuoyancy = 1 + depth;
else
{
hsVector3 vel;
fPhysical->GetLinearVelocitySim(vel);
if (vel.fZ > 0)
{
if (vel.fZ > fCurrentRegion->fMaxUpwardVel)
{
vel.fZ = fCurrentRegion->fMaxUpwardVel;
fPhysical->SetLinearVelocitySim(vel);
}
else
{
if (depth > 1)
fBuoyancy = fCurrentRegion->fUpBuoyancy;
else
fBuoyancy = (fCurrentRegion->fUpBuoyancy - 1) * depth + 1;
}
}
else
{
if (depth > 1)
fBuoyancy = fCurrentRegion->fDownBuoyancy;
else
fBuoyancy = (fCurrentRegion->fDownBuoyancy - 1) * depth + 1;
}
}
}
#endif

View File

@ -0,0 +1,79 @@
/*==LICENSE==*
CyanWorlds.com Engine - MMOG client, server and tools
Copyright (C) 2011 Cyan Worlds, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Additional permissions under GNU GPL version 3 section 7
If you modify this Program, or any covered work, by linking or
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
(or a modified version of those libraries),
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
licensors of this Program grant you additional
permission to convey the resulting work. Corresponding Source for a
non-source form of such a combination shall include the source code for
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
work.
You can contact Cyan Worlds, Inc. by email legal@cyan.com
or by snail mail at:
Cyan Worlds, Inc.
14617 N Newport Hwy
Mead, WA 99021
*==LICENSE==*/
#if 0//ndef PL_ANTI_GRAV_ACTION_H
#define PL_ANTI_GRAV_ACTION_H
#include "plAvCallbackAction.h"
class plSwimRegionInterface;
class plAntiGravAction : public plAnimatedCallbackAction
{
public:
plAntiGravAction(plHKPhysical *physical, plAGApplicator *rootApp);
/** Return the type of the action as defined in the enum plSimDefs::ActionType.
Used to retrieve actions by entity/type indexing, and to
reuse actions that can be shared between entities. */
virtual plSimDefs::ActionType GetType();
/** Called by Havok at substep frequency. */
void apply(Havok::Subspace &s, Havok::hkTime time);
void SetSurface(plSwimRegionInterface *region, hsScalar surfaceHeight);
hsScalar GetBuoyancy() { return fBuoyancy; }
hsBool IsOnGround() { return fOnGround; }
hsBool HadContacts() { return fHadContacts; }
protected:
void IAdjustBuoyancy();
hsBool fOnGround;
hsBool fHadContacts;
hsScalar fBuoyancy;
hsScalar fSurfaceHeight;
plSwimRegionInterface *fCurrentRegion;
};
#endif

View File

@ -39,6 +39,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
Mead, WA 99021
*==LICENSE==*/
#include "plAvCallbackAction.h"
#include "../plStatusLog/plStatusLog.h"
#include "plArmatureEffects.h"

View File

@ -54,7 +54,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
#include "plAvBrainHuman.h"
#include "plMatrixChannel.h"
#include "plAvatarTasks.h"
#include "plPhysicalControllerCore.h"
#include "plAvCallbackAction.h"
#include "plAvBrainCritter.h"
// global
@ -534,7 +534,8 @@ void plArmatureModBase::EnablePhysics(hsBool status, UInt16 reason /* = kDisable
// i.e. normal enabled physical
void plArmatureModBase::EnablePhysicsKinematic(hsBool status)
{
EnablePhysics(!status, kDisableReasonKinematic);
if (fController)
fController->Kinematic(status);
}
void plArmatureModBase::EnableDrawing(hsBool status, UInt16 reason /* = kDisableReasonUnknown */)
@ -2006,7 +2007,7 @@ hsBool plArmatureMod::ValidatePhysics()
return false;
if (!fController)
fController = plPhysicalControllerCore::Create(GetTarget(0)->GetKey(), fPhysHeight, fPhysWidth, (fBodyType == kBoneBaseMale || fBodyType == kBoneBaseFemale));
fController = plPhysicalControllerCore::Create(GetTarget(0)->GetKey(), fPhysHeight, fPhysWidth);
if (fController)
{
@ -2683,7 +2684,19 @@ void plArmatureMod::DumpToDebugDisplay(int &x, int &y, int lineHeight, char *str
debugTxt.DrawString(x, y, strBuf);
y += lineHeight;
hsPoint3 kPos;
char *kinematic = "n.a.";
const char* frozen = "n.a.";
if (fController)
{
fController->GetKinematicPosition(kPos);
kinematic = fController->IsKinematic() ? "on" : "off";
}
sprintf(strBuf, "kinematc(world): %.2f, %.2f, %.2f Kinematic: %3s",
kPos.fX, kPos.fY, kPos.fZ,kinematic);
debugTxt.DrawString(x, y, strBuf);
y += lineHeight;
if (fController)
frozen = fController->IsEnabled() ? "no" : "yes";

View File

@ -145,7 +145,6 @@ public:
kDisableReasonCCR = 0x0008,
kDisableReasonVehicle = 0x0010,
kDisableReasonGenericBrain = 0x0020,
kDisableReasonKinematic = 0x0040
};
void EnablePhysics(hsBool status, UInt16 reason = kDisableReasonUnknown);
void EnablePhysicsKinematic(hsBool status);

View File

@ -42,7 +42,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
#include "hsConfig.h"
#include "hsWindows.h"
#include "plPhysicalControllerCore.h"
#include "plAvCallbackAction.h"
#include "plAvBrainCritter.h"
#include "plAvBrainHuman.h"
#include "plArmatureMod.h"
@ -127,7 +127,7 @@ protected:
///////////////////////////////////////////////////////////////////////////////
plAvBrainCritter::plAvBrainCritter(): fWalkingStrategy(nil), fCurMode(kIdle), fNextMode(kIdle), fFadingNextBehavior(true),
plAvBrainCritter::plAvBrainCritter(): fCallbackAction(nil), fCurMode(kIdle), fNextMode(kIdle), fFadingNextBehavior(true),
fLocallyControlled(false), fAvoidingAvatars(false), fFinalGoalPos(0, 0, 0), fImmediateGoalPos(0, 0, 0), fDotGoal(0),
fAngRight(0)
{
@ -145,8 +145,8 @@ plAvBrainCritter::~plAvBrainCritter()
fBehaviors[i] = nil;
}
delete fWalkingStrategy;
fWalkingStrategy = nil;
delete fCallbackAction;
fCallbackAction = nil;
fUserBehaviors.clear();
fReceivers.clear();
@ -169,8 +169,8 @@ hsBool plAvBrainCritter::Apply(double time, hsScalar elapsed)
IProcessBehavior(time, elapsed); // just continue with the currently running one
// update our controller to keep us turned and moving to where we want to go
fWalkingStrategy->SetTurnStrength(IGetTurnStrength(time));
fWalkingStrategy->RecalcVelocity(time, elapsed);
fCallbackAction->RecalcVelocity(time, time - elapsed);
fCallbackAction->SetTurnStrength(IGetTurnStrength(time));
return plArmatureBrain::Apply(time, elapsed);
}
@ -190,13 +190,13 @@ void plAvBrainCritter::Activate(plArmatureModBase* avMod)
IInitBaseAnimations();
// create the controller if we haven't done so already
if (!fWalkingStrategy)
if (!fCallbackAction)
{
plSceneObject* avObj = fArmature->GetTarget(0);
plAGModifier* agMod = const_cast<plAGModifier*>(plAGModifier::ConvertNoRef(FindModifierByClass(avObj, plAGModifier::Index())));
plPhysicalControllerCore* controller = avMod->GetController();
fWalkingStrategy = TRACKED_NEW plWalkingStrategy(agMod->GetApplicator(kAGPinTransform), controller);
controller->SetMovementStrategy(fWalkingStrategy);
fCallbackAction = TRACKED_NEW plWalkingController(avObj, agMod->GetApplicator(kAGPinTransform), controller);
fCallbackAction->ActivateController();
}
// tell people that care that we are good to go
@ -226,7 +226,7 @@ void plAvBrainCritter::Resume()
// fade in the idle
fNextMode = kIdle;
fWalkingStrategy->Reset(false);
fCallbackAction->Reset(false);
plArmatureBrain::Resume();
}

View File

@ -47,7 +47,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
#include "../pnKeyedObject/plKey.h"
class plArmatureMod;
class plWalkingStrategy;
class plWalkingController;
class plAIMsg;
class plAvBrainCritter : public plArmatureBrain
@ -127,6 +127,8 @@ public:
virtual void DumpToDebugDisplay(int& x, int& y, int lineHeight, char* strBuf, plDebugText& debugTxt);
plWalkingController* GetCallbackAction() {return fCallbackAction;}
// For the console
static bool fDrawDebug;
@ -150,7 +152,7 @@ protected:
std::vector<plArmatureMod*> IAvatarsICanSee() const;
std::vector<plArmatureMod*> IAvatarsICanHear() const;
plWalkingStrategy* fWalkingStrategy;
plWalkingController* fCallbackAction;
int fCurMode; // current behavior we are running
int fNextMode; // the next behavior to run (-1 if we aren't switching on next eval)
bool fFadingNextBehavior; // is the next behavior supposed to blend?

View File

@ -42,6 +42,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
// local includes
#include "plAvBrainDrive.h"
#include "plArmatureMod.h"
#include "plAvCallbackAction.h"
// global includes
#include "hsTimer.h"

View File

@ -39,6 +39,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
Mead, WA 99021
*==LICENSE==*/
#include "plAvCallbackAction.h" // havok-contaminated file: must go first
// singular
#include "plAvBrainGeneric.h"
@ -93,6 +94,7 @@ plAvBrainGeneric::plAvBrainGeneric()
fFadeIn(0.0f),
fFadeOut(0.0f),
fMoveMode(kMoveRelative),
fCallbackAction(nil),
fBodyUsage(plAGAnim::kBodyUnknown)
{
}
@ -120,6 +122,7 @@ plAvBrainGeneric::plAvBrainGeneric(plAnimStageVec *stages,
fFadeIn(fadeIn),
fFadeOut(fadeOut),
fMoveMode(moveMode),
fCallbackAction(nil),
fBodyUsage(plAGAnim::kBodyUnknown)
{
}
@ -138,6 +141,7 @@ plAvBrainGeneric::plAvBrainGeneric(UInt32 exitFlags, float fadeIn, float fadeOut
fFadeIn(fadeIn),
fFadeOut(fadeOut),
fMoveMode(moveMode),
fCallbackAction(nil),
fBodyUsage(plAGAnim::kBodyUnknown)
{
@ -166,12 +170,6 @@ void plAvBrainGeneric::Activate(plArmatureModBase *avMod)
{
plArmatureBrain::Activate(avMod);
if ((GetType() == kEmote || GetType() == kAFK || GetType() == kSitOnGround) && fAvMod->IsLocalAvatar())
{
plInputIfaceMgrMsg* msg = TRACKED_NEW plInputIfaceMgrMsg(plInputIfaceMgrMsg::kDisableClickables );
plgDispatch::MsgSend(msg);
}
int numStages = fStages->size();
if (!numStages)
return;
@ -311,12 +309,6 @@ void plAvBrainGeneric::Deactivate()
}
plArmatureBrain::Deactivate();
if ((GetType() == kEmote || GetType() == kAFK || GetType() == kSitOnGround) && fAvMod->IsLocalAvatar())
{
plInputIfaceMgrMsg* msg = TRACKED_NEW plInputIfaceMgrMsg(plInputIfaceMgrMsg::kEnableClickables );
plgDispatch::MsgSend(msg);
}
}
// GETRECIPIENT

View File

@ -49,6 +49,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
class plAnimStage;
class plAnimStageVec;
class plAvBrainGenericMsg;
class plHorizontalFreezeAction;
class plNotifyMsg;
/** \class plAvBrainGeneric
@ -299,6 +300,7 @@ protected:
int fCurStage; // which stage are we playing? (zero-based)
BrainType fType; // what type of brain are we?
UInt32 fExitFlags; // what will cause us to exit?
plHorizontalFreezeAction *fCallbackAction;
bool fForward; // are we currently moving forward or backward through the stages?
// this is used by the "auto-" movement types in the stages

View File

@ -42,7 +42,9 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
#include "hsConfig.h"
#include "hsWindows.h"
#include "plPhysicalControllerCore.h"
#include "plAvCallbackAction.h" // subclasses a havok object; must be in first include section
#include "plAvBrainHuman.h"
#include "plAvBrainClimb.h"
#include "plAvBrainDrive.h"
@ -140,7 +142,7 @@ plAvBrainHuman::TurnCurve plAvBrainHuman::GetTurnCurve(hsBool walk)
plAvBrainHuman::plAvBrainHuman(bool isActor /* = false */) :
fHandleAGMod(nil),
fStartedTurning(-1.0f),
fWalkingStrategy(nil),
fCallbackAction(nil),
fPreconditions(0),
fIsActor(isActor)
{
@ -154,9 +156,9 @@ hsBool plAvBrainHuman::Apply(double timeNow, hsScalar elapsed)
#endif
// SetTurnStrength runs first to make sure it's set to a sane value
// (or cleared). RunStandardBehaviors may overwrite it.
fWalkingStrategy->SetTurnStrength(IGetTurnStrength(timeNow));
fCallbackAction->SetTurnStrength(IGetTurnStrength(timeNow));
RunStandardBehaviors(timeNow, elapsed);
fWalkingStrategy->RecalcVelocity(timeNow, elapsed, (fPreconditions & plHBehavior::kBehaviorTypeNeedsRecalcMask));
fCallbackAction->RecalcVelocity(timeNow, timeNow - elapsed, (fPreconditions & plHBehavior::kBehaviorTypeNeedsRecalcMask));
plArmatureBrain::Apply(timeNow, elapsed);
#ifndef _DEBUG
@ -177,13 +179,13 @@ void plAvBrainHuman::Activate(plArmatureModBase *avMod)
IInitBoneMap();
IInitAnimations();
if (!fWalkingStrategy)
if (!fCallbackAction)
{
plSceneObject* avObj = fArmature->GetTarget(0);
plAGModifier* agMod = const_cast<plAGModifier*>(plAGModifier::ConvertNoRef(FindModifierByClass(avObj, plAGModifier::Index())));
plPhysicalControllerCore* controller = avMod->GetController();
fWalkingStrategy = TRACKED_NEW plWalkingStrategy(agMod->GetApplicator(kAGPinTransform), controller);
controller->SetMovementStrategy(fWalkingStrategy);
fCallbackAction = TRACKED_NEW plWalkingController(avObj, agMod->GetApplicator(kAGPinTransform), controller);
fCallbackAction->ActivateController();
}
@ -328,8 +330,8 @@ plAvBrainHuman::~plAvBrainHuman()
delete fBehaviors[i];
fBehaviors.Reset();
delete fWalkingStrategy;
fWalkingStrategy = nil;
delete fCallbackAction;
fCallbackAction = nil;
}
void plAvBrainHuman::Deactivate()
@ -362,7 +364,7 @@ void plAvBrainHuman::Resume()
if (fAvMod->GetInputFlag(S_PUSH_TO_TALK))
IChatOn();
fWalkingStrategy->Reset(false);
fCallbackAction->Reset(false);
plArmatureBrain::Resume();
}
@ -466,23 +468,25 @@ hsBool plAvBrainHuman::MsgReceive(plMessage * msg)
{
if(ride->Entering())
{
// Switch to dynamic walking strategy
delete fWalkingStrategy;
//plAvBrainRideAnimatedPhysical *rideBrain = TRACKED_NEW plAvBrainRideAnimatedPhysical();
//fAvMod->PushBrain(rideBrain);
delete fCallbackAction;
plSceneObject* avObj = fArmature->GetTarget(0);
plAGModifier* agMod = const_cast<plAGModifier*>(plAGModifier::ConvertNoRef(FindModifierByClass(avObj, plAGModifier::Index())));
plPhysicalControllerCore* controller = fAvMod->GetController();
fWalkingStrategy = TRACKED_NEW plDynamicWalkingStrategy(agMod->GetApplicator(kAGPinTransform), controller);
controller->SetMovementStrategy(fWalkingStrategy);
fCallbackAction= TRACKED_NEW plRidingAnimatedPhysicalController(avObj, agMod->GetApplicator(kAGPinTransform), controller);
fCallbackAction->ActivateController();
}
else
{
// Restore default walking strategy
delete fWalkingStrategy;
delete fCallbackAction;
plSceneObject* avObj = fArmature->GetTarget(0);
plAGModifier* agMod = const_cast<plAGModifier*>(plAGModifier::ConvertNoRef(FindModifierByClass(avObj, plAGModifier::Index())));
plPhysicalControllerCore* controller = fAvMod->GetController();
fWalkingStrategy = TRACKED_NEW plWalkingStrategy(agMod->GetApplicator(kAGPinTransform), controller);
controller->SetMovementStrategy(fWalkingStrategy);
fCallbackAction= TRACKED_NEW plWalkingController(avObj, agMod->GetApplicator(kAGPinTransform), controller);
fCallbackAction->ActivateController();
//hsStatusMessage("Got an exiting ride animated physical message");
}
}
@ -556,8 +560,8 @@ hsScalar plAvBrainHuman::IGetTurnStrength(double timeNow)
// Turning based on keypress
if ((turnLeftStrength > 0.f)
|| (turnRightStrength > 0.f)
|| (!fWalkingStrategy->IsOnGround()
&& !fWalkingStrategy->IsControlledFlight())
|| (!fCallbackAction->IsOnGround()
&& !fCallbackAction->IsControlledFlight())
) {
float t = (float)(timeNow - fStartedTurning);
float turnSpeed;
@ -589,7 +593,7 @@ hsScalar plAvBrainHuman::IGetTurnStrength(double timeNow)
result += fAvMod->GetKeyTurnStrength() * turnSpeed;
}
if (!fWalkingStrategy->IsControlledFlight())
if (!fCallbackAction->IsControlledFlight())
result += fAvMod->GetAnalogTurnStrength() * maxTurnSpeed;
return result;
@ -646,7 +650,7 @@ void plAvBrainHuman::ResetIdle()
void plAvBrainHuman::IdleOnly(bool instantOff)
{
if (!fWalkingStrategy)
if (!fCallbackAction)
return;
hsScalar rate = instantOff ? 0.f : 1.f;
@ -672,7 +676,7 @@ bool plAvBrainHuman::IsMovementZeroBlend()
void plAvBrainHuman::TurnToPoint(hsPoint3 point)
{
if (!fWalkingStrategy->IsOnGround() || IsRunningTask() || fAvMod->GetCurrentBrain() != this || !IsMovementZeroBlend())
if (!fCallbackAction->IsOnGround() || IsRunningTask() || fAvMod->GetCurrentBrain() != this || !IsMovementZeroBlend())
return;
hsPoint3 avPos;
@ -871,23 +875,23 @@ void plAvBrainHuman::Spawn(double timeNow)
hsBool plAvBrainHuman::LeaveAge()
{
plPhysicalControllerCore* controller = fAvMod->GetController();
// If our current walking strategy is dynamic, restore the default kinematic strategy.
if (!fWalkingStrategy->IsKinematic())
if(!controller->BehavingLikeAnAnimatedPhysical())
{
delete fWalkingStrategy;
controller->BehaveLikeAnimatedPhysical(true);
delete fCallbackAction;
plSceneObject* avObj = fArmature->GetTarget(0);
plAGModifier* agMod = const_cast<plAGModifier*>(plAGModifier::ConvertNoRef(FindModifierByClass(avObj, plAGModifier::Index())));
fWalkingStrategy = TRACKED_NEW plWalkingStrategy(agMod->GetApplicator(kAGPinTransform), controller);
fCallbackAction= TRACKED_NEW plWalkingController(avObj, agMod->GetApplicator(kAGPinTransform), controller);
fCallbackAction->ActivateController();
}
fWalkingStrategy->Reset(true);
plArmatureBrain::LeaveAge();
// pin the physical so it doesn't fall when the world is deleted
fAvMod->EnablePhysics(false);
// this will get set to true when we hit ground
fCallbackAction->Reset(true);
return false;
}
@ -897,10 +901,11 @@ void plAvBrainHuman::DumpToDebugDisplay(int &x, int &y, int lineHeight, char *st
debugTxt.DrawString(x, y, strBuf);
y += lineHeight;
const char *grounded = fWalkingStrategy->IsOnGround() ? "yes" : "no";
const char *pushing = (fWalkingStrategy->GetPushingPhysical() ? (fWalkingStrategy->GetFacingPushingPhysical() ? "facing" : "behind") : "none");
sprintf(strBuf, "Ground: %3s, AirTime: %5.2f (Peak: %5.2f), PushingPhys: %6s",
grounded, fWalkingStrategy->GetAirTime(), fWalkingStrategy->GetImpactTime(), pushing);
const char *grounded = fCallbackAction->IsOnGround() ? "yes" : "no";
const char *falseGrounded = fCallbackAction->IsOnFalseGround() ? "yes" : "no";
const char *pushing = (fCallbackAction->GetPushingPhysical() ? (fCallbackAction->GetFacingPushingPhysical() ? "facing" : "behind") : "none");
sprintf(strBuf, "Ground: %3s, FalseGround: %3s, AirTime: %5.2f (Peak: %5.2f), PushingPhys: %6s",
grounded, falseGrounded, fCallbackAction->GetAirTime(), fCallbackAction->GetImpactTime(), pushing);
debugTxt.DrawString(x, y, strBuf);
y += lineHeight;
@ -1013,8 +1018,8 @@ hsBool Run::PreCondition(double time, float elapsed)
{
if (fAnim)
{
if (fAvMod->ForwardKeyDown() && fAvMod->FastKeyDown() && fHuBrain->fWalkingStrategy->IsOnGround() &&
(!fHuBrain->fWalkingStrategy->GetPushingPhysical() || !fHuBrain->fWalkingStrategy->GetFacingPushingPhysical()))
if (fAvMod->ForwardKeyDown() && fAvMod->FastKeyDown() && fHuBrain->fCallbackAction->IsOnGround() &&
(!fHuBrain->fCallbackAction->GetPushingPhysical() || !fHuBrain->fCallbackAction->GetFacingPushingPhysical()))
return true;
}
return false;
@ -1024,8 +1029,8 @@ hsBool Walk::PreCondition(double time, float elapsed)
{
if (fAnim)
{
if (fAvMod->ForwardKeyDown() && !fAvMod->FastKeyDown() && fHuBrain->fWalkingStrategy->IsOnGround() &&
(!fHuBrain->fWalkingStrategy->GetPushingPhysical() || !fHuBrain->fWalkingStrategy->GetFacingPushingPhysical()))
if (fAvMod->ForwardKeyDown() && !fAvMod->FastKeyDown() && fHuBrain->fCallbackAction->IsOnGround() &&
(!fHuBrain->fCallbackAction->GetPushingPhysical() || !fHuBrain->fCallbackAction->GetFacingPushingPhysical()))
return true;
}
return false;
@ -1035,8 +1040,8 @@ hsBool WalkBack::PreCondition(double time, float elapsed)
{
if (fAnim)
{
if (fAvMod->BackwardKeyDown() && !fAvMod->ForwardKeyDown() && fHuBrain->fWalkingStrategy->IsOnGround() &&
(!fHuBrain->fWalkingStrategy->GetPushingPhysical() || fHuBrain->fWalkingStrategy->GetFacingPushingPhysical()))
if (fAvMod->BackwardKeyDown() && !fAvMod->ForwardKeyDown() && fHuBrain->fCallbackAction->IsOnGround() &&
(!fHuBrain->fCallbackAction->GetPushingPhysical() || fHuBrain->fCallbackAction->GetFacingPushingPhysical()))
return true;
}
return false;
@ -1049,7 +1054,7 @@ hsBool StepLeft::PreCondition(double time, float elapsed)
return ((fAvMod->StrafeLeftKeyDown() || (fAvMod->StrafeKeyDown() && fAvMod->TurnLeftKeyDown())) &&
!(fAvMod->StrafeRightKeyDown() || (fAvMod->StrafeKeyDown() && fAvMod->TurnRightKeyDown())) &&
!(fAvMod->ForwardKeyDown() || fAvMod->BackwardKeyDown()) &&
fHuBrain->fWalkingStrategy->IsOnGround());
fHuBrain->fCallbackAction->IsOnGround());
}
return false;
}
@ -1061,7 +1066,7 @@ hsBool StepRight::PreCondition(double time, float elapsed)
return ((fAvMod->StrafeRightKeyDown() || (fAvMod->StrafeKeyDown() && fAvMod->TurnRightKeyDown())) &&
!(fAvMod->StrafeLeftKeyDown() || (fAvMod->StrafeKeyDown() && fAvMod->TurnLeftKeyDown())) &&
!(fAvMod->ForwardKeyDown() || fAvMod->BackwardKeyDown()) &&
fHuBrain->fWalkingStrategy->IsOnGround());
fHuBrain->fCallbackAction->IsOnGround());
}
return false;
}
@ -1102,8 +1107,8 @@ hsBool MovingTurnLeft::PreCondition(double time, float elapsed)
{
if (fAvMod->GetTurnStrength() > 0)
{
if (fHuBrain->fWalkingStrategy->IsOnGround() && (fAvMod->ForwardKeyDown() || fAvMod->BackwardKeyDown()) &&
(!fHuBrain->fWalkingStrategy->GetPushingPhysical() || !fHuBrain->fWalkingStrategy->GetFacingPushingPhysical()))
if (fHuBrain->fCallbackAction->IsOnGround() && (fAvMod->ForwardKeyDown() || fAvMod->BackwardKeyDown()) &&
(!fHuBrain->fCallbackAction->GetPushingPhysical() || !fHuBrain->fCallbackAction->GetFacingPushingPhysical()))
return true;
}
return false;
@ -1113,8 +1118,8 @@ hsBool MovingTurnRight::PreCondition(double time, float elapsed)
{
if (fAvMod->GetTurnStrength() < 0)
{
if (fHuBrain->fWalkingStrategy->IsOnGround() && (fAvMod->ForwardKeyDown() || fAvMod->BackwardKeyDown()) &&
(!fHuBrain->fWalkingStrategy->GetPushingPhysical() || !fHuBrain->fWalkingStrategy->GetFacingPushingPhysical()))
if (fHuBrain->fCallbackAction->IsOnGround() && (fAvMod->ForwardKeyDown() || fAvMod->BackwardKeyDown()) &&
(!fHuBrain->fCallbackAction->GetPushingPhysical() || !fHuBrain->fCallbackAction->GetFacingPushingPhysical()))
return true;
}
@ -1123,14 +1128,14 @@ hsBool MovingTurnRight::PreCondition(double time, float elapsed)
void Jump::IStart()
{
fHuBrain->fWalkingStrategy->EnableControlledFlight(true);
fHuBrain->fCallbackAction->EnableControlledFlight(true);
plHBehavior::IStart();
}
void Jump::IStop()
{
fHuBrain->fWalkingStrategy->EnableControlledFlight(false);
fHuBrain->fCallbackAction->EnableControlledFlight(false);
plHBehavior::IStop();
}
@ -1141,7 +1146,7 @@ hsBool StandingJump::PreCondition(double time, float elapsed)
{
if (GetStrength() > 0.f)
{
if (!fHuBrain->fWalkingStrategy->IsControlledFlight() ||
if (!fHuBrain->fCallbackAction->IsControlledFlight() ||
fAnim->GetTimeConvert()->WorldToAnimTimeNoUpdate(time) >= fAnim->GetTimeConvert()->GetEnd())
{
return false;
@ -1153,7 +1158,7 @@ hsBool StandingJump::PreCondition(double time, float elapsed)
if (fAvMod->JumpKeyDown() &&
!fAvMod->ForwardKeyDown() &&
fAnim->GetBlend() == 0.0f &&
fHuBrain->fWalkingStrategy->IsOnGround())
fHuBrain->fCallbackAction->IsOnGround())
{
if (fAvMod->ConsumeJump())
return true;
@ -1169,7 +1174,7 @@ hsBool WalkingJump::PreCondition(double time, float elapsed)
{
if (GetStrength() > 0.f)
{
if (!fHuBrain->fWalkingStrategy->IsControlledFlight() ||
if (!fHuBrain->fCallbackAction->IsControlledFlight() ||
fAnim->GetTimeConvert()->WorldToAnimTimeNoUpdate(time) >= fAnim->GetTimeConvert()->GetEnd())
{
return false;
@ -1182,8 +1187,8 @@ hsBool WalkingJump::PreCondition(double time, float elapsed)
!fAvMod->FastKeyDown() &&
fAvMod->ForwardKeyDown() &&
fAnim->GetBlend() == 0.0f &&
fHuBrain->fWalkingStrategy->IsOnGround() &&
(!fHuBrain->fWalkingStrategy->GetPushingPhysical() || !fHuBrain->fWalkingStrategy->GetFacingPushingPhysical()))
fHuBrain->fCallbackAction->IsOnGround() &&
(!fHuBrain->fCallbackAction->GetPushingPhysical() || !fHuBrain->fCallbackAction->GetFacingPushingPhysical()))
{
if (fAvMod->ConsumeJump())
return true;
@ -1199,7 +1204,7 @@ hsBool RunningJump::PreCondition(double time, float elapsed)
{
if (GetStrength() > 0.f)
{
if (!fHuBrain->fWalkingStrategy->IsControlledFlight() ||
if (!fHuBrain->fCallbackAction->IsControlledFlight() ||
fAnim->GetTimeConvert()->WorldToAnimTimeNoUpdate(time) >= fAnim->GetTimeConvert()->GetEnd())
{
return false;
@ -1212,8 +1217,8 @@ hsBool RunningJump::PreCondition(double time, float elapsed)
fAvMod->ForwardKeyDown() &&
fAvMod->FastKeyDown() &&
fAnim->GetBlend() == 0.0f &&
fHuBrain->fWalkingStrategy->IsOnGround() &&
(!fHuBrain->fWalkingStrategy->GetPushingPhysical() || !fHuBrain->fWalkingStrategy->GetFacingPushingPhysical()))
fHuBrain->fCallbackAction->IsOnGround() &&
(!fHuBrain->fCallbackAction->GetPushingPhysical() || !fHuBrain->fCallbackAction->GetFacingPushingPhysical()))
{
if (fAvMod->ConsumeJump())
return true;
@ -1238,13 +1243,13 @@ hsBool RunningImpact::PreCondition(double time, float elapsed)
{
if (fDuration > 0.0f)
fDuration = fDuration - elapsed;
else if (fHuBrain->fWalkingStrategy->IsOnGround() && fHuBrain->fWalkingStrategy->GetImpactTime() > kMinAirTime)
else if (fHuBrain->fCallbackAction->IsOnGround() && fHuBrain->fCallbackAction->GetImpactTime() > kMinAirTime)
{
if (fHuBrain->fWalkingStrategy->GetImpactVelocity().fZ < -kMinImpactVel)
if (fHuBrain->fCallbackAction->GetImpactVelocity().fZ < -kMinImpactVel)
{
if (fHuBrain->fWalkingStrategy->GetImpactVelocity().fY < kRunningImpactThresh)
if (fHuBrain->fCallbackAction->GetImpactVelocity().fY < kRunningImpactThresh)
{
fMaxBlend = 0.5f + (0.5f * (-fHuBrain->fWalkingStrategy->GetImpactVelocity().fZ / (kFullImpactVel - kMinImpactVel)));
fMaxBlend = 0.5f + (0.5f * (-fHuBrain->fCallbackAction->GetImpactVelocity().fZ / (kFullImpactVel - kMinImpactVel)));
if (fMaxBlend > 1)
fMaxBlend = 1;
fDuration = 1.0f / fFadeIn;
@ -1268,13 +1273,13 @@ hsBool GroundImpact::PreCondition(double time, float elapsed)
bool result = false;
if (fDuration > 0.0f)
fDuration = fDuration - elapsed;
else if (fHuBrain->fWalkingStrategy->IsOnGround() && fHuBrain->fWalkingStrategy->GetImpactTime() > kMinAirTime)
else if (fHuBrain->fCallbackAction->IsOnGround() && fHuBrain->fCallbackAction->GetImpactTime() > kMinAirTime)
{
if (fHuBrain->fWalkingStrategy->GetImpactVelocity().fZ < -kMinImpactVel)
if (fHuBrain->fCallbackAction->GetImpactVelocity().fZ < -kMinImpactVel)
{
if (fHuBrain->fWalkingStrategy->GetImpactVelocity().fY >= kRunningImpactThresh)
if (fHuBrain->fCallbackAction->GetImpactVelocity().fY >= kRunningImpactThresh)
{
fMaxBlend = 0.5f + (0.5f * (-fHuBrain->fWalkingStrategy->GetImpactVelocity().fZ / (kFullImpactVel - kMinImpactVel)));
fMaxBlend = 0.5f + (0.5f * (-fHuBrain->fCallbackAction->GetImpactVelocity().fZ / (kFullImpactVel - kMinImpactVel)));
if (fMaxBlend > 1)
fMaxBlend = 1;
fDuration = 1.0f / fFadeIn;
@ -1293,7 +1298,7 @@ void GroundImpact::IStop()
hsBool Fall::PreCondition(double time, float elapsed)
{
return !fHuBrain->fWalkingStrategy->IsOnGround() && fHuBrain->fWalkingStrategy->HitGroundInThisAge();
return !fHuBrain->fCallbackAction->IsOnGround() && fHuBrain->fCallbackAction->HitGroundInThisAge();
}
void Fall::Process(double time, float elapsed)
@ -1305,7 +1310,7 @@ void Fall::Process(double time, float elapsed)
if (fAnim && fAnim->GetBlend() > 0.8)
{
float panicThresh = plAvBrainHuman::kAirTimePanicThreshold;
if (panicThresh > 0.0f && fHuBrain->fWalkingStrategy->GetAirTime() > panicThresh)
if (panicThresh > 0.0f && fHuBrain->fCallbackAction->GetAirTime() > panicThresh)
{
fHuBrain->IdleOnly(); // clear the fall state; we're going somewhere new
fAvMod->PanicLink();
@ -1322,7 +1327,7 @@ void Push::Process(double time, float elapsed)
fAvMod->GetPositionAndRotationSim(&pos, &rot);
hsPoint3 lookAt;
fHuBrain->fWalkingStrategy->GetPushingPhysical()->GetPositionSim(lookAt);
fHuBrain->fCallbackAction->GetPushingPhysical()->GetPositionSim(lookAt);
hsVector3 up(0.f, 0.f, 1.f);
hsScalar angle = hsATan2(lookAt.fY - pos.fY, lookAt.fX - pos.fX) + hsScalarPI / 2;
hsQuat targRot(angle, &up);
@ -1336,23 +1341,23 @@ void Push::Process(double time, float elapsed)
globFwd = rot.Rotate(&globFwd);
if (globFwd.fX < 0)
fHuBrain->fWalkingStrategy->SetTurnStrength(-turnSpeed);
fHuBrain->fCallbackAction->SetTurnStrength(-turnSpeed);
else
fHuBrain->fWalkingStrategy->SetTurnStrength(turnSpeed);
fHuBrain->fCallbackAction->SetTurnStrength(turnSpeed);
}
//hsBool PushIdle::PreCondition(double time, float elapsed)
//{
// return (fHuBrain->fWalkingStrategy->GetPushingPhysical() &&
// fHuBrain->fWalkingStrategy->IsOnGround() &&
// return (fHuBrain->fCallbackAction->GetPushingPhysical() &&
// fHuBrain->fCallbackAction->IsOnGround() &&
// !fAvMod->TurnLeftKeyDown() && !fAvMod->TurnRightKeyDown()
// && fAvMod->GetTurnStrength() == 0);
//}
hsBool PushWalk::PreCondition(double time, float elapsed)
{
return (fHuBrain->fWalkingStrategy->GetPushingPhysical() && fHuBrain->fWalkingStrategy->GetFacingPushingPhysical() &&
fHuBrain->fWalkingStrategy->IsOnGround() &&
return (fHuBrain->fCallbackAction->GetPushingPhysical() && fHuBrain->fCallbackAction->GetFacingPushingPhysical() &&
fHuBrain->fCallbackAction->IsOnGround() &&
fAvMod->ForwardKeyDown());
}
@ -1367,7 +1372,7 @@ bool PushSimpleMultiStage(plArmatureMod *avatar, const char *enterAnim, const ch
{
plAvBrainHuman *huBrain = plAvBrainHuman::ConvertNoRef(avatar->FindBrainByClass(plAvBrainHuman::Index()));
const char *names[3] = {enterAnim, idleAnim, exitAnim};
if (!huBrain || !huBrain->fWalkingStrategy->IsOnGround() || !huBrain->fWalkingStrategy->HitGroundInThisAge() || huBrain->IsRunningTask() ||
if (!huBrain || !huBrain->fCallbackAction->IsOnGround() || !huBrain->fCallbackAction->HitGroundInThisAge() || huBrain->IsRunningTask() ||
!avatar->IsPhysicsEnabled() || avatar->FindMatchingGenericBrain(names, 3))
return false;
@ -1431,7 +1436,7 @@ bool AvatarEmote(plArmatureMod *avatar, const char *emoteName)
if (swimBrain && swimBrain->IsSwimming())
return false;
if (huBrain && huBrain->fWalkingStrategy->IsOnGround() && huBrain->fWalkingStrategy->HitGroundInThisAge() && !huBrain->IsRunningTask() &&
if (huBrain && huBrain->fCallbackAction->IsOnGround() && huBrain->fCallbackAction->HitGroundInThisAge() && !huBrain->IsRunningTask() &&
emote && !alreadyActive && avatar->IsPhysicsEnabled())
{
plKey avKey = avatar->GetKey();

View File

@ -58,7 +58,7 @@ class plAGAnimInstance;
class plAvTask;
class plAvTaskMsg;
class plAvBrainHuman;
class plWalkingStrategy;
class plWalkingController;
class plArmatureUpdateMsg;
class plClimbMsg;
class plControlEventMsg;
@ -164,7 +164,7 @@ public:
static const hsScalar kControlledFlightThreshold;
static const hsScalar kAirTimeThreshold;
static const hsScalar kAirTimePanicThreshold;
plWalkingStrategy* fWalkingStrategy;
plWalkingController* fCallbackAction;
protected:
plAGAnim *FindCustomAnim(const char *baseName);

View File

@ -44,7 +44,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
#include "plAvBrainHuman.h"
#include "plAvBrain.h"
#include "plPhysicalControllerCore.h"
#include "plAvCallbackAction.h"
#include "../plMessage/plRideAnimatedPhysMsg.h"
@ -52,19 +52,20 @@ void plAvBrainRideAnimatedPhysical::Activate(plArmatureModBase *avMod)
{
plArmatureBrain::Activate(avMod);
IInitAnimations();
if (!fWalkingStrategy)
if (!fCallbackAction)
{
plSceneObject* avObj = fArmature->GetTarget(0);
plAGModifier* agMod = const_cast<plAGModifier*>(plAGModifier::ConvertNoRef(FindModifierByClass(avObj, plAGModifier::Index())));
plPhysicalControllerCore* controller = avMod->GetController();
fWalkingStrategy = TRACKED_NEW plDynamicWalkingStrategy(agMod->GetApplicator(kAGPinTransform), controller);
controller->SetMovementStrategy(fWalkingStrategy);
fCallbackAction = TRACKED_NEW plRidingAnimatedPhysicalController(avObj, agMod->GetApplicator(kAGPinTransform), controller);
fCallbackAction->ActivateController();
}
}
plAvBrainRideAnimatedPhysical::~plAvBrainRideAnimatedPhysical()
{
delete fWalkingStrategy;
fWalkingStrategy = nil;
delete fCallbackAction;
fCallbackAction=nil;
}
void plAvBrainRideAnimatedPhysical::Deactivate()

View File

@ -41,6 +41,8 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
*==LICENSE==*/
#include "plAvBrainHuman.h"
class plRidingAnimatedPhysicalController;
class plAvBrainRideAnimatedPhysical : public plAvBrainHuman
{
public:

View File

@ -46,6 +46,10 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
//
/////////////////////////////////////////////////////////////////////////////////////////
//#include <hkmath/vector3.h>
//#include <hkdynamics/entity/rigidbody.h>
#include "plAntiGravAction.h" // descends from Havok class, so must be included first, like havok objects
// singular
#include "plAvBrainSwim.h"
@ -65,6 +69,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
#include "hsTimer.h"
#include "plPhysical.h"
#include "plPhysicalControllerCore.h"
#include "plAvCallbackAction.h"
// other
#include "../plPhysical/plCollisionDetector.h"
#include "../plPipeline/plDebugText.h"
@ -175,16 +180,18 @@ public:
static const float timeToMaxTurn = 0.5f;
static const float incPerSec = maxTurnSpeed / timeToMaxTurn;
float oldSpeed = fabs(fSwimBrain->fSwimStrategy->GetTurnStrength());
// hsAssert(0, "fixme physx");
float oldSpeed = fabs(fSwimBrain->fCallbackAction->GetTurnStrength());
float thisInc = elapsed * incPerSec;
float newSpeed = __min(oldSpeed + thisInc, maxTurnSpeed);
fSwimBrain->fSwimStrategy->SetTurnStrength(newSpeed * fAvMod->GetKeyTurnStrength() + fAvMod->GetAnalogTurnStrength());
fSwimBrain->fCallbackAction->SetTurnStrength(newSpeed * fAvMod->GetKeyTurnStrength() + fAvMod->GetAnalogTurnStrength());
// the turn is actually applied during PhysicsUpdate
}
virtual void IStop()
{
if (fSwimBrain->fSwimStrategy)
fSwimBrain->fSwimStrategy->SetTurnStrength(0.0f);
// hsAssert(0, "fixme physx");
if (fSwimBrain->fCallbackAction)
fSwimBrain->fCallbackAction->SetTurnStrength(0.0f);
plSwimBehavior::IStop();
}
};
@ -230,7 +237,7 @@ public:
const hsScalar plAvBrainSwim::kMinSwimDepth = 4.0f;
plAvBrainSwim::plAvBrainSwim() :
fSwimStrategy(nil),
fCallbackAction(nil),
fMode(kWalking),
fSurfaceDistance(0.f)
{
@ -243,9 +250,12 @@ plAvBrainSwim::plAvBrainSwim() :
plAvBrainSwim::~plAvBrainSwim()
{
delete fSwimStrategy;
fSwimStrategy = nil;
if(fCallbackAction)
{
IDetachAction();
delete fCallbackAction;
fCallbackAction=nil;
}
fSurfaceProbeMsg->UnRef();
int i;
@ -263,7 +273,8 @@ hsBool plAvBrainSwim::Apply(double time, hsScalar elapsed)
fMode = kWading;
plAvBrainHuman *huBrain = plAvBrainHuman::ConvertNoRef(fAvMod->GetNextBrain(this));
if (huBrain && !huBrain->fWalkingStrategy->IsOnGround())
// hsAssert(0, "fixme physx");
if (huBrain && !huBrain->fCallbackAction->IsOnGround())
{
// We're jumping in! Trigger splash effect (sound)
plArmatureEffectMsg *msg = TRACKED_NEW plArmatureEffectMsg(fAvMod->GetArmatureEffects()->GetKey(), kTime);
@ -307,7 +318,8 @@ hsBool plAvBrainSwim::Apply(double time, hsScalar elapsed)
// The contact check is so that if buoyancy bobs us a little too high, we don't
// switch to wading only to fall again.
if (fSurfaceDistance < kMinSwimDepth-.5 && fSwimStrategy->HadContacts())
// hsAssert(0, "fixme physx");
if (fSurfaceDistance < kMinSwimDepth-.5 && fCallbackAction->HadContacts())
IStartWading();
}
else if (fMode == kSwimming3D)
@ -334,12 +346,13 @@ hsBool plAvBrainSwim::MsgReceive(plMessage *msg)
else
fSurfaceDistance = -100.f;
if (fSwimStrategy)
// hsAssert(0, "fixme physx");
if (fCallbackAction)
{
if (region)
fSwimStrategy->SetSurface(region, fArmature->GetTarget(0)->GetLocalToWorld().GetTranslate().fZ + fSurfaceDistance);
fCallbackAction->SetSurface(region, fArmature->GetTarget(0)->GetLocalToWorld().GetTranslate().fZ + fSurfaceDistance);
else
fSwimStrategy->SetSurface(nil, 0.f);
fCallbackAction->SetSurface(nil, 0.f);
}
return true;
}
@ -406,16 +419,20 @@ void plAvBrainSwim::Activate(plArmatureModBase* avMod)
void plAvBrainSwim::Deactivate()
{
plArmatureBrain::Deactivate();
IDetachAction();
}
void plAvBrainSwim::Suspend()
{
if (fMode == kSwimming2D)
IDetachAction();
}
void plAvBrainSwim::Resume()
{
if (fMode == kSwimming2D)
fSwimStrategy->Reset(false);
IAttachAction();
}
bool plAvBrainSwim::IsWalking()
@ -443,6 +460,8 @@ void plAvBrainSwim::IStartWading()
for (i = 0; i < fBehaviors.GetCount(); i++)
fBehaviors[i]->SetStrength(0.f, 2.f);
IDetachAction();
if (fAvMod->IsLocalAvatar())
{
plCameraMsg* pMsg = TRACKED_NEW plCameraMsg;
@ -460,16 +479,7 @@ void plAvBrainSwim::IStartSwimming(bool is2D)
plArmatureBrain *nextBrain = fAvMod->GetNextBrain(this);
nextBrain->Suspend();
if (!fSwimStrategy)
{
plSceneObject * avObj = fArmature->GetTarget(0);
plAGModifier *agMod = const_cast<plAGModifier*>(plAGModifier::ConvertNoRef(FindModifierByClass(avObj, plAGModifier::Index())));
plPhysicalControllerCore *controller = fAvMod->GetController();
fSwimStrategy = new plSwimStrategy(agMod->GetApplicator(kAGPinTransform), controller);
}
fSwimStrategy->Reset(false);
IAttachAction();
if (is2D)
fMode = kSwimming2D;
else
@ -499,8 +509,8 @@ hsBool plAvBrainSwim::IProcessSwimming2D(double time, float elapsed)
else
behavior->SetStrength(0.f, 2.f);
}
fSwimStrategy->RecalcVelocity(time, elapsed);
// hsAssert(0, "fixme physx");
fCallbackAction->RecalcVelocity(time, time - elapsed);
return true;
}
@ -558,6 +568,59 @@ hsBool plAvBrainSwim::IInitAnimations()
return true;
}
bool plAvBrainSwim::IAttachAction()
{
bool result = false;
if(fAvMod)
{
// hsAssert(0, "fixme physx");
plPhysicalControllerCore *physical = fAvMod->GetController();
if (physical)
{
if (!fCallbackAction)
{
plSceneObject * avObj = fArmature->GetTarget(0);
plAGModifier *agMod = const_cast<plAGModifier*>(plAGModifier::ConvertNoRef(FindModifierByClass(avObj, plAGModifier::Index())));
fCallbackAction = new plSwimmingController(avObj, agMod->GetApplicator(kAGPinTransform),physical);
// physical->AttachAction(fCallbackAction, true, false);
result = true;
}
else
{
fCallbackAction->ActivateController();
}
}
}
return result;
}
bool plAvBrainSwim::IDetachAction()
{
bool result = false;
if (fCallbackAction)
{
// hsAssert(0, "fixme physx");
// plPhysical *physical = fAvMod->GetPhysical();
//
// if(physical)
// {
// physical->RemoveAction(fCallbackAction);
// result = true; // there was an action and we removed it
// }
// TODO: We get a compiler warning about deleting a pointer to an
// undefined class. So, who knows what the code is actually doing.
// Seems bad. Just putting a note in here for whoever fixes the
// physx issue.
//delete fCallbackAction;
//fCallbackAction = nil;
}
return result;
}
void plAvBrainSwim::IProbeSurface()
{
hsPoint3 ourPos = fAvMod->GetTarget(0)->GetLocalToWorld().GetTranslate();
@ -613,15 +676,21 @@ void plAvBrainSwim::DumpToDebugDisplay(int &x, int &y, int lineHeight, char *str
debugTxt.DrawString(x, y, strBuf);
y += lineHeight;
float buoy = fSwimStrategy ? fSwimStrategy->GetBuoyancy() : 0.0f;
sprintf(strBuf, "Distance to surface: %f Buoyancy: %f", fSurfaceDistance, buoy);
debugTxt.DrawString(x, y, strBuf);
y += lineHeight;
hsVector3 linV = fAvMod->GetController()->GetAchievedLinearVelocity();
sprintf(strBuf, "Linear Velocity: (%5.2f, %5.2f, %5.2f)", linV.fX, linV.fY, linV.fZ);
debugTxt.DrawString(x, y, strBuf);
y += lineHeight;
// hsAssert(0, "fixme physx");
// float buoy = fCallbackAction? fCallbackAction->GetBuoyancy() : 0.0f;
// sprintf(strBuf, "Distance to surface: %f Buoyancy: %f", fSurfaceDistance, buoy);
// debugTxt.DrawString(x, y, strBuf);
// y += lineHeight;
//
// hsVector3 linV;
// fAvMod->GetPhysical()->GetLinearVelocitySim(linV);
// hsVector3 angV;
// fAvMod->GetPhysical()->GetAngularVelocitySim(angV);
// hsScalar angle = angV.fZ > 0 ? angV.Magnitude() : -angV.Magnitude();
// sprintf(strBuf, "Velocity: Linear (%5.2f, %5.2f, %5.2f), Angular %5.2f", linV.fX, linV.fY, linV.fZ, angle);
// debugTxt.DrawString(x, y, strBuf);
// y += lineHeight;
int i;
for (i = 0; i < fBehaviors.GetCount(); i++)

View File

@ -47,10 +47,11 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
#include "../pnKeyedObject/plKey.h"
class plArmatureMod;
class plAntiGravAction;
class plControlEventMsg;
class plLOSRequestMsg;
class plSwimRegionInterface;
class plSwimStrategy;
class plSwimmingController;
class plAvBrainSwim : public plArmatureBrain
{
public:
@ -72,7 +73,7 @@ public:
bool IsSwimming();
hsScalar GetSurfaceDistance() { return fSurfaceDistance; }
plSwimStrategy *fSwimStrategy;
plSwimmingController *fCallbackAction;
static const hsScalar kMinSwimDepth;
protected:
@ -85,6 +86,8 @@ protected:
hsBool IProcessBehaviors(double time, float elapsed);
virtual hsBool IInitAnimations();
bool IAttachAction();
bool IDetachAction();
void IProbeSurface();
hsBool IHandleControlMsg(plControlEventMsg* msg);
float IGetTargetZ();

View File

@ -0,0 +1,579 @@
/*==LICENSE==*
CyanWorlds.com Engine - MMOG client, server and tools
Copyright (C) 2011 Cyan Worlds, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Additional permissions under GNU GPL version 3 section 7
If you modify this Program, or any covered work, by linking or
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
(or a modified version of those libraries),
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
licensors of this Program grant you additional
permission to convey the resulting work. Corresponding Source for a
non-source form of such a combination shall include the source code for
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
work.
You can contact Cyan Worlds, Inc. by email legal@cyan.com
or by snail mail at:
Cyan Worlds, Inc.
14617 N Newport Hwy
Mead, WA 99021
*==LICENSE==*/
#include "plAvCallbackAction.h"
#include "../plMessage/plLOSHitMsg.h"
#include "plArmatureMod.h" // for LOS enum type
#include "plMatrixChannel.h"
#include "hsTimer.h"
#include "plPhysicalControllerCore.h"
// Generic geom utils.
hsBool LinearVelocity(hsVector3 &outputV, float elapsed, hsMatrix44 &prevMat, hsMatrix44 &curMat);
void AngularVelocity(hsScalar &outputV, float elapsed, hsMatrix44 &prevMat, hsMatrix44 &curMat);
float AngleRad2d (float x1, float y1, float x3, float y3);
inline hsVector3 GetYAxis(hsMatrix44 &mat)
{
return hsVector3(mat.fMap[1][0], mat.fMap[1][1], mat.fMap[1][2]);
}
plAnimatedController::plAnimatedController(plSceneObject* rootObject, plAGApplicator* rootApp, plPhysicalControllerCore* controller)
: fRootObject(rootObject)
, fRootApp(rootApp)
, fController(controller)
, fTurnStr(0.f)
, fAnimAngVel(0.f)
, fAnimPosVel(0.f, 0.f, 0.f)
{
}
void plAnimatedController::RecalcVelocity(double timeNow, double timePrev, hsBool useAnim /* = true */)
{
if (useAnim)
{
// while you may think it would be correct to cache this,
// what we're actually asking is "what would the animation's
// position be at the previous time given its *current*
// parameters (particularly blends)"
hsMatrix44 prevMat = ((plMatrixChannel *)fRootApp->GetChannel())->Value(timePrev, true);
hsMatrix44 curMat = ((plMatrixChannel *)fRootApp->GetChannel())->Value(timeNow, true);
// If we get a valid linear velocity (ie, we didn't wrap around in the anim),
// use it. Otherwise just reuse the previous frames velocity.
hsVector3 linearVel;
if (LinearVelocity(linearVel, (float)(timeNow - timePrev), prevMat, curMat))
fAnimPosVel = linearVel;
// Automatically sets fAnimAngVel
AngularVelocity(fAnimAngVel, (float)(timeNow - timePrev), prevMat, curMat);
}
else
{
fAnimPosVel.Set(0.f, 0.f, 0.f);
fAnimAngVel = 0.f;
}
if (fController)
fController->SetVelocities(fAnimPosVel, fAnimAngVel + fTurnStr);
}
///////////////////////////////////////////////////////////////////////////
const hsScalar plWalkingController::kControlledFlightThreshold = 1.f; // seconds
plWalkingController::plWalkingController(plSceneObject* rootObject, plAGApplicator* rootApp, plPhysicalControllerCore* controller)
: plAnimatedController(rootObject, rootApp, controller)
, fHitGroundInThisAge(false)
, fWaitingForGround(false)
, fControlledFlightTime(0)
, fControlledFlight(0)
, fImpactTime(0.f)
, fImpactVelocity(0.f, 0.f, 0.f)
, fClearImpact(false)
, fGroundLastFrame(false)
{
if (fController)
{
fWalkingStrategy= TRACKED_NEW plWalkingStrategy(fController);
fController->SetMovementSimulationInterface(fWalkingStrategy);
}
else
fWalkingStrategy = nil;
}
void plWalkingController::RecalcVelocity(double timeNow, double timePrev, hsBool useAnim)
{
if (!fHitGroundInThisAge && fController && fController->IsEnabled() && fWalkingStrategy->IsOnGround())
fHitGroundInThisAge = true; // if we're not pinned and we're not in an age yet, we are now.
if (fClearImpact)
{
fImpactTime = 0.f;
fImpactVelocity.Set(0.f, 0.f, 0.f);
}
if (fController && !fWalkingStrategy->IsOnGround())
{
// PhysX Hack
// LinearVelocity is always (0,0,0) outside the PhysController
fImpactTime = fWalkingStrategy->GetAirTime();
fImpactVelocity = fController->GetAchievedLinearVelocity();
// convert orientation from subworld to avatar-local coordinates
fImpactVelocity = (hsVector3)fController->GetLocalRotation().Rotate(&fImpactVelocity);
fClearImpact = false;
}
else
fClearImpact = true;
if (IsControlledFlight())
{
if (fWalkingStrategy && fWalkingStrategy->IsOnGround())
fControlledFlightTime = fWalkingStrategy->GetAirTime();
if(fGroundLastFrame&&(fWalkingStrategy && !fWalkingStrategy->IsOnGround()))
{
//we have started to leave the ground tell the movement strategy in case it cares
fWalkingStrategy->StartJump();
}
if (fControlledFlightTime > kControlledFlightThreshold)
EnableControlledFlight(false);
}
if (fWalkingStrategy)
fGroundLastFrame = fWalkingStrategy->IsOnGround();
else
fGroundLastFrame=false;
plAnimatedController::RecalcVelocity(timeNow, timePrev, useAnim);
}
void plWalkingController::Reset(bool newAge)
{
ActivateController();
if (newAge)
{
if (fWalkingStrategy)
fWalkingStrategy->ResetAirTime();
fHitGroundInThisAge = false;
}
}
void plWalkingController::ActivateController()
{
if (fWalkingStrategy)
{
fWalkingStrategy->RefreshConnectionToControllerCore();
}
else
{
fWalkingStrategy= TRACKED_NEW plWalkingStrategy(fController);
fWalkingStrategy->RefreshConnectionToControllerCore();
}
}
bool plWalkingController::EnableControlledFlight(bool status)
{
if (status)
{
if (fControlledFlight == 0)
fControlledFlightTime = 0.f;
++fControlledFlight;
fWaitingForGround = true;
}
else
fControlledFlight = __max(--fControlledFlight, 0);
return status;
}
plWalkingController::~plWalkingController()
{
delete fWalkingStrategy;
if (fController)
fController->SetMovementSimulationInterface(nil);
}
#if 0
void plWalkingController::Update()
{
// double elapsed = time.asDouble() - getRefresh().asDouble();
// setRefresh(time);
//
// hsBool isPhysical = !fPhysical->GetProperty(plSimulationInterface::kPinned);
// const Havok::Vector3 straightUp(0.0f, 0.0f, 1.0f);
// hsBool alreadyInAge = fHitGroundInThisAge;
//
// int numContacts = fPhysical->GetNumContacts();
// bool ground = false;
// fPushingPhysical = nil;
// int i, j;
/* for(i = 0; i < numContacts; i++)
{
plHKPhysical *contactPhys = fPhysical->GetContactPhysical(i);
if (!contactPhys)
continue; // Physical no longer exists. Skip it.
const Havok::ContactPoint *contact = fPhysical->GetContactPoint(i);
hsScalar dotUp = straightUp.dot(contact->m_normal);
if (dotUp > .5)
ground = true;
else if (contactPhys->GetProperty(plSimulationInterface::kAvAnimPushable))
{
hsPoint3 position;
hsQuat rotation;
fPhysical->GetPositionAndRotationSim(&position, &rotation);
hsQuat inverseRotation = rotation.Inverse();
hsVector3 normal(contact->m_normal.x, contact->m_normal.y, contact->m_normal.z);
fFacingPushingPhysical = (inverseRotation.Rotate(&kAvatarForward).InnerProduct(normal) < 0 ? true : false);
fPushingPhysical = contactPhys;
}
}
// We need to check for the case where the avatar hasn't collided with "ground", but is colliding
// with a few other objects so that he's not actually falling (wedged in between some slopes).
// We do this by answering the following question (in 2d top-down space): "If you sort the contact
// normals by angle, is there a large enough gap between normals?"
//
// If you think in terms of geometry, this means a collection of surfaces are all pushing on you.
// If they're pushing from all sides, you have nowhere to go, and you won't fall. There needs to be
// a gap, so that you're pushed out and have somewhere to fall. This is the same as finding a gap
// larger than 180 degrees between sorted normals.
//
// The problem is that on top of that, the avatar needs enough force to shove him out that gap (he
// has to overcome friction). I deal with that by making the threshold (360 - (180 - 60) = 240). I've
// seen up to 220 reached in actual gameplay in a situation where we'd want this to take effect.
// This is the same running into 2 walls where the angle between them is 60.
const hsScalar threshold = hsScalarDegToRad(240);
if (!ground && numContacts >= 2)
{
// Can probably do a special case for exactly 2 contacts. Not sure if it's worth it...
fCollisionAngles.SetCount(numContacts);
for (i = 0; i < numContacts; i++)
{
const Havok::ContactPoint *contact = fPhysical->GetContactPoint(i);
fCollisionAngles[i] = hsATan2(contact->m_normal.y, contact->m_normal.x);
}
// numContacts is rarely larger than 6, so let's do a simple bubble sort.
for (i = 0; i < numContacts; i++)
{
for (j = i + 1; j < numContacts; j++)
{
if (fCollisionAngles[i] > fCollisionAngles[j])
{
hsScalar tempAngle = fCollisionAngles[i];
fCollisionAngles[i] = fCollisionAngles[j];
fCollisionAngles[j] = tempAngle;
}
}
}
// sorted, now we check.
for (i = 1; i < numContacts; i++)
{
if (fCollisionAngles[i] - fCollisionAngles[i - 1] >= threshold)
break;
}
if (i == numContacts)
{
// We got to the end. Check the last with the first and make your decision.
if (!(fCollisionAngles[0] - fCollisionAngles[numContacts - 1] >= (threshold - 2 * hsScalarPI)))
ground = true;
}
}
*/
bool ground = fController ? fController->GotGroundHit() : true;
bool isPhysical = true;
if (!fHitGroundInThisAge && isPhysical)
fHitGroundInThisAge = true; // if we're not pinned and we're not in an age yet, we are now.
if (IsControlledFlight())
fControlledFlightTime += (hsScalar)elapsed;
if (fControlledFlightTime > kControlledFlightThreshold && numContacts > 0)
EnableControlledFlight(false);
if (ground || !isPhysical)
{
if (!IsControlledFlight() && !IsOnGround())
{
// The first ground contact in an age doesn't count.
// if (alreadyInAge)
// {
// hsVector3 vel;
// fPhysical->GetLinearVelocitySim(vel);
// fImpactVel = vel.fZ;
// fTimeInAirPeak = (hsScalar)(fTimeInAir + elapsed);
// }
fWaitingForGround = false;
}
fTimeInAir = 0;
}
else if (elapsed < plSimulationMgr::GetInstance()->GetMaxDelta())
{
// If the simultation skipped a huge chunk of time, we didn't process the
// collisions, which could trick us into thinking we've just gone a long
// time without hitting ground. So we only count the time if this wasn't
// the case.
fTimeInAir += (hsScalar)elapsed;
}
// Tweakage so that we still fall under the right conditions.
// If we're in controlled flight, or standing still with ground solidly under us (probe hit). We only use anim velocity.
// if (!IsControlledFlight() && !(ground && fProbeHitGround && fAnimPosVel.fX == 0 && fAnimPosVel.fY == 0))
// {
// hsVector3 curV;
// fPhysical->GetLinearVelocitySim(curV);
// fAnimPosVel.fZ = curV.fZ;
//
// // Prevents us from going airborn from running up bumps/inclines.
// if (IsOnGround() && fAnimPosVel.fZ > 0.f)
// fAnimPosVel.fZ = 0.f;
//
// // Unless we're on the ground and moving, or standing still with a probe hit, we use the sim's other axes too.
// if (!(IsOnGround() && (fProbeHitGround || fAnimPosVel.fX != 0 || fAnimPosVel.fY != 0)))
// {
// fAnimPosVel.fX = curV.fX;
// fAnimPosVel.fY = curV.fY;
// }
// }
//
// fPhysical->SetLinearVelocitySim(fAnimPosVel);
// fPhysical->SetSpin(fAnimAngVel + fTurnStr, hsVector3(0.0f, 0.0f, 1.0f));
}
#endif
#if 0
/////////////////////////////////////////////////////////////////////////
plSimDefs::ActionType plHorizontalFreezeAction::GetType()
{
return plSimDefs::kHorizontalFreeze;
}
void plHorizontalFreezeAction::apply(Havok::Subspace &s, Havok::hkTime time)
{
double elapsed = time.asDouble() - getRefresh().asDouble();
setRefresh(time);
int numContacts = fPhysical->GetNumContacts();
bool ground = false;
const Havok::Vector3 straightUp(0.0f, 0.0f, 1.0f);
int i;
for(i = 0; i < numContacts; i++)
{
const Havok::ContactPoint *contact = fPhysical->GetContactPoint(i);
hsScalar dotUp = straightUp.dot(contact->m_normal);
if (dotUp > .5)
ground = true;
}
hsVector3 vel;
fPhysical->GetLinearVelocitySim(vel);
vel.fX = 0.0;
vel.fY = 0.0;
if (ground)
vel.fZ = 0;
fPhysical->SetLinearVelocitySim(vel);
fPhysical->ClearContacts();
}
#endif
plSwimmingController::plSwimmingController(plSceneObject* rootObject, plAGApplicator* rootApp, plPhysicalControllerCore* controller)
:plAnimatedController(rootObject,rootApp,controller)
{
if (controller)
fSwimmingStrategy= TRACKED_NEW plSwimStrategy(controller);
else
fSwimmingStrategy = nil;
}
plSwimmingController::~plSwimmingController()
{
delete fSwimmingStrategy;
}
plRidingAnimatedPhysicalController::plRidingAnimatedPhysicalController(plSceneObject* rootObject, plAGApplicator* rootApp, plPhysicalControllerCore* controller)
: plWalkingController(rootObject, rootApp, controller)
{
if(controller)
fWalkingStrategy = TRACKED_NEW plRidingAnimatedPhysicalStrategy(controller);
else
fWalkingStrategy = nil;
}
plRidingAnimatedPhysicalController::~plRidingAnimatedPhysicalController()
{
delete fWalkingStrategy;
fWalkingStrategy=nil;
}
//////////////////////////////////////////////////////////////////////////
/*
Purpose:
ANGLE_RAD_2D returns the angle in radians swept out between two rays in 2D.
Discussion:
Except for the zero angle case, it should be true that
ANGLE_RAD_2D(X1,Y1,X2,Y2,X3,Y3)
+ ANGLE_RAD_2D(X3,Y3,X2,Y2,X1,Y1) = 2 * PI
Modified:
19 April 1999
Author:
John Burkardt
Parameters:
Input, float X1, Y1, X2, Y2, X3, Y3, define the rays
( X1-X2, Y1-Y2 ) and ( X3-X2, Y3-Y2 ) which in turn define the
angle, counterclockwise from ( X1-X2, Y1-Y2 ).
Output, float ANGLE_RAD_2D, the angle swept out by the rays, measured
in radians. 0 <= ANGLE_DEG_2D < 2 PI. If either ray has zero length,
then ANGLE_RAD_2D is set to 0.
*/
static float AngleRad2d ( float x1, float y1, float x3, float y3 )
{
float value;
float x;
float y;
x = ( x1 ) * ( x3 ) + ( y1 ) * ( y3 );
y = ( x1 ) * ( y3 ) - ( y1 ) * ( x3 );
if ( x == 0.0 && y == 0.0 ) {
value = 0.0;
}
else
{
value = atan2 ( y, x );
if ( value < 0.0 )
{
value = (float)(value + TWO_PI);
}
}
return value;
}
static hsBool LinearVelocity(hsVector3 &outputV, float elapsed, hsMatrix44 &prevMat, hsMatrix44 &curMat)
{
bool result = false;
hsPoint3 startPos(0.0f, 0.0f, 0.0f); // default position (at start of anim)
hsPoint3 prevPos = prevMat.GetTranslate(); // position previous frame
hsPoint3 nowPos = curMat.GetTranslate(); // position current frame
hsVector3 prev2Now = (hsVector3)(nowPos - prevPos); // frame-to-frame delta
if (fabs(prev2Now.fX) < 0.0001f && fabs(prev2Now.fY) < 0.0001f && fabs(prev2Now.fZ) < 0.0001f)
{
outputV.Set(0.f, 0.f, 0.f);
result = true;
}
else
{
hsVector3 start2Now = (hsVector3)(nowPos - startPos); // start-to-frame delta
float prev2NowMagSqr = prev2Now.MagnitudeSquared();
float start2NowMagSqr = start2Now.MagnitudeSquared();
float dot = prev2Now.InnerProduct(start2Now);
// HANDLING ANIMATION WRAPPING:
// the vector from the animation origin to the current frame should point in roughly
// the same direction as the vector from the previous animation position to the
// current animation position.
//
// If they don't agree (dot < 0,) then we probably mpst wrapped around.
// The right answer would be to compare the current frame to the start of
// the anim loop, but it's cheaper to cheat and return false,
// telling the caller to use the previous frame's velocity.
if (dot > 0.0f)
{
prev2Now /= elapsed;
float xfabs = fabs(prev2Now.fX);
float yfabs = fabs(prev2Now.fY);
float zfabs = fabs(prev2Now.fZ);
static const float maxVel = 20.0f;
hsBool valid = xfabs < maxVel && yfabs < maxVel && zfabs < maxVel;
if (valid)
{
outputV = prev2Now;
result = true;
}
}
}
return result;
}
static void AngularVelocity(hsScalar &outputV, float elapsed, hsMatrix44 &prevMat, hsMatrix44 &curMat)
{
outputV = 0.f;
hsScalar appliedVelocity = 0.0f;
hsVector3 prevForward = GetYAxis(prevMat);
hsVector3 curForward = GetYAxis(curMat);
hsScalar angleSincePrev = AngleRad2d(curForward.fX, curForward.fY, prevForward.fX, prevForward.fY);
hsBool sincePrevSign = angleSincePrev > 0.0f;
if (angleSincePrev > hsScalarPI)
angleSincePrev = angleSincePrev - TWO_PI;
const hsVector3 startForward = hsVector3(0, -1.0, 0); // the Y orientation of a "resting" armature....
hsScalar angleSinceStart = AngleRad2d(curForward.fX, curForward.fY, startForward.fX, startForward.fY);
hsBool sinceStartSign = angleSinceStart > 0.0f;
if (angleSinceStart > hsScalarPI)
angleSinceStart = angleSinceStart - TWO_PI;
// HANDLING ANIMATION WRAPPING:
// under normal conditions, the angle from rest to the current frame will have the same
// sign as the angle from the previous frame to the current frame.
// if it does not, we have (most likely) wrapped the motivating animation from frame n back
// to frame zero, creating a large angle from the previous frame to the current one
if (sincePrevSign == sinceStartSign)
{
// signs are the same; didn't wrap; use the frame-to-frame angle difference
appliedVelocity = angleSincePrev / elapsed; // rotation / time
if (fabs(appliedVelocity) < 3)
{
outputV = appliedVelocity;
}
}
}

View File

@ -0,0 +1,217 @@
/*==LICENSE==*
CyanWorlds.com Engine - MMOG client, server and tools
Copyright (C) 2011 Cyan Worlds, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Additional permissions under GNU GPL version 3 section 7
If you modify this Program, or any covered work, by linking or
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
(or a modified version of those libraries),
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
licensors of this Program grant you additional
permission to convey the resulting work. Corresponding Source for a
non-source form of such a combination shall include the source code for
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
work.
You can contact Cyan Worlds, Inc. by email legal@cyan.com
or by snail mail at:
Cyan Worlds, Inc.
14617 N Newport Hwy
Mead, WA 99021
*==LICENSE==*/
#ifndef PL_HK_CALLBACK_ACTION_H
#define PL_HK_CALLBACK_ACTION_H
#include "hsGeometry3.h"
#include "hsMatrix44.h"
#include "hsTemplates.h"
#include "../pnKeyedObject/plKey.h"
#include "../plPhysical/plSimDefs.h"
#include "../pnMessage/plMessage.h"
#include "plPhysicalControllerCore.h"
class plLOSHitMsg;
class plAGApplicator;
class plSceneObject;
class plPhysical;
class plAvatarController;
class plCoordinateInterface;
class plPhysicalControllerCore;
// Used by the other controllers to actually move the avatar. The actual
// implementation is in the physics system.
/*class plPhysicalController
{
public:
// Implemented in the physics system. If you're linking this without that for
// some reason, just stub this function out.
//
// Pass in the key to the root sceneobject for the avatar
static plPhysicalController* Create(plKey ownerSO, hsScalar height, hsScalar width);
virtual ~plPhysicalController() {}
// A disabled avatar doesn't move or accumulate air time if he's off the ground.
virtual void Enable(bool enable) = 0;
virtual bool IsEnabled() const = 0;
// Set the LOS DB this avatar will be in (only one)
virtual void SetLOSDB(plSimDefs::plLOSDB losDB) = 0;
// Call this once per frame with the velocities of the avatar in avatar space.
virtual void SetVelocities(const hsVector3& linearVel, hsScalar angVel) = 0;
// Gets the actual velocity we achieved in the last step (relative to our subworld)
virtual const hsVector3& GetLinearVelocity() const = 0;
virtual void ResetAchievedLinearVelocity() = 0;
// Get and set the current subworld for the avatar. Use nil for the main world.
virtual plKey GetSubworld() const = 0;
virtual void SetSubworld(plKey world) = 0;
// If IsOnGround returns false, GetAirTime will tell you how long the avatar
// has been airborne. Use ResetAirTime to reset the air time to zero, for
// cases like when the avatar spawns into a new age.
virtual bool IsOnGround() const = 0;
virtual bool IsOnFalseGround() const = 0;
virtual hsScalar GetAirTime() const = 0;
virtual void ResetAirTime() = 0;
virtual plPhysical* GetPushingPhysical() const = 0;
virtual bool GetFacingPushingPhysical() const = 0;
// A helper function to get the coordinate interface for the avatars current
// world. Handy if you need to convert points to and from that. This will
// return nil if the avatar is in the main world (ie, you don't need to do
// any translation).
virtual const plCoordinateInterface* GetSubworldCI() const = 0;
// For the avatar SDL only
virtual void GetState(hsPoint3& pos, float& zRot) = 0;
virtual void SetState(const hsPoint3& pos, float zRot) = 0;
// kinematic stuff .... should be just for when playing a behavior...
virtual void Kinematic(bool state) = 0;
virtual bool IsKinematic() = 0;
virtual void GetKinematicPosition(hsPoint3& pos) = 0;
virtual const hsMatrix44& GetPrevSubworldW2L() = 0;
//when seeking no longer want to interact with exclusion regions
virtual void SetSeek(bool seek)=0;
};
*/
class plAvatarController
{
public:
virtual ~plAvatarController() {}
};
class plAnimatedController : public plAvatarController
{
public:
plAnimatedController(plSceneObject* rootObject, plAGApplicator* rootApp, plPhysicalControllerCore* controller);
virtual void RecalcVelocity(double timeNow, double timePrev, hsBool useAnim = true);
void SetTurnStrength(hsScalar val) { fTurnStr = val; }
hsScalar GetTurnStrength() { return fTurnStr; }
virtual void ActivateController()=0;
protected:
plSceneObject* fRootObject;
plPhysicalControllerCore* fController;
plAGApplicator* fRootApp;
hsScalar fAnimAngVel;
hsVector3 fAnimPosVel;
hsScalar fTurnStr; // Explicit turning, separate from animations
};
class plWalkingController : public plAnimatedController
{
public:
plWalkingController(plSceneObject* rootObject, plAGApplicator* rootApp, plPhysicalControllerCore* controller);
virtual ~plWalkingController();
virtual void RecalcVelocity(double timeNow, double timePrev, hsBool useAnim = true);
void Reset(bool newAge);
bool IsControlledFlight() const { return fControlledFlight != 0; }
bool IsOnGround() const { return fWalkingStrategy ? fWalkingStrategy->IsOnGround() : true; }
bool IsOnFalseGround() const { return fWalkingStrategy ? fWalkingStrategy->IsOnFalseGround() : true; }
bool HitGroundInThisAge() const { return fHitGroundInThisAge; }
bool EnableControlledFlight(bool status);
hsScalar GetAirTime() const { return fWalkingStrategy ? fWalkingStrategy->GetAirTime() : 0.f; }
void ResetAirTime() { if (fWalkingStrategy) fWalkingStrategy->ResetAirTime(); }
hsScalar GetForwardVelocity() const;
void ActivateController();
// Check these after the avatar the avatar hits the ground for his total
// hangtime and impact velocity.
hsScalar GetImpactTime() const { return fImpactTime; }
const hsVector3& GetImpactVelocity() const { return fImpactVelocity; }
plPhysical* GetPushingPhysical() const
{
if(fController)return fController->GetPushingPhysical();
else return nil;
}
bool GetFacingPushingPhysical() const
{ if(fController)return fController->GetFacingPushingPhysical();
else return false;
}
protected:
bool fHitGroundInThisAge;
bool fWaitingForGround; // We've gone airborne. IsOnGround() returns false until we hit ground again.
hsScalar fControlledFlightTime;
int fControlledFlight; // Count of how many are currently forcing flight
plWalkingStrategy* fWalkingStrategy;
hsScalar fImpactTime;
hsVector3 fImpactVelocity;
bool fClearImpact;
bool fGroundLastFrame;//used for a test to pass the event of first getting air during a jump
static const hsScalar kControlledFlightThreshold;
};
class plSwimmingController: public plAnimatedController
{
public :
plSwimmingController(plSceneObject* rootObject, plAGApplicator* rootApp, plPhysicalControllerCore* controller);
virtual ~plSwimmingController();
void SetSurface(plSwimRegionInterface *region, hsScalar surfaceHeight){
fSwimmingStrategy->SetSurface(region,surfaceHeight);
}
hsScalar GetBuoyancy() { return fSwimmingStrategy->GetBuoyancy(); }
hsBool IsOnGround() { return fSwimmingStrategy->IsOnGround(); }
hsBool HadContacts() { return fSwimmingStrategy->HadContacts();}
void Enable(bool en){if (fController) fController->Enable(en);}
plPhysicalControllerCore* GetController(){return fController;}
virtual void ActivateController(){fSwimmingStrategy->RefreshConnectionToControllerCore();}
protected:
plSwimStrategy* fSwimmingStrategy;
};
class plRidingAnimatedPhysicalController: public plWalkingController
{
public:
plRidingAnimatedPhysicalController(plSceneObject* rootObject, plAGApplicator* rootApp, plPhysicalControllerCore* controller);
virtual ~plRidingAnimatedPhysicalController();
};
#endif // PL_HK_CALLBACK_ACTION_H

View File

@ -39,7 +39,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
Mead, WA 99021
*==LICENSE==*/
#include "plPhysicalControllerCore.h"
#include "../plAvatar/plAvCallbackAction.h"
#include "hsTypes.h"
@ -129,7 +129,7 @@ bool plAvLadderMod::IIsReadyToClimb()
if (armMod)
{
plAvBrainHuman* brain = plAvBrainHuman::ConvertNoRef(armMod->GetCurrentBrain());
if (brain && brain->IsMovingForward() && brain->fWalkingStrategy->IsOnGround())
if (brain && brain->IsMovingForward() && brain->fCallbackAction->IsOnGround())
movingForward = true;
}

View File

@ -54,7 +54,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
#include "plAGAnim.h"
#include "plArmatureMod.h"
#include "plAvatarMgr.h"
#include "plPhysicalControllerCore.h"
#include "plAvCallbackAction.h"
// other
#include "../plMessage/plAvatarMsg.h"
@ -462,10 +462,10 @@ hsBool plAvTaskSeek::IFinishPosition(hsPoint3 &newPosition,
{
// While warping, we might be hovering just above the ground. Don't want that to
// trigger any falling behavior.
if(brain&&brain->fWalkingStrategy)
if(brain&&brain->fCallbackAction)
{
brain->fWalkingStrategy->ResetAirTime();
brain->fCallbackAction->ResetAirTime();
}
// how far will we translate this frame?
float thisDist = kFloatSpeed * elapsed;

View File

@ -47,7 +47,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
#include "../plAvatar/plAvBrainClimb.h"
#include "../plAvatar/plAvBrainDrive.h"
#include "../plAvatar/plAnimStage.h"
#include "../plAvatar/plPhysicalControllerCore.h"
#include "../plAvatar/plAvCallbackAction.h"
#include "../pnSceneObject/plSceneObject.h"
#include "../pnMessage/plSDLModifierMsg.h"
#include "../plSDL/plSDL.h"

View File

@ -53,7 +53,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
#include "plAGAnimInstance.h"
#include "plAGModifier.h"
#include "plMatrixChannel.h"
#include "plPhysicalControllerCore.h"
#include "plAvCallbackAction.h"
#include "plAvatarMgr.h"
// global
@ -689,7 +689,7 @@ hsBool plAvOneShotTask::Process(plArmatureMod *avatar, plArmatureBrain *brain, d
if(fEnablePhysicsAtEnd)
{
#if 0//ndef PLASMA_EXTERNAL_RELEASE
if (!humanBrain || humanBrain->fWalkingStrategy->HitGroundInThisAge())
if (!humanBrain || humanBrain->fCallbackAction->HitGroundInThisAge())
{
// For some reason, calling CheckValidPosition at the beginning of
// an age can cause detectors to incorrectly report collisions. So

View File

@ -41,286 +41,310 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
*==LICENSE==*/
#ifndef PLPHYSICALCONTROLLERCORE_H
#define PLPHYSICALCONTROLLERCORE_H
#include "hsGeometry3.h"
#include "hsMatrix44.h"
#include "hsQuat.h"
#include "hsTemplates.h"
#include "../pnKeyedObject/plKey.h"
#include "../plPhysical/plSimDefs.h"
#include <vector>
#include "../pnMessage/plMessage.h"
#include "hsQuat.h"
#define PHYSX_ONLY_TRIGGER_FROM_KINEMATIC 1
#define kSLOPELIMIT (cosf(hsScalarDegToRad(55.f)))
class plCoordinateInterface;
class plPhysical;
class plMovementStrategy;
class plAGApplicator;
class plPXPhysical;
class plSwimRegionInterface;
#define kSlopeLimit (cosf(hsScalarDegToRad(55.f)))
//Replacement for for plPhysicalController stripped out some walk specific code
//plPhysicalControllerCore needs to have movement strategies registered to it these will then
//be called by the controller during the simulation steps. The Strategies need to at least have an
// Apply and Update definition. Everything else should be movement specific. I hope to come back and
//and refactor when I have time this in the future.
enum plControllerCollisionFlags
{
kSides = 1,
kTop = (1 << 1),
kBottom = (1 << 2)
{
kSides=1,
kTop= (1<<1),
kBottom=(1<<2),
};
struct plControllerSweepRecord
class plMovementStrategySimulationInterface
{
public:
virtual void Apply(hsScalar delSecs)=0;
virtual void Update(hsScalar delSecs)=0;
//most strategies don't require this. Only the ones that require behavior like a physical or need
//something after the sim step. this used to be taken care of by Update, but this was moved to take care of
//some of the frame lag
virtual void PostStep(hsScalar delSecs){};
virtual void IAddContactNormals(hsVector3& vec){fContactNormals.Append(vec);}
virtual void AddOnTopOfObject(plPhysical* phys){ fOnTopOf.Append(phys);}
virtual void LeaveAge()
{
fContactNormals.SetCount(0);
fOnTopOf.SetCount(0);
}
protected:
hsTArray<hsVector3> fContactNormals;
hsTArray<plPhysical* > fOnTopOf;
};
class plControllerSweepRecord
{
public:
plPhysical *ObjHit;
hsPoint3 Point;
hsVector3 Normal;
hsPoint3 locHit;//World space
hsScalar TimeHit;//Normalized between 0 and 1
hsVector3 Norm;
};
bool operator<(const plControllerSweepRecord left, const plControllerSweepRecord right);
class plPhysicalControllerCore
{
public:
plPhysicalControllerCore(plKey ownerSceneObject, hsScalar height, hsScalar radius);
virtual ~plPhysicalControllerCore() { }
// An ArmatureMod has its own idea about when physics should be enabled/disabled.
// Use plArmatureModBase::EnablePhysics() instead.
virtual ~plPhysicalControllerCore();
virtual void Move(hsVector3 displacement, unsigned int collideWith, unsigned int &collisionResults)=0;
virtual void SetMovementSimulationInterface(plMovementStrategySimulationInterface* strat){fMovementInterface=strat;}
virtual void Apply(hsScalar delSecs);
virtual void Update(hsScalar delSecs);
virtual void PostStep(hsScalar delSecs);
// A disabled avatar doesn't move or accumulate air time if he's off the ground.
virtual void Enable(bool enable) = 0;
virtual bool IsEnabled() { return fEnabled; }
// Subworld
virtual plKey GetSubworld() { return fWorldKey; }
virtual bool IsEnabled() {return fEnabled;}
virtual plKey GetSubworld() {return fWorldKey;}
virtual void SetSubworld(plKey world) = 0;
virtual const plCoordinateInterface* GetSubworldCI();
virtual const plCoordinateInterface* GetSubworldCI() const = 0;
// For the avatar SDL only
virtual void GetState(hsPoint3& pos, float& zRot) = 0;
virtual void SetState(const hsPoint3& pos, float zRot) = 0;
// The LOS DB this avatar is in (only one)
virtual plSimDefs::plLOSDB GetLOSDB() { return fLOSDB; }
virtual void SetLOSDB(plSimDefs::plLOSDB losDB) { fLOSDB = losDB; }
// Movement strategy
virtual void SetMovementStrategy(plMovementStrategy* strategy) = 0;
// Global location
virtual const hsMatrix44& GetLastGlobalLoc() { return fLastGlobalLoc; }
virtual void SetGlobalLoc(const hsMatrix44& l2w) = 0;
// Local sim position
virtual void GetPositionSim(hsPoint3& pos) = 0;
// Move kinematic controller
virtual void Move(hsVector3 displacement, unsigned int collideWith, unsigned int &collisionResults) = 0;
// Set linear velocity on dynamic controller
virtual void SetLinearVelocitySim(const hsVector3& linearVel) = 0;
// Sweep the controller path from startPos through endPos
virtual int SweepControllerPath(const hsPoint3& startPos,const hsPoint3& endPos, hsBool vsDynamics, hsBool vsStatics,
UInt32& vsSimGroups, std::vector<plControllerSweepRecord>& hits) = 0;
// any clean up for the controller should go here
virtual void LeaveAge() = 0;
// Local rotation
const hsQuat& GetLocalRotation() const { return fLocalRotation; }
// kinematic stuff .... should be just for when playing a behavior...
virtual void Kinematic(bool state) = 0;
virtual bool IsKinematic() = 0;
virtual void GetKinematicPosition(hsPoint3& pos) = 0;
virtual const hsMatrix44& GetPrevSubworldW2L() = 0;
//when seeking no longer want to interact with exclusion regions
virtual void SetSeek(bool seek){fSeeking=seek;}
virtual bool IsSeeking(){return fSeeking;}
static plPhysicalControllerCore* Create(plKey ownerSO, hsScalar height, hsScalar radius);
virtual plMovementStrategySimulationInterface* GetMovementInterface(){return fMovementInterface;}
plPhysicalControllerCore(plKey ownerSceneObject, hsScalar height, hsScalar radius);
virtual plKey GetOwner(){return fOwner;};
// Set the LOS DB this avatar will be in (only one)
virtual void SetLOSDB(plSimDefs::plLOSDB losDB) { fLOSDB = losDB; } ;
virtual plSimDefs::plLOSDB GetLOSDB() {return fLOSDB ; }
virtual const hsMatrix44& GetLastGlobalLoc()=0;
virtual void SetKinematicLoc(const hsMatrix44& l2w)=0;
virtual void SetGlobalLoc(const hsMatrix44& l2w)=0;
virtual bool IsEnabledChanged(){return fEnableChanged;}
virtual void HandleEnableChanged()=0;
virtual bool IsKinematicChanged(){return fKinematicChanged;}
virtual void GetPositionSim(hsPoint3& pos)=0;
virtual void HandleKinematicChanged()=0;
virtual bool IsKinematicEnableNextUpdate(){return fKinematicEnableNextUpdate;}
virtual void HandleKinematicEnableNextUpdate()=0;
virtual void MoveKinematicToController(hsPoint3& pos)=0;
virtual void UpdateControllerAndPhysicalRep()=0;
virtual void CheckAndHandleAnyStateChanges();
virtual void UpdateSubstepNonPhysical();
virtual const hsPoint3& GetLocalPosition()=0;
const hsQuat& GetLocalRotation() { return fLocalRotation; }
virtual void MoveActorToSim();
virtual void OverrideAchievedVelocity(hsVector3 newAchievedVel)
{//because of things like superjumps this is needed I'd rather not, but can't help it
fAchievedLinearVelocity=newAchievedVel;
}
//any clean up for the controller should go here
virtual void LeaveAge()=0;
hsVector3 DisplacementLastStep(){return fDisplacementThisStep;}
hsVector3 MeanVelocityForLastStep()
{
hsVector3 vel=fDisplacementThisStep;
return vel/fSimLength;
}
void SendCorrectionMessages();
void IncrementAngle(hsScalar deltaAngle);
void UpdateWorldRelativePos();
virtual void SetLinearVelocity(const hsVector3& linearVel){fLinearVelocity=linearVel;}
//should actually be a 3 vector but everywhere else it is assumed to be just around Z
virtual void SetAngularVelocity(const hsScalar angvel){ fAngularVelocity=angvel;}
virtual void SetVelocities(const hsVector3& linearVel, hsScalar angVel)
{
fLinearVelocity=linearVel;
fAngularVelocity=angVel;
}
// Linear velocity
void SetLinearVelocity(const hsVector3& linearVel) { fLinearVelocity = linearVel; }
const hsVector3& GetLinearVelocity() const { return fLinearVelocity; }
// Acheived linear velocity
const hsVector3& GetAchievedLinearVelocity() const { return fAchievedLinearVelocity; }
void OverrideAchievedLinearVelocity(const hsVector3& linearVel) { fAchievedLinearVelocity = linearVel; }
void ResetAchievedLinearVelocity() { fAchievedLinearVelocity.Set(0.f, 0.f, 0.f); }
// SceneObject
plKey GetOwner() { return fOwner; }
// When seeking no longer want to interact with exclude regions
void SetSeek(bool seek) { fSeeking = seek; }
bool IsSeeking() const { return fSeeking; }
// Pushing physical
plPhysical* GetPushingPhysical() const { return fPushingPhysical; }
void SetPushingPhysical(plPhysical* phys) { fPushingPhysical = phys; }
bool GetFacingPushingPhysical() const { return fFacingPushingPhysical; }
void SetFacingPushingPhysical(bool facing) { fFacingPushingPhysical = facing; }
// Controller dimensions
hsScalar GetRadius() const { return fRadius; }
hsScalar GetHeight() const { return fHeight; }
// Create a new controller instance - Implemented in the physics system
static plPhysicalControllerCore* Create(plKey ownerSO, hsScalar height, hsScalar radius, bool human);
virtual const hsVector3& GetLinearVelocity() ;
virtual hsScalar GetAngularVelocity(){return fAngularVelocity;}
virtual const hsVector3& GetAchievedLinearVelocity()const {return fAchievedLinearVelocity;}
plPhysical* GetPushingPhysical();
bool GetFacingPushingPhysical();
virtual void SetPushingPhysical(plPhysical* pl){fPushingPhysical=pl;}
virtual void SetFacingPushingPhysical(bool ans){fFacingPushingPhysical=ans;}
//To be Used during runtime conversions, say to switch a tall controller to a ball for swimming
virtual void SetControllerDimensions(hsScalar radius, hsScalar height)=0;
virtual hsScalar GetControllerWidth(){return fRadius;}
virtual hsScalar GetControllerHeight(){return fHeight;}
virtual void ResetAchievedLinearVelocity()
{
fAchievedLinearVelocity.Set(0.f,0.f,0.f);
}
virtual int SweepControllerPath(const hsPoint3& startPos,const hsPoint3& endPos, hsBool vsDynamics, hsBool vsStatics, UInt32& vsSimGroups, std::multiset< plControllerSweepRecord >& WhatWasHitOut)=0;
//this should only be used to force a move it could place your head into a wall and that would be good
virtual hsScalar GetHeight() {return fHeight;}
virtual hsScalar GetRadius() {return fRadius;}
//Wether the avatar thing has mass and forces things down or not, and changes the way things move
//This is an attempt fix things like riding on an animated physical
virtual void BehaveLikeAnimatedPhysical(hsBool actLikeAnAnimatedPhys)=0;
virtual hsBool BehavingLikeAnAnimatedPhysical()=0;
protected:
virtual void IHandleEnableChanged() = 0;
void IApply(hsScalar delSecs);
void IUpdate(int numSubSteps, hsScalar alpha);
void IUpdateNonPhysical(hsScalar alpha);
void ISendCorrectionMessages(bool dirtySynch = false);
plKey fOwner;
plKey fWorldKey;
hsScalar fHeight;
hsScalar fRadius;
plKey fWorldKey;
plSimDefs::plLOSDB fLOSDB;
plMovementStrategy* fMovementStrategy;
hsScalar fSimLength;
hsQuat fLocalRotation;
hsPoint3 fLocalPosition;
hsPoint3 fLastLocalPosition;
hsMatrix44 fLastGlobalLoc;
hsMatrix44 fPrevSubworldW2L;
hsVector3 fLinearVelocity;
hsVector3 fAchievedLinearVelocity;
plPhysical* fPushingPhysical;
bool fFacingPushingPhysical;
bool fSeeking;
bool fEnabled;
bool fEnableChanged;
};
class plMovementStrategy
{
public:
plMovementStrategy(plPhysicalControllerCore* controller);
virtual ~plMovementStrategy() { }
virtual void Apply(hsScalar delSecs) = 0;
virtual void Update(hsScalar delSecs) { }
virtual void AddContactNormals(hsVector3& vec) { }
virtual void Reset(bool newAge);
virtual bool IsKinematic() { return true; }
protected:
plPhysicalControllerCore* fController;
};
class plAnimatedMovementStrategy : public plMovementStrategy
{
public:
plAnimatedMovementStrategy(plAGApplicator* rootApp, plPhysicalControllerCore* controller);
virtual ~plAnimatedMovementStrategy() { }
virtual void RecalcVelocity(double timeNow, hsScalar elapsed, hsBool useAnim = true);
void SetTurnStrength(hsScalar val) { fTurnStr = val; }
hsScalar GetTurnStrength() const { return fTurnStr; }
private:
void IRecalcLinearVelocity(float elapsed, hsMatrix44 &prevMat, hsMatrix44 &curMat);
void IRecalcAngularVelocity(float elapsed, hsMatrix44 &prevMat, hsMatrix44 &curMat);
plAGApplicator* fRootApp;
hsVector3 fAnimLinearVel;
hsScalar fAnimAngularVel;
hsScalar fTurnStr;
};
class plWalkingStrategy : public plAnimatedMovementStrategy
{
public:
plWalkingStrategy(plAGApplicator* rootApp, plPhysicalControllerCore* controller);
virtual ~plWalkingStrategy() { }
virtual void Apply(hsScalar delSecs);
virtual void Update(hsScalar delSecs);
virtual void AddContactNormals(hsVector3& vec);
virtual void Reset(bool newAge);
virtual void RecalcVelocity(double timeNow, hsScalar elapsed, hsBool useAnim = true);
bool HitGroundInThisAge() const { return fHitGroundInThisAge; }
bool IsOnGround() const { return fTimeInAir < kAirTimeThreshold || fFalseGround; }
hsScalar GetAirTime() const { return fTimeInAir; }
void ResetAirTime() { fTimeInAir = 0.0f; }
hsScalar GetImpactTime() const { return fImpactTime; }
const hsVector3& GetImpactVelocity() const { return fImpactVelocity; }
bool EnableControlledFlight(bool status);
bool IsControlledFlight() const { return fControlledFlight != 0; }
plPhysical* GetPushingPhysical() const;
bool GetFacingPushingPhysical() const;
protected:
static const hsScalar kAirTimeThreshold;
static const hsScalar kControlledFlightThreshold;
hsTArray<hsVector3> fSlidingNormals;
hsVector3 fImpactVelocity;
hsScalar fImpactTime;
hsScalar fTimeInAir;
bool fEnableChanged;
bool fKinematic;
bool fKinematicEnableNextUpdate;
bool fKinematicChanged;
plMovementStrategySimulationInterface* fMovementInterface;
hsMatrix44 fLastGlobalLoc;
hsPoint3 fLocalPosition;
hsQuat fLocalRotation;
hsMatrix44 fPrevSubworldW2L;
hsVector3 fDisplacementThisStep;
hsScalar fSimLength;
hsScalar fControlledFlightTime;
int fControlledFlight;
//physical properties
hsVector3 fLinearVelocity;
hsScalar fAngularVelocity;
hsVector3 fAchievedLinearVelocity;
plPhysical* fPushingPhysical;
bool fFacingPushingPhysical;
bool fNeedsResize;
};
class plMovementStrategy: public plMovementStrategySimulationInterface
{
public:
virtual void SetControllerCore(plPhysicalControllerCore* core)
{
fCore=core;
fCore->SetMovementSimulationInterface(this);
}
virtual void RefreshConnectionToControllerCore()
{
fCore->SetMovementSimulationInterface(this);
//fCore->SetControllerDimensions(fPreferedControllerWidth,fPreferedControllerHeight);
fCore->BehaveLikeAnimatedPhysical(this->IRequireBehaviourLikeAnAnimatedPhysical());
}
plMovementStrategy(plPhysicalControllerCore* core);
//should actually be a 3 vector but everywhere else it is assumed to be just around Z
virtual void SetLinearAcceleration(const hsVector3& accel){fLinearAcceleration=accel;}
virtual const hsVector3& GetLinearAcceleration()const{return fLinearAcceleration;}
//should actually be a 3 vector but everywhere else it is assumed to be just around Z
virtual void ResetAchievedLinearVelocity()
{
hsVector3 AchievedLinearVelocity(0.f,0.f,0.f);
if(fCore)fCore->OverrideAchievedVelocity(AchievedLinearVelocity);
}
//proxy functions for Controller Core
virtual hsScalar GetAirTime() const { return fTimeInAir; }
virtual void ResetAirTime() { fTimeInAir = 0.f; }
protected:
virtual hsBool IRequireBehaviourLikeAnAnimatedPhysical()=0;
virtual void IApplyKinematic();
plPhysicalControllerCore* fCore;
hsVector3 fLinearAcceleration;
hsScalar fAngularAcceleration;
plKey fOwner;
static const hsScalar kAirTimeThreshold;
hsScalar fTimeInAir;
hsScalar fPreferedControllerWidth;
hsScalar fPreferedControllerHeight;
};
class plWalkingStrategy: public plMovementStrategy
{
public:
plWalkingStrategy(plPhysicalControllerCore* core):plMovementStrategy(core)
{
fGroundHit=false;
fFalseGround=false;
fHitHead=false;
fCore->SetMovementSimulationInterface(this);
fPreferedControllerWidth=core->GetControllerWidth();
fPreferedControllerHeight=core->GetControllerHeight();
fOnTopOfAnimatedPhysLastFrame=false;
}
virtual ~plWalkingStrategy(){};
virtual void Apply(hsScalar delSecs);
virtual void Update(hsScalar delSecs);
bool IsOnGround() const { return fTimeInAir < kAirTimeThreshold || fFalseGround; }
bool IsOnFalseGround() const { return fFalseGround && !fGroundHit; }
void GroundHit() { fGroundHit = true; }
virtual void IAddContactNormals(hsVector3& vec);
virtual void StartJump(){};
protected:
void ICheckForFalseGround();
bool fGroundHit;
bool fFalseGround;
bool fHeadHit;
bool fSliding;
bool fHitHead;
bool fOnTopOfAnimatedPhysLastFrame;
hsTArray<hsVector3> fPrevSlidingNormals;
virtual hsBool IRequireBehaviourLikeAnAnimatedPhysical(){return true;}
bool fClearImpact;
bool fHitGroundInThisAge;
};
class plSwimStrategy : public plAnimatedMovementStrategy
class plSwimStrategy: public plMovementStrategy
{
public:
plSwimStrategy(plAGApplicator* rootApp, plPhysicalControllerCore* controller);
virtual ~plSwimStrategy() { }
plSwimStrategy(plPhysicalControllerCore *core);
virtual ~plSwimStrategy(){};
void SetSurface(plSwimRegionInterface *region, hsScalar surfaceHeight);
virtual void Apply(hsScalar delSecs);
virtual void AddContactNormals(hsVector3& vec);
void SetSurface(plSwimRegionInterface* region, hsScalar surfaceHeight);
hsScalar GetBuoyancy() const { return fBuoyancy; }
bool IsOnGround() const { return fOnGround; }
bool HadContacts() const { return fHadContacts; }
virtual void Update(hsScalar delSecs);
hsScalar GetBuoyancy() { return fBuoyancy; }
hsBool IsOnGround() { return fOnGround; }
hsBool HadContacts() { return fHadContacts; }
virtual void IAddContactNormals(hsVector3& vec);
protected:
virtual hsBool IRequireBehaviourLikeAnAnimatedPhysical(){return true;}
private:
void IAdjustBuoyancy();
hsScalar fBuoyancy;
hsBool fOnGround;
hsBool fHadContacts;
hsScalar fSurfaceHeight;
plSwimRegionInterface *fCurrentRegion;
bool fOnGround;
bool fHadContacts;
};
class plDynamicWalkingStrategy : public plWalkingStrategy
class plRidingAnimatedPhysicalStrategy : public plWalkingStrategy
{
public:
plDynamicWalkingStrategy(plAGApplicator* rootApp, plPhysicalControllerCore* controller);
virtual ~plDynamicWalkingStrategy() { }
plRidingAnimatedPhysicalStrategy(plPhysicalControllerCore *core ) :
fNeedVelocityOverride(false),fStartJump(false),plWalkingStrategy(core){};
virtual ~plRidingAnimatedPhysicalStrategy(){};
virtual void Apply(hsScalar delSecs);
virtual bool IsKinematic() { return false; }
virtual void Update(hsScalar delSecs);
virtual void PostStep(hsScalar delSecs);
bool IsOnGround() const { return fTimeInAir < kAirTimeThreshold || fFalseGround; }
bool IsOnFalseGround() const { return fFalseGround && !fGroundHit; }
void GroundHit() { fGroundHit = true; }
virtual void StartJump(){fStartJump = true;}
protected:
bool ICheckForGround(hsScalar& zVelocity);
virtual hsBool IRequireBehaviourLikeAnAnimatedPhysical(){return false;}
bool ICheckMove(const hsPoint3& startPos, const hsPoint3& desiredPos);
hsBool fNeedVelocityOverride;
hsVector3 fOverrideVelocity;
bool fStartJump;
};
#endif// PLPHYSICALCONTROLLERCORE_H

View File

@ -0,0 +1,152 @@
/*==LICENSE==*
CyanWorlds.com Engine - MMOG client, server and tools
Copyright (C) 2011 Cyan Worlds, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Additional permissions under GNU GPL version 3 section 7
If you modify this Program, or any covered work, by linking or
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
(or a modified version of those libraries),
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
licensors of this Program grant you additional
permission to convey the resulting work. Corresponding Source for a
non-source form of such a combination shall include the source code for
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
work.
You can contact Cyan Worlds, Inc. by email legal@cyan.com
or by snail mail at:
Cyan Worlds, Inc.
14617 N Newport Hwy
Mead, WA 99021
*==LICENSE==*/
#include "hsTypes.h"
#include "hsUtils.h"
#include "hsStream.h"
#include "hsResMgr.h"
#include "plJPEG/plJPEG.h"
#include "plGImage/plPNG.h"
#include "plGImage/plMipmap.h"
#include "plClientResMgr.h"
//// Singleton Instance ///////////////////////////////////////////////////////
plClientResMgr& plClientResMgr::Instance(void)
{
static plClientResMgr theInstance;
return theInstance;
}
plClientResMgr::plClientResMgr()
{
this->ClientResources = TRACKED_NEW std::map<std::string, plMipmap*>;
}
plClientResMgr::~plClientResMgr()
{
if (this->ClientResources) {
std::map<std::string, plMipmap*>::iterator it;
for (it = this->ClientResources->begin(); it != this->ClientResources->end(); ++it) {
if (it->second)
it->second->UnRef();
}
delete this->ClientResources;
}
}
void plClientResMgr::ILoadResources(const char* resfile)
{
if (!resfile) {
return;
}
wchar* wFilename = hsStringToWString(resfile);
hsUNIXStream in;
if (in.Open(wFilename, L"rb")) {
UInt32 header = in.ReadSwap32();
UInt32 version = in.ReadSwap32();
UInt32 num_resources = 0;
switch (version) {
case 1:
num_resources = in.ReadSwap32();
for (int i = 0; i < num_resources; i++) {
plMipmap* res_data = NULL;
UInt32 res_size = 0;
char* tmp_name = in.ReadSafeStringLong();
std::string res_name = std::string(tmp_name);
std::string res_type = res_name.substr(res_name.length() - 4, 4);
delete tmp_name;
// Version 1 doesn't encode format, so we'll try some simple
// extension sniffing
if (res_type == ".png") {
// Read resource stream size, but the PNG has that info in the header
// so it's not needed
res_size = in.ReadSwap32();
res_data = plPNG::Instance().ReadFromStream(&in);
} else if (res_type == ".jpg") {
// Don't read resource stream size, as plJPEG's reader will need it
res_data = plJPEG::Instance().ReadFromStream(&in);
} else {
// Original Myst5 format only is known to support Targa,
// so default fallback is targa
// TODO - Add plTarga::ReadFromStream()
// for now, just skip the unknown resource and put NULL into the map
res_size = in.ReadSwap32();
in.Skip(res_size);
}
(*this->ClientResources)[res_name] = res_data;
}
break;
default:
break;
}
in.Close();
}
delete wFilename;
}
plMipmap* plClientResMgr::getResource(const char* resname)
{
plMipmap* resmipmap = NULL;
std::map<std::string, plMipmap*>::iterator it = this->ClientResources->find(resname);
if (it != this->ClientResources->end()) {
resmipmap = it->second;
} else {
hsAssert(resmipmap, "Unknown client resource requested.");
}
return resmipmap;
}

View File

@ -0,0 +1,66 @@
/*==LICENSE==*
CyanWorlds.com Engine - MMOG client, server and tools
Copyright (C) 2011 Cyan Worlds, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Additional permissions under GNU GPL version 3 section 7
If you modify this Program, or any covered work, by linking or
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
(or a modified version of those libraries),
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
licensors of this Program grant you additional
permission to convey the resulting work. Corresponding Source for a
non-source form of such a combination shall include the source code for
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
work.
You can contact Cyan Worlds, Inc. by email legal@cyan.com
or by snail mail at:
Cyan Worlds, Inc.
14617 N Newport Hwy
Mead, WA 99021
*==LICENSE==*/
#ifndef _plClientResMgr_h
#define _plClientResMgr_h
#include <map>
#include <string>
class plMipmap;
class plClientResMgr {
protected:
std::map<std::string, plMipmap*>* ClientResources;
public:
plClientResMgr();
~plClientResMgr();
void ILoadResources(const char* resfile);
plMipmap* getResource(const char* resname);
static plClientResMgr& Instance(void);
};
#endif // _plClientResMgr_

View File

@ -0,0 +1,270 @@
/*==LICENSE==*
CyanWorlds.com Engine - MMOG client, server and tools
Copyright (C) 2011 Cyan Worlds, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Additional permissions under GNU GPL version 3 section 7
If you modify this Program, or any covered work, by linking or
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
(or a modified version of those libraries),
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
licensors of this Program grant you additional
permission to convey the resulting work. Corresponding Source for a
non-source form of such a combination shall include the source code for
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
work.
You can contact Cyan Worlds, Inc. by email legal@cyan.com
or by snail mail at:
Cyan Worlds, Inc.
14617 N Newport Hwy
Mead, WA 99021
*==LICENSE==*/
#include "hsTypes.h"
#include "hsStream.h"
#include "hsExceptions.h"
#include "hsUtils.h"
#include "plPNG.h"
#include "../plGImage/plMipmap.h"
#include <png.h>
#define PNGSIGSIZE 8
// Custom functions to read and write data from or to an hsStream
// used by libPNG's respective functions
void pngReadDelegate(png_structp png_ptr, png_bytep png_data, png_size_t length)
{
hsStream* inStream = (hsStream*)png_get_io_ptr(png_ptr);
inStream->Read(length, (UInt8*)png_data);
}
void pngWriteDelegate(png_structp png_ptr, png_bytep png_data, png_size_t length)
{
hsStream* outStream = (hsStream*)png_get_io_ptr(png_ptr);
outStream->Write(length, (UInt8*)png_data);
}
//// Singleton Instance ///////////////////////////////////////////////////////
plPNG& plPNG::Instance(void)
{
static plPNG theInstance;
return theInstance;
}
//// IRead ////////////////////////////////////////////////////////////////////
// Given an open hsStream, reads the PNG data off of the
// stream and decodes it into a new plMipmap. The mipmap's buffer ends up
// being a packed RGBA buffer.
// Returns a pointer to the new mipmap if successful, NULL otherwise.
plMipmap* plPNG::IRead(hsStream* inStream)
{
plMipmap* newMipmap = NULL;
png_structp png_ptr;
png_infop info_ptr;
png_infop end_info;
try {
// Check PNG Signature
png_byte sig[PNGSIGSIZE];
inStream->Read8Bytes((char*) sig);
if (!png_sig_cmp(sig, 0, PNGSIGSIZE)) {
// Allocate required structs
png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
if (!png_ptr) {
throw(false);
}
info_ptr = png_create_info_struct(png_ptr);
if (!info_ptr) {
png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL);
throw(false);
}
end_info = png_create_info_struct(png_ptr);
if (!end_info) {
png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL);
throw(false);
}
// Assign delegate function for reading from hsStream
png_set_read_fn(png_ptr, (png_voidp)inStream, pngReadDelegate);
// Get PNG Header information
png_set_sig_bytes(png_ptr, PNGSIGSIZE);
png_read_info(png_ptr, info_ptr);
png_uint_32 imgWidth = png_get_image_width(png_ptr, info_ptr);
png_uint_32 imgHeight = png_get_image_height(png_ptr, info_ptr);
png_uint_32 bitdepth = png_get_bit_depth(png_ptr, info_ptr);
png_uint_32 channels = png_get_channels(png_ptr, info_ptr);
png_uint_32 color_type = png_get_color_type(png_ptr, info_ptr);
// Convert images to RGB color space
switch (color_type) {
case PNG_COLOR_TYPE_PALETTE:
png_set_palette_to_rgb(png_ptr);
channels = 3;
break;
case PNG_COLOR_TYPE_GRAY:
if (bitdepth < 8) {
png_set_expand_gray_1_2_4_to_8(png_ptr);
}
bitdepth = 8;
break;
}
// Convert transparency (if needed) to a full alpha channel
if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)) {
png_set_tRNS_to_alpha(png_ptr);
channels += 1;
} else if (channels == 3) {
// Add an opaque alpha channel if still none exists
png_set_filler(png_ptr, 0xff, PNG_FILLER_AFTER);
channels = 4;
}
// Invert color byte-order as used by plMipmap for DirectX
png_set_bgr(png_ptr);
/// Construct a new mipmap to hold everything
newMipmap = TRACKED_NEW plMipmap(imgWidth, imgHeight, plMipmap::kARGB32Config, 1, plMipmap::kUncompressed);
char* destp = (char*)newMipmap->GetImage();
png_bytep* row_ptrs = TRACKED_NEW png_bytep[imgHeight];
const unsigned int stride = imgWidth * bitdepth * channels / 8;
// Assign row pointers to the appropriate locations in the newly-created Mipmap
for (size_t i = 0; i < imgHeight; i++) {
row_ptrs[i] = (png_bytep)destp + (i * stride);
}
png_read_image(png_ptr, row_ptrs);
png_read_end(png_ptr, end_info);
// Clean up allocated structs
png_destroy_read_struct(&png_ptr, &info_ptr, &end_info);
delete [] row_ptrs;
}
} catch (...) {
if (newMipmap != NULL) {
delete newMipmap;
newMipmap = NULL;
}
}
return newMipmap;
}
plMipmap* plPNG::ReadFromFile(const char* fileName)
{
wchar* wFilename = hsStringToWString(fileName);
plMipmap* retVal = ReadFromFile(wFilename);
delete [] wFilename;
return retVal;
}
plMipmap* plPNG::ReadFromFile(const wchar* fileName)
{
hsUNIXStream in;
if (!in.Open(fileName, L"rb")) {
return false;
}
plMipmap* ret = IRead(&in);
in.Close();
return ret;
}
hsBool plPNG::IWrite(plMipmap* source, hsStream* outStream)
{
hsBool result = true;
try {
// Allocate required structs
png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
if (!png_ptr) {
throw(false);
}
png_infop info_ptr = png_create_info_struct(png_ptr);
if (!info_ptr) {
png_destroy_write_struct(&png_ptr, (png_infopp)NULL);
throw(false);
}
// Assign delegate function for writing to hsStream
png_set_write_fn(png_ptr, (png_voidp)outStream, pngWriteDelegate, NULL);
UInt8 psize = source->GetPixelSize();
png_set_IHDR(png_ptr, info_ptr, source->GetWidth(), source->GetHeight(), 8, PNG_COLOR_TYPE_RGB_ALPHA,
PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
// Invert color byte-order as used by plMipmap for DirectX
png_set_bgr(png_ptr);
// Write out the image metadata
png_write_info(png_ptr, info_ptr);
char* srcp = (char*)source->GetImage();
png_bytep* row_ptrs = TRACKED_NEW png_bytep[source->GetHeight()];
const unsigned int stride = source->GetWidth() * source->GetPixelSize() / 8;
// Assign row pointers to the appropriate locations in the newly-created Mipmap
for (size_t i = 0; i < source->GetHeight(); i++) {
row_ptrs[i] = (png_bytep)srcp + (i * stride);
}
png_write_image(png_ptr, row_ptrs);
png_write_end(png_ptr, info_ptr);
// Clean up allocated structs
png_destroy_write_struct(&png_ptr, &info_ptr);
delete [] row_ptrs;
} catch (...) {
result = false;
}
return result;
}
hsBool plPNG::WriteToFile(const char* fileName, plMipmap* sourceData)
{
wchar* wFilename = hsStringToWString(fileName);
hsBool retVal = WriteToFile(wFilename, sourceData);
delete [] wFilename;
return retVal;
}
hsBool plPNG::WriteToFile(const wchar* fileName, plMipmap* sourceData)
{
hsUNIXStream out;
if (!out.Open(fileName, L"wb")) {
return false;
}
hsBool ret = IWrite(sourceData, &out);
out.Close();
return ret;
}

View File

@ -0,0 +1,71 @@
/*==LICENSE==*
CyanWorlds.com Engine - MMOG client, server and tools
Copyright (C) 2011 Cyan Worlds, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Additional permissions under GNU GPL version 3 section 7
If you modify this Program, or any covered work, by linking or
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
(or a modified version of those libraries),
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
licensors of this Program grant you additional
permission to convey the resulting work. Corresponding Source for a
non-source form of such a combination shall include the source code for
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
work.
You can contact Cyan Worlds, Inc. by email legal@cyan.com
or by snail mail at:
Cyan Worlds, Inc.
14617 N Newport Hwy
Mead, WA 99021
*==LICENSE==*/
#ifndef _plPNG_h
#define _plPNG_h
//// Class Definition /////////////////////////////////////////////////////////
class plMipmap;
class hsStream;
class plPNG {
protected:
plMipmap* IRead(hsStream* inStream);
hsBool IWrite(plMipmap* source, hsStream* outStream);
public:
plMipmap* ReadFromStream(hsStream* inStream) { return IRead(inStream); }
plMipmap* ReadFromFile(const char* fileName);
plMipmap* ReadFromFile(const wchar* fileName);
hsBool WriteToStream(hsStream* outStream, plMipmap* sourceData) { return IWrite(sourceData, outStream); }
hsBool WriteToFile(const char* fileName, plMipmap* sourceData);
hsBool WriteToFile(const wchar* fileName, plMipmap* sourceData);
static plPNG& Instance(void);
};
#endif // _plPNG_h

View File

@ -55,14 +55,11 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
#include "../plPipeline/plPlates.h"
#include "../plPipeline/plDebugText.h"
#include "../plGImage/plMipmap.h"
#include "hsWindows.h"
#include "../NucleusLib/inc/plPipeline.h"
// base size of the cursor
#define CURSOR_SIZE_X 0.0675f
#define CURSOR_SIZE_Y 0.09f
// The resolution that uses the base size of the cursor.
// All other resolutions will scale the cursor size to keep the same physical size.
#define BASE_WIDTH 1024
@ -447,16 +444,16 @@ void plMouseDevice::SetDisplayResolution(hsScalar Width, hsScalar Height)
IUpdateCursorSize();
}
void plMouseDevice::CreateCursor( int cursor )
void plMouseDevice::CreateCursor( char* cursor )
{
if( fCursor == nil )
{
plPlateManager::Instance().CreatePlate( &fCursor );
fCursor->CreateFromResource( MAKEINTRESOURCE( cursor ) );
fCursor->CreateFromResource(cursor);
}
else
{
fCursor->ReloadFromResource( MAKEINTRESOURCE( cursor ) );
fCursor->ReloadFromResource(cursor);
}
fCursor->SetPosition( 0, 0, 0 );
IUpdateCursorSize();
@ -470,7 +467,7 @@ void plMouseDevice::IUpdateCursorSize()
if(fCursor)
{
// set the size of the cursor based on resolution.
fCursor->SetSize( CURSOR_SIZE_X * BASE_WIDTH / fWidth, CURSOR_SIZE_Y * BASE_HEIGHT / fHeight );
fCursor->SetSize( 2*fCursor->GetMipmap()->GetWidth()/fWidth, 2*fCursor->GetMipmap()->GetHeight()/fHeight );
}
}
@ -557,7 +554,7 @@ void plMouseDevice::ShowCursor(hsBool override)
fInstance->fCursor->SetVisible( true );
}
void plMouseDevice::NewCursor(int cursor)
void plMouseDevice::NewCursor(char* cursor)
{
fInstance->fCursorID = cursor;
fInstance->CreateCursor(cursor);
@ -933,28 +930,3 @@ hsBool plMouseDevice::MsgReceive(plMessage* msg)
return false;
}
void plMouseDevice::HandleWindowActivate(bool bActive, HWND hWnd)
{
if ( bActive )
{
RECT rect;
::GetClientRect(hWnd,&rect);
// rect.right /= plInputManager::GetInstance()->GetMouseScale();
// rect.bottom /= plInputManager::GetInstance()->GetMouseScale();
::MapWindowPoints( hWnd, NULL, (POINT *)&rect, 2 );
::ClipCursor(&rect);
::ShowCursor( FALSE );
SetCapture(hWnd);
}
else
{
ReleaseCapture();
::ClipCursor(nil);
::ShowCursor( TRUE );
}
}

View File

@ -50,7 +50,6 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
#include "../pnInputCore/plOSMsg.h"
#include "hsBitVector.h"
#include "hsTemplates.h"
#include "../../apps/plClient/res/resource.h"
class plMessage;
enum plKeyDef;
struct plMouseInfo;
@ -142,27 +141,27 @@ protected:
class plPlate;
#define CURSOR_UP IDB_CURSOR_UP
#define CURSOR_DOWN IDB_CURSOR_DOWN
#define CURSOR_RIGHT IDB_CURSOR_RIGHT
#define CURSOR_LEFT IDB_CURSOR_LEFT
#define CURSOR_OPEN IDB_CURSOR_OPEN
#define CURSOR_GRAB IDB_CURSOR_GRAB
#define CURSOR_CLICKED IDB_CURSOR_CLICKED
#define CURSOR_POISED IDB_CURSOR_POISED
#define CURSOR_ARROW IDB_CURSOR_ARROW
#define CURSOR_4WAY_OPEN IDB_CURSOR_4WAYOPEN
#define CURSOR_4WAY_CLOSED IDB_CURSOR_4WAYCLOSED
#define CURSOR_UPDOWN_CLOSED IDB_CURSOR_UPDOWNCLOSED
#define CURSOR_UPDOWN_OPEN IDB_CURSOR_UPDOWNOPEN
#define CURSOR_LEFTRIGHT_CLOSED IDB_CURSOR_LEFTRIGHTCLOSED
#define CURSOR_LEFTRIGHT_OPEN IDB_CURSOR_LEFTRIGHTOPEN
#define CURSOR_OFFER_BOOK IDB_CURSOR_BOOK
#define CURSOR_OFFER_BOOK_HI IDB_CURSOR_BOOK_HIGHLIGHT
#define CURSOR_OFFER_BOOK_CLICKED IDB_CURSOR_BOOK_CLICKED
#define CURSOR_CLICK_DISABLED IDB_CURSOR_DISABLED
#define CURSOR_HAND IDB_CURSOR_HAND
#define CURSOR_UPWARD IDB_CURSOR_UPWARD
#define CURSOR_UP "cursor_up.png"
#define CURSOR_UPWARD "cursor_upward.png"
#define CURSOR_DOWN "cursor_down.png"
#define CURSOR_RIGHT "cursor_right.png"
#define CURSOR_LEFT "cursor_left.png"
#define CURSOR_OPEN "cursor_open.png"
#define CURSOR_GRAB "cursor_grab.png"
#define CURSOR_CLICKED "cursor_clicked.png"
#define CURSOR_POISED "cursor_poised.png"
#define CURSOR_4WAY_OPEN "cursor_4way_open.png"
#define CURSOR_4WAY_CLOSED "cursor_4way_closed.png"
#define CURSOR_UPDOWN_OPEN "cursor_updown_open.png"
#define CURSOR_UPDOWN_CLOSED "cursor_updown_closed.png"
#define CURSOR_LEFTRIGHT_OPEN "cursor_leftright_open.png"
#define CURSOR_LEFTRIGHT_CLOSED "cursor_leftright_closed.png"
#define CURSOR_OFFER_BOOK "cursor_book.png"
#define CURSOR_OFFER_BOOK_HI "cursor_book_poised.png"
#define CURSOR_OFFER_BOOK_CLICKED "cursor_book_clicked.png"
#define CURSOR_CLICK_DISABLED "cursor_disabled.png"
#define CURSOR_HAND "cursor_up.png"
#define CURSOR_ARROW "cursor_up.png"
class plInputEventMsg;
@ -173,7 +172,6 @@ public:
~plMouseDevice();
const char* GetInputName() { return "mouse"; }
void HandleWindowActivate(bool bActive, HWND hWnd);
hsBool HasControlFlag(int f) const { return fControlFlags.IsBitSet(f); }
void SetControlFlag(int f)
@ -195,7 +193,7 @@ public:
static void SetMsgAlways(bool b) { plMouseDevice::bMsgAlways = b; }
static void ShowCursor(hsBool override = false);
static void NewCursor(int cursor);
static void NewCursor(char* cursor);
static void HideCursor(hsBool override = false);
static bool GetHideCursor() { return plMouseDevice::bCursorHidden; }
static void SetCursorOpacity( hsScalar opacity = 1.f );
@ -225,11 +223,11 @@ protected:
plPlate *fCursor;
int fCursorID;
char* fCursorID;
static plMouseDevice* fInstance;
static plMouseInfo fDefaultMouseControlMap[];
void CreateCursor( int cursor );
void CreateCursor( char* cursor );
void IUpdateCursorSize();
static bool bMsgAlways;
static bool bCursorHidden;

View File

@ -251,7 +251,7 @@ void plInputInterfaceMgr::ResetClickableState()
void plInputInterfaceMgr::IUpdateCursor( Int32 newCursor )
{
int mouseCursorResID;
char* mouseCursorResID;
fCurrentCursor = newCursor;

View File

@ -563,10 +563,7 @@ void plDInputMgr::AddDevice(IDirectInputDevice8* device)
void plDInputMgr::ConfigureDevice()
{
::ClipCursor(nil);
::ShowCursor( TRUE );
ReleaseCapture();
DICOLORSET dics;
ZeroMemory(&dics, sizeof(DICOLORSET));
@ -587,13 +584,7 @@ void plDInputMgr::ConfigureDevice()
for (int i = 0; i < fDI->fSticks.Count(); i++)
fDI->fSticks[i]->fDevice->SetActionMap( fDI->fActionFormat, NULL, DIDSAM_FORCESAVE );
RECT rect;
::GetClientRect(fhWnd,&rect);
::ClientToScreen(fhWnd,(LPPOINT)&rect);
::ClipCursor(&rect);
::ShowCursor( FALSE );
SetCapture(fhWnd);
}
hsBool plDInputMgr::MsgReceive(plMessage* msg)

View File

@ -73,7 +73,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
#include "../plAvatar/plArmatureMod.h"
#include "../plAvatar/plAvBrain.h"
#include "../plAvatar/plAvatarMgr.h"
#include "../plAvatar/plPhysicalControllerCore.h"
#include "../plAvatar/plAvCallbackAction.h"
#include "../plModifier/plInterfaceInfoModifier.h"
#include "../pnModifier/plLogicModBase.h"
#include "../plVault/plVault.h"

View File

@ -328,11 +328,25 @@ plMipmap* plJPEG::ReadFromFile( const char *fileName )
plMipmap* plJPEG::ReadFromFile( const wchar *fileName )
{
// we use a stream because the IJL can't handle unicode
hsUNIXStream out;
if (!out.Open(fileName, L"rb"))
hsRAMStream tempstream;
hsUNIXStream in;
if (!in.Open(fileName, L"rb"))
return false;
plMipmap* ret = IRead(&out);
out.Close();
// The stream reader for JPEGs expects a 32-bit size at the start,
// so insert that into the stream before passing it on
in.FastFwd();
UInt32 fsize = in.GetPosition();
UInt8 *tempbuffer = TRACKED_NEW UInt8[fsize];
in.Rewind();
in.Read(fsize, tempbuffer);
tempstream.WriteSwap32(fsize);
tempstream.Write(fsize, tempbuffer);
delete [] tempbuffer;
tempstream.Rewind();
plMipmap* ret = IRead(&tempstream);
in.Close();
return ret;
}
@ -419,7 +433,7 @@ hsBool plJPEG::IWrite( plMipmap *source, hsStream *outStream )
jcProps.jquality = fWriteQuality;
#else
cinfo.jpeg_width = source->GetWidth(); // default
cinfo.jpeg_width = source->GetHeight(); // default
cinfo.jpeg_height = source->GetHeight(); // default
cinfo.jpeg_color_space = JCS_YCbCr; // default
// not sure how to set 4:1:1 but supposedly it's the default
jpeg_set_quality( &cinfo, fWriteQuality, TRUE );
@ -487,10 +501,23 @@ hsBool plJPEG::WriteToFile( const char *fileName, plMipmap *sourceData )
hsBool plJPEG::WriteToFile( const wchar *fileName, plMipmap *sourceData )
{
// we use a stream because the IJL can't handle unicode
hsRAMStream tempstream;
hsUNIXStream out;
if (!out.Open(fileName, L"wb"))
return false;
hsBool ret = IWrite(sourceData, &out);
hsBool ret = IWrite(sourceData, &tempstream);
if (ret)
{
// The stream writer for JPEGs prepends a 32-bit size,
// so remove that from the stream before saving to a file
tempstream.Rewind();
UInt32 fsize = tempstream.ReadSwap32();
UInt8 *tempbuffer = TRACKED_NEW UInt8[fsize];
tempstream.Read(fsize, tempbuffer);
out.Write(fsize, tempbuffer);
delete [] tempbuffer;
}
out.Close();
return ret;
}

View File

@ -54,6 +54,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
#include "../plMessage/plAvatarMsg.h"
#include "plPhysical.h"
#include "../plPhysical/plSimDefs.h"
#include "../plAvatar/plAvCallbackAction.h"
#include "../plAvatar/plAvBrainGeneric.h"

View File

@ -94,7 +94,8 @@ private:
}
else
{
plPXPhysicalControllerCore* controller = plPXPhysicalControllerCore::GetController(hitActor);
bool isController;
plPXPhysicalControllerCore* controller = plPXPhysicalControllerCore::GetController(hitActor,&isController);
if (controller)
{
objKey = controller->GetOwner();

View File

@ -0,0 +1,211 @@
/*==LICENSE==*
CyanWorlds.com Engine - MMOG client, server and tools
Copyright (C) 2011 Cyan Worlds, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Additional permissions under GNU GPL version 3 section 7
If you modify this Program, or any covered work, by linking or
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
(or a modified version of those libraries),
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
licensors of this Program grant you additional
permission to convey the resulting work. Corresponding Source for a
non-source form of such a combination shall include the source code for
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
work.
You can contact Cyan Worlds, Inc. by email legal@cyan.com
or by snail mail at:
Cyan Worlds, Inc.
14617 N Newport Hwy
Mead, WA 99021
*==LICENSE==*/
#ifndef plPXPhysicalController_h_inc
#define plPXPhysicalController_h_inc
#include "../plAvatar/plAvCallbackAction.h"
#include "hsQuat.h"
#define PHYSX_ONLY_TRIGGER_FROM_KINEMATIC 1
class NxController;
class NxCapsuleController;
class NxActor;
class plCoordinateInterface;
class plPhysicalProxy;
class plDrawableSpans;
class hsGMaterial;
class NxCapsule;
#ifndef PLASMA_EXTERNAL_RELEASE
class plDbgCollisionInfo
{
public:
plSceneObject *fSO;
hsVector3 fNormal;
hsBool fOverlap;
};
#endif // PLASMA_EXTERNAL_RELEASE
class plPXPhysicalController : public plPhysicalController
{
public:
plPXPhysicalController(plKey ownerSO, hsScalar height, hsScalar radius);
virtual ~plPXPhysicalController();
virtual void Enable(bool enable);
virtual bool IsEnabled() const { return fEnable; }
virtual void SetLOSDB(plSimDefs::plLOSDB losDB) { fLOSDB = losDB; }
plSimDefs::plLOSDB GetLOSDB() const { return fLOSDB; }
virtual void SetVelocities(const hsVector3& linearVel, hsScalar angVel)
{
fLinearVelocity = linearVel;
fAngularVelocity = angVel;
}
virtual const hsVector3& GetLinearVelocity() const { return fAchievedLinearVelocity; }
virtual void ResetAchievedLinearVelocity() { fAchievedLinearVelocity.Set(0.f, 0.f, 0.f); }
virtual plKey GetSubworld() const { return fWorldKey; }
virtual void SetSubworld(plKey world);
virtual bool IsOnGround() const { return fTimeInAir < kAirTimeThreshold || fFalseGround; }
virtual bool IsOnFalseGround() const { return fFalseGround && !fGroundHit; }
virtual void GroundHit() { fGroundHit = true; }
virtual hsScalar GetAirTime() const { return fTimeInAir; }
virtual void ResetAirTime() { fTimeInAir = 0.f; }
virtual void AddSlidingNormal(hsVector3 vec);
virtual hsTArray<hsVector3>* GetSlidingNormals() { return &fSlidingNormals; }
virtual plPhysical* GetPushingPhysical() const { return fPushingPhysical; }
virtual bool GetFacingPushingPhysical() const { return fFacingPushingPhysical; }
virtual const plCoordinateInterface* GetSubworldCI() const;
virtual void GetState(hsPoint3& pos, float& zRot);
virtual void SetState(const hsPoint3& pos, float zRot);
plKey GetOwner() const { return fOwner; }
// Called by the simulation mgr each frame
static void Update(bool prestep, hsScalar delSecs);
// Used by the LOS mgr to find the controller for an actor it hit
static plPXPhysicalController* GetController(NxActor& actor, bool* isController);
// test to see if there are any controllers (i.e. avatars) in this subworld
static bool plPXPhysicalController::AnyControllersInThisWorld(plKey world);
static int plPXPhysicalController::NumControllers();
static int plPXPhysicalController::GetControllersInThisSubWorld(plKey world, int maxToReturn,
plPXPhysicalController** bufferout);
static int plPXPhysicalController::GetNumberOfControllersInThisSubWorld(plKey world);
// Call this if a static physical in the scene has changed (unloaded,
// collision enabled/disabled, etc)
static void RebuildCache();
virtual void GetPositionSim(hsPoint3& pos) const { IGetPositionSim(pos); }
virtual void Kinematic(bool state);
virtual bool IsKinematic();
virtual void GetKinematicPosition(hsPoint3& pos);
virtual plDrawableSpans* CreateProxy(hsGMaterial* mat, hsTArray<UInt32>& idx, plDrawableSpans* addTo);
virtual const hsMatrix44& GetPrevSubworldW2L() { return fPrevSubworldW2L; }
virtual void SetSeek(bool seek){fSeeking=seek;}
virtual void GetWorldSpaceCapsule(NxCapsule& cap);
#ifndef PLASMA_EXTERNAL_RELEASE
static hsBool fDebugDisplay;
#endif // PLASMA_EXTERNAL_RELEASE
protected:
static const hsScalar kAirTimeThreshold;
friend class PXControllerHitReport;
static plPXPhysicalController* FindController(NxController* controller);
void IApply(hsScalar delSecs);
void ISendUpdates(hsScalar delSecs);
void ICheckForFalseGround();
void ISetGlobalLoc(const hsMatrix44& l2w);
void IMatchKinematicToController();
void IMoveKinematicToController(hsPoint3& pos);
void ISetKinematicLoc(const hsMatrix44& l2w);
void IGetPositionSim(hsPoint3& pos) const;
void ICreateController();
void IDeleteController();
void IInformDetectors(bool entering);
plKey fOwner;
plKey fWorldKey;
hsScalar fRadius, fHeight;
NxCapsuleController* fController;
// this is the kinematic actor for triggering things when the avatar is collision-less during behaviors
NxActor* fKinematicActor;
hsVector3 fLinearVelocity;
hsScalar fAngularVelocity;
hsVector3 fAchievedLinearVelocity;
// The global position and rotation of the avatar last time we set it (so we
// can detect if someone else moves him)
hsMatrix44 fLastGlobalLoc;
//
hsPoint3 fLocalPosition;
hsQuat fLocalRotation;
hsMatrix44 fPrevSubworldW2L;
bool fEnable;
bool fEnableChanged;
plSimDefs::plLOSDB fLOSDB;
bool fKinematic;
bool fKinematicChanged;
bool fKinematicEnableNextUpdate;
bool fGroundHit;
bool fFalseGround;
hsScalar fTimeInAir;
hsTArray<hsVector3> fSlidingNormals;
hsTArray<hsVector3> fPrevSlidingNormals;
#ifndef PLASMA_EXTERNAL_RELEASE
hsTArray<plDbgCollisionInfo> fDbgCollisionInfo;
void IDrawDebugDisplay();
#endif // PLASMA_EXTERNAL_RELEASE
plPhysical* fPushingPhysical;
bool fFacingPushingPhysical;
plPhysicalProxy* fProxyGen; // visual proxy for debugging
bool fHitHead;
bool fSeeking;
};
#endif // plPXPhysicalController_h_inc

View File

@ -40,19 +40,22 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
*==LICENSE==*/
#include "../plAvatar/plPhysicalControllerCore.h"
#include "hsQuat.h"
#define PHYSX_ONLY_TRIGGER_FROM_KINEMATIC 1
class NxController;
class NxCapsuleController;
class NxActor;
class NxCapsule;
class PXControllerHitReport;
class plCoordinateInterface;
class plPhysicalProxy;
class plDrawableSpans;
class hsGMaterial;
class NxCapsule;
class plSceneObject;
class plPXPhysical;
class PXControllerHitReportWalk;
class plCollideMsg;
#ifndef PLASMA_EXTERNAL_RELEASE
class plDbgCollisionInfo
{
public:
@ -61,113 +64,98 @@ public:
hsBool fOverlap;
};
#endif // PLASMA_EXTERNAL_RELEASE
class plPXPhysicalControllerCore: public plPhysicalControllerCore
{
friend PXControllerHitReportWalk;
public:
plPXPhysicalControllerCore(plKey ownerSO, hsScalar height, hsScalar radius, bool human);
plPXPhysicalControllerCore(plKey ownerSO, hsScalar height, hsScalar radius);
~plPXPhysicalControllerCore();
// An ArmatureMod has its own idea about when physics should be enabled/disabled.
// Use plArmatureModBase::EnablePhysics() instead.
//should actually be a 3 vector but everywhere else it is assumed to be just around Z
inline virtual void Move(hsVector3 displacement, unsigned int collideWith, unsigned int &collisionResults);
// A disabled avatar doesn't move or accumulate air time if he's off the ground.
virtual void Enable(bool enable);
// Subworld
virtual void SetSubworld(plKey world);
virtual void SetSubworld(plKey world) ;
virtual const plCoordinateInterface* GetSubworldCI() const ;
// For the avatar SDL only
virtual void GetState(hsPoint3& pos, float& zRot);
virtual void SetState(const hsPoint3& pos, float zRot);
// Movement strategy
virtual void SetMovementStrategy(plMovementStrategy* strategy);
// Global location
virtual void SetGlobalLoc(const hsMatrix44& l2w);
// Local Sim Position
virtual void GetPositionSim(hsPoint3& pos);
// Move kinematic controller
virtual void Move(hsVector3 displacement, unsigned int collideWith, unsigned int &collisionResults);
// Set linear velocity on dynamic controller
virtual void SetLinearVelocitySim(const hsVector3& linearVel);
// Sweep the controller path from startPos through endPos
virtual int SweepControllerPath(const hsPoint3& startPos, const hsPoint3& endPos, hsBool vsDynamics,
hsBool vsStatics, UInt32& vsSimGroups, std::vector<plControllerSweepRecord>& hits);
// any clean up for the controller should go here
// kinematic stuff .... should be just for when playing a behavior...
virtual void Kinematic(bool state);
virtual bool IsKinematic();
virtual void GetKinematicPosition(hsPoint3& pos);
virtual const hsMatrix44& GetPrevSubworldW2L(){ return fPrevSubworldW2L; }
//when seeking no longer want to interact with exclusion regions
virtual void GetWorldSpaceCapsule(NxCapsule& cap) const;
static void RebuildCache();
virtual const hsMatrix44& GetLastGlobalLoc(){return fLastGlobalLoc;}
virtual void SetKinematicLoc(const hsMatrix44& l2w){ISetKinematicLoc(l2w);}
virtual void SetGlobalLoc(const hsMatrix44& l2w){ISetGlobalLoc(l2w);}
virtual void HandleEnableChanged();
virtual void HandleKinematicChanged();
virtual void HandleKinematicEnableNextUpdate();
virtual void GetPositionSim(hsPoint3& pos){IGetPositionSim(pos);}
virtual void MoveKinematicToController(hsPoint3& pos);
virtual const hsPoint3& GetLocalPosition(){return fLocalPosition;}
virtual void SetControllerDimensions(hsScalar radius, hsScalar height);
virtual void LeaveAge();
// Capsule
void GetWorldSpaceCapsule(NxCapsule& cap) const;
// Create Proxy for debug rendering
plDrawableSpans* CreateProxy(hsGMaterial* mat, hsTArray<UInt32>& idx, plDrawableSpans* addTo);
// Dynamic hits
void AddDynamicHit(plPXPhysical* phys);
virtual void UpdateControllerAndPhysicalRep();
//////////////////////////////////////////
//Static Helper Functions
////////////////////////////////////////
// Call pre-sim to apply movement to controllers
static void Apply(hsScalar delSecs);
// Call post-sim to update controllers
static void Update(int numSubSteps, hsScalar alpha);
// Update controllers when not performing a physics step
static void UpdateNonPhysical(hsScalar alpha);
// Rebuild the controller cache, required when a static actor in the scene has changed.
static void RebuildCache();
// Returns the plPXPhysicalControllerCore associated with the given NxActor
static plPXPhysicalControllerCore* GetController(NxActor& actor);
// Subworld controller queries
// Used by the LOS mgr to find the controller for an actor it hit
static plPXPhysicalControllerCore* GetController(NxActor& actor, bool* isController);
// test to see if there are any controllers (i.e. avatars) in this subworld
static bool AnyControllersInThisWorld(plKey world);
static int GetNumberOfControllersInThisSubWorld(plKey world);
static int GetControllersInThisSubWorld(plKey world, int maxToReturn, plPXPhysicalControllerCore** bufferout);
// Controller count
static int NumControllers();
static void SetMaxNumberOfControllers(int max) { fPXControllersMax = max; }
static int fPXControllersMax;
static int GetControllersInThisSubWorld(plKey world, int maxToReturn,
plPXPhysicalControllerCore** bufferout);
static int GetNumberOfControllersInThisSubWorld(plKey world);
static void UpdatePrestep(hsScalar delSecs);
static void UpdatePoststep(hsScalar delSecs);
static void UpdatePostSimStep(hsScalar delSecs);
virtual plDrawableSpans* CreateProxy(hsGMaterial* mat, hsTArray<UInt32>& idx, plDrawableSpans* addTo);
#ifndef PLASMA_EXTERNAL_RELEASE
static hsBool fDebugDisplay;
#endif
#endif // PLASMA_EXTERNAL_RELEASE
static void plPXPhysicalControllerCore::SetMaxNumberOfControllers(int max) { fPXControllersMax = max; }
static int fPXControllersMax;
virtual int SweepControllerPath(const hsPoint3& startPos, const hsPoint3& endPos, hsBool vsDynamics, hsBool vsStatics, UInt32& vsSimGroups, std::multiset< plControllerSweepRecord >& WhatWasHitOut);
virtual void BehaveLikeAnimatedPhysical(hsBool actLikeAnAnimatedPhys);
virtual hsBool BehavingLikeAnAnimatedPhysical();
virtual const hsVector3& GetLinearVelocity();
virtual void SetLinearVelocity(const hsVector3& linearVel);
//should actually be a 3 vector but everywhere else it is assumed to be just around Z
virtual void SetAngularVelocity(const hsScalar angvel);
virtual void SetVelocities(const hsVector3& linearVel, hsScalar angVel);
protected:
friend class PXControllerHitReport;
virtual void IHandleEnableChanged();
void IInformDetectors(bool entering);
void ICreateController(const hsPoint3& pos);
static plPXPhysicalControllerCore* FindController(NxController* controller);
void ISetGlobalLoc(const hsMatrix44& l2w);
void IMatchKinematicToController();
void IMatchControllerToKinematic();
void ISetKinematicLoc(const hsMatrix44& l2w);
void IGetPositionSim(hsPoint3& pos) const;
void ICreateController();
void IDeleteController();
void IDispatchQueuedMsgs();
void IProcessDynamicHits();
#ifndef PLASMA_EXTERNAL_RELEASE
void IDrawDebugDisplay();
hsTArray<plDbgCollisionInfo> fDbgCollisionInfo;
#endif
std::vector<plCollideMsg*> fQueuedCollideMsgs;
std::vector<plPXPhysical*> fDynamicHits;
void IInformDetectors(bool entering,bool deferUntilNextSim);
void plPXPhysicalControllerCore::ICreateController(const hsPoint3& pos);
NxActor* fKinematicActor;
NxCapsuleController* fController;
NxActor* fActor;
plPhysicalProxy* fProxyGen;
bool fKinematicCCT;
bool fHuman;
#ifndef PLASMA_EXTERNAL_RELEASE
hsTArray<plDbgCollisionInfo> fDbgCollisionInfo;
void IDrawDebugDisplay();
#endif
void plPXPhysicalControllerCore::IHandleResize();
hsTArray<plCollideMsg*> fQueuedCollideMsgs;
hsScalar fPreferedRadius;
hsScalar fPreferedHeight;
// The global position and rotation of the avatar last time we set it (so we
// can detect if someone else moves him)
plPhysicalProxy* fProxyGen;
hsBool fBehavingLikeAnimatedPhys;
};

Some files were not shown because too many files have changed in this diff Show More