[Scummvm-cvs-logs] SF.net SVN: scummvm:[33230] scummvm/trunk

fingolfin at users.sourceforge.net fingolfin at users.sourceforge.net
Wed Jul 23 11:02:50 CEST 2008


Revision: 33230
          http://scummvm.svn.sourceforge.net/scummvm/?rev=33230&view=rev
Author:   fingolfin
Date:     2008-07-23 09:02:47 +0000 (Wed, 23 Jul 2008)

Log Message:
-----------
Added Tinsel engine to main repos (no news item for it ON PURPOSE)

Modified Paths:
--------------
    scummvm/trunk/base/plugins.cpp
    scummvm/trunk/configure
    scummvm/trunk/engines/engines.mk

Added Paths:
-----------
    scummvm/trunk/dists/msvc8/tinsel.vcproj
    scummvm/trunk/dists/msvc9/tinsel.vcproj
    scummvm/trunk/engines/tinsel/
    scummvm/trunk/engines/tinsel/actors.cpp
    scummvm/trunk/engines/tinsel/actors.h
    scummvm/trunk/engines/tinsel/anim.cpp
    scummvm/trunk/engines/tinsel/anim.h
    scummvm/trunk/engines/tinsel/background.cpp
    scummvm/trunk/engines/tinsel/background.h
    scummvm/trunk/engines/tinsel/bg.cpp
    scummvm/trunk/engines/tinsel/cliprect.cpp
    scummvm/trunk/engines/tinsel/cliprect.h
    scummvm/trunk/engines/tinsel/config.cpp
    scummvm/trunk/engines/tinsel/config.h
    scummvm/trunk/engines/tinsel/coroutine.h
    scummvm/trunk/engines/tinsel/cursor.cpp
    scummvm/trunk/engines/tinsel/cursor.h
    scummvm/trunk/engines/tinsel/debugger.cpp
    scummvm/trunk/engines/tinsel/debugger.h
    scummvm/trunk/engines/tinsel/detection.cpp
    scummvm/trunk/engines/tinsel/dw.h
    scummvm/trunk/engines/tinsel/effect.cpp
    scummvm/trunk/engines/tinsel/events.cpp
    scummvm/trunk/engines/tinsel/events.h
    scummvm/trunk/engines/tinsel/faders.cpp
    scummvm/trunk/engines/tinsel/faders.h
    scummvm/trunk/engines/tinsel/film.h
    scummvm/trunk/engines/tinsel/font.cpp
    scummvm/trunk/engines/tinsel/font.h
    scummvm/trunk/engines/tinsel/graphics.cpp
    scummvm/trunk/engines/tinsel/graphics.h
    scummvm/trunk/engines/tinsel/handle.cpp
    scummvm/trunk/engines/tinsel/handle.h
    scummvm/trunk/engines/tinsel/heapmem.cpp
    scummvm/trunk/engines/tinsel/heapmem.h
    scummvm/trunk/engines/tinsel/inventory.cpp
    scummvm/trunk/engines/tinsel/inventory.h
    scummvm/trunk/engines/tinsel/mareels.cpp
    scummvm/trunk/engines/tinsel/module.mk
    scummvm/trunk/engines/tinsel/move.cpp
    scummvm/trunk/engines/tinsel/move.h
    scummvm/trunk/engines/tinsel/multiobj.cpp
    scummvm/trunk/engines/tinsel/multiobj.h
    scummvm/trunk/engines/tinsel/music.cpp
    scummvm/trunk/engines/tinsel/music.h
    scummvm/trunk/engines/tinsel/object.cpp
    scummvm/trunk/engines/tinsel/object.h
    scummvm/trunk/engines/tinsel/palette.cpp
    scummvm/trunk/engines/tinsel/palette.h
    scummvm/trunk/engines/tinsel/pcode.cpp
    scummvm/trunk/engines/tinsel/pcode.h
    scummvm/trunk/engines/tinsel/pdisplay.cpp
    scummvm/trunk/engines/tinsel/pid.h
    scummvm/trunk/engines/tinsel/play.cpp
    scummvm/trunk/engines/tinsel/polygons.cpp
    scummvm/trunk/engines/tinsel/polygons.h
    scummvm/trunk/engines/tinsel/rince.cpp
    scummvm/trunk/engines/tinsel/rince.h
    scummvm/trunk/engines/tinsel/saveload.cpp
    scummvm/trunk/engines/tinsel/savescn.cpp
    scummvm/trunk/engines/tinsel/savescn.h
    scummvm/trunk/engines/tinsel/scene.cpp
    scummvm/trunk/engines/tinsel/scene.h
    scummvm/trunk/engines/tinsel/sched.cpp
    scummvm/trunk/engines/tinsel/sched.h
    scummvm/trunk/engines/tinsel/scn.cpp
    scummvm/trunk/engines/tinsel/scn.h
    scummvm/trunk/engines/tinsel/scroll.cpp
    scummvm/trunk/engines/tinsel/scroll.h
    scummvm/trunk/engines/tinsel/serializer.h
    scummvm/trunk/engines/tinsel/sound.cpp
    scummvm/trunk/engines/tinsel/sound.h
    scummvm/trunk/engines/tinsel/strres.cpp
    scummvm/trunk/engines/tinsel/strres.h
    scummvm/trunk/engines/tinsel/text.cpp
    scummvm/trunk/engines/tinsel/text.h
    scummvm/trunk/engines/tinsel/timers.cpp
    scummvm/trunk/engines/tinsel/timers.h
    scummvm/trunk/engines/tinsel/tinlib.cpp
    scummvm/trunk/engines/tinsel/tinlib.h
    scummvm/trunk/engines/tinsel/tinsel.cpp
    scummvm/trunk/engines/tinsel/tinsel.h
    scummvm/trunk/engines/tinsel/token.cpp
    scummvm/trunk/engines/tinsel/token.h

Modified: scummvm/trunk/base/plugins.cpp
===================================================================
--- scummvm/trunk/base/plugins.cpp	2008-07-23 09:01:33 UTC (rev 33229)
+++ scummvm/trunk/base/plugins.cpp	2008-07-23 09:02:47 UTC (rev 33230)
@@ -140,6 +140,9 @@
 		#if PLUGIN_ENABLED_STATIC(SWORD2)
 		LINK_PLUGIN(SWORD2)
 		#endif
+		#if PLUGIN_ENABLED_STATIC(TINSEL)
+		LINK_PLUGIN(TINSEL)
+		#endif
 		#if PLUGIN_ENABLED_STATIC(TOUCHE)
 		LINK_PLUGIN(TOUCHE)
 		#endif

Modified: scummvm/trunk/configure
===================================================================
--- scummvm/trunk/configure	2008-07-23 09:01:33 UTC (rev 33229)
+++ scummvm/trunk/configure	2008-07-23 09:02:47 UTC (rev 33230)
@@ -100,6 +100,7 @@
 add_engine sky "Beneath a Steel Sky" yes
 add_engine sword1 "Broken Sword 1" yes
 add_engine sword2 "Broken Sword 2" yes
+add_engine tinsel "Tinsel" no
 add_engine touche "Touche: The Adventures of the Fifth Musketeer" yes
 
 _endian=unknown

Added: scummvm/trunk/dists/msvc8/tinsel.vcproj
===================================================================
--- scummvm/trunk/dists/msvc8/tinsel.vcproj	                        (rev 0)
+++ scummvm/trunk/dists/msvc8/tinsel.vcproj	2008-07-23 09:02:47 UTC (rev 33230)
@@ -0,0 +1,502 @@
+<?xml version="1.0" encoding="windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8,00"
+	Name="tinsel"
+	ProjectGUID="{22AA7760-2C91-11DD-BD0B-0800200C9A66}"
+	RootNamespace="tinsel"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="tinsel_Debug"
+			IntermediateDirectory="tinsel_Debug"
+			ConfigurationType="4"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions="/wd4201 /wd4512 /wd4511 /wd4100 /wd4121 /wd4310 /wd4706 /wd4127 /wd4189 /wd4702 /wd4996"
+				Optimization="0"
+				AdditionalIncludeDirectories="../..;../../engines"
+				PreprocessorDefinitions="WIN32;_DEBUG;USE_ZLIB;USE_MAD;USE_VORBIS"
+				MinimalRebuild="true"
+				ExceptionHandling="1"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="1"
+				BufferSecurityCheck="true"
+				EnableFunctionLevelLinking="true"
+				ForceConformanceInForLoopScope="true"
+				UsePrecompiledHeader="0"
+				WarningLevel="4"
+				WarnAsError="false"
+				SuppressStartupBanner="false"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="$(OutDir)/tinsel.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="tinsel_Release"
+			IntermediateDirectory="tinsel_Release"
+			ConfigurationType="4"
+			CharacterSet="2"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions="/wd4201 /wd4512 /wd4511 /wd4100 /wd4121 /wd4310 /wd4706 /wd4127 /wd4189 /wd4702 /wd4996"
+				Optimization="3"
+				InlineFunctionExpansion="2"
+				OmitFramePointers="true"
+				AdditionalIncludeDirectories="../../;../../engines"
+				PreprocessorDefinitions="WIN32;NDEBUG;USE_ZLIB;USE_MAD;USE_VORBIS"
+				StringPooling="true"
+				ExceptionHandling="1"
+				RuntimeLibrary="0"
+				BufferSecurityCheck="false"
+				EnableFunctionLevelLinking="false"
+				ForceConformanceInForLoopScope="true"
+				UsePrecompiledHeader="0"
+				WarningLevel="4"
+				WarnAsError="true"
+				DebugInformationFormat="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="$(OutDir)/tinsel.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="libcoro"
+			>
+			<File
+				RelativePath="..\..\engines\tinsel\libcoro\coro.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\engines\tinsel\libcoro\coro.h"
+				>
+			</File>
+		</Filter>
+		<File
+			RelativePath="..\..\engines\tinsel\actors.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\actors.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\anim.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\anim.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\background.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\background.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\bg.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\cliprect.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\cliprect.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\config.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\config.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\cursor.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\cursor.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\debugger.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\debugger.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\detection.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\dos_hand.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\dw.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\dwtypes.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\effect.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\events.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\events.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\faders.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\faders.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\fileio.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\film.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\font.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\font.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\graphics.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\graphics.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\handle.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\heapmem.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\heapmem.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\inventory.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\inventory.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\mareels.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\move.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\move.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\multiobj.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\multiobj.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\music.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\music.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\object.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\object.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\palette.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\palette.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\pcode.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\pcode.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\pdisplay.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\pid.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\play.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\polygons.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\polygons.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\rince.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\rince.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\saveload.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\savescn.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\savescn.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\scene.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\scene.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\sched.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\sched.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\scn.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\scn.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\scroll.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\scroll.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\serializer.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\sound.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\sound.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\strres.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\strres.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\text.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\text.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\timers.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\timers.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\tinlib.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\tinlib.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\tinsel.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\tinsel.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\token.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\token.h"
+			>
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>


Property changes on: scummvm/trunk/dists/msvc8/tinsel.vcproj
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:eol-style
   + native

Added: scummvm/trunk/dists/msvc9/tinsel.vcproj
===================================================================
--- scummvm/trunk/dists/msvc9/tinsel.vcproj	                        (rev 0)
+++ scummvm/trunk/dists/msvc9/tinsel.vcproj	2008-07-23 09:02:47 UTC (rev 33230)
@@ -0,0 +1,503 @@
+<?xml version="1.0" encoding="windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9,00"
+	Name="tinsel"
+	ProjectGUID="{22AA7760-2C91-11DD-BD0B-0800200C9A66}"
+	RootNamespace="tinsel"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="131072"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="tinsel_Debug"
+			IntermediateDirectory="tinsel_Debug"
+			ConfigurationType="4"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions="/wd4201 /wd4512 /wd4511 /wd4100 /wd4121 /wd4310 /wd4706 /wd4127 /wd4189 /wd4702 /wd4996"
+				Optimization="0"
+				AdditionalIncludeDirectories="../..;../../engines"
+				PreprocessorDefinitions="WIN32;_DEBUG;USE_ZLIB;USE_MAD;USE_VORBIS"
+				MinimalRebuild="true"
+				ExceptionHandling="1"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="1"
+				BufferSecurityCheck="true"
+				EnableFunctionLevelLinking="true"
+				ForceConformanceInForLoopScope="true"
+				UsePrecompiledHeader="0"
+				WarningLevel="4"
+				WarnAsError="false"
+				SuppressStartupBanner="false"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="$(OutDir)/tinsel.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="tinsel_Release"
+			IntermediateDirectory="tinsel_Release"
+			ConfigurationType="4"
+			CharacterSet="2"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions="/wd4201 /wd4512 /wd4511 /wd4100 /wd4121 /wd4310 /wd4706 /wd4127 /wd4189 /wd4702 /wd4996"
+				Optimization="3"
+				InlineFunctionExpansion="2"
+				OmitFramePointers="true"
+				AdditionalIncludeDirectories="../../;../../engines"
+				PreprocessorDefinitions="WIN32;NDEBUG;USE_ZLIB;USE_MAD;USE_VORBIS"
+				StringPooling="true"
+				ExceptionHandling="1"
+				RuntimeLibrary="0"
+				BufferSecurityCheck="false"
+				EnableFunctionLevelLinking="false"
+				ForceConformanceInForLoopScope="true"
+				UsePrecompiledHeader="0"
+				WarningLevel="4"
+				WarnAsError="true"
+				DebugInformationFormat="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="$(OutDir)/tinsel.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="libcoro"
+			>
+			<File
+				RelativePath="..\..\engines\tinsel\libcoro\coro.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\engines\tinsel\libcoro\coro.h"
+				>
+			</File>
+		</Filter>
+		<File
+			RelativePath="..\..\engines\tinsel\actors.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\actors.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\anim.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\anim.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\background.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\background.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\bg.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\cliprect.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\cliprect.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\config.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\config.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\cursor.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\cursor.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\debugger.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\debugger.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\detection.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\dos_hand.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\dw.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\dwtypes.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\effect.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\events.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\events.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\faders.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\faders.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\fileio.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\film.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\font.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\font.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\graphics.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\graphics.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\handle.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\heapmem.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\heapmem.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\inventory.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\inventory.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\mareels.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\move.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\move.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\multiobj.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\multiobj.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\music.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\music.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\object.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\object.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\palette.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\palette.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\pcode.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\pcode.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\pdisplay.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\pid.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\play.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\polygons.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\polygons.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\rince.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\rince.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\saveload.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\savescn.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\savescn.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\scene.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\scene.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\sched.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\sched.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\scn.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\scn.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\scroll.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\scroll.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\serializer.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\sound.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\sound.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\strres.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\strres.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\text.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\text.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\timers.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\timers.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\tinlib.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\tinlib.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\tinsel.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\tinsel.h"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\token.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\tinsel\token.h"
+			>
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>


Property changes on: scummvm/trunk/dists/msvc9/tinsel.vcproj
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:eol-style
   + native

Modified: scummvm/trunk/engines/engines.mk
===================================================================
--- scummvm/trunk/engines/engines.mk	2008-07-23 09:01:33 UTC (rev 33229)
+++ scummvm/trunk/engines/engines.mk	2008-07-23 09:02:47 UTC (rev 33230)
@@ -97,6 +97,11 @@
 MODULES += engines/sword2
 endif
 
+ifdef ENABLE_TINSEL
+DEFINES += -DENABLE_TINSEL=$(ENABLE_TINSEL)
+MODULES += engines/tinsel
+endif
+
 ifdef ENABLE_TOUCHE
 DEFINES += -DENABLE_TOUCHE=$(ENABLE_TOUCHE)
 MODULES += engines/touche

Added: scummvm/trunk/engines/tinsel/actors.cpp
===================================================================
--- scummvm/trunk/engines/tinsel/actors.cpp	                        (rev 0)
+++ scummvm/trunk/engines/tinsel/actors.cpp	2008-07-23 09:02:47 UTC (rev 33230)
@@ -0,0 +1,896 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ * Handles things to do with actors, delegates much moving actor stuff.
+ */
+
+#include "tinsel/actors.h"
+#include "tinsel/events.h"
+#include "tinsel/film.h"	// for FREEL
+#include "tinsel/handle.h"
+#include "tinsel/inventory.h"	// INV_NOICON
+#include "tinsel/move.h"
+#include "tinsel/multiobj.h"
+#include "tinsel/object.h"	// for POBJECT
+#include "tinsel/pcode.h"
+#include "tinsel/pid.h"
+#include "tinsel/rince.h"
+#include "tinsel/sched.h"
+#include "tinsel/serializer.h"
+#include "tinsel/token.h"
+
+#include "common/util.h"
+
+namespace Tinsel {
+
+
+//----------------- LOCAL DEFINES --------------------
+
+
+#include "common/pack-start.h"	// START STRUCT PACKING
+
+/** actor struct - one per actor */
+struct ACTOR_STRUC {
+	int32 masking;			//!< type of actor masking
+	SCNHANDLE hActorId;		//!< handle actor ID string index
+	SCNHANDLE hActorCode;	//!< handle to actor script
+} PACKED_STRUCT;
+
+#include "common/pack-end.h"	// END STRUCT PACKING
+
+
+
+//----------------- LOCAL GLOBAL DATA --------------------
+
+static int LeadActorId = 0;		// The lead actor
+
+static int NumActors = 0;	// The total number of actors in the game
+
+struct ACTORINFO {
+	bool		alive;		// TRUE == alive
+	bool		hidden;		// TRUE == hidden
+	bool		completed;	// TRUE == script played out
+
+	int			x, y, z;
+
+	int32		mtype;		// DEFAULT(b'ground), MASK, ALWAYS
+	SCNHANDLE	actorCode;	// The actor's script
+
+	const FREEL	*presReel;	// the present reel
+	int			presRnum;	// the present reel number
+	SCNHANDLE 	presFilm;	// the film that reel belongs to
+	OBJECT		*presObj;	// reference for position information
+	int			presX, presY;
+
+	bool		tagged;		// actor tagged?
+	SCNHANDLE	hTag;		// handle to tag text
+	int			tType;		// e.g. TAG_Q1TO3
+
+	bool		escOn;
+	int			escEv;
+
+	COLORREF	tColour;	// Text colour
+
+	SCNHANDLE 	playFilm;	// revert to this after talks
+	SCNHANDLE 	talkFilm;	// this be deleted in the future!
+	SCNHANDLE 	latestFilm;	// the last film ordered
+	bool		talking;
+
+	int			steps;
+
+};
+
+static ACTORINFO *actorInfo = 0;
+
+static COLORREF defaultColour = 0;		// Text colour
+
+static bool bActorsOn = false;
+
+static int ti = 0;
+
+/**
+ * Called once at start-up time, and again at restart time.
+ * Registers the total number of actors in the game.
+ * @param num			Chunk Id
+ */
+void RegisterActors(int num) {
+	if (actorInfo == NULL) 	{
+		// Store the total number of actors in the game
+		NumActors = num;
+
+		// Check we can save so many
+		assert(NumActors <= MAX_SAVED_ALIVES);
+
+		// Allocate RAM for actorInfo
+		// FIXME: For now, we always allocate MAX_SAVED_ALIVES blocks,
+		//   as this makes the save/load code simpler
+		actorInfo = (ACTORINFO *)calloc(MAX_SAVED_ALIVES, sizeof(ACTORINFO));
+
+		// make sure memory allocated
+		if (actorInfo == NULL) {
+			error("Cannot allocate memory for actors");
+		}
+	} else {
+		// Check the total number of actors is still the same
+		assert(num == NumActors);
+
+		memset(actorInfo, 0, MAX_SAVED_ALIVES * sizeof(ACTORINFO));
+	}
+
+	// All actors start off alive.
+	while (num--)
+		actorInfo[num].alive = true;
+}
+
+void FreeActors() {
+	if (actorInfo) {
+		free(actorInfo);
+		actorInfo = NULL;
+	}
+}
+
+/**
+ * Called from dec_lead(), i.e. normally once at start of master script.
+ * @param leadID			Lead Id
+ */
+void setleadid(int leadID) {
+	LeadActorId = leadID;
+	actorInfo[leadID-1].mtype = ACT_MASK;
+}
+
+/**
+ * No comment.
+ */
+int LeadId(void) {
+	return LeadActorId;
+}
+
+struct ATP_INIT {
+	int		id;		// Actor number
+	USER_EVENT	event;		// Event
+	BUTEVENT	bev;		// Causal mouse event
+};
+
+/**
+ * Runs actor's glitter code.
+ */
+static void ActorTinselProcess(CORO_PARAM) {
+	// COROUTINE
+	CORO_BEGIN_CONTEXT;
+		PINT_CONTEXT pic;
+	CORO_END_CONTEXT(_ctx);
+
+	// get the stuff copied to process when it was created
+	ATP_INIT *atp = (ATP_INIT *)ProcessGetParamsSelf();
+
+	CORO_BEGIN_CODE(_ctx);
+
+	CORO_INVOKE_1(AllowDclick, atp->bev);		// May kill us if single click
+
+	// Run the Glitter code
+	assert(actorInfo[atp->id - 1].actorCode); // no code to run
+
+	_ctx->pic = InitInterpretContext(GS_ACTOR, actorInfo[atp->id - 1].actorCode, atp->event, NOPOLY, atp->id, NULL);
+	CORO_INVOKE_1(Interpret, _ctx->pic);
+
+	// If it gets here, actor's code has run to completion
+	actorInfo[atp->id - 1].completed = true;
+
+	CORO_END_CODE;
+}
+
+
+//---------------------------------------------------------------------------
+
+struct RATP_INIT {
+	PINT_CONTEXT	pic;
+	int		id;		// Actor number
+};
+
+static void ActorRestoredProcess(CORO_PARAM) {
+	// COROUTINE
+	CORO_BEGIN_CONTEXT;
+		PINT_CONTEXT pic;
+	CORO_END_CONTEXT(_ctx);
+
+	// get the stuff copied to process when it was created
+	RATP_INIT *r = (RATP_INIT *)ProcessGetParamsSelf();
+
+	CORO_BEGIN_CODE(_ctx);
+
+	_ctx->pic = RestoreInterpretContext(r->pic);
+	CORO_INVOKE_1(Interpret, _ctx->pic);
+
+	// If it gets here, actor's code has run to completion
+	actorInfo[r->id - 1].completed = true;
+
+	CORO_END_CODE;
+}
+
+void RestoreActorProcess(int id, PINT_CONTEXT pic) {
+	RATP_INIT r = { pic, id };
+
+	CoroutineInstall(PID_TCODE, ActorRestoredProcess, &r, sizeof(r));
+}
+
+/**
+ * Starts up process to runs actor's glitter code.
+ * @param ano			Actor Id
+ * @param event			Event structure
+ * @param be			ButEvent
+ */
+void actorEvent(int ano, USER_EVENT event, BUTEVENT be) {
+	ATP_INIT atp;
+
+	// Only if there is Glitter code associated with this actor.
+	if (actorInfo[ano - 1].actorCode) {
+		atp.id = ano;
+		atp.event = event;
+		atp.bev = be;
+		CoroutineInstall(PID_TCODE, ActorTinselProcess, &atp, sizeof(atp));
+	}
+}
+
+/**
+ * Called at the start of each scene for each actor with a code block.
+ * @param as			Actor structure
+ * @param bRunScript	Flag for whether to run actor's script for the scene
+ */
+void StartActor(const ACTOR_STRUC *as, bool bRunScript) {
+	SCNHANDLE hActorId = FROM_LE_32(as->hActorId);
+
+	// Zero-out many things
+	actorInfo[hActorId - 1].hidden = false;
+	actorInfo[hActorId - 1].completed = false;
+	actorInfo[hActorId - 1].x = 0;
+	actorInfo[hActorId - 1].y = 0;
+	actorInfo[hActorId - 1].presReel = NULL;
+	actorInfo[hActorId - 1].presFilm = 0;
+	actorInfo[hActorId - 1].presObj = NULL;
+
+	// Store current scene's parameters for this actor
+	actorInfo[hActorId - 1].mtype = FROM_LE_32(as->masking);
+	actorInfo[hActorId - 1].actorCode = FROM_LE_32(as->hActorCode);
+
+	// Run actor's script for this scene
+	if (bRunScript) {
+		if (bActorsOn)
+			actorInfo[hActorId - 1].alive = true;
+
+		if (actorInfo[hActorId - 1].alive && FROM_LE_32(as->hActorCode))
+			actorEvent(hActorId, STARTUP, BE_NONE);
+	}
+}
+
+/**
+ * Called at the start of each scene. Start each actor with a code block.
+ * @param ah			Scene handle
+ * @param numActors		Number of actors
+ * @param bRunScript	Flag for whether to run actor scene scripts
+ */
+void StartActors(SCNHANDLE ah, int numActors, bool bRunScript) {
+	int	i;
+
+	// Only actors with code blocks got (x, y) re-initialised, so...
+	for (i = 0; i < NumActors; i++) {
+		actorInfo[i].x = actorInfo[i].y = 0;
+		actorInfo[i].mtype = 0;
+	}
+
+	const ACTOR_STRUC *as = (const ACTOR_STRUC *)LockMem(ah);
+	for (i = 0; i < numActors; i++, as++) {
+		StartActor(as, bRunScript);
+	}
+}
+
+/**
+ * Called between scenes, zeroises all actors.
+ */
+void DropActors(void) {
+	for (int i = 0; i < NumActors; i++) {
+		actorInfo[i].actorCode = 0;	// No script
+		actorInfo[i].presReel = NULL;	// No reel running
+		actorInfo[i].presFilm = 0;	//   ditto
+		actorInfo[i].presObj = NULL;	// No object
+		actorInfo[i].x = 0;		// No position
+		actorInfo[i].y = 0;		//   ditto
+
+		actorInfo[i].talkFilm = 0;
+		actorInfo[i].latestFilm = 0;
+		actorInfo[i].playFilm = 0;
+		actorInfo[i].talking = false;
+	}
+}
+
+/**
+ * Kill actors.
+ * @param ano			Actor Id
+ */
+void DisableActor(int ano) {
+	PMACTOR	pActor;
+
+	assert(ano > 0 && ano <= NumActors); // illegal actor number
+
+	actorInfo[ano - 1].alive = false;	// Record as dead
+	actorInfo[ano - 1].x = actorInfo[ano - 1].y = 0;
+
+	// Kill off moving actor properly
+	pActor = GetMover(ano);
+	if (pActor)
+		KillMActor(pActor);
+}
+
+/**
+ * Enable actors.
+ * @param ano			Actor Id
+ */
+void EnableActor(int ano) {
+	assert(ano > 0 && ano <= NumActors); // illegal actor number
+
+	// Re-incarnate only if it's dead, or it's script ran to completion
+	if (!actorInfo[ano - 1].alive || actorInfo[ano - 1].completed) {
+		actorInfo[ano - 1].alive = true;
+		actorInfo[ano - 1].hidden = false;
+		actorInfo[ano - 1].completed = false;
+
+		// Re-run actor's script for this scene
+		if (actorInfo[ano-1].actorCode)
+			actorEvent(ano, STARTUP, BE_NONE);
+	}
+}
+
+/**
+ * Returns the aliveness (to coin a word) of the actor.
+ * @param ano			Actor Id
+ */
+bool actorAlive(int ano) {
+	assert(ano > 0 && ano <= NumActors); // illegal actor number
+
+	return actorInfo[ano - 1].alive;
+}
+
+/**
+ * Define an actor as being tagged.
+ * @param ano			Actor Id
+ * @param tagtext		Scene handle
+ * @param tp			tType
+ */
+void Tag_Actor(int ano, SCNHANDLE tagtext, int tp) {
+	assert(ano > 0 && ano <= NumActors); // illegal actor number
+
+	actorInfo[ano-1].tagged = true;
+	actorInfo[ano-1].hTag = tagtext;
+	actorInfo[ano-1].tType = tp;
+}
+
+/**
+ * Undefine  an actor as being tagged.
+ * @param ano			Actor Id
+ * @param tagtext		Scene handle
+ * @param tp			tType
+ */
+void UnTagActor(int ano) {
+	assert(ano > 0 && ano <= NumActors); // illegal actor number
+
+	actorInfo[ano-1].tagged = false;
+}
+
+/**
+ * Redefine an actor as being tagged.
+ * @param ano			Actor Id
+ * @param tagtext		Scene handle
+ * @param tp			tType
+ */
+void ReTagActor(int ano) {
+	assert(ano > 0 && ano <= NumActors); // illegal actor number
+
+	if (actorInfo[ano-1].hTag)
+		actorInfo[ano-1].tagged = true;
+}
+
+/**
+ * Returns a tagged actor's tag type. e.g. TAG_Q1TO3
+ * @param ano			Actor Id
+ */
+int TagType(int ano) {
+	assert(ano > 0 && ano <= NumActors); // illegal actor number
+
+	return actorInfo[ano-1].tType;
+}
+
+/**
+ * Returns handle to tagged actor's tag text
+ * @param ano			Actor Id
+ */
+SCNHANDLE GetActorTag(int ano) {
+	assert(ano > 0 && ano <= NumActors); // illegal actor number
+
+	return actorInfo[ano - 1].hTag;
+}
+
+/**
+ * Called from TagProcess, FirstTaggedActor() resets the index, then
+ * NextTagged Actor is repeatedly called until the caller gets fed up
+ * or there are no more tagged actors to look at.
+ */
+void FirstTaggedActor(void) {
+	ti = 0;
+}
+
+/**
+ * Called from TagProcess, FirstTaggedActor() resets the index, then
+ * NextTagged Actor is repeatedly called until the caller gets fed up
+ * or there are no more tagged actors to look at.
+ */
+int NextTaggedActor(void) {
+	PMACTOR	pActor;
+	bool	hid;
+
+	do {
+		if (actorInfo[ti].tagged) {
+			pActor = GetMover(ti+1);
+			if (pActor)
+				hid = getMActorHideState(pActor);
+			else
+				hid = actorInfo[ti].hidden;
+
+			if (!hid) {
+				return ++ti;
+			}
+		}
+	} while (++ti < NumActors);
+
+	return 0;
+}
+
+/**
+ * Returns the masking type of the actor.
+ * @param ano			Actor Id
+ */
+int32 actorMaskType(int ano) {
+	assert(ano > 0 && ano <= NumActors); // illegal actor number
+
+	return actorInfo[ano - 1].mtype;
+}
+
+/**
+ * Store/Return the currently stored co-ordinates of the actor.
+ * Delegate the task for moving actors.
+ * @param ano			Actor Id
+ * @param x				X position
+ * @param y				Y position
+ */
+void storeActorPos(int ano, int x, int y) {
+	assert(ano > 0 && ano <= NumActors); // illegal actor number
+
+	actorInfo[ano - 1].x = x;
+	actorInfo[ano - 1].y = y;
+}
+
+void storeActorSteps(int ano, int steps) {
+	assert(ano > 0 && ano <= NumActors); // illegal actor number
+
+	actorInfo[ano - 1].steps = steps;
+}
+
+int getActorSteps(int ano) {
+	assert(ano > 0 && ano <= NumActors); // illegal actor number
+
+	return actorInfo[ano - 1].steps;
+}
+
+void storeActorZpos(int ano, int z) {
+	assert(ano > 0 && ano <= NumActors); // illegal actor number
+
+	actorInfo[ano - 1].z = z;
+}
+
+
+void GetActorPos(int ano, int *x, int *y) {
+	PMACTOR pActor;
+
+	assert((ano > 0 && ano <= NumActors) || ano == LEAD_ACTOR); // unknown actor
+
+	pActor = GetMover(ano);
+
+	if (pActor)
+		GetMActorPosition(pActor, x, y);
+	else {
+		*x = actorInfo[ano - 1].x;
+		*y = actorInfo[ano - 1].y;
+	}
+}
+
+/**
+ * Returns the position of the mid-top of the actor.
+ * Delegate the task for moving actors.
+ * @param ano			Actor Id
+ * @param x				Output x
+ * @param y				Output y
+ */
+void GetActorMidTop(int ano, int *x, int *y) {
+	// Not used in JAPAN version
+	PMACTOR pActor;
+
+	assert((ano > 0 && ano <= NumActors) || ano == LEAD_ACTOR); // unknown actor
+
+	pActor = GetMover(ano);
+
+	if (pActor)
+		GetMActorMidTopPosition(pActor, x, y);
+	else if (actorInfo[ano - 1].presObj) {
+		*x = (MultiLeftmost(actorInfo[ano - 1].presObj)
+		      + MultiRightmost(actorInfo[ano - 1].presObj)) / 2;
+		*y = MultiHighest(actorInfo[ano - 1].presObj);
+	} else
+		GetActorPos(ano, x, y);		// The best we can do!
+}
+
+/**
+ * Return the appropriate co-ordinate of the actor.
+ * @param ano			Actor Id
+ */
+int GetActorLeft(int ano) {
+	assert(ano > 0 && ano <= NumActors); // illegal actor number
+
+	if (!actorInfo[ano - 1].presObj)
+		return 0;
+
+	return MultiLeftmost(actorInfo[ano - 1].presObj);
+}
+
+/**
+ * Return the appropriate co-ordinate of the actor.
+ * @param ano			Actor Id
+ */
+int GetActorRight(int ano) {
+	assert(ano > 0 && ano <= NumActors); // illegal actor number
+
+	if (!actorInfo[ano - 1].presObj)
+		return 0;
+
+	return MultiRightmost(actorInfo[ano - 1].presObj);
+}
+
+/**
+ * Return the appropriate co-ordinate of the actor.
+ * @param ano			Actor Id
+ */
+int GetActorTop(int ano) {
+	assert(ano > 0 && ano <= NumActors); // illegal actor number
+
+	if (!actorInfo[ano - 1].presObj)
+		return 0;
+
+	return MultiHighest(actorInfo[ano - 1].presObj);
+}
+
+/**
+ * Return the appropriate co-ordinate of the actor.
+ */
+int GetActorBottom(int ano) {
+	assert(ano > 0 && ano <= NumActors); // illegal actor number
+
+	if (!actorInfo[ano - 1].presObj)
+		return 0;
+
+	return MultiLowest(actorInfo[ano - 1].presObj);
+}
+
+/**
+ * Set actor hidden status to true.
+ * For a moving actor, actually hide it.
+ * @param ano			Actor Id
+ */
+void HideActor(int ano) {
+	PMACTOR pActor;
+
+	assert((ano > 0 && ano <= NumActors) || ano == LEAD_ACTOR); // illegal actor
+
+	// Get moving actor involved
+	pActor = GetMover(ano);
+
+	if (pActor)
+		hideMActor(pActor, 0);
+	else
+		actorInfo[ano - 1].hidden = true;
+}
+
+/**
+ * Hide an actor if it's a moving actor.
+ * @param ano			Actor Id
+ * @param sf			sf
+ */
+bool HideMovingActor(int ano, int sf) {
+	PMACTOR pActor;
+
+	assert((ano > 0 && ano <= NumActors) || ano == LEAD_ACTOR); // illegal actor
+
+	// Get moving actor involved
+	pActor = GetMover(ano);
+
+	if (pActor) {
+		hideMActor(pActor, sf);
+		return true;
+	} else {
+		if (actorInfo[ano - 1].presObj != NULL)
+			MultiHideObject(actorInfo[ano - 1].presObj);	// Hidee object
+		return false;
+	}
+}
+
+/**
+ * Unhide an actor if it's a moving actor.
+ * @param ano			Actor Id
+ */
+void unHideMovingActor(int ano) {
+	PMACTOR pActor;
+
+	assert((ano > 0 && ano <= NumActors) || ano == LEAD_ACTOR); // illegal actor
+
+	// Get moving actor involved
+	pActor = GetMover(ano);
+
+	assert(pActor); // not a moving actor
+
+	unhideMActor(pActor);
+}
+
+/**
+ * Called after a moving actor had been replaced by an splay().
+ * Moves the actor to where the splay() left it, and continues the
+ * actor's walk (if any) from the new co-ordinates.
+ */
+void restoreMovement(int ano) {
+	PMACTOR pActor;
+
+	assert(ano > 0 && ano <= NumActors); // illegal actor number
+
+	// Get moving actor involved
+	pActor = GetMover(ano);
+
+	assert(pActor); // not a moving actor
+
+	if (pActor->objx == actorInfo[ano - 1].x && pActor->objy == actorInfo[ano - 1].y)
+		return;
+
+	pActor->objx = actorInfo[ano - 1].x;
+	pActor->objy = actorInfo[ano - 1].y;
+
+	if (pActor->actorObj)
+		SSetActorDest(pActor);
+}
+
+/**
+ * More properly should be called:
+ * 'store_actor_reel_and/or_film_and/or_object()'
+ */
+void storeActorReel(int ano, const FREEL *reel, SCNHANDLE film, OBJECT *pobj, int reelnum, int x, int y) {
+	PMACTOR pActor;
+
+	assert(ano > 0 && ano <= NumActors); // illegal actor number
+
+	pActor = GetMover(ano);
+
+	// Only store the reel and film for a moving actor if NOT called from MActorProcess()
+	// (MActorProcess() calls with reel=film=NULL, pobj not NULL)
+	if (!pActor
+	|| !(reel == NULL && film == 0 && pobj != NULL)) {
+		actorInfo[ano - 1].presReel = reel;	// Store reel
+		actorInfo[ano - 1].presRnum = reelnum;	// Store reel number
+		actorInfo[ano - 1].presFilm = film;	// Store film
+		actorInfo[ano - 1].presX = x;
+		actorInfo[ano - 1].presY = y;
+	}
+
+	// Only store the object for a moving actor if called from MActorProcess()
+	if (!pActor) {
+		actorInfo[ano - 1].presObj = pobj;	// Store object
+	} else if (reel == NULL && film == 0 && pobj != NULL) {
+		actorInfo[ano - 1].presObj = pobj;	// Store object
+	}
+}
+
+/**
+ * Return the present reel/film of the actor.
+ */
+const FREEL *actorReel(int ano) {
+	assert(ano > 0 && ano <= NumActors); // illegal actor number
+
+	return actorInfo[ano - 1].presReel;	// the present reel
+}
+
+/***************************************************************************/
+
+void setActorPlayFilm(int ano, SCNHANDLE film) {
+	assert(ano > 0 && ano <= NumActors); // illegal actor number
+
+	actorInfo[ano - 1].playFilm = film;
+}
+
+SCNHANDLE getActorPlayFilm(int ano) {
+	assert(ano > 0 && ano <= NumActors); // illegal actor number
+
+	return actorInfo[ano - 1].playFilm;
+}
+
+void setActorTalkFilm(int ano, SCNHANDLE film) {
+	assert(ano > 0 && ano <= NumActors); // illegal actor number
+
+	actorInfo[ano - 1].talkFilm = film;
+}
+
+SCNHANDLE getActorTalkFilm(int ano) {
+	assert(ano > 0 && ano <= NumActors); // illegal actor number
+
+	return actorInfo[ano - 1].talkFilm;
+}
+
+void setActorTalking(int ano, bool tf) {
+	assert(ano > 0 && ano <= NumActors); // illegal actor number
+
+	actorInfo[ano - 1].talking = tf;;
+}
+
+bool isActorTalking(int ano) {
+	assert(ano > 0 && ano <= NumActors); // illegal actor number
+
+	return actorInfo[ano - 1].talking;
+}
+
+void setActorLatestFilm(int ano, SCNHANDLE film) {
+	assert(ano > 0 && ano <= NumActors); // illegal actor number
+
+	actorInfo[ano - 1].latestFilm = film;
+	actorInfo[ano - 1].steps = 0;
+}
+
+SCNHANDLE getActorLatestFilm(int ano) {
+	assert(ano > 0 && ano <= NumActors); // illegal actor number
+
+	return actorInfo[ano - 1].latestFilm;
+}
+
+/***************************************************************************/
+
+void updateActorEsc(int ano, bool escOn, int escEvent) {
+	assert(ano > 0 && ano <= NumActors); // illegal actor number
+
+	actorInfo[ano - 1].escOn = escOn;
+	actorInfo[ano - 1].escEv = escEvent;
+}
+
+bool actorEsc(int ano) {
+	assert(ano > 0 && ano <= NumActors); // illegal actor number
+
+	return actorInfo[ano - 1].escOn;
+}
+
+int actorEev(int ano) {
+	assert(ano > 0 && ano <= NumActors); // illegal actor number
+
+	return actorInfo[ano - 1].escEv;
+}
+
+/**
+ * Guess what these do.
+ */
+int AsetZPos(OBJECT *pObj, int y, int32 z) {
+	int zPos;
+
+	z += z ? -1 : 0;
+
+	zPos = y + (z << 10);
+	MultiSetZPosition(pObj, zPos);
+	return zPos;
+}
+
+/**
+ * Guess what these do.
+ */
+void MAsetZPos(PMACTOR pActor, int y, int32 zFactor) {
+	if (!pActor->aHidden)
+		AsetZPos(pActor->actorObj, y, zFactor);
+}
+
+/**
+ * Stores actor's attributes.
+ * Currently only the speech colours.
+ */
+void storeActorAttr(int ano, int r1, int g1, int b1) {
+	assert((ano > 0 && ano <= NumActors) || ano == -1); // illegal actor number
+
+	if (r1 > MAX_INTENSITY)	r1 = MAX_INTENSITY;	// } Ensure
+	if (g1 > MAX_INTENSITY)	g1 = MAX_INTENSITY;	// } within limits
+	if (b1 > MAX_INTENSITY)	b1 = MAX_INTENSITY;	// }
+
+	if (ano == -1)
+		defaultColour = RGB(r1, g1, b1);
+	else
+		actorInfo[ano - 1].tColour = RGB(r1, g1, b1);
+}
+
+/**
+ * Get the actor's stored speech colour.
+ * @param ano			Actor Id
+ */
+COLORREF getActorTcol(int ano) {
+	// Not used in JAPAN version
+	assert(ano > 0 && ano <= NumActors); // illegal actor number
+
+	if (actorInfo[ano - 1].tColour)
+		return actorInfo[ano - 1].tColour;
+	else
+		return defaultColour;
+}
+
+/**
+ * Store relevant information pertaining to currently existing actors.
+ */
+int SaveActors(PSAVED_ACTOR sActorInfo) {
+	int	i, j;
+
+	for (i = 0, j = 0; i < NumActors; i++) {
+		if (actorInfo[i].presObj != NULL) {
+			assert(j < MAX_SAVED_ACTORS); // Saving too many actors
+
+//			sActorInfo[j].hidden	= actorInfo[i].hidden;
+			sActorInfo[j].bAlive	= actorInfo[i].alive;
+//			sActorInfo[j].x		= (short)actorInfo[i].x;
+//			sActorInfo[j].y		= (short)actorInfo[i].y;
+			sActorInfo[j].z		= (short)actorInfo[i].z;
+//			sActorInfo[j].presReel	= actorInfo[i].presReel;
+			sActorInfo[j].presRnum	= (short)actorInfo[i].presRnum;
+			sActorInfo[j].presFilm	= actorInfo[i].presFilm;
+			sActorInfo[j].presX	= (short)actorInfo[i].presX;
+			sActorInfo[j].presY	= (short)actorInfo[i].presY;
+			sActorInfo[j].actorID	= (short)(i+1);
+			j++;
+		}
+	}
+
+	return j;
+}
+
+void setactorson(void) {
+	bActorsOn = true;
+}
+
+void ActorsLife(int ano, bool bAlive) {
+	assert((ano > 0 && ano <= NumActors) || ano == -1); // illegal actor number
+
+	actorInfo[ano-1].alive = bAlive;
+}
+
+
+void syncAllActorsAlive(Serializer &s) {
+	for (int i = 0; i < MAX_SAVED_ALIVES; i++) {
+		s.syncAsByte(actorInfo[i].alive);
+		s.syncAsByte(actorInfo[i].tagged);
+		s.syncAsByte(actorInfo[i].tType);
+		s.syncAsUint32LE(actorInfo[i].hTag);
+	}
+}
+
+
+} // end of namespace Tinsel


Property changes on: scummvm/trunk/engines/tinsel/actors.cpp
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:keywords
   + Date Rev Author URL Id
Added: svn:eol-style
   + native

Added: scummvm/trunk/engines/tinsel/actors.h
===================================================================
--- scummvm/trunk/engines/tinsel/actors.h	                        (rev 0)
+++ scummvm/trunk/engines/tinsel/actors.h	2008-07-23 09:02:47 UTC (rev 33230)
@@ -0,0 +1,126 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ * Prototypes of actor functions
+ */
+
+#ifndef TINSEL_ACTOR_H	// prevent multiple includes
+#define TINSEL_ACTOR_H
+
+
+#include "tinsel/dw.h"		// for SCNHANDLE
+#include "tinsel/events.h"	// for USER_EVENT
+#include "tinsel/palette.h"	// for COLORREF
+
+namespace Tinsel {
+
+struct FREEL;
+struct INT_CONTEXT;
+struct MACTOR;
+struct OBJECT;
+
+
+/*----------------------------------------------------------------------*/
+
+void RegisterActors(int num);
+void FreeActors(void);
+void setleadid(int rid);
+int LeadId(void);
+void StartActors(SCNHANDLE ah, int numActors, bool bRunScript);
+void DropActors(void);		// No actor reels running
+void DisableActor(int actor);
+void EnableActor(int actor);
+void Tag_Actor(int ano, SCNHANDLE tagtext, int tp);
+void UnTagActor(int ano);
+void ReTagActor(int ano);
+int TagType(int ano);
+bool actorAlive(int ano);
+int32 actorMaskType(int ano);
+void GetActorPos(int ano, int *x, int *y);
+void SetActorPos(int ano, int x, int y);
+void GetActorMidTop(int ano, int *x, int *y);
+int GetActorLeft(int ano);
+int GetActorRight(int ano);
+int GetActorTop(int ano);
+int GetActorBottom(int ano);
+void HideActor(int ano);
+bool HideMovingActor(int id, int sf);
+void unHideMovingActor(int id);
+void restoreMovement(int id);
+void storeActorReel(int ano, const FREEL *reel, SCNHANDLE film, OBJECT *pobj, int reelnum, int x, int y);
+const FREEL *actorReel(int ano);
+SCNHANDLE actorFilm(int ano);
+
+void setActorPlayFilm(int ano, SCNHANDLE film);
+SCNHANDLE getActorPlayFilm(int ano);
+void setActorTalkFilm(int ano, SCNHANDLE film);
+SCNHANDLE getActorTalkFilm(int ano);
+void setActorTalking(int ano, bool tf);
+bool isActorTalking(int ano);
+void setActorLatestFilm(int ano, SCNHANDLE film);
+SCNHANDLE getActorLatestFilm(int ano);
+
+void updateActorEsc(int ano, bool escOn, int escEv);
+bool actorEsc(int ano);
+int actorEev(int ano);
+void storeActorPos(int ano, int x, int y);
+void storeActorSteps(int ano, int steps);
+int getActorSteps(int ano);
+void storeActorZpos(int ano, int z);
+SCNHANDLE GetActorTag(int ano);
+void FirstTaggedActor(void);
+int NextTaggedActor(void);
+int AsetZPos(OBJECT *pObj, int y, int32 zFactor);
+void MAsetZPos(MACTOR *pActor, int y, int32 zFactor);
+void actorEvent(int ano, USER_EVENT event, BUTEVENT be);
+
+void storeActorAttr(int ano, int r1, int g1, int b1);
+COLORREF getActorTcol(int ano);
+
+void setactorson(void);
+
+void ActorsLife(int id, bool bAlive);
+
+/*----------------------------------------------------------------------*/
+
+struct SAVED_ACTOR {
+	short		actorID;
+	short		z;
+	bool		bAlive;
+	SCNHANDLE 	presFilm;	//!< the film that reel belongs to
+	short		presRnum;	//!< the present reel number
+	short		presX, presY;
+};
+typedef SAVED_ACTOR *PSAVED_ACTOR;
+
+int SaveActors(PSAVED_ACTOR sActorInfo);
+
+	
+void RestoreActorProcess(int id, INT_CONTEXT *pic);
+
+
+/*----------------------------------------------------------------------*/
+
+} // end of namespace Tinsel
+
+#endif /* TINSEL_ACTOR_H */


Property changes on: scummvm/trunk/engines/tinsel/actors.h
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:keywords
   + Date Rev Author URL Id
Added: svn:eol-style
   + native

Added: scummvm/trunk/engines/tinsel/anim.cpp
===================================================================
--- scummvm/trunk/engines/tinsel/anim.cpp	                        (rev 0)
+++ scummvm/trunk/engines/tinsel/anim.cpp	2008-07-23 09:02:47 UTC (rev 33230)
@@ -0,0 +1,404 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ * This file contains utilities to handle object animation.
+ */
+
+#include "tinsel/anim.h"
+#include "tinsel/handle.h"
+#include "tinsel/multiobj.h"	// multi-part object defintions etc.
+#include "tinsel/object.h"
+#include "tinsel/sched.h"
+
+#include "common/util.h"
+
+namespace Tinsel {
+
+/** Animation script commands */
+enum {
+	ANI_END			= 0,	//!< end of animation script
+	ANI_JUMP		= 1,	//!< animation script jump
+	ANI_HFLIP		= 2,	//!< flip animated object horizontally
+	ANI_VFLIP		= 3,	//!< flip animated object vertically
+	ANI_HVFLIP		= 4,	//!< flip animated object in both directions
+	ANI_ADJUSTX		= 5,	//!< adjust animated object x animation point
+	ANI_ADJUSTY		= 6,	//!< adjust animated object y animation point
+	ANI_ADJUSTXY	= 7,	//!< adjust animated object x & y animation points
+	ANI_NOSLEEP		= 8,	//!< do not sleep for this frame
+	ANI_CALL		= 9,	//!< call routine
+	ANI_HIDE		= 10	//!< hide animated object
+};
+
+/** animation script command possibilities */
+union ANI_SCRIPT {
+	int32 op;		//!< treat as an opcode or operand
+	uint32 hFrame;	//!< treat as a animation frame handle
+};
+
+/**
+ * Advance to next frame routine.
+ * @param pAnim			Animation data structure
+ */
+SCRIPTSTATE DoNextFrame(PANIM pAnim) {
+	// get a pointer to the script
+	const ANI_SCRIPT *pAni = (const ANI_SCRIPT *)LockMem(pAnim->hScript);
+
+	while (1) {	// repeat until a real image
+
+		switch ((int32)FROM_LE_32(pAni[pAnim->scriptIndex].op)) {
+		case ANI_END:	// end of animation script
+
+			// move to next opcode
+			pAnim->scriptIndex++;
+
+			// indicate script has finished
+			return ScriptFinished;
+
+		case ANI_JUMP:	// do animation jump
+
+			// move to jump address
+			pAnim->scriptIndex++;
+
+			// jump to new frame position
+			pAnim->scriptIndex += (int32)FROM_LE_32(pAni[pAnim->scriptIndex].op);
+
+			// go fetch a real image
+			break;
+
+		case ANI_HFLIP:	// flip animated object horizontally
+
+			// next opcode
+			pAnim->scriptIndex++;
+
+			MultiHorizontalFlip(pAnim->pObject);
+
+			// go fetch a real image
+			break;
+
+		case ANI_VFLIP:	// flip animated object vertically
+
+			// next opcode
+			pAnim->scriptIndex++;
+
+			MultiVerticalFlip(pAnim->pObject);
+
+			// go fetch a real image
+			break;
+
+		case ANI_HVFLIP:	// flip animated object in both directions
+
+			// next opcode
+			pAnim->scriptIndex++;
+
+			MultiHorizontalFlip(pAnim->pObject);
+			MultiVerticalFlip(pAnim->pObject);
+
+			// go fetch a real image
+			break;
+
+		case ANI_ADJUSTX:	// adjust animated object x animation point
+
+			// move to x adjustment operand
+			pAnim->scriptIndex++;
+
+			MultiAdjustXY(pAnim->pObject, (int32)FROM_LE_32(pAni[pAnim->scriptIndex].op), 0);
+
+			// next opcode
+			pAnim->scriptIndex++;
+
+			// go fetch a real image
+			break;
+
+		case ANI_ADJUSTY:	// adjust animated object y animation point
+
+			// move to y adjustment operand
+			pAnim->scriptIndex++;
+
+			MultiAdjustXY(pAnim->pObject, 0, (int32)FROM_LE_32(pAni[pAnim->scriptIndex].op));
+
+			// next opcode
+			pAnim->scriptIndex++;
+
+			// go fetch a real image
+			break;
+
+		case ANI_ADJUSTXY:	// adjust animated object x & y animation points
+		{
+			int x, y;
+
+			// move to x adjustment operand
+			pAnim->scriptIndex++;
+			x = (int32)FROM_LE_32(pAni[pAnim->scriptIndex].op);
+
+			// move to y adjustment operand
+			pAnim->scriptIndex++;
+			y = (int32)FROM_LE_32(pAni[pAnim->scriptIndex].op);
+
+			MultiAdjustXY(pAnim->pObject, x, y);
+
+			// next opcode
+			pAnim->scriptIndex++;
+
+			// go fetch a real image
+			break;
+		}
+
+		case ANI_NOSLEEP:	// do not sleep for this frame
+
+			// next opcode
+			pAnim->scriptIndex++;
+
+			// indicate not to sleep
+			return ScriptNoSleep;
+
+		case ANI_CALL:		// call routine
+
+			// move to function address
+			pAnim->scriptIndex++;
+
+			// make function call
+
+			// REMOVED BUGGY CODE
+			// pFunc is a function pointer that's part of a union and is assumed to be 32-bits.
+			// There is no known place where a function pointer is stored inside the animation
+			// scripts, something which wouldn't have worked anyway. Having played through the
+			// entire game, there hasn't been any occurence of this case, so just error out here
+			// in case we missed something (highly unlikely though)
+			error("ANI_CALL opcode encountered! Please report this error to the ScummVM team");
+			//(*pAni[pAnim->scriptIndex].pFunc)(pAnim);
+
+			// next opcode
+			pAnim->scriptIndex++;
+
+			// go fetch a real image
+			break;
+
+		case ANI_HIDE:		// hide animated object
+
+			MultiHideObject(pAnim->pObject);
+
+			// next opcode
+			pAnim->scriptIndex++;
+
+			// dont skip a sleep
+			return ScriptSleep;
+
+		default:	// must be an actual animation frame handle
+
+			// set objects new animation frame
+			pAnim->pObject->hShape = FROM_LE_32(pAni[pAnim->scriptIndex].hFrame);
+
+			// re-shape the object
+			MultiReshape(pAnim->pObject);
+
+			// next opcode
+			pAnim->scriptIndex++;
+
+			// dont skip a sleep
+			return ScriptSleep;
+		}
+	}
+}
+
+/**
+ * Init a ANIM structure for single stepping through a animation script.
+ * @param pAnim				Animation data structure
+ * @param pAniObj			Object to animate
+ * @param hNewScript		Script of multipart frames
+ * @param aniSpeed			Sets speed of animation in frames
+ */
+void InitStepAnimScript(PANIM pAnim, OBJECT *pAniObj, SCNHANDLE hNewScript, int aniSpeed) {
+	OBJECT *pObj;			// multi-object list iterator
+
+	pAnim->aniDelta = 1;		// will animate on next call to NextAnimRate
+	pAnim->pObject = pAniObj;	// set object to animate
+	pAnim->hScript = hNewScript;	// set animation script
+	pAnim->scriptIndex = 0;		// start of script
+	pAnim->aniRate = aniSpeed;	// set speed of animation
+
+	// reset flip flags for the object - let the script do the flipping
+	for (pObj = pAniObj; pObj != NULL; pObj = pObj->pSlave) {
+		AnimateObjectFlags(pObj, pObj->flags & ~(DMA_FLIPH | DMA_FLIPV),
+			pObj->hImg);
+	}
+}
+
+/**
+ * Execute the next command in a animation script.
+ * @param pAnim			Animation data structure
+ */
+SCRIPTSTATE StepAnimScript(PANIM pAnim) {
+	SCRIPTSTATE state;
+
+	if (--pAnim->aniDelta == 0) {
+		// re-init animation delta counter
+		pAnim->aniDelta = pAnim->aniRate;
+
+		// move to next frame
+		while ((state = DoNextFrame(pAnim)) == ScriptNoSleep)
+			;
+
+		return state;
+	}
+
+	// indicate calling task should sleep
+	return ScriptSleep;
+}
+
+/**
+ * Skip the specified number of frames.
+ * @param pAnim			Animation data structure
+ * @param numFrames		Number of frames to skip
+ */
+void SkipFrames(PANIM pAnim, int numFrames) {
+	// get a pointer to the script
+	const ANI_SCRIPT *pAni = (const ANI_SCRIPT *)LockMem(pAnim->hScript);
+
+	if (numFrames <= 0)
+		// do nothing
+		return;
+
+	while (1) {	// repeat until a real image
+
+		switch ((int32)FROM_LE_32(pAni[pAnim->scriptIndex].op)) {
+		case ANI_END:	// end of animation script
+			// going off the end is probably a error
+			error("SkipFrames(): formally 'assert(0)!'");
+			break;
+
+		case ANI_JUMP:	// do animation jump
+
+			// move to jump address
+			pAnim->scriptIndex++;
+
+			// jump to new frame position
+			pAnim->scriptIndex += (int32)FROM_LE_32(pAni[pAnim->scriptIndex].op);
+			break;
+
+		case ANI_HFLIP:	// flip animated object horizontally
+
+			// next opcode
+			pAnim->scriptIndex++;
+
+			MultiHorizontalFlip(pAnim->pObject);
+			break;
+
+		case ANI_VFLIP:	// flip animated object vertically
+
+			// next opcode
+			pAnim->scriptIndex++;
+
+			MultiVerticalFlip(pAnim->pObject);
+			break;
+
+		case ANI_HVFLIP:	// flip animated object in both directions
+
+			// next opcode
+			pAnim->scriptIndex++;
+
+			MultiHorizontalFlip(pAnim->pObject);
+			MultiVerticalFlip(pAnim->pObject);
+			break;
+
+		case ANI_ADJUSTX:	// adjust animated object x animation point
+
+			// move to x adjustment operand
+			pAnim->scriptIndex++;
+
+			MultiAdjustXY(pAnim->pObject, (int32)FROM_LE_32(pAni[pAnim->scriptIndex].op), 0);
+
+			// next opcode
+			pAnim->scriptIndex++;
+			break;
+
+		case ANI_ADJUSTY:	// adjust animated object y animation point
+
+			// move to y adjustment operand
+			pAnim->scriptIndex++;
+
+			MultiAdjustXY(pAnim->pObject, 0, (int32)FROM_LE_32(pAni[pAnim->scriptIndex].op));
+
+			// next opcode
+			pAnim->scriptIndex++;
+			break;
+
+		case ANI_ADJUSTXY:	// adjust animated object x & y animation points
+		{
+			int x, y;
+
+			// move to x adjustment operand
+			pAnim->scriptIndex++;
+			x = (int32)FROM_LE_32(pAni[pAnim->scriptIndex].op);
+
+			// move to y adjustment operand
+			pAnim->scriptIndex++;
+			y = (int32)FROM_LE_32(pAni[pAnim->scriptIndex].op);
+
+			MultiAdjustXY(pAnim->pObject, x, y);
+
+			// next opcode
+			pAnim->scriptIndex++;
+
+			break;
+		}
+
+		case ANI_NOSLEEP:	// do not sleep for this frame
+
+			// next opcode
+			pAnim->scriptIndex++;
+			break;
+
+		case ANI_CALL:		// call routine
+
+			// skip function address
+			pAnim->scriptIndex += 2;
+			break;
+
+		case ANI_HIDE:		// hide animated object
+
+			// next opcode
+			pAnim->scriptIndex++;
+			break;
+
+		default:	// must be an actual animation frame handle
+
+			// one less frame
+			if (numFrames-- > 0) {
+				// next opcode
+				pAnim->scriptIndex++;
+			} else {
+				// set objects new animation frame
+				pAnim->pObject->hShape = FROM_LE_32(pAni[pAnim->scriptIndex].hFrame);
+
+				// re-shape the object
+				MultiReshape(pAnim->pObject);
+
+				// we have skipped to the correct place
+				return;
+			}
+			break;
+		}
+	}
+}
+
+} // end of namespace Tinsel


Property changes on: scummvm/trunk/engines/tinsel/anim.cpp
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:keywords
   + Date Rev Author URL Id
Added: svn:eol-style
   + native

Added: scummvm/trunk/engines/tinsel/anim.h
===================================================================
--- scummvm/trunk/engines/tinsel/anim.h	                        (rev 0)
+++ scummvm/trunk/engines/tinsel/anim.h	2008-07-23 09:02:47 UTC (rev 33230)
@@ -0,0 +1,72 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ * Object animation definitions
+ */
+
+#ifndef TINSEL_ANIM_H     // prevent multiple includes
+#define TINSEL_ANIM_H
+
+#include "tinsel/dw.h"	// for SCNHANDLE
+
+namespace Tinsel {
+
+struct OBJECT;
+
+/** animation structure */
+struct ANIM {
+	int aniRate;		//!< animation speed
+	int aniDelta;		//!< animation speed delta counter
+	OBJECT *pObject;	//!< object to animate (assumed to be multi-part)
+	uint32 hScript;		//!< animation script handle
+	int scriptIndex;	//!< current position in animation script
+};
+typedef ANIM *PANIM;
+
+
+/*----------------------------------------------------------------------*\
+|*			Anim Function Prototypes			*|
+\*----------------------------------------------------------------------*/
+
+/** states for DoNextFrame */
+enum SCRIPTSTATE {ScriptFinished, ScriptNoSleep, ScriptSleep};
+
+SCRIPTSTATE DoNextFrame(	// Execute the next animation frame of a animation script
+	ANIM *pAnim);		// animation data structure
+
+void InitStepAnimScript(	// Init a ANIM struct for single stepping through a animation script
+	ANIM *pAnim,		// animation data structure
+	OBJECT *pAniObj,	// object to animate
+	SCNHANDLE hNewScript,	// handle to script of multipart frames
+	int aniSpeed);		// sets speed of animation in frames
+
+SCRIPTSTATE StepAnimScript(	// Execute the next command in a animation script
+	ANIM *pAnim);		// animation data structure
+
+void SkipFrames(		// Skip the specified number of frames
+	ANIM *pAnim,		// animation data structure
+	int numFrames);		// number of frames to skip
+
+} // end of namespace Tinsel
+
+#endif		// TINSEL_ANIM_H


Property changes on: scummvm/trunk/engines/tinsel/anim.h
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:keywords
   + Date Rev Author URL Id
Added: svn:eol-style
   + native

Added: scummvm/trunk/engines/tinsel/background.cpp
===================================================================
--- scummvm/trunk/engines/tinsel/background.cpp	                        (rev 0)
+++ scummvm/trunk/engines/tinsel/background.cpp	2008-07-23 09:02:47 UTC (rev 33230)
@@ -0,0 +1,240 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ * Background handling code.
+ */
+
+#include "tinsel/background.h"
+#include "tinsel/cliprect.h"	// object clip rect defs
+#include "tinsel/graphics.h"
+#include "tinsel/sched.h"	// process sheduler defs
+#include "tinsel/object.h"
+#include "tinsel/pid.h"	// process identifiers
+#include "tinsel/tinsel.h"
+
+namespace Tinsel {
+
+// screen clipping rectangle
+Common::Rect rcScreen(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
+
+// current background
+BACKGND *pCurBgnd = NULL;
+
+// scroll flag - when set scrolling and velocity additions are paused
+bool bNoScroll;
+
+/**
+ * Called to initialise a background.
+ * @param pBgnd			Pointer to data struct for current background
+ */
+
+void InitBackground(BACKGND *pBgnd) {
+	int i;			// playfield counter
+	PPLAYFIELD pPlayfield;	// pointer to current playfield
+
+	// set current background
+	pCurBgnd = pBgnd;
+
+	// init background sky colour
+	SetBgndColour(pBgnd->rgbSkyColour);
+
+	// start of playfield array
+	pPlayfield = pBgnd->fieldArray;
+
+	// for each background playfield
+	for (i = 0; i < pBgnd->numPlayfields; i++, pPlayfield++) {
+		// init playfield pos
+		pPlayfield->fieldX = intToFrac(pBgnd->ptInitWorld.x);
+		pPlayfield->fieldY = intToFrac(pBgnd->ptInitWorld.y);
+
+		// no scrolling
+		pPlayfield->fieldXvel = intToFrac(0);
+		pPlayfield->fieldYvel = intToFrac(0);
+
+		// clear playfield display list
+		pPlayfield->pDispList = NULL;
+
+		// clear playfield moved flag
+		pPlayfield->bMoved = false;
+	}
+}
+
+/**
+ * Sets the xy position of the specified playfield in the current background.
+ * @param which			Which playfield
+ * @param newXpos		New x position
+ * @param newYpos		New y position
+ */
+
+void PlayfieldSetPos(int which, int newXpos, int newYpos) {
+	PPLAYFIELD pPlayfield;	// pointer to relavent playfield
+
+	// make sure there is a background
+	assert(pCurBgnd != NULL);
+
+	// make sure the playfield number is in range
+	assert(which >= 0 && which < pCurBgnd->numPlayfields);
+
+	// get playfield pointer
+	pPlayfield = pCurBgnd->fieldArray + which;
+
+	// set new integer position
+	pPlayfield->fieldX = intToFrac(newXpos);
+	pPlayfield->fieldY = intToFrac(newYpos);
+
+	// set moved flag
+	pPlayfield->bMoved = true;
+}
+
+/**
+ * Returns the xy position of the specified playfield in the current background.
+ * @param which			Which playfield
+ * @param pXpos			Returns current x position
+ * @param pYpos			Returns current y position
+ */
+
+void PlayfieldGetPos(int which, int *pXpos, int *pYpos) {
+	PPLAYFIELD pPlayfield;	// pointer to relavent playfield
+
+	// make sure there is a background
+	assert(pCurBgnd != NULL);
+
+	// make sure the playfield number is in range
+	assert(which >= 0 && which < pCurBgnd->numPlayfields);
+
+	// get playfield pointer
+	pPlayfield = pCurBgnd->fieldArray + which;
+
+	// get current integer position
+	*pXpos = fracToInt(pPlayfield->fieldX);
+	*pYpos = fracToInt(pPlayfield->fieldY);
+}
+
+/**
+ * Returns the display list for the specified playfield.
+ * @param which			Which playfield
+ */
+
+OBJECT *GetPlayfieldList(int which) {
+	PPLAYFIELD pPlayfield;	// pointer to relavent playfield
+
+	// make sure there is a background
+	assert(pCurBgnd != NULL);
+
+	// make sure the playfield number is in range
+	assert(which >= 0 && which < pCurBgnd->numPlayfields);
+
+	// get playfield pointer
+	pPlayfield = pCurBgnd->fieldArray + which;
+
+	// return the display list pointer for this playfield
+	return (OBJECT *)&pPlayfield->pDispList;
+}
+
+/**
+ * Draws all the playfield object lists for the current background.
+ * The playfield velocity is added to the playfield position in order
+ * to scroll each playfield before it is drawn.
+ */
+
+void DrawBackgnd(void) {
+	int i;			// playfield counter
+	PPLAYFIELD pPlay;	// playfield pointer
+	int prevX, prevY;	// save interger part of position
+	Common::Point ptWin;	// window top left
+
+	if (pCurBgnd == NULL)
+		return;		// no current background
+
+	// scroll each background playfield
+	for (i = 0; i < pCurBgnd->numPlayfields; i++) {
+		// get pointer to correct playfield
+		pPlay = pCurBgnd->fieldArray + i;
+
+		// save integer part of position
+		prevX = fracToInt(pPlay->fieldX);
+		prevY = fracToInt(pPlay->fieldY);
+
+		if (!bNoScroll) {
+			// update scrolling
+			pPlay->fieldX += pPlay->fieldXvel;
+			pPlay->fieldY += pPlay->fieldYvel;
+
+			// convert fixed point window pos to a int
+			ptWin.x = fracToInt(pPlay->fieldX);
+			ptWin.y = fracToInt(pPlay->fieldY);
+
+			// set the moved flag if the playfield has moved
+			if (prevX != ptWin.x || prevY != ptWin.y)
+				pPlay->bMoved = true;
+		}
+
+		// sort the display list for this background - just in case somebody has changed object Z positions
+		SortObjectList((OBJECT *)&pPlay->pDispList);
+
+		// generate clipping rects for all objects that have moved etc.
+		FindMovingObjects((OBJECT *)&pPlay->pDispList, &ptWin,
+			&pPlay->rcClip,	bNoScroll, pPlay->bMoved);
+
+		// clear playfield moved flag
+		pPlay->bMoved = false;
+	}
+
+	// merge the clipping rectangles
+	MergeClipRect();
+
+	// redraw all playfields within the clipping rectangles
+	const RectList &clipRects = GetClipRects();
+	for (RectList::const_iterator r = clipRects.begin(); r != clipRects.end(); ++r) {
+		// clear the clip rectangle on the virtual screen
+		// for each background playfield
+		for (i = 0; i < pCurBgnd->numPlayfields; i++) {
+			Common::Rect rcPlayClip;	// clip rect for this playfield
+
+			// get pointer to correct playfield
+			pPlay = pCurBgnd->fieldArray + i;
+
+			// convert fixed point window pos to a int
+			ptWin.x = fracToInt(pPlay->fieldX);
+			ptWin.y = fracToInt(pPlay->fieldY);
+
+			if (IntersectRectangle(rcPlayClip, pPlay->rcClip, *r))
+				// redraw all objects within this clipping rect
+				UpdateClipRect((OBJECT *)&pPlay->pDispList,
+						&ptWin,	&rcPlayClip);
+		}
+	}
+
+	// transfer any new palettes to the video DAC
+	PalettesToVideoDAC();
+
+	// update the screen within the clipping rectangles
+	for (RectList::const_iterator r = clipRects.begin(); r != clipRects.end(); ++r) {
+		UpdateScreenRect(*r);
+	}
+
+	// delete all the clipping rectangles
+	ResetClipRect();
+}
+
+} // end of namespace Tinsel


Property changes on: scummvm/trunk/engines/tinsel/background.cpp
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:keywords
   + Date Rev Author URL Id
Added: svn:eol-style
   + native

Added: scummvm/trunk/engines/tinsel/background.h
===================================================================
--- scummvm/trunk/engines/tinsel/background.h	                        (rev 0)
+++ scummvm/trunk/engines/tinsel/background.h	2008-07-23 09:02:47 UTC (rev 33230)
@@ -0,0 +1,165 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ * Data structures used for handling backgrounds
+ */
+
+#ifndef TINSEL_BACKGND_H     // prevent multiple includes
+#define TINSEL_BACKGND_H
+
+#include "tinsel/dw.h"	// for SCNHANDLE
+#include "tinsel/palette.h"	// palette definitions
+#include "common/frac.h"
+#include "common/rect.h"
+
+namespace Tinsel {
+
+struct OBJECT;
+
+
+/** Scrolling padding. Needed because scroll process does not normally run on every frame */
+enum {
+	SCROLLX_PAD	= 64,
+	SCROLLY_PAD	= 64
+};
+
+/** When module BLK_INFO list is this long, switch from a binary to linear search */
+#define	LINEAR_SEARCH	5
+
+
+/** structure of each individual background block */
+struct BLOCK {
+	short blkWidth;		//!< block width
+	short blkHeight;	//!< block height
+	SCNHANDLE hBlkBits;	//!< block bitmap handle
+};
+typedef BLOCK *PBLOCK;
+
+
+/** structure to define position of blocks, which block and which palette */
+struct BLK_INFO {
+	uint16 wBlkX;		//!< x position of this block
+	uint16 wBlkY;		//!< y position of this block
+	uint16 wBlkZ;		//!< z position of this block
+	uint8 byBlkFlags;	//!< block flags used for drawing object associated with this block
+	uint8 byBlkPal;		//!< which palette - index into "blkPals" for this block
+	int32 blkIndex;		//!< which block - index into "blocks"
+};
+typedef BLK_INFO *PBLK_INFO;
+
+
+/** background module structure - a module is a container for blocks */
+struct MODULE {
+	int modWidth;		//!< width of module
+	int modHeight;		//!< height of module
+	int numBlocks;		//!< number of blocks in this module
+	BLOCK *blocks;		//!< pointer to array of all blocks used by this module
+	uint32 *blkPals;		//!< pointer to array of all palette handles used by the blocks in this module
+	BLK_INFO *blkInfo;	//!< pointer to array of which block goes where
+						//!< NOTE: This array must be sorted on x position
+};
+typedef MODULE *PMODULE;
+
+
+/**
+ * background module node structure - links a playfields modules together
+ * and specifies each module position. It is done this way so that modules
+ * are position independent and can be reused within a playfield
+ */
+struct MOD_NODE {
+	MOD_NODE *pNext;	//!< next module node
+	MODULE *pModule;	//!< pointer to actual module definition
+	char *onDispList;	//!< pointer to modules (block on object list) flags - should alloc 1 byte per block
+	Common::Point ptModPos;		//!< module world start position
+};
+typedef MOD_NODE *PMOD_NODE;
+
+
+/** background playfield structure - a playfield is a container for modules */
+struct PLAYFIELD {
+	MOD_NODE *pModNode;	//!< head of module node chain for this playfield
+	OBJECT *pDispList;	//!< object display list for this playfield
+	frac_t fieldX;		//!< current world x position of playfield
+	frac_t fieldY;		//!< current world y position of playfield
+	frac_t fieldXvel;	//!< current x velocity of playfield
+	frac_t fieldYvel;	//!< current y velocity of playfield
+	Common::Rect rcClip;	//!< clip rectangle for this playfield
+	bool bMoved;		//!< set when playfield has moved
+};
+typedef PLAYFIELD *PPLAYFIELD;
+
+/** multi-playfield background structure - a backgnd is a container of playfields */
+struct BACKGND {
+	COLORREF rgbSkyColour;	//!< background sky colour
+	Common::Point ptInitWorld;		//!< initial world position
+	Common::Rect rcScrollLimits;	//!< scroll limits
+	int refreshRate;		//!< background update process refresh rate
+	frac_t *pXscrollTable;	//!< pointer to x direction scroll table for this background
+	frac_t *pYscrollTable;	//!< pointer to y direction scroll table for this background
+	int numPlayfields;		//!< number of playfields for this background
+	PLAYFIELD *fieldArray;	//!< pointer to array of all playfields for this background
+	bool bAutoErase;		//!< when set - screen is cleared before anything is plotted (unused)
+};
+
+
+/** screen clipping rect */
+extern Common::Rect rcScreen;
+
+/** scroll flag - when set scrolling and velocity additions are paused */
+extern bool bNoScroll;
+
+
+/*----------------------------------------------------------------------*\
+|*			Background Function Prototypes			*|
+\*----------------------------------------------------------------------*/
+
+void InitBackground(		// called to initialise a background
+	BACKGND *pBgnd);	// pointer to data struct for current background
+
+void StopBgndScrolling(void);	// Stops all background playfields from scrolling
+
+void PlayfieldSetPos(		// Sets the xy position of the specified playfield in the current background
+	int which,		// which playfield
+	int newXpos,		// new x position
+	int newYpos);		// new y position
+
+void PlayfieldGetPos(		// Returns the xy position of the specified playfield in the current background
+	int which,		// which playfield
+	int *pXpos,		// returns current x position
+	int *pYpos);		// returns current y position
+
+OBJECT *GetPlayfieldList(	// Returns the display list for the specified playfield
+	int which);		// which playfield
+
+void KillPlayfieldList(		// Kills all the objects on the display list for the specified playfield
+	int which);		// which playfield
+
+void DrawBackgnd(void);		// Draws all playfields for the current background
+
+void RedrawBackgnd(void);	// Completely redraws all the playfield object lists for the current background
+
+SCNHANDLE BackPal(void);
+
+} // end of namespace Tinsel
+
+#endif	// TINSEL_BACKGND_H


Property changes on: scummvm/trunk/engines/tinsel/background.h
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:keywords
   + Date Rev Author URL Id
Added: svn:eol-style
   + native

Added: scummvm/trunk/engines/tinsel/bg.cpp
===================================================================
--- scummvm/trunk/engines/tinsel/bg.cpp	                        (rev 0)
+++ scummvm/trunk/engines/tinsel/bg.cpp	2008-07-23 09:02:47 UTC (rev 33230)
@@ -0,0 +1,189 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ * Plays the background film of a scene.
+ */
+
+#include "tinsel/anim.h"
+#include "tinsel/background.h"
+#include "tinsel/dw.h"
+#include "tinsel/faders.h"
+#include "tinsel/film.h"
+#include "tinsel/font.h"
+#include "tinsel/handle.h"
+#include "tinsel/multiobj.h"
+#include "tinsel/object.h"
+#include "tinsel/pcode.h"		// CONTROL_STARTOFF
+#include "tinsel/pid.h"
+#include "tinsel/sched.h"
+#include "tinsel/timers.h"		// For ONE_SECOND constant
+#include "tinsel/tinlib.h"		// For control()
+
+#include "common/util.h"
+
+namespace Tinsel {
+
+//----------------- LOCAL GLOBAL DATA --------------------
+
+static SCNHANDLE BackPalette = 0;	// Background's palette
+static OBJECT *pBG = 0;		// The main picture's object.
+static int BGspeed = 0;
+static SCNHANDLE BgroundHandle = 0;	// Current scene handle - stored in case of Save_Scene()
+static bool DoFadeIn = false;
+static ANIM	thisAnim;	// used by BGmainProcess()
+
+/**
+ * BackPal
+ */
+SCNHANDLE BackPal(void) {
+	return BackPalette;
+}
+
+/**
+ * SetDoFadeIn
+*/
+void SetDoFadeIn(bool tf) {
+	DoFadeIn = tf;
+}
+
+/**
+ * Called before scene change.
+ */
+void DropBackground(void) {
+	pBG = NULL;		// No background
+	BackPalette = 0;	// No background palette
+}
+
+/**
+ * Return the width of the current background.
+ */
+int BackgroundWidth(void) {
+	assert(pBG);
+	return MultiRightmost(pBG) + 1;
+}
+
+/**
+ * Return the height of the current background.
+ */
+int BackgroundHeight(void) {
+	assert(pBG);
+	return MultiLowest(pBG) + 1;
+}
+
+/**
+ * Run main animation that comprises the scene background.
+ */
+static void BGmainProcess(CORO_PARAM) {
+	// COROUTINE
+	CORO_BEGIN_CONTEXT;
+	CORO_END_CONTEXT(_ctx);
+
+	CORO_BEGIN_CODE(_ctx);
+
+	const FREEL *pfr;
+	const MULTI_INIT *pmi;
+
+	// get the stuff copied to process when it was created
+	pfr = (const FREEL *)ProcessGetParamsSelf();
+
+	if (pBG == NULL) {
+		/*** At start of scene ***/
+
+		// Get the MULTI_INIT structure
+		pmi = (const MULTI_INIT *)LockMem(FROM_LE_32(pfr->mobj));
+
+		// Initialise and insert the object, and initialise its script.
+		pBG = MultiInitObject(pmi);
+		MultiInsertObject(GetPlayfieldList(FIELD_WORLD), pBG);
+		InitStepAnimScript(&thisAnim, pBG, FROM_LE_32(pfr->script), BGspeed);
+
+		if (DoFadeIn) {
+			FadeInFast(NULL);
+			DoFadeIn = false;
+		}
+
+		while (StepAnimScript(&thisAnim) != ScriptFinished)
+			CORO_SLEEP(1);
+
+		error("Background animation has finished!");
+	} else {
+		// New background during scene
+
+		// Just re-initialise the script.
+		InitStepAnimScript(&thisAnim, pBG, FROM_LE_32(pfr->script), BGspeed);
+		StepAnimScript(&thisAnim);
+	}
+
+	CORO_END_CODE;
+}
+
+/**
+ * setBackPal()
+ */
+void setBackPal(SCNHANDLE hPal) {
+	BackPalette = hPal;
+
+	fettleFontPal(BackPalette);
+	CreateTranslucentPalette(BackPalette);
+}
+
+void ChangePalette(SCNHANDLE hPal) {
+	SwapPalette(FindPalette(BackPalette), hPal);
+
+	setBackPal(hPal);
+}
+
+/**
+ * Given the scene background film, extracts the palette handle for
+ * everything else's use, then starts a display process for each reel
+ * in the film.
+ * @param bfilm			Scene background film
+ */
+void startupBackground(SCNHANDLE bfilm) {
+	const FILM *pfilm;
+	PIMAGE	pim;
+
+	BgroundHandle = bfilm;		// Save handle in case of Save_Scene()
+
+	pim = GetImageFromFilm(bfilm, 0, NULL, NULL, &pfilm);
+	setBackPal(FROM_LE_32(pim->hImgPal));
+
+	// Extract the film speed
+	BGspeed = ONE_SECOND / FROM_LE_32(pfilm->frate);
+
+	if (pBG == NULL)
+		control(CONTROL_STARTOFF);	// New feature - start scene with control off
+
+	// Start display process for each reel in the film
+	assert(FROM_LE_32(pfilm->numreels) == 1); // Multi-reeled backgrounds withdrawn
+	CoroutineInstall(PID_REEL, BGmainProcess, &pfilm->reels[0], sizeof(FREEL));
+}
+
+/**
+ * Return the current scene handle.
+ */
+SCNHANDLE GetBgroundHandle(void) {
+	return BgroundHandle;
+}
+
+} // end of namespace Tinsel


Property changes on: scummvm/trunk/engines/tinsel/bg.cpp
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:keywords
   + Date Rev Author URL Id
Added: svn:eol-style
   + native

Added: scummvm/trunk/engines/tinsel/cliprect.cpp
===================================================================
--- scummvm/trunk/engines/tinsel/cliprect.cpp	                        (rev 0)
+++ scummvm/trunk/engines/tinsel/cliprect.cpp	2008-07-23 09:02:47 UTC (rev 33230)
@@ -0,0 +1,312 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ * This file contains the clipping rectangle code.
+ */
+
+#include "tinsel/cliprect.h"	// object clip rect defs
+#include "tinsel/graphics.h"	// normal object drawing
+#include "tinsel/object.h"
+#include "tinsel/palette.h"
+
+namespace Tinsel {
+
+/** list of all clip rectangles */
+static RectList s_rectList;
+
+/**
+ * Resets the clipping rectangle allocator.
+ */
+void ResetClipRect(void) {
+	s_rectList.clear();
+}
+
+/**
+ * Allocate a clipping rectangle from the free list.
+ * @param pClip			clip rectangle dimensions to allocate
+ */
+void AddClipRect(const Common::Rect &pClip) {
+	s_rectList.push_back(pClip);
+}
+
+const RectList &GetClipRects() {
+	return s_rectList;
+}
+
+/**
+ * Creates the intersection of two rectangles.
+ * Returns True if there is a intersection.
+ * @param pDest			Pointer to destination rectangle that is to receive the intersection
+ * @param pSrc1			Pointer to a source rectangle
+ * @param pSrc2			Pointer to a source rectangle
+ */
+bool IntersectRectangle(Common::Rect &pDest, const Common::Rect &pSrc1, const Common::Rect &pSrc2) {
+	pDest.left   = (pSrc1.left > pSrc2.left) ? pSrc1.left : pSrc2.left;
+	pDest.top    = (pSrc1.top > pSrc2.top) ? pSrc1.top : pSrc2.top;
+	pDest.right  = (pSrc1.right < pSrc2.right) ? pSrc1.right : pSrc2.right;
+	pDest.bottom = (pSrc1.bottom < pSrc2.bottom) ? pSrc1.bottom : pSrc2.bottom;
+
+	return (pDest.right > pDest.left && pDest.bottom > pDest.top);
+}
+
+/**
+ * Creates the union of two rectangles.
+ * Returns True if there is a union.
+ * @param pDest			destination rectangle that is to receive the new union
+ * @param pSrc1			a source rectangle
+ * @param pSrc2			a source rectangle
+ */
+bool UnionRectangle(Common::Rect &pDest, const Common::Rect &pSrc1, const Common::Rect &pSrc2) {
+	pDest.left   = (pSrc1.left < pSrc2.left) ? pSrc1.left : pSrc2.left;
+	pDest.top    = (pSrc1.top < pSrc2.top) ? pSrc1.top : pSrc2.top;
+	pDest.right  = (pSrc1.right > pSrc2.right) ? pSrc1.right : pSrc2.right;
+	pDest.bottom = (pSrc1.bottom > pSrc2.bottom) ? pSrc1.bottom : pSrc2.bottom;
+
+	return (pDest.right > pDest.left && pDest.bottom > pDest.top);
+}
+
+/**
+ * Check if the two rectangles are next to each other.
+ * @param pSrc1			a source rectangle
+ * @param pSrc2			a source rectangle
+ */
+static bool LooseIntersectRectangle(const Common::Rect &pSrc1, const Common::Rect &pSrc2) {
+	Common::Rect pDest;
+
+	pDest.left   = (pSrc1.left > pSrc2.left) ? pSrc1.left : pSrc2.left;
+	pDest.top    = (pSrc1.top > pSrc2.top) ? pSrc1.top : pSrc2.top;
+	pDest.right  = (pSrc1.right < pSrc2.right) ? pSrc1.right : pSrc2.right;
+	pDest.bottom = (pSrc1.bottom < pSrc2.bottom) ? pSrc1.bottom : pSrc2.bottom;
+
+	return (pDest.right >= pDest.left && pDest.bottom >= pDest.top);
+}
+
+/**
+ * Adds velocities and creates clipping rectangles for all the
+ * objects that have moved on the specified object list.
+ * @param pObjList			Playfield display list to draw
+ * @param pWin				Playfield window top left position
+ * @param pClip				Playfield clipping rectangle
+ * @param bNoVelocity		When reset, objects pos is updated with velocity
+ * @param bScrolled)		When set, playfield has scrolled
+ */
+void FindMovingObjects(OBJECT *pObjList, Common::Point *pWin, Common::Rect *pClip, bool bNoVelocity, bool bScrolled) {
+	OBJECT *pObj;			// object list traversal pointer
+
+	for (pObj = pObjList->pNext; pObj != NULL; pObj = pObj->pNext) {
+		if (!bNoVelocity) {
+			// we want to add velocities to objects position
+
+			if (bScrolled) {
+				// this playfield has scrolled
+
+				// indicate change
+				pObj->flags |= DMA_CHANGED;
+			}
+		}
+
+		if ((pObj->flags & DMA_CHANGED) ||	// object changed
+			HasPalMoved(pObj->pPal)) {	// or palette moved
+			// object has changed in some way
+			
+			Common::Rect rcClip;	// objects clipped bounding rectangle
+			Common::Rect rcObj;	// objects bounding rectangle
+
+			// calc intersection of objects previous bounding rectangle
+			// NOTE: previous position is in screen co-ords
+			if (IntersectRectangle(rcClip, pObj->rcPrev, *pClip)) {
+				// previous position is within clipping rect
+				AddClipRect(rcClip);
+			}
+
+			// calc objects current bounding rectangle
+			if (pObj->flags & DMA_ABS) {
+				// object position is absolute
+				rcObj.left = fracToInt(pObj->xPos);
+				rcObj.top  = fracToInt(pObj->yPos);
+			} else {
+				// object position is relative to window
+				rcObj.left = fracToInt(pObj->xPos) - pWin->x;
+				rcObj.top  = fracToInt(pObj->yPos) - pWin->y;
+			}
+			rcObj.right  = rcObj.left + pObj->width;
+			rcObj.bottom = rcObj.top  + pObj->height;
+
+			// calc intersection of object with clipping rect			
+			if (IntersectRectangle(rcClip, rcObj, *pClip)) {
+				// current position is within clipping rect
+				AddClipRect(rcClip);
+
+				// update previous position
+				pObj->rcPrev = rcClip;
+			} else {
+				// clear previous position
+				pObj->rcPrev = Common::Rect();
+			}
+
+			// clear changed flag
+			pObj->flags &= ~DMA_CHANGED;
+		}
+	}
+}
+
+/**
+ * Merges any clipping rectangles that overlap to try and reduce
+ * the total number of clip rectangles.
+ */
+void MergeClipRect(void) {
+	if (s_rectList.size() > 1) {
+		RectList::iterator rOuter, rInner;
+
+		for (rOuter = s_rectList.begin(); rOuter != s_rectList.end(); ++rOuter) {
+			rInner = rOuter;
+			while (++rInner != s_rectList.end()) {
+
+				if (LooseIntersectRectangle(*rOuter, *rInner)) {
+					// these two rectangles overlap or
+					// are next to each other - merge them
+
+					UnionRectangle(*rOuter, *rOuter, *rInner);
+
+					// remove the inner rect from the list
+					s_rectList.erase(rInner);
+
+					// move back to beginning of list
+					rInner = rOuter;
+				}
+			}
+		}
+	}
+}
+
+/**
+ * Redraws all objects within this clipping rectangle.
+ * @param pObjList		Object list to draw
+ * @param pWin			Window top left position
+ * @param pClip			Pointer to clip rectangle
+ */
+void UpdateClipRect(OBJECT *pObjList, Common::Point *pWin, Common::Rect *pClip) {
+	int x, y, right, bottom;	// object corners
+	int hclip, vclip;			// total size of object clipping
+	DRAWOBJECT currentObj;		// filled in to draw the current object in list
+	OBJECT *pObj;				// object list iterator
+
+	// Initialise the fields of the drawing object to empty
+	memset(&currentObj, 0, sizeof(DRAWOBJECT));
+
+	for (pObj = pObjList->pNext; pObj != NULL; pObj = pObj->pNext) {
+		if (pObj->flags & DMA_ABS) {
+			// object position is absolute
+			x = fracToInt(pObj->xPos);
+			y = fracToInt(pObj->yPos);
+		} else {
+			// object position is relative to window
+			x = fracToInt(pObj->xPos) - pWin->x;
+			y = fracToInt(pObj->yPos) - pWin->y;
+		}
+
+		// calc object right
+		right = x + pObj->width;
+		if (right < 0)
+			// totally clipped if negative
+			continue;
+
+		// calc object bottom
+		bottom = y + pObj->height;
+		if (bottom < 0)
+			// totally clipped if negative
+			continue;
+
+		// bottom clip = low right y - clip low right y
+		currentObj.botClip = bottom - pClip->bottom;
+		if (currentObj.botClip < 0) {
+			// negative - object is not clipped
+			currentObj.botClip = 0;
+		}
+
+		// right clip = low right x - clip low right x
+		currentObj.rightClip = right - pClip->right;
+		if (currentObj.rightClip < 0) {
+			// negative - object is not clipped
+			currentObj.rightClip = 0;
+		}
+
+		// top clip = clip top left y - top left y
+		currentObj.topClip = pClip->top - y;
+		if (currentObj.topClip < 0) {
+			// negative - object is not clipped
+			currentObj.topClip = 0;
+		} else {	// clipped - adjust start position to top of clip rect
+			y = pClip->top;
+		}
+
+		// left clip = clip top left x - top left x
+		currentObj.leftClip = pClip->left - x;
+		if (currentObj.leftClip < 0) {
+			// negative - object is not clipped
+			currentObj.leftClip = 0;
+		}
+		else
+		// NOTE: This else statement is disabled in tinsel v1
+		{	// clipped - adjust start position to left of clip rect
+			x = pClip->left;
+		}
+
+		// calc object total horizontal clipping
+		hclip = currentObj.leftClip + currentObj.rightClip;
+
+		// calc object total vertical clipping
+		vclip = currentObj.topClip + currentObj.botClip;
+
+		if (hclip + vclip != 0) {
+			// object is clipped in some way
+
+			if (pObj->width <= hclip)
+				// object totally clipped horizontally - ignore
+				continue;
+
+			if (pObj->height <= vclip)
+				// object totally clipped vertically - ignore
+				continue;
+
+			// set clip bit in objects flags
+			currentObj.flags = pObj->flags | DMA_CLIP;
+		} else {	// object is not clipped - copy flags
+			currentObj.flags = pObj->flags;
+		}
+
+		// copy objects properties to local object
+		currentObj.width    = pObj->width;
+		currentObj.height   = pObj->height;
+		currentObj.xPos     = (short) x;
+		currentObj.yPos     = (short) y;
+		currentObj.pPal     = pObj->pPal;
+		currentObj.constant = pObj->constant;
+		currentObj.hBits    = pObj->hBits;
+
+		// draw the object
+		DrawObject(&currentObj);
+	}
+}
+
+} // end of namespace Tinsel


Property changes on: scummvm/trunk/engines/tinsel/cliprect.cpp
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:keywords
   + Date Rev Author URL Id
Added: svn:eol-style
   + native

Added: scummvm/trunk/engines/tinsel/cliprect.h
===================================================================
--- scummvm/trunk/engines/tinsel/cliprect.h	                        (rev 0)
+++ scummvm/trunk/engines/tinsel/cliprect.h	2008-07-23 09:02:47 UTC (rev 33230)
@@ -0,0 +1,76 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ * Clipping rectangle defines
+ */
+
+#ifndef TINSEL_CLIPRECT_H     // prevent multiple includes
+#define TINSEL_CLIPRECT_H
+
+#include "common/list.h"
+#include "common/rect.h"
+
+namespace Tinsel {
+
+struct OBJECT;
+
+typedef Common::List<Common::Rect> RectList;
+
+/*----------------------------------------------------------------------*\
+|*			Clip Rect Function Prototypes			*|
+\*----------------------------------------------------------------------*/
+
+void ResetClipRect(void);	// Resets the clipping rectangle allocator
+
+void AddClipRect(		// Allocate a clipping rectangle from the free list
+	const Common::Rect &pClip);		// clip rectangle dimensions to allocate
+
+const RectList &GetClipRects();
+
+bool IntersectRectangle(	// Creates the intersection of two rectangles
+	Common::Rect &pDest,		// pointer to destination rectangle that is to receive the intersection
+	const Common::Rect &pSrc1,		// pointer to a source rectangle
+	const Common::Rect &pSrc2);		// pointer to a source rectangle
+
+bool UnionRectangle(		// Creates the union of two rectangles
+	Common::Rect &pDest,		// destination rectangle that is to receive the new union
+	const Common::Rect &pSrc1,		// a source rectangle
+	const Common::Rect &pSrc2);		// a source rectangle
+
+void FindMovingObjects(		// Creates clipping rectangles for all the objects that have moved on the specified object list
+	OBJECT *pObjList,	// playfield display list to draw
+	Common::Point *pWin,		// playfield window top left position
+	Common::Rect *pClip,		// playfield clipping rectangle
+	bool bVelocity,		// when set, objects pos is updated with velocity
+	bool bScrolled);	// when set, playfield has scrolled
+
+void MergeClipRect(void);	// Merges any clipping rectangles that overlap
+
+void UpdateClipRect(		// Redraws all objects within this clipping rectangle
+	OBJECT *pObjList,	// object list to draw
+	Common::Point *pWin,		// window top left position
+	Common::Rect *pClip);		// pointer to clip rectangle
+
+} // end of namespace Tinsel
+
+#endif	// TINSEL_CLIPRECT_H


Property changes on: scummvm/trunk/engines/tinsel/cliprect.h
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:keywords
   + Date Rev Author URL Id
Added: svn:eol-style
   + native

Added: scummvm/trunk/engines/tinsel/config.cpp
===================================================================
--- scummvm/trunk/engines/tinsel/config.cpp	                        (rev 0)
+++ scummvm/trunk/engines/tinsel/config.cpp	2008-07-23 09:02:47 UTC (rev 33230)
@@ -0,0 +1,125 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ * This file contains configuration functionality
+ */
+
+//#define USE_3FLAGS 1
+
+#include "tinsel/config.h"
+#include "tinsel/dw.h"
+#include "tinsel/sound.h"
+#include "tinsel/music.h"
+
+#include "common/file.h"
+#include "common/config-manager.h"
+
+#include "sound/mixer.h"
+
+namespace Tinsel {
+
+//----------------- GLOBAL GLOBAL DATA --------------------
+
+int dclickSpeed = DOUBLE_CLICK_TIME;
+int volMidi = MAXMIDIVOL;
+int volSound = MAXSAMPVOL;
+int volVoice = MAXSAMPVOL;
+int speedText = DEFTEXTSPEED;
+int bSubtitles = false;
+int bSwapButtons = 0;
+LANGUAGE language = TXT_ENGLISH;
+int bAmerica = 0;
+
+
+// Shouldn't really be here, but time is short...
+bool bNoBlocking;
+
+/**
+ * WriteConfig()
+ */
+
+void WriteConfig(void) {
+	ConfMan.setInt("dclick_speed", dclickSpeed);
+	ConfMan.setInt("music_volume", (volMidi * Audio::Mixer::kMaxChannelVolume) / MAXMIDIVOL);
+	ConfMan.setInt("sfx_volume", (volSound * Audio::Mixer::kMaxChannelVolume) / MAXSAMPVOL);
+	ConfMan.setInt("speech_volume", (volVoice * Audio::Mixer::kMaxChannelVolume) / MAXSAMPVOL);
+	ConfMan.setInt("talkspeed", (speedText * 255) / 100);
+	ConfMan.setBool("subtitles", bSubtitles);
+	//ConfMan.setBool("swap_buttons", bSwapButtons ? 1 : 0);
+	//ConfigData.language = language;	// not necessary, as language has been set in the launcher
+	//ConfigData.bAmerica = bAmerica;		// EN_USA / EN_GRB
+}
+
+/*---------------------------------------------------------------------*\
+|	ReadConfig()							|
+|-----------------------------------------------------------------------|
+|
+\*---------------------------------------------------------------------*/
+void ReadConfig(void) {
+	if (ConfMan.hasKey("dclick_speed"))
+		dclickSpeed = ConfMan.getInt("dclick_speed");
+
+	volMidi = (ConfMan.getInt("music_volume") * MAXMIDIVOL) / Audio::Mixer::kMaxChannelVolume;
+	volSound = (ConfMan.getInt("sfx_volume") * MAXSAMPVOL) / Audio::Mixer::kMaxChannelVolume;
+	volVoice = (ConfMan.getInt("speech_volume") * MAXSAMPVOL) / Audio::Mixer::kMaxChannelVolume;
+
+	if (ConfMan.hasKey("talkspeed"))
+		speedText = (ConfMan.getInt("talkspeed") * 100) / 255;
+	if (ConfMan.hasKey("subtitles"))
+		bSubtitles = ConfMan.getBool("subtitles");
+
+	// FIXME: If JAPAN is set, subtitles are forced OFF in the original engine
+
+	//bSwapButtons = ConfMan.getBool("swap_buttons") == 1 ? true : false;
+	//ConfigData.language = language;	// not necessary, as language has been set in the launcher
+	//ConfigData.bAmerica = bAmerica;		// EN_USA / EN_GRB
+
+// The flags here control how many country flags are displayed in one of the option dialogs.
+#if defined(USE_3FLAGS) || defined(USE_4FLAGS) || defined(USE_5FLAGS)
+	language = ConfigData.language;
+ #ifdef USE_3FLAGS
+	if (language == TXT_ENGLISH || language == TXT_ITALIAN) {
+		language = TXT_GERMAN;
+		bSubtitles = true;
+	}
+ #endif
+ #ifdef USE_4FLAGS
+	if (language == TXT_ENGLISH) {
+		language = TXT_GERMAN;
+		bSubtitles = true;
+	}
+ #endif
+#else
+	language = TXT_ENGLISH;
+#endif
+}
+
+bool isJapanMode() {
+#ifdef JAPAN
+	return true;
+#else
+	return false;
+#endif
+}
+
+} // end of namespace Tinsel


Property changes on: scummvm/trunk/engines/tinsel/config.cpp
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:keywords
   + Date Rev Author URL Id
Added: svn:eol-style
   + native

Added: scummvm/trunk/engines/tinsel/config.h
===================================================================
--- scummvm/trunk/engines/tinsel/config.h	                        (rev 0)
+++ scummvm/trunk/engines/tinsel/config.h	2008-07-23 09:02:47 UTC (rev 33230)
@@ -0,0 +1,72 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT

@@ Diff output truncated at 100000 characters. @@

This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list