summaryrefslogtreecommitdiff
path: root/src/Plugins
diff options
context:
space:
mode:
authorAsh Wolf <ninji@wuffs.org>2023-07-11 17:52:00 +0100
committerAsh Wolf <ninji@wuffs.org>2023-07-11 17:52:00 +0100
commit024306ccab5f6d51f3fce269fb1984fd02f3bb02 (patch)
tree8d359495d72bf4e7295c7eab4cb220edc2d4b60c /src/Plugins
parent0f3cba6fcea0ffd511dfe3275d57a5b9e69be5be (diff)
downloadt2win-main.tar.gz
t2win-main.zip
add Floor, add DefaultToolPalettemain
Diffstat (limited to 'src/Plugins')
-rw-r--r--src/Plugins/Food/Burger/Burger.cpp16
-rw-r--r--src/Plugins/Food/Burger/Burger.def4
-rw-r--r--src/Plugins/Food/Burger/Burger.dsp1
-rw-r--r--src/Plugins/Food/Burger/Burger.h2
-rw-r--r--src/Plugins/Food/Burger/Resource.h16
-rw-r--r--src/Plugins/Lobby/Floor/Floor.clw16
-rw-r--r--src/Plugins/Lobby/Floor/Floor.cpp97
-rw-r--r--src/Plugins/Lobby/Floor/Floor.def10
-rw-r--r--src/Plugins/Lobby/Floor/Floor.dsp157
-rw-r--r--src/Plugins/Lobby/Floor/Floor.h45
-rw-r--r--src/Plugins/Lobby/Floor/Floor.rc150
-rw-r--r--src/Plugins/Lobby/Floor/FloorDef.cpp811
-rw-r--r--src/Plugins/Lobby/Floor/FloorDef.h19
-rw-r--r--src/Plugins/Lobby/Floor/FloorPlugin.cpp6
-rw-r--r--src/Plugins/Lobby/Floor/FloorPlugin.h7
-rw-r--r--src/Plugins/Lobby/Floor/Resource.h16
-rw-r--r--src/Plugins/Lobby/Floor/StdAfx.cpp6
-rw-r--r--src/Plugins/Lobby/Floor/StdAfx.h41
-rw-r--r--src/Plugins/ToolPalette/DefaultToolPalette/DefaultToolPalette.clw16
-rw-r--r--src/Plugins/ToolPalette/DefaultToolPalette/DefaultToolPalette.cpp235
-rw-r--r--src/Plugins/ToolPalette/DefaultToolPalette/DefaultToolPalette.def9
-rw-r--r--src/Plugins/ToolPalette/DefaultToolPalette/DefaultToolPalette.dsp157
-rw-r--r--src/Plugins/ToolPalette/DefaultToolPalette/DefaultToolPalette.h44
-rw-r--r--src/Plugins/ToolPalette/DefaultToolPalette/DefaultToolPalette.rc132
-rw-r--r--src/Plugins/ToolPalette/DefaultToolPalette/Resource.h16
-rw-r--r--src/Plugins/ToolPalette/DefaultToolPalette/StdAfx.cpp6
-rw-r--r--src/Plugins/ToolPalette/DefaultToolPalette/StdAfx.h40
-rw-r--r--src/Plugins/ToolPalette/DefaultToolPalette/ToolPalette.cpp863
-rw-r--r--src/Plugins/ToolPalette/DefaultToolPalette/ToolPalette.h85
-rw-r--r--src/Plugins/ToolPalette/DefaultToolPalette/ToolPaletteItem.cpp262
-rw-r--r--src/Plugins/ToolPalette/DefaultToolPalette/ToolPaletteItem.h49
31 files changed, 3306 insertions, 28 deletions
diff --git a/src/Plugins/Food/Burger/Burger.cpp b/src/Plugins/Food/Burger/Burger.cpp
index 2e9f301..45b8965 100644
--- a/src/Plugins/Food/Burger/Burger.cpp
+++ b/src/Plugins/Food/Burger/Burger.cpp
@@ -65,8 +65,7 @@ CBurgerApp theApp;
FoodPlugin *sFoodPlugin;
FoodDef *sFoodDef;
-#pragma comment(linker, "/export:ConstructProgramPlugin=_ConstructProgramPlugin@4")
-extern "C" void *CALLBACK ConstructProgramPlugin(T2PluginSpecifier *inSpecifier) {
+void *CALLBACK ConstructProgramPlugin(T2PluginSpecifier *inSpecifier) {
if (!sFoodPlugin) {
#line 88
sFoodPlugin = new FoodPlugin('TnPl', *inSpecifier);
@@ -75,8 +74,7 @@ extern "C" void *CALLBACK ConstructProgramPlugin(T2PluginSpecifier *inSpecifier)
return sFoodPlugin;
}
-#pragma comment(linker, "/export:ConstructTemplatePlugin=_ConstructTemplatePlugin@16")
-extern "C" void *CALLBACK ConstructTemplatePlugin(T2PluginSpecifier *inSpecifier, CResFile *inResFile, T2WorldDef *inWorldDef, T2TenantPlugin *inPlugin) {
+void *CALLBACK ConstructTemplatePlugin(T2PluginSpecifier *inSpecifier, CResFile *inResFile, T2WorldDef *inWorldDef, T2TenantPlugin *inPlugin) {
if (!sFoodDef) {
#line 101
sFoodDef = new FoodDef('TnDf', *inSpecifier, inResFile, inWorldDef, inPlugin);
@@ -85,8 +83,7 @@ extern "C" void *CALLBACK ConstructTemplatePlugin(T2PluginSpecifier *inSpecifier
return sFoodDef;
}
-#pragma comment(linker, "/export:DestructProgramPlugin=_DestructProgramPlugin@0")
-extern "C" void *CALLBACK DestructProgramPlugin() {
+void *CALLBACK DestructProgramPlugin() {
delete sFoodPlugin;
sFoodPlugin = NULL;
@@ -96,11 +93,10 @@ extern "C" void *CALLBACK DestructProgramPlugin() {
return NULL;
}
-#pragma comment(linker, "/export:GetAttr=_GetAttr@16")
-extern "C" T2PluginSpecifier *CALLBACK GetAttr(T2PluginSpecifier *inSpecifier, CResFile *inResFile, T2WorldDef *inWorldDef, T2TenantPlugin *inPlugin) {
-#line 120
+T2PluginSpecifier *CALLBACK GetAttr(T2PluginSpecifier *inSpecifier, CResFile *inResFile, T2WorldDef *inWorldDef, T2TenantPlugin *inPlugin) {
+#line 76
T2PluginSpecifier *specifier = new T2PluginSpecifier;
- specifier->mPluginName = "Burgar";
+ specifier->mPluginName = "Floor Ver1.3";
specifier->mType = 'TnPl';
specifier->mAttrib = 0xFFFFFFFF;
specifier->mGameLevel = 0;
diff --git a/src/Plugins/Food/Burger/Burger.def b/src/Plugins/Food/Burger/Burger.def
index c6ca96c..d8e0028 100644
--- a/src/Plugins/Food/Burger/Burger.def
+++ b/src/Plugins/Food/Burger/Burger.def
@@ -4,3 +4,7 @@ LIBRARY "Burger"
DESCRIPTION 'Burger Windows Dynamic Link Library'
EXPORTS
+ ConstructProgramPlugin
+ ConstructTemplatePlugin
+ DestructProgramPlugin
+ GetAttr
diff --git a/src/Plugins/Food/Burger/Burger.dsp b/src/Plugins/Food/Burger/Burger.dsp
index 4743baa..b7ed5a7 100644
--- a/src/Plugins/Food/Burger/Burger.dsp
+++ b/src/Plugins/Food/Burger/Burger.dsp
@@ -78,6 +78,7 @@ BSC32=bscmake.exe
LINK32=link.exe
# ADD BASE LINK32 /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
# ADD LINK32 ../../../T2DLL/Debug/T2DLL.lib /nologo /subsystem:windows /dll /debug /machine:I386 /out:"..\..\Burger.t2p" /pdbtype:sept
+# SUBTRACT LINK32 /map /nodefaultlib
!ENDIF
diff --git a/src/Plugins/Food/Burger/Burger.h b/src/Plugins/Food/Burger/Burger.h
index eb21d60..6fe91a7 100644
--- a/src/Plugins/Food/Burger/Burger.h
+++ b/src/Plugins/Food/Burger/Burger.h
@@ -43,4 +43,4 @@ public:
//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
-#endif // !defined(AFX_BURGER2_H__81154B54_BBFC_4E61_A2BC_BB53B98894B3__INCLUDED_)
+#endif // !defined(AFX_BURGER_H__81154B54_BBFC_4E61_A2BC_BB53B98894B3__INCLUDED_)
diff --git a/src/Plugins/Food/Burger/Resource.h b/src/Plugins/Food/Burger/Resource.h
new file mode 100644
index 0000000..a09f2ba
--- /dev/null
+++ b/src/Plugins/Food/Burger/Resource.h
@@ -0,0 +1,16 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Visual C++ generated include file.
+// Used by BURGER.RC
+//
+
+// Next default values for new objects
+//
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+
+#define _APS_NEXT_RESOURCE_VALUE 129
+#define _APS_NEXT_COMMAND_VALUE 32771
+#define _APS_NEXT_CONTROL_VALUE 1000
+#define _APS_NEXT_SYMED_VALUE 101
+#endif
+#endif
diff --git a/src/Plugins/Lobby/Floor/Floor.clw b/src/Plugins/Lobby/Floor/Floor.clw
new file mode 100644
index 0000000..363ad09
--- /dev/null
+++ b/src/Plugins/Lobby/Floor/Floor.clw
@@ -0,0 +1,16 @@
+; CLW file contains information for the MFC ClassWizard
+
+[General Info]
+Version=1
+ClassCount=1
+Class1=CFloorApp
+LastClass=CFloorApp
+NewFileInclude2=#include "Floor.h"
+ResourceCount=0
+NewFileInclude1=#include "stdafx.h"
+
+[CLS:CFloorApp]
+Type=0
+HeaderFile=Floor.h
+ImplementationFile=Floor.cpp
+Filter=N
diff --git a/src/Plugins/Lobby/Floor/Floor.cpp b/src/Plugins/Lobby/Floor/Floor.cpp
index e5fc2a5..ab788c8 100644
--- a/src/Plugins/Lobby/Floor/Floor.cpp
+++ b/src/Plugins/Lobby/Floor/Floor.cpp
@@ -1,7 +1,104 @@
+// Floor.cpp : Defines the initialization routines for the DLL.
+//
+
+#include "stdafx.h"
#include "Floor.h"
+#include "FloorDef.h"
+#include "FloorPlugin.h"
+#include "../../../T2DLL/T2PluginSpecifier.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
+
+//
+// Note!
+//
+// If this DLL is dynamically linked against the MFC
+// DLLs, any functions exported from this DLL which
+// call into MFC must have the AFX_MANAGE_STATE macro
+// added at the very beginning of the function.
+//
+// For example:
+//
+// extern "C" BOOL PASCAL EXPORT ExportedFunction()
+// {
+// AFX_MANAGE_STATE(AfxGetStaticModuleState());
+// // normal function body here
+// }
+//
+// It is very important that this macro appear in each
+// function, prior to any calls into MFC. This means that
+// it must appear as the first statement within the
+// function, even before any object variable declarations
+// as their constructors may generate calls into the MFC
+// DLL.
+//
+// Please see MFC Technical Notes 33 and 58 for additional
+// details.
+//
+
+/////////////////////////////////////////////////////////////////////////////
+// CFloorApp
+
+BEGIN_MESSAGE_MAP(CFloorApp, CWinApp)
+ //{{AFX_MSG_MAP(CFloorApp)
+ // NOTE - the ClassWizard will add and remove mapping macros here.
+ // DO NOT EDIT what you see in these blocks of generated code!
+ //}}AFX_MSG_MAP
+END_MESSAGE_MAP()
+
+/////////////////////////////////////////////////////////////////////////////
+// CFloorApp construction
+
+CFloorApp::CFloorApp()
+{
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// The one and only CFloorApp object
+
+CFloorApp theApp;
+
+FloorPlugin *sFloorPlugin;
+FloorDef *sFloorDef;
+
+void *CALLBACK ConstructProgramPlugin(T2PluginSpecifier *inSpecifier) {
+ if (!sFloorPlugin) {
+#line 48
+ sFloorPlugin = new FloorPlugin('TnPl', *inSpecifier);
+ }
+
+ return sFloorPlugin;
+}
+
+void *CALLBACK ConstructTemplatePlugin(T2PluginSpecifier *inSpecifier, CResFile *inResFile, T2WorldDef *inWorldDef, T2TenantPlugin *inPlugin) {
+ if (!sFloorDef) {
+#line 55
+ sFloorDef = new FloorDef('TnDf', *inSpecifier, inResFile, inWorldDef, inPlugin);
+ }
+
+ return sFloorDef;
+}
+
+void *CALLBACK DestructProgramPlugin() {
+ delete sFloorPlugin;
+ sFloorPlugin = NULL;
+
+ delete sFloorDef;
+ sFloorDef = NULL;
+
+ return NULL;
+}
+
+T2PluginSpecifier *CALLBACK GetAttr(T2PluginSpecifier *inSpecifier, CResFile *inResFile, T2WorldDef *inWorldDef, T2TenantPlugin *inPlugin) {
+#line 76
+ T2PluginSpecifier *specifier = new T2PluginSpecifier;
+ specifier->mPluginName = "Burgar";
+ specifier->mType = 'TnPl';
+ specifier->mAttrib = 0xFFFFFFFF;
+ specifier->mGameLevel = 0;
+ return specifier;
+}
diff --git a/src/Plugins/Lobby/Floor/Floor.def b/src/Plugins/Lobby/Floor/Floor.def
new file mode 100644
index 0000000..a24e3a1
--- /dev/null
+++ b/src/Plugins/Lobby/Floor/Floor.def
@@ -0,0 +1,10 @@
+; Floor.def : Declares the module parameters for the DLL.
+
+LIBRARY "Floor"
+DESCRIPTION 'Floor Windows Dynamic Link Library'
+
+EXPORTS
+ ConstructProgramPlugin
+ ConstructTemplatePlugin
+ DestructProgramPlugin
+ GetAttr
diff --git a/src/Plugins/Lobby/Floor/Floor.dsp b/src/Plugins/Lobby/Floor/Floor.dsp
new file mode 100644
index 0000000..322c46a
--- /dev/null
+++ b/src/Plugins/Lobby/Floor/Floor.dsp
@@ -0,0 +1,157 @@
+# Microsoft Developer Studio Project File - Name="Floor" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 5.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=Floor - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "Floor.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "Floor.mak" CFG="Floor - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "Floor - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "Floor - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "Floor - Win32 Release"
+
+# PROP BASE Use_MFC 6
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 6
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_WINDLL" /D "_AFXDLL" /Yu"stdafx.h" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_WINDLL" /D "_AFXDLL" /D "_USRDLL" /Yu"stdafx.h" /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32
+# ADD BASE RSC /l 0x809 /d "NDEBUG" /d "_AFXDLL"
+# ADD RSC /l 0x809 /d "NDEBUG" /d "_AFXDLL"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 /nologo /subsystem:windows /dll /machine:I386
+# ADD LINK32 /nologo /subsystem:windows /dll /machine:I386
+
+!ELSEIF "$(CFG)" == "Floor - Win32 Debug"
+
+# PROP BASE Use_MFC 6
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 6
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_WINDLL" /D "_AFXDLL" /Yu"stdafx.h" /FD /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "Z:\Users\ash\src\t2-res\dx5\cdrom\sdk\inc" /I "Z:\Users\ash\src\t2-res\dxmedia51\DX51\dxmdev\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_WINDLL" /D "_AFXDLL" /D "_USRDLL" /Yu"stdafx.h" /FD /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32
+# ADD BASE RSC /l 0x809 /d "_DEBUG" /d "_AFXDLL"
+# ADD RSC /l 0x809 /d "_DEBUG" /d "_AFXDLL"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 ../../../T2DLL/Debug/T2DLL.lib /nologo /subsystem:windows /dll /debug /machine:I386 /out:"..\..\Floor.t2p" /pdbtype:sept
+
+!ENDIF
+
+# Begin Target
+
+# Name "Floor - Win32 Release"
+# Name "Floor - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\Floor.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\FloorDef.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\FloorPlugin.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\Floor.def
+# End Source File
+# Begin Source File
+
+SOURCE=.\Floor.rc
+
+!IF "$(CFG)" == "Floor - Win32 Release"
+
+!ELSEIF "$(CFG)" == "Floor - Win32 Debug"
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=.\StdAfx.cpp
+# ADD CPP /Yc"stdafx.h"
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=.\Floor.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\FloorDef.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\FloorPlugin.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Resource.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\StdAfx.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe"
+# Begin Source File
+
+SOURCE=.\res\Floor.rc2
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/src/Plugins/Lobby/Floor/Floor.h b/src/Plugins/Lobby/Floor/Floor.h
index 1a6ec0f..ec27269 100644
--- a/src/Plugins/Lobby/Floor/Floor.h
+++ b/src/Plugins/Lobby/Floor/Floor.h
@@ -1,5 +1,46 @@
+// Floor.h : main header file for the FLOOR DLL
+//
+
+#if !defined(AFX_FLOOR_H__81154B54_BBFC_4E61_A2BC_BB53B98894B3__INCLUDED_)
+#define AFX_FLOOR_H__81154B54_BBFC_4E61_A2BC_BB53B98894B3__INCLUDED_
+
+#if _MSC_VER >= 1000
#pragma once
-#include "common.h"
+#endif // _MSC_VER >= 1000
+
+#ifndef __AFXWIN_H__
+ #error include 'stdafx.h' before including this file for PCH
+#endif
+
+#include "../../../common.h"
+#include "resource.h" // main symbols
+
+/////////////////////////////////////////////////////////////////////////////
+// CFloorApp
+// See Floor.cpp for the implementation of this class
+//
+
+class CFloorApp : public CWinApp
+{
+public:
+ CFloorApp();
-class Floor {
+// Overrides
+ // ClassWizard generated virtual function overrides
+ //{{AFX_VIRTUAL(CFloorApp)
+ //}}AFX_VIRTUAL
+
+ //{{AFX_MSG(CFloorApp)
+ // NOTE - the ClassWizard will add and remove member functions here.
+ // DO NOT EDIT what you see in these blocks of generated code !
+ //}}AFX_MSG
+ DECLARE_MESSAGE_MAP()
};
+
+
+/////////////////////////////////////////////////////////////////////////////
+
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
+
+#endif // !defined(AFX_FLOOR_H__81154B54_BBFC_4E61_A2BC_BB53B98894B3__INCLUDED_)
diff --git a/src/Plugins/Lobby/Floor/Floor.rc b/src/Plugins/Lobby/Floor/Floor.rc
new file mode 100644
index 0000000..1781a41
--- /dev/null
+++ b/src/Plugins/Lobby/Floor/Floor.rc
@@ -0,0 +1,150 @@
+// Microsoft Visual C++ generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "afxres.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+128 ATTR "res\\ATTR128_1.bin"
+
+128 DESC "res\\DESC128_1.txt"
+
+100 OBJMAP "res\\OBJMAP100_1.txt"
+
+1000 OBJMAP "res\\OBJMAP1000_1.txt"
+
+1001 OBJMAP "res\\OBJMAP1001_1.txt"
+
+1002 OBJMAP "res\\OBJMAP1002_1.txt"
+
+1003 OBJMAP "res\\OBJMAP1003_1.txt"
+
+1 TNDF "res\\TNDF1_1.bin"
+
+100 BITMAP "res\\BITMAP100_1.bmp"
+
+1000 BITMAP "res\\BITMAP1000_1.bmp"
+
+1001 BITMAP "res\\BITMAP1001_1.bmp"
+
+1002 BITMAP "res\\BITMAP1002_1.bmp"
+
+1003 BITMAP "res\\BITMAP1003_1.bmp"
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE DISCARDABLE
+BEGIN
+ "resource.h\0"
+END
+
+2 TEXTINCLUDE DISCARDABLE
+BEGIN
+ "#include ""afxres.h""\r\n"
+ "\0"
+END
+
+3 TEXTINCLUDE DISCARDABLE
+BEGIN
+ "#define _AFX_NO_SPLITTER_RESOURCES\r\n"
+ "#define _AFX_NO_OLE_RESOURCES\r\n"
+ "#define _AFX_NO_TRACKER_RESOURCES\r\n"
+ "#define _AFX_NO_PROPERTY_RESOURCES\r\n"
+ "\r\n"
+ "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r\n"
+ "#ifdef _WIN32\r\n"
+ "LANGUAGE 9, 1\r\n"
+ "#pragma code_page(1252)\r\n"
+ "#endif\r\n"
+ "#include ""res\\Floor.rc2"" // non-Microsoft Visual C++ edited resources\r\n"
+ "#include ""afxres.rc"" // Standard components\r\n"
+ "#endif"
+ "\0"
+END
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // APSTUDIO_INVOKED
+
+
+
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+#ifdef _WIN32
+LANGUAGE 9, 1
+#pragma code_page(1252)
+#endif
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION 1,0,0,1
+ PRODUCTVERSION 1,0,0,1
+ FILEFLAGSMASK 0x3fL
+#ifdef _DEBUG
+ FILEFLAGS 0x1L
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS 0x4L
+ FILETYPE 0x2L
+ FILESUBTYPE 0x0L
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "040904B0"
+ BEGIN
+ VALUE "CompanyName", "\0"
+ VALUE "FileDescription", "Floor DLL\0"
+ VALUE "FileVersion", "1, 0, 0, 1\0"
+ VALUE "InternalName", "Floor\0"
+ VALUE "LegalCopyright", "Copyright (C) 1997\0"
+ VALUE "LegalTrademarks", "\0"
+ VALUE "OriginalFilename","Floor.DLL\0"
+ VALUE "ProductName", "Floor Dynamic Link Library\0"
+ VALUE "ProductVersion", "1, 0, 0, 1\0"
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x409, 1200
+ END
+END
+
+#endif
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+#define _AFX_NO_SPLITTER_RESOURCES
+#define _AFX_NO_OLE_RESOURCES
+#define _AFX_NO_TRACKER_RESOURCES
+#define _AFX_NO_PROPERTY_RESOURCES
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+#ifdef _WIN32
+LANGUAGE 9, 1
+#pragma code_page(1252)
+#endif
+#include "res\\Floor.rc2" // non-Microsoft Visual C++ edited resources
+#include "afxres.rc" // Standard components
+#endif
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
+
diff --git a/src/Plugins/Lobby/Floor/FloorDef.cpp b/src/Plugins/Lobby/Floor/FloorDef.cpp
index e537523..029485b 100644
--- a/src/Plugins/Lobby/Floor/FloorDef.cpp
+++ b/src/Plugins/Lobby/Floor/FloorDef.cpp
@@ -1,7 +1,818 @@
+#include "StdAfx.h"
#include "FloorDef.h"
+#include "../../../T2DLL/T2BitImage.h"
+#include "../../../T2DLL/T2CrossEquipArray.h"
+#include "../../../T2DLL/T2FInfoAreaIterator.h"
+#include "../../../T2DLL/T2FInfoPtIterator.h"
+#include "../../../T2DLL/T2FloorInfo.h"
+#include "../../../T2DLL/T2ImageObj.h"
+#include "../../../T2DLL/T2Mover.h"
+#include "../../../T2DLL/T2PaletteAnime.h"
+#include "../../../T2DLL/T2People.h"
+#include "../../../T2DLL/T2Request.h"
+#include "../../../T2DLL/T2RouteNavigator.h"
+#include "../../../T2DLL/T2Tenant.h"
+#include "../../../T2DLL/T2ToolWindow.h"
+#include "../../../T2DLL/T2TowerMessage.h"
+#include "../../../T2DLL/T2WorldDef.h"
+#include "../../../T2DLL/UT2Coordinate.h"
+#include "../../../T2TowerDoc.h"
+#include "../../../T2TowerMainView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
+
+static BOOL DoMerges(T2Tenant *&ioFloor, T2TowerDoc *inDoc);
+static void MergeFloor(T2Tenant *inFloorA, T2Tenant *inFloorB, T2TowerDoc *inDoc);
+static void ReplaceMoverIDForFloors(const RECT &inRect, unsigned int inOldID, unsigned int inNewID, T2FloorInfo *inFloorInfo);
+static void ReplaceFloorIDForMovers(T2CrossEquipArray *inMoverIDArray, unsigned int inOldID, unsigned int inNewID, T2FloorInfo *inFloorInfo);
+
+/*virtual*/ unsigned int FloorDef::IdleProc(T2HaveOutViewObject *inObject, T2TowerDoc *inDoc) {
+ unsigned int result = 0;
+
+ T2Tenant *floor = (T2Tenant *) inObject;
+ int status = floor->GetStatus();
+ if (status == kTenantStatus1) {
+ T2Tenant *floorMerge = floor;
+
+ CRect area;
+ floorMerge->GetEquipArea(area);
+
+ if (DoMerges(floorMerge, inDoc)) {
+ inDoc->GetMainView()->InvalUnitRect(area);
+ } else {
+ floor->SetStatus(kTenantStatus10);
+ result = 2;
+ inDoc->GetRouteNavi()->FloorAdded(floorMerge, false);
+ }
+
+ BuildFinish(inDoc, floor);
+ }
+
+ return result;
+}
+
+FloorDef::FloorDef(DWORD inType, T2PluginSpecifier &inSpecifier, CResFile *inResFile, T2WorldDef *inWorldDef, T2TenantPlugin *inPlugin)
+ : T2TenantDef(inType, inSpecifier, inResFile, inWorldDef, inPlugin)
+{
+}
+
+/*virtual*/ FloorDef::~FloorDef() {
+}
+
+/*virtual*/ T2InfoDialog *FloorDef::ShowInfoDialog(T2TowerDoc *doc, T2Equip *equip) {
+ return NULL;
+}
+
+/*virtual*/ void FloorDef::DrawProc(T2HaveOutViewObject *inObject, const RECT &inRect, T2TowerDoc *inDoc) const {
+#pragma var_order(var14, width, var1C, var20, theTenant, theFloor, isExcludeRoofAndFloor, var30, floorArea, var44, var48, var4C, rect5, pattern, visibleRFloor, rect6, height, var88, id, var90, fInfoAreaIter)
+ T2Tenant *theFloor = (T2Tenant *) inObject;
+
+ CRect visibleFloor = inRect;
+ visibleFloor = theFloor->mArea;
+
+ T2FInfoAreaIterator fInfoAreaIter(*inDoc->GetFloorInfo(), theFloor->mArea);
+ T2Tenant *theTenant;
+
+ while (fInfoAreaIter.NextTenant(theTenant)) {
+ if (theTenant->GetEquipID() == theFloor->GetEquipID()) {
+ RECT rect2 = theFloor->mArea;
+ fInfoAreaIter.GetTenantRect(rect2);
+
+ RECT rect3;
+ if (IntersectRect(&rect3, &rect2, &inRect)) {
+ visibleFloor = rect2;
+ break;
+ }
+ }
+ }
+
+ int height = theFloor->mArea.bottom - theFloor->mArea.top;
+ int width = visibleFloor.left - theFloor->mArea.left;
+
+ CRect floorArea = theFloor->mArea;
+ int id;
+ int pattern;
+ BOOL isExcludeRoofAndFloor;
+
+ if (inDoc->mViewMode != kOutView) {
+ id = 100;
+ if (theFloor->mValiation == 0)
+ pattern = 100;
+ else
+ pattern = height * 100 + 1000;
+
+ isExcludeRoofAndFloor = false;
+ } else {
+ id = 101;
+ pattern =
+ (inDoc->GetWorldDef()->GetOutViewKind() + 1) * 10000 +
+ theFloor->mValiation * 1000 +
+ height * 100;
+
+ if (theFloor->IsFire())
+ pattern += 2;
+ else if (inDoc->GetPaletteAnime()->IsSnow())
+ pattern += 1;
+
+ isExcludeRoofAndFloor = true;
+ }
+
+ CRect rect5, rect6;
+
+ int var14;
+ int var44;
+ T2BitImage *var48;
+
+ if (inDoc->mViewMode != kOutView) {
+ var44 = mImageObj->FindObject(id, pattern);
+ var48 = mImageObj->GetObjectImage(var44, rect5);
+ var14 = rect5.Width() / 8;
+ } else {
+ var14 = 0;
+ }
+
+ int var4C = mImageObj->FindObject(id, pattern + 100000);
+ T2BitImage *var30 = mImageObj->GetObjectImage(var4C, rect6);
+ int var88 = rect6.Width() / 8;
+
+ int var90;
+ if (inDoc->mViewMode != kOutView) {
+ var90 = var14 + ((floorArea.left + var14 - 7) % 8) - 7;
+ var90 = min(var90, visibleFloor.right - floorArea.left);
+ } else {
+ var90 = 0;
+ }
+
+ int var20 = visibleFloor.right - floorArea.left - var90;
+ int var1C = floorArea.left + var90;
+
+ if (var90 > width) {
+ CRect src = rect5;
+ src.right = src.left + var90 * 8;
+ src.left += width * 8;
+
+ CRect dst = visibleFloor;
+ dst.right = min(dst.left + var90 - width, visibleFloor.right);
+ visibleFloor.left = dst.right;
+
+ UT2Coordinate::UnitToQD(dst, inDoc->GetZoomLevel(), isExcludeRoofAndFloor);
+ var48->CopyImage(*inDoc->GetImage(), src, dst);
+
+ width = 0;
+ }
+
+ if (var20 > 0) {
+ if (width > 0)
+ width -= var90;
+
+ width += var1C % var88;
+ width %= var88;
+
+ CRect dstUnitRect, srcRect, dstRect;
+ if ((width + visibleFloor.Width()) <= var88) {
+ dstUnitRect = visibleFloor;
+
+ srcRect = rect6;
+ srcRect.left += width * 8;
+ srcRect.right = srcRect.left + visibleFloor.Width() * 8;
+
+ UT2Coordinate::UnitToQD(dstUnitRect, dstRect, inDoc->GetZoomLevel(), isExcludeRoofAndFloor);
+ var30->CopyImage(*inDoc->GetImage(), srcRect, dstRect);
+ } else {
+ if (width > 0) {
+ dstUnitRect = visibleFloor;
+ dstUnitRect.right = dstUnitRect.left + (var88 - width);
+
+ srcRect = rect6;
+ srcRect.left += width * 8;
+
+ UT2Coordinate::UnitToQD(dstUnitRect, dstRect, inDoc->GetZoomLevel(), isExcludeRoofAndFloor);
+ var30->CopyImage(*inDoc->GetImage(), srcRect, dstRect);
+
+ visibleFloor.left = dstUnitRect.right;
+ }
+
+ while ((visibleFloor.left + var88) <= visibleFloor.right) {
+ dstUnitRect = visibleFloor;
+ dstUnitRect.right = dstUnitRect.left + var88;
+
+ srcRect = rect6;
+
+ UT2Coordinate::UnitToQD(dstUnitRect, dstRect, inDoc->GetZoomLevel(), isExcludeRoofAndFloor);
+ var30->CopyImage(*inDoc->GetImage(), srcRect, dstRect);
+
+ visibleFloor.left = dstUnitRect.right;
+ }
+
+ if (visibleFloor.left < visibleFloor.right) {
+ dstUnitRect = visibleFloor;
+
+ srcRect = rect6;
+ srcRect.right = srcRect.left + dstUnitRect.Width() * 8;
+
+ UT2Coordinate::UnitToQD(dstUnitRect, dstRect, inDoc->GetZoomLevel(), isExcludeRoofAndFloor);
+ var30->CopyImage(*inDoc->GetImage(), srcRect, dstRect);
+
+ visibleFloor.left = dstUnitRect.right;
+ }
+ }
+ }
+}
+
+/*virtual*/ AREACHECKCODE FloorDef::AreaCheck(T2TowerDoc *inDoc, RECT &ioRect, unsigned int inInfo, BOOL inShowError) {
+ AREACHECKCODE result = AreaCheckCode_1;
+
+ if (!(inInfo & kAreaCheckFlag10000)) {
+ if (GetCategory() != 100 && ioRect.top < inDoc->mWorldDef->mTopFloorLine) {
+ if (inShowError) {
+ // EN: Only Final item can be placed on the top floor of building.
+ inDoc->GetTowerMessage()->BuildErr(68, NULL);
+ }
+ result = AreaCheckCode_0;
+ }
+
+ if (result == AreaCheckCode_1 && ioRect.bottom > inDoc->mWorldDef->mBottomFloorLine) {
+ if (inShowError) {
+ // EN: Can not place items beyond the edges of the floor below.
+ inDoc->GetTowerMessage()->BuildErr(2, NULL);
+ }
+ return AreaCheckCode_0;
+ }
+ }
+
+ if (result == AreaCheckCode_1) {
+ inInfo &= 0xFF;
+ if (ioRect.bottom == inDoc->GetWorldDef()->mGroundLine) {
+ if (inInfo == 0) {
+ if (inShowError) {
+ // EN: Only the lobby item can be placed on the first floor.
+ inDoc->GetTowerMessage()->BuildErr(15, NULL);
+ }
+ return AreaCheckCode_0;
+ }
+ } else {
+ if (inInfo == 1) {
+ if (inShowError) {
+ // EN: The lobby item can be only placed on the first floor.
+ inDoc->GetTowerMessage()->BuildErr(16, NULL);
+ }
+ return AreaCheckCode_0;
+ }
+ }
+
+ if (inInfo != 3) {
+#line 289
+ _ASSERT(inDoc != NULL && inDoc->GetWorldDef() != NULL);
+ if (ioRect.bottom < inDoc->GetWorldDef()->mTopFloorLine) {
+ if (inShowError) {
+ // EN: Can not place items here.
+ inDoc->GetTowerMessage()->BuildErr(8, NULL);
+ }
+ return AreaCheckCode_0;
+ }
+ }
+
+ if (inInfo == 0) {
+ T2FloorInfo *theFloorInfo = inDoc->GetFloorInfo();
+ if (ioRect.bottom <= theFloorInfo->GetGroundLine()) {
+ for (int h = ioRect.left; h < ioRect.right; h++) {
+ unsigned int theTenantID = theFloorInfo->GetTenantID(ioRect.bottom, h);
+ if (theTenantID == 0) {
+ if (inShowError) {
+ RECT area;
+ theFloorInfo->GetFloorArea(area);
+ area.top = ioRect.bottom;
+ area.bottom = ioRect.bottom + 1;
+
+ T2FInfoAreaIterator iterator(*theFloorInfo, area);
+ T2Tenant *theTenant;
+ if (iterator.NextTenant(theTenant)) {
+ // EN: Can not place items beyond the edges of the floor below.
+ inDoc->GetTowerMessage()->BuildErr(2, NULL);
+ } else {
+ // EN: There is no floor below.
+ inDoc->GetTowerMessage()->BuildErr(4, NULL);
+ }
+ }
+ return AreaCheckCode_0;
+ } else {
+ T2Tenant *theTenant = theFloorInfo->GetTenant(theTenantID);
+ if (theTenant && T2EquipDef::IsSetAttribute(kTenantAttr40000)) {
+ if (inShowError) {
+ // EN: Can not place this item above the sky bridge.
+ inDoc->GetTowerMessage()->BuildErr(13, NULL);
+ }
+ return AreaCheckCode_0;
+ }
+ }
+ }
+ } else {
+ BOOL flag = false;
+ if (inDoc->GetWorldDef()->m17C == 1 || inDoc->GetWorldDef()->m17C == 2) {
+ for (int v = ioRect.top; v < ioRect.bottom; v++) {
+ if (theFloorInfo->GetTenantID(v, ioRect.left - 1) || theFloorInfo->GetTenantID(v, ioRect.right)) {
+ flag = true;
+ break;
+ }
+ }
+
+ if (!flag) {
+ for (int h = ioRect.left; h < ioRect.right; h++) {
+ if (theFloorInfo->GetTenantID(ioRect.top - 1, h)) {
+ flag = true;
+ break;
+ }
+ }
+ }
+ } else {
+ flag = true;
+ for (int h = ioRect.left; h < ioRect.right; h++) {
+ if (!theFloorInfo->GetTenantID(ioRect.top - 1, h)) {
+ flag = false;
+ break;
+ }
+ }
+ }
+
+ if (!flag) {
+ if (inShowError) {
+ // EN: Can not place items beyond the edges of the floor above.
+ inDoc->GetTowerMessage()->BuildErr(3, NULL);
+ }
+ return AreaCheckCode_0;
+ }
+ }
+ }
+
+ RECT area;
+ inDoc->GetFloorInfo()->GetFloorArea(area);
+
+ int minimumX = (inInfo != 1) ? (ioRect.left - 9) : area.left;
+ minimumX = max(minimumX, area.left);
+
+ int maximumX = (inInfo != 1) ? (ioRect.right + 8) : (area.right - 1);
+ maximumX = min(maximumX, area.right - 1);
+
+ int y = ioRect.bottom - 1;
+ int x;
+
+ for (x = ioRect.left - 1; x >= minimumX; x--) {
+ if (inDoc->GetFloorInfo()->GetTenant(y, x))
+ break;
+ }
+
+ if (x >= minimumX)
+ ioRect.left = x + 1;
+
+ for (x = ioRect.right; x <= maximumX; x++) {
+ if (inDoc->GetFloorInfo()->GetTenant(y, x))
+ break;
+ }
+
+ if (x <= maximumX)
+ ioRect.right = x;
+
+ result = AreaCheckCode_1;
+ }
+
+ return result;
+}
+
+/*virtual*/ int FloorDef::RequierToolIcon(T2ToolWindow *window) {
+ window->AddIcon(mStr48, 0, 1, kToolOption1, NULL, 0, 1, NULL);
+ return 0;
+}
+
+/*virtual*/ CURSORTYPE FloorDef::QueryCursor(T2TowerDoc *inDoc, POINT inPt, CString &outSpriteName, RECT &outRect, POINT &outPt,
+ int inZoomLevel, unsigned int inValiation, int i) {
+ int height;
+
+ if (inValiation == 0) {
+ outSpriteName = "Csr";
+ height = mHeight;
+ } else {
+ char buf[20];
+ height = inDoc->GetWorldDef()->GetLobbyHeight();
+ wsprintfA(buf, "LCsr%d%d", 1, height);
+ outSpriteName = buf;
+ }
+
+ inPt.x -= ((UT2Coordinate::UnitHSize(inZoomLevel) * mWidth) / 2) - (UT2Coordinate::UnitHSize(inZoomLevel) / 2);
+ inPt.y -= ((UT2Coordinate::UnitVSize(inZoomLevel) * height) / 2) - (UT2Coordinate::UnitVSize(inZoomLevel) / 2);
+
+ UT2Coordinate::QDToUnit(inPt, inZoomLevel);
+ SetRect(&outRect, inPt.x, inPt.y, inPt.x + mWidth, inPt.y + height);
+
+ outPt.x = outRect.left;
+ outPt.y = outRect.top;
+ UT2Coordinate::UnitToQD(outRect, inZoomLevel);
+
+ return CursorType_0;
+}
+
+static BOOL DoMerges(T2Tenant *&ioFloor, T2TowerDoc *inDoc) {
+#pragma var_order(leftFloor, rightFloor, flag10, floorInfo, area, pt, result)
+ BOOL result = false;
+
+ BOOL flag10 = (ioFloor->GetEquipID() == 1000);
+ T2FloorInfo *floorInfo = inDoc->mFloorInfo;
+
+ RECT area;
+ ioFloor->GetEquipArea(area);
+
+ POINT pt;
+ pt.y = area.top;
+ pt.x = area.left - 1;
+
+ T2Tenant *leftFloor = floorInfo->GetFloor(pt.y, pt.x);
+ if (leftFloor && leftFloor->IsBuildFinish()) {
+ if (!flag10) {
+ MergeFloor(ioFloor, leftFloor, inDoc);
+ ioFloor = leftFloor;
+ } else {
+ ioFloor->SetStatus(kTenantStatus10);
+ inDoc->GetRouteNavi()->FloorAdded(ioFloor, false);
+ MergeFloor(leftFloor, ioFloor, inDoc);
+ }
+ result = true;
+ }
+
+ pt.x = area.right;
+
+ T2Tenant *rightFloor = floorInfo->GetFloor(pt.y, pt.x);
+ if (rightFloor && rightFloor->IsBuildFinish()) {
+ if (!result) {
+ if (!flag10) {
+ MergeFloor(ioFloor, rightFloor, inDoc);
+ ioFloor = rightFloor;
+ } else {
+ ioFloor->SetStatus(kTenantStatus10);
+ inDoc->GetRouteNavi()->FloorAdded(ioFloor, false);
+ MergeFloor(rightFloor, ioFloor, inDoc);
+ }
+ } else {
+ if (ioFloor->IsMoverAvailable() || flag10) {
+ MergeFloor(rightFloor, ioFloor, inDoc);
+ } else {
+ MergeFloor(ioFloor, rightFloor, inDoc);
+ }
+ }
+ result = true;
+ }
+
+ return result;
+}
+
+static void MergeFloor(T2Tenant *inFloorA, T2Tenant *inFloorB, T2TowerDoc *inDoc) {
+#pragma var_order(floorIDA, flagC, ceArrayB, floorInfo, ceArrayA, pt, areaA, isFloorB, areaB, isFinishA, floorIDB, isFloorA)
+ T2FloorInfo *floorInfo = inDoc->mFloorInfo;
+#line 481
+ _ASSERT(floorInfo != NULL);
+
+ BOOL isFloorA = inFloorA->IsFloor();
+ if (!isFloorA) {
+ unsigned int floorID = inFloorA->GetFloorID(-1);
+ if (floorID != 0)
+ inFloorA = floorInfo->GetTenant(floorID);
+ }
+
+ BOOL isFloorB = inFloorB->IsFloor();
+ if (!isFloorB) {
+ unsigned int floorID = inFloorB->GetFloorID(-1);
+ if (floorID != 0)
+ inFloorB = floorInfo->GetTenant(floorID);
+ }
+
+ BOOL isFinishA = inFloorA->IsBuildFinish();
+ BOOL flagC = isFinishA && inFloorA->IsMoverAvailable();
+
+ RECT areaA, areaB;
+ inFloorA->GetEquipArea(areaA);
+ inFloorB->GetEquipArea(areaB);
+
+ unsigned int floorIDA = inFloorA->GetEquipID();
+ unsigned int floorIDB = inFloorB->GetEquipID();
+
+ T2CrossEquipArray *ceArrayA = inFloorA->GetCEArray();
+ T2CrossEquipArray *ceArrayB = inFloorB->GetCEArray();
+
+ ReplaceMoverIDForFloors(areaA, floorIDA, floorIDB, floorInfo);
+ ReplaceFloorIDForMovers(ceArrayA, floorIDA, floorIDB, floorInfo);
+
+ inFloorB->UnionFloorPeople(inFloorA);
+
+ POINT pt;
+ pt.x = (areaA.left < areaB.left) ? (areaB.left - 1) : (areaA.left - 1);
+ pt.y = areaA.bottom - 1;
+
+ ceArrayB->Union(ceArrayA);
+ floorInfo->ReplaceFloorID(areaA, floorIDA, floorIDB);
+
+ UnionRect(&areaB, &areaB, &areaA);
+ inFloorB->SetEquipArea(areaB);
+
+ if (isFinishA)
+ inDoc->GetRouteNavi()->FloorRemoved(inFloorA, flagC);
+
+ inFloorA->SetUsed(false);
+ floorInfo->UpdeteRequestByUnionFloor(inFloorB, pt);
+}
+
+static void ReplaceMoverIDForFloors(const RECT &inRect, unsigned int inOldID, unsigned int inNewID, T2FloorInfo *inFloorInfo) {
+ T2FInfoAreaIterator iterator(*inFloorInfo, inRect);
+ T2Tenant *theTenant;
+
+ while (iterator.NextTenant(theTenant)) {
+ if (theTenant && !theTenant->IsFloor()) {
+ T2CrossEquipArray *theFloorCEArray = theTenant->GetCEArray();
+ if (theFloorCEArray)
+ theFloorCEArray->ReplaceID(inOldID, inNewID);
+ }
+ }
+}
+
+static void ReplaceFloorIDForMovers(T2CrossEquipArray *inMoverIDArray, unsigned int inOldID, unsigned int inNewID, T2FloorInfo *inFloorInfo) {
+ LArrayIterator iterator(*inMoverIDArray);
+ unsigned int theMoverID;
+
+ while (iterator.Next(&theMoverID)) {
+ T2Mover *theMover = inFloorInfo->GetMover(theMoverID);
+ if (theMover) {
+ T2CrossEquipArray *theMoverCEArray = theMover->GetCEArray();
+ if (theMoverCEArray)
+ theMoverCEArray->ReplaceID(inOldID, inNewID);
+ }
+ }
+}
+
+/*virtual*/ void FloorDef::BuildFinish(T2TowerDoc *inDoc, T2Equip *inEquip) {
+ T2EquipDef::BuildFinish(inDoc, inEquip);
+
+ CRect floorArea;
+ inEquip->GetEquipArea(floorArea);
+
+ CRect aboveArea(floorArea.left, floorArea.top - 1, floorArea.right, floorArea.top);
+ T2FInfoAreaIterator iter(*inDoc->GetFloorInfo(), aboveArea);
+
+ T2Tenant *theTenant = NULL;
+ while (iter.NextTenant(theTenant)) {
+ if (theTenant->IsSetAttribute(kTenantAttr40000)) {
+ theTenant->GetEquipDef()->OptionProc(inDoc, theTenant, NULL);
+ break;
+ }
+ }
+}
+
+static PROCCODE x154C0(T2TowerDoc *inDoc, T2HaveOutViewObject *inObject, POINT inPt, RECT &outRect);
+
+/*virtual*/ PROCCODE FloorDef::DoDestructProc(T2TowerDoc *inDoc, T2HaveOutViewObject *inObject, POINT inPt, RECT &outRect) {
+ T2Tenant *theFloor = (T2Tenant *) inObject;
+
+ POINT unitPt = inPt;
+ UT2Coordinate::QDToUnit(unitPt, inDoc->GetZoomLevel());
+
+ if (unitPt.y < (inDoc->GetFloorInfo()->GetGroundLine() - 1)) {
+ if (!inDoc->GetFloorInfo()->GetTenant(unitPt.y + 1, unitPt.x))
+ return x154C0(inDoc, theFloor, unitPt, outRect);
+ }
+
+ PROCCODE result = ProcCode_1;
+ int buildErr = 0;
+
+ CRect equipArea;
+ theFloor->GetEquipArea(equipArea);
+
+ // bug???
+ if (!theFloor->GetCEArray() && theFloor->GetCEArray()->GetCount()) {
+ result = ProcCode_2;
+ // EN: This floor can not be removed because transit systems are connected.
+ buildErr = 22;
+ }
+
+ if (result == ProcCode_1) {
+ T2FInfoAreaIterator iter(*inDoc->GetFloorInfo(), equipArea);
+ T2Mover *theMover;
+
+ while (result == ProcCode_1 && iter.NextMover(theMover)) {
+ CRect moverArea, intersect;
+ theMover->CalcBodyArea(moverArea);
+ if (intersect.IntersectRect(equipArea, moverArea)) {
+ result = ProcCode_2;
+ // EN: This floor can not be removed because transit systems are connected.
+ buildErr = 22;
+ }
+ }
+ }
+
+ if (theFloor->GetFirstPeople()) {
+ result = ProcCode_2;
+ // EN: Can not remove the floor because there are people here.
+ buildErr = 73;
+ }
+
+ if (result == ProcCode_1) {
+ T2FInfoAreaIterator iter(*inDoc->GetFloorInfo(), equipArea);
+ T2Tenant *tenant;
+
+ while (iter.NextTenant(tenant) && tenant) {
+ if (!tenant->IsFloor()) {
+ result = ProcCode_2;
+ // EN: This floor can not be removed because there is already a tenant on it.
+ buildErr = 21;
+ break;
+ }
+ }
+ }
+
+ if (result == ProcCode_1) {
+ BOOL isAbove = equipArea.bottom <= inDoc->GetFloorInfo()->GetGroundLine();
+ if (isAbove) {
+ CRect aboveArea(equipArea.left, equipArea.top - 1, equipArea.right, equipArea.top);
+ T2FInfoAreaIterator iter(*inDoc->GetFloorInfo(), aboveArea);
+ T2Tenant *tenant = NULL;
+
+ if (iter.NextTenant(tenant) && tenant) {
+ result = ProcCode_2;
+ // EN: Floor can only be removed if it is the top floor of the building.
+ buildErr = 19;
+ }
+ }
+
+ BOOL isBelow = equipArea.bottom >= inDoc->GetFloorInfo()->GetGroundLine();
+ if (isBelow) {
+ CRect undergroundArea(equipArea.left, equipArea.bottom, equipArea.right, equipArea.bottom + 1);
+ T2FInfoAreaIterator iter(*inDoc->GetFloorInfo(), undergroundArea);
+ T2Tenant *tenant = NULL;
+
+ if (iter.NextTenant(tenant) && tenant) {
+ result = ProcCode_2;
+ // EN: Floor can only be removed if it is the lowest floor of the building.
+ buildErr = 20;
+ }
+ }
+ }
+
+ if (buildErr != 0)
+ inDoc->GetTowerMessage()->BuildErr(buildErr, NULL);
+
+ if (result == ProcCode_1)
+ result = ProcCode_0;
+
+ return result;
+}
+
+static PROCCODE x154C0(T2TowerDoc *inDoc, T2HaveOutViewObject *inObject, POINT inPt, RECT &outRect) {
+#pragma var_order(crossEquipArrayIterator, lastID, theFloor, result, theMoverID, theIterR, theFloorID, theUpRequest, theFloorInfo, tenant, requestIterator, removedArea, iterator3, rightTenant, ceIterator, theFloorDef, rightArea, leftArea, leftTenant, floorArea, theRequest, theIterL, pt, theRightFloor, theRightFloorID, theCEArray, theDnRequest)
+ PROCCODE result = ProcCode_1;
+
+ T2FloorInfo *theFloorInfo = inDoc->GetFloorInfo();
+ T2Tenant *theFloor = (T2Tenant *) inObject;
+ FloorDef *theFloorDef = (FloorDef *) theFloor->GetEquipDef();
+ unsigned int theFloorID = theFloor->GetEquipID();
+
+ CRect floorArea;
+ theFloor->GetEquipArea(floorArea);
+ outRect = floorArea;
+
+ CRect removedArea(0, 0, 0, 0);
+ POINT pt;
+ pt.x = inPt.x;
+ pt.y = inPt.y + 1;
+
+ T2FInfoPtIterator theIterL(*theFloorInfo, inPt);
+ T2FInfoPtIterator theIterR(*theFloorInfo, pt);
+ T2Tenant *leftTenant = NULL;
+ T2Tenant *rightTenant = NULL;
+
+ if (theIterL.LeftTenant(leftTenant) && theIterR.RightTenant(rightTenant)) {
+ CRect theLeftArea, theRightArea;
+ leftTenant->GetEquipArea(theLeftArea);
+ rightTenant->GetEquipArea(theRightArea);
+ removedArea = CRect(theLeftArea.left, floorArea.top, theRightArea.right, floorArea.bottom);
+ }
+
+ T2CrossEquipArray *theCEArray = theFloor->GetCEArray();
+ LArrayIterator ceIterator(*theCEArray);
+ unsigned int theMoverID;
+
+ while (ceIterator.Next(&theMoverID)) {
+ T2Mover *mover = theFloorInfo->GetMover(theMoverID);
+ if (mover) {
+ CRect moverArea, intersect;
+ mover->GetEquipArea(moverArea);
+#line 634
+ _ASSERT(!intersect.IntersectRect(&removedArea, &moverArea));
+ }
+ }
+
+ T2Request *theDnRequest = NULL;
+ T2Request *theUpRequest = NULL;
+ T2Request *theRequest;
+ T2FInfoAreaIterator requestIterator(*theFloorInfo, removedArea);
+
+ while (requestIterator.NextRequest(theRequest)) {
+ POINT head = theRequest->GetHeadPosition();
+#line 646
+ _ASSERT(!removedArea.PtInRect(head));
+
+ CRect requestArea;
+ theRequest->CalcArea(requestArea);
+
+ if (theRequest->GetUpDown() == ERequestUpDown_1)
+ theDnRequest = theRequest;
+ else
+ theUpRequest = theRequest;
+
+ theFloorInfo->RemoveRequestID(theRequest->GetUpDown(), requestArea);
+ }
+
+ CRect leftArea(floorArea.left, floorArea.top, removedArea.left, floorArea.bottom);
+ CRect rightArea(removedArea.right, floorArea.top, floorArea.right, floorArea.bottom);
+#line 659
+ _ASSERT(!leftArea.IsRectEmpty() && !rightArea.IsRectEmpty());
+
+ T2Tenant *theRightFloor = theFloorInfo->FindUnusedTenant();
+#line 663
+ _ASSERT(theRightFloor != NULL);
+
+ theRightFloor->InitTenant(theFloorDef, rightArea, theFloor->GetValiation());
+ theRightFloor->SetStatus(kTenantStatus10);
+ unsigned int theRightFloorID = theRightFloor->GetEquipID();
+
+ theFloor->SetEquipArea(leftArea);
+
+ unsigned int lastID = 0;
+ LArrayIterator crossEquipArrayIterator(*theCEArray);
+
+ while (crossEquipArrayIterator.Next(&theMoverID)) {
+ T2Mover *mover = theFloorInfo->GetMover(theMoverID);
+ if (mover) {
+ CRect moverArea, intersect;
+ mover->GetEquipArea(moverArea);
+ if (intersect.IntersectRect(rightArea, moverArea)) {
+ T2CrossEquipArray *moverCEArray = mover->GetCEArray();
+ if (moverCEArray) {
+ moverCEArray->ReplaceID(theFloorID, theRightFloorID);
+ theFloor->RemoveCEID(theMoverID);
+ theRightFloor->InsertCEID(lastID, theMoverID);
+ lastID = theMoverID;
+ }
+ }
+ }
+ }
+
+ T2FInfoAreaIterator iterator3(*theFloorInfo, rightArea);
+ T2Tenant *tenant;
+
+ while (iterator3.NextTenant(tenant)) {
+ if (!tenant->IsFloor()) {
+ T2CrossEquipArray *tenantCEArray = tenant->GetCEArray();
+ if (tenantCEArray)
+ tenantCEArray->ReplaceID(theFloorID, theRightFloorID);
+ }
+ }
+
+ if (theFloor->IsTherePeople()) {
+ int centerH = (removedArea.left + removedArea.right) / 2;
+
+ T2People *thePeople = theFloor->mFirstPeople;
+ T2People *theNextPeople = NULL;
+ for (; thePeople; thePeople = theNextPeople) {
+ theNextPeople = (T2People *) thePeople->mNext;
+
+ POINT curPt = thePeople->GetCurPosition();
+ if (curPt.x < centerH) {
+ if (curPt.x > (leftArea.right - 2))
+ thePeople->MoveHTo(leftArea.right - 2);
+ } else {
+ theFloor->Leave(thePeople);
+ theRightFloor->Enter(thePeople);
+ }
+
+ thePeople->SetStatus(kStatus2);
+ }
+ }
+
+ theFloorInfo->FillTenantID(removedArea, 0);
+ theFloorInfo->ReplaceFloorID(rightArea, theFloorID, theRightFloorID);
+
+ if (theDnRequest)
+ theDnRequest->SetDrawWidth(theFloorInfo->FillRequestID(theDnRequest->GetHeadPosition(), ERequestUpDown_1, theDnRequest->GetRequestID()));
+ if (theUpRequest)
+ theUpRequest->SetDrawWidth(theFloorInfo->FillRequestID(theUpRequest->GetHeadPosition(), ERequestUpDown_0, theUpRequest->GetRequestID()));
+
+ inDoc->GetRouteNavi()->FloorAdded(theRightFloor, true);
+ return ProcCode_2;
+}
+
+/*virtual*/ PROCCODE FloorDef::DrawHitMask(T2TowerDoc *doc, T2HaveOutViewObject *object) {
+ RECT rect;
+ ((T2Tenant *) object)->GetEquipArea(rect);
+ UT2Coordinate::UnitToQD(rect, doc->GetZoomLevel());
+ doc->GetImage()->FillRect(rect, 1);
+ return ProcCode_1;
+}
diff --git a/src/Plugins/Lobby/Floor/FloorDef.h b/src/Plugins/Lobby/Floor/FloorDef.h
index dca8270..fde0986 100644
--- a/src/Plugins/Lobby/Floor/FloorDef.h
+++ b/src/Plugins/Lobby/Floor/FloorDef.h
@@ -1,5 +1,20 @@
#pragma once
-#include "common.h"
+#include "../../../common.h"
+#include "../../../T2DLL/T2TenantDef.h"
-class FloorDef {
+class FloorDef : public T2TenantDef {
+public:
+ FloorDef(DWORD inType, T2PluginSpecifier &inSpecifier, CResFile *inResFile, T2WorldDef *inWorldDef, T2TenantPlugin *inPlugin);
+ virtual ~FloorDef();
+ virtual void BuildFinish(T2TowerDoc *inDoc, T2Equip *inEquip);
+ virtual T2InfoDialog *ShowInfoDialog(T2TowerDoc *doc, T2Equip *equip);
+ virtual unsigned int IdleProc(T2HaveOutViewObject *inObject, T2TowerDoc *inDoc);
+ virtual void DrawProc(T2HaveOutViewObject *inObject, const RECT &inRect, T2TowerDoc *inDoc) const;
+ virtual AREACHECKCODE AreaCheck(T2TowerDoc *inDoc, RECT &ioRect, unsigned int inInfo, BOOL inShowError);
+ virtual int RequierToolIcon(T2ToolWindow *window);
+ virtual CURSORTYPE
+ QueryCursor(T2TowerDoc *inDoc, POINT inPt, CString &outSpriteName, RECT &outRect, POINT &outPt, int inZoomLevel,
+ unsigned int inValiation, int i);
+ virtual PROCCODE DoDestructProc(T2TowerDoc *inDoc, T2HaveOutViewObject *inObject, POINT inPt, RECT &outRect);
+ virtual PROCCODE DrawHitMask(T2TowerDoc *doc, T2HaveOutViewObject *object);
};
diff --git a/src/Plugins/Lobby/Floor/FloorPlugin.cpp b/src/Plugins/Lobby/Floor/FloorPlugin.cpp
index e43b2d3..b77c284 100644
--- a/src/Plugins/Lobby/Floor/FloorPlugin.cpp
+++ b/src/Plugins/Lobby/Floor/FloorPlugin.cpp
@@ -1,3 +1,4 @@
+#include "StdAfx.h"
#include "FloorPlugin.h"
#ifdef _DEBUG
@@ -5,3 +6,8 @@
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
+
+FloorPlugin::FloorPlugin(DWORD inType, T2PluginSpecifier &inSpecifier)
+ : T2TenantPlugin(inType, inSpecifier)
+{
+}
diff --git a/src/Plugins/Lobby/Floor/FloorPlugin.h b/src/Plugins/Lobby/Floor/FloorPlugin.h
index a57a05f..2a7d723 100644
--- a/src/Plugins/Lobby/Floor/FloorPlugin.h
+++ b/src/Plugins/Lobby/Floor/FloorPlugin.h
@@ -1,5 +1,8 @@
#pragma once
-#include "common.h"
+#include "../../../common.h"
+#include "../../../T2DLL/T2TenantPlugin.h"
-class FloorPlugin {
+class FloorPlugin : public T2TenantPlugin {
+public:
+ FloorPlugin(DWORD inType, T2PluginSpecifier &inSpecifier);
};
diff --git a/src/Plugins/Lobby/Floor/Resource.h b/src/Plugins/Lobby/Floor/Resource.h
new file mode 100644
index 0000000..8d2cbf7
--- /dev/null
+++ b/src/Plugins/Lobby/Floor/Resource.h
@@ -0,0 +1,16 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Visual C++ generated include file.
+// Used by FLOOR.RC
+//
+
+// Next default values for new objects
+//
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+
+#define _APS_NEXT_RESOURCE_VALUE 129
+#define _APS_NEXT_COMMAND_VALUE 32771
+#define _APS_NEXT_CONTROL_VALUE 1000
+#define _APS_NEXT_SYMED_VALUE 101
+#endif
+#endif
diff --git a/src/Plugins/Lobby/Floor/StdAfx.cpp b/src/Plugins/Lobby/Floor/StdAfx.cpp
new file mode 100644
index 0000000..65ad23f
--- /dev/null
+++ b/src/Plugins/Lobby/Floor/StdAfx.cpp
@@ -0,0 +1,6 @@
+// stdafx.cpp : source file that includes just the standard includes
+// Floor.pch will be the pre-compiled header
+// stdafx.obj will contain the pre-compiled type information
+
+#include "stdafx.h"
+
diff --git a/src/Plugins/Lobby/Floor/StdAfx.h b/src/Plugins/Lobby/Floor/StdAfx.h
new file mode 100644
index 0000000..9fc556e
--- /dev/null
+++ b/src/Plugins/Lobby/Floor/StdAfx.h
@@ -0,0 +1,41 @@
+// stdafx.h : include file for standard system include files,
+// or project specific include files that are used frequently, but
+// are changed infrequently
+//
+
+#if !defined(AFX_STDAFX_H__AF935A55_9E17_4611_818A_EF6A4343861E__INCLUDED_)
+#define AFX_STDAFX_H__AF935A55_9E17_4611_818A_EF6A4343861E__INCLUDED_
+
+#if _MSC_VER >= 1000
+#pragma once
+#endif // _MSC_VER >= 1000
+
+#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers
+
+#include <afxwin.h> // MFC core and standard components
+#include <afxext.h> // MFC extensions
+
+#ifndef _AFX_NO_OLE_SUPPORT
+#include <afxole.h> // MFC OLE classes
+#include <afxodlgs.h> // MFC OLE dialog classes
+#include <afxdisp.h> // MFC OLE automation classes
+#endif // _AFX_NO_OLE_SUPPORT
+
+
+#ifndef _AFX_NO_DB_SUPPORT
+#include <afxdb.h> // MFC ODBC database classes
+#endif // _AFX_NO_DB_SUPPORT
+
+#ifndef _AFX_NO_DAO_SUPPORT
+#include <afxdao.h> // MFC DAO database classes
+#endif // _AFX_NO_DAO_SUPPORT
+
+#ifndef _AFX_NO_AFXCMN_SUPPORT
+#include <afxcmn.h> // MFC support for Windows Common Controls
+#endif // _AFX_NO_AFXCMN_SUPPORT
+
+
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
+
+#endif // !defined(AFX_STDAFX_H__AF935A55_9E17_4611_818A_EF6A4343861E__INCLUDED_)
diff --git a/src/Plugins/ToolPalette/DefaultToolPalette/DefaultToolPalette.clw b/src/Plugins/ToolPalette/DefaultToolPalette/DefaultToolPalette.clw
new file mode 100644
index 0000000..4ce1b5c
--- /dev/null
+++ b/src/Plugins/ToolPalette/DefaultToolPalette/DefaultToolPalette.clw
@@ -0,0 +1,16 @@
+; CLW file contains information for the MFC ClassWizard
+
+[General Info]
+Version=1
+ClassCount=1
+Class1=CDefaultToolPaletteApp
+LastClass=CDefaultToolPaletteApp
+NewFileInclude2=#include "DefaultToolPalette.h"
+ResourceCount=0
+NewFileInclude1=#include "stdafx.h"
+
+[CLS:CDefaultToolPaletteApp]
+Type=0
+HeaderFile=DefaultToolPalette.h
+ImplementationFile=DefaultToolPalette.cpp
+Filter=N
diff --git a/src/Plugins/ToolPalette/DefaultToolPalette/DefaultToolPalette.cpp b/src/Plugins/ToolPalette/DefaultToolPalette/DefaultToolPalette.cpp
index 6076d35..4f654e3 100644
--- a/src/Plugins/ToolPalette/DefaultToolPalette/DefaultToolPalette.cpp
+++ b/src/Plugins/ToolPalette/DefaultToolPalette/DefaultToolPalette.cpp
@@ -1,7 +1,242 @@
+// DefaultToolPalette.cpp : Defines the initialization routines for the DLL.
+//
+
+#include "stdafx.h"
+
+#define ATOI_KLUDGE
+#include "../../../T2DLL/UT2Utils.h"
+#include "../../../T2DLL/T2PaletteAnimeDef.h"
+#include "../../../T2DLL/LAttachment.h"
+#include "../../../T2DLL/LAttachable.h"
+#include "../../../T2DLL/CLink.h"
+#include "../../../T2DLL/LArray.h"
+#include "../../../T2DLL/LBroadcaster.h"
+#include "../../../T2DLL/LListener.h"
+#include "../../../T2DLL/T2BitImage.h"
+#include "../../../T2DLL/T2ImageObj.h"
+#include "../../../T2DLL/T2SpriteObj.h"
+#include "../../../T2DLL/Wave.h"
+#include "../../../T2DLL/T2SoundPlayer.h"
+#include "../../../T2DLL/T2Archive.h"
+#include "../../../T2DLL/T2FireWork.h"
+#include "../../../T2DLL/T2DlgItemButtonBase.h"
+#include "../../../T2DLL/T2DlgItemIButton.h"
+#include "../../../T2DLL/T2DlgItemOK.h"
+#include "../../../T2DLL/T2DlgItemCANCEL.h"
+#include "../../../T2DLL/T2DlgItemTButton.h"
+#include "../../../T2DLL/T2DlgItemICheck.h"
+#include "../../../T2DLL/T2DlgItemCheck.h"
+#include "../../../T2DLL/T2DlgItemScr.h"
+#include "../../../T2DLL/T2DlgItemHScr.h"
+#include "../../../T2DLL/T2DlgItemVScr.h"
+#include "../../../T2DLL/T2DlgItemBox.h"
+#include "../../../T2DLL/T2DlgItemText.h"
+#include "../../../T2DLL/T2DlgItemGageBase.h"
+#include "../../../T2DLL/T2DlgItemStressGage.h"
+#include "../../../T2DLL/T2DlgItemPPLEvalGage.h"
+#include "../../../T2DLL/T2DlgItemBelongGage.h"
+#include "../../../T2DLL/T2DlgItemCustomerGage.h"
+#include "../../../T2DLL/T2DlgItemProfitsGage.h"
+#include "../../../T2DLL/T2DlgItemImageTable.h"
+#include "../../../T2DLL/T2DlgItemImage.h"
+#include "../../../T2DLL/CToggleButtonDisabled.h"
+#include "../../../T2DLL/T2VerticalTable.h"
+#include "../../../T2DLL/T2MovieTable.h"
+#include "../../../T2DLL/T2GuestroomTable.h"
+#include "../../../T2DLL/T2HallEventTable.h"
+#include "../../../T2DLL/CTokenizer.h"
+#include "../../../T2DLL/T2Dialog.h"
+#include "../../../T2DLL/T2TowerMessage.h"
+#include "../../../T2DLL/T2DateTime.h"
+#include "../../../T2DLL/T2PluginSpecifier.h"
+#include "../../../T2DLL/CResFile.h"
+#include "../../../T2DLL/CPlugin.h"
+#include "../../../T2DLL/CFilePlugin.h"
+#include "../../../T2DLL/CFilePluginList.h"
+#include "../../../T2DLL/CFilePluginDB.h"
+#include "../../../T2DLL/CResourcePlugin.h"
+#include "../../../T2DLL/T2SubPlugin.h"
+#include "../../../T2DLL/T2AdvertiseTable.h"
+#include "../../../T2DLL/T2AdvertisePlugin.h"
+#include "../../../T2DLL/T2HallEventPlugin.h"
+#include "../../../T2DLL/T2MoviePlugin.h"
+#include "../../../T2DLL/T2EquipInfoDialog.h"
+#include "../../../T2DLL/T2TenantInfoDialog.h"
+#include "../../../T2DLL/T2Object.h"
+#include "../../../T2DLL/T2DrawableObject.h"
+#include "../../../T2DLL/T2ObjectArray.h"
+#include "../../../T2DLL/CDefRsrcPlugin.h"
+#include "../../../T2DLL/T2TemplatePlugin.h"
+#include "../../../T2DLL/T2HaveOutViewObject.h"
+#include "../../../T2DLL/T2TemplatePluginList.h"
+#include "../../../T2DLL/CProgramPlugin.h"
+#include "../../../T2DLL/T2TemplatePluginDB.h"
+#include "../../../T2DLL/T2ToolPlugin.h"
+#include "../../../T2DLL/T2EquipPlugin.h"
+#include "../../../T2DLL/T2TenantPlugin.h"
+#include "../../../T2DLL/T2MoverPlugin.h"
+#include "../../../T2DLL/T2OuterObjPlugin.h"
+#include "../../../T2DLL/UT2Coordinate.h"
+#include "../../../T2DLL/T2PeoplePtrList.h"
+#include "../../../T2DLL/T2ToolDef.h"
+#include "../../../T2DLL/T2EquipDef.h"
+#include "../../../T2DLL/T2TenantDef.h"
+#include "../../../T2DLL/T2MoverDef.h"
+#include "../../../T2DLL/T2OuterObjDef.h"
+#include "../../../T2DLL/T2SilhouetteDef.h"
+#include "../../../T2DLL/T2MatterDef.h"
+#include "../../../T2DLL/T2PeopleDef.h"
+#include "../../../T2DLL/T2Pool.h"
+#include "../../../T2DLL/T2PlaceParamDef.h"
+#include "../../../T2DLL/T2TenantMemberTableDef.h"
+#include "../../../T2DLL/T2TenantMemberDef.h"
+#include "../../../T2DLL/T2PeopleTypeArray.h"
+#include "../../../T2DLL/T2PeopleTimeZoneList.h"
+#include "../../../T2DLL/T2PeopleDemandList.h"
+#include "../../../T2DLL/T2PeopleType.h"
+#include "../../../T2DLL/T2Equip.h"
+#include "../../../T2DLL/T2Tenant.h"
+#include "../../../T2DLL/T2OutObj.h"
+#include "../../../T2DLL/T2Matter.h"
+#include "../../../T2DLL/T2People.h"
+#include "../../../T2DLL/T2PeopleArray.h"
+#include "../../../T2DLL/T2PeopleArrayList.h"
+#include "../../../T2DLL/T2Request.h"
+#include "../../../T2DLL/T2Mover.h"
+#include "../../../T2DLL/T2RegistedTenantDB.h"
+#include "../../../T2DLL/T2OuterObjList.h"
+#include "../../../T2DLL/T2RequestIDArray.h"
+#include "../../../T2DLL/T2RequestArray.h"
+#include "../../../T2DLL/T2RequestArrayList.h"
+#include "../../../T2DLL/T2MoverModule.h"
+#include "../../../T2DLL/T2MoverModuleList.h"
+#include "../../../T2DLL/T2StairModule.h"
+#include "../../../T2DLL/T2StairModuleList.h"
+#include "../../../T2DLL/T2ElevatorModule.h"
+#include "../../../T2DLL/T2ElvModuleList.h"
+#include "../../../T2DLL/T2CrossEquipArray.h"
+#include "../../../T2DLL/T2TenantCEArray.h"
+#include "../../../T2DLL/T2RouteCEArray.h"
+#include "../../../T2DLL/T2FloorCEArray.h"
+#include "../../../T2DLL/T2MoverCEArray.h"
+#include "../../../T2DLL/T2TenantArray.h"
+#include "../../../T2DLL/T2TenantArrayList.h"
+#include "../../../T2DLL/T2MoverArray.h"
+#include "../../../T2DLL/T2MoverArrayList.h"
+#include "../../../T2DLL/T2PeopleLinkIterator.h"
+#include "../../../T2DLL/T2UnitInfo.h"
+#include "../../../T2DLL/T2FloorInfo.h"
+#include "../../../T2DLL/T2FInfoAreaIterator.h"
+#include "../../../T2DLL/T2FInfoPtIterator.h"
+#include "../../../T2DLL/UT2BkgndInfo.h"
+#include "../../../T2DLL/T2EquipPtrList.h"
+#include "../../../T2DLL/T2FloorPtrList.h"
+#include "../../../T2DLL/T2RoutingTableElem.h"
+#include "../../../T2DLL/T2MoverRoutingTable.h"
+#include "../../../T2DLL/T2RoutingTable.h"
+#include "../../../T2DLL/T2RouteNavigator.h"
+#include "../../../T2DLL/T2WorldPlugin.h"
+#include "../../../T2DLL/T2WorldDef.h"
+#include "../../../T2DLL/T2TrafficInfo.h"
+#include "../../../T2DLL/T2NameList.h"
+#include "../../../T2DLL/T2PeopleLoader.h"
+#include "../../../T2DLL/T2MsgWindowCallback.h"
+#include "../../../T2DLL/T2Settlement.h"
+#include "../../../T2DLL/T2Name.h"
+#include "../../../T2DLL/T2EventItem.h"
+#include "../../../T2DLL/T2Maru_Reggae.h"
+#include "../../../T2DLL/T2RegistedTenantIterator.h"
+#include "../../../T2DLL/T2OptionPlugin.h"
+#include "../../../T2DLL/T2OptionPluginList.h"
+#include "../../../T2DLL/T2ToolWindow.h"
+#include "../../../T2DLL/T2ToolCallback.h"
+#include "../../../T2DLL/T2TowerEvent.h"
+#include "../../../T2DLL/T2MetroRailway.h"
+#include "../../../T2DLL/T2PaletteAnime.h"
+#include "../../../T2DLL/T2StewardDialog.h"
+#include "../../../T2DLL/T2ClassFactory.h"
+
#include "DefaultToolPalette.h"
+#include "ToolPalette.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
+
+//
+// Note!
+//
+// If this DLL is dynamically linked against the MFC
+// DLLs, any functions exported from this DLL which
+// call into MFC must have the AFX_MANAGE_STATE macro
+// added at the very beginning of the function.
+//
+// For example:
+//
+// extern "C" BOOL PASCAL EXPORT ExportedFunction()
+// {
+// AFX_MANAGE_STATE(AfxGetStaticModuleState());
+// // normal function body here
+// }
+//
+// It is very important that this macro appear in each
+// function, prior to any calls into MFC. This means that
+// it must appear as the first statement within the
+// function, even before any object variable declarations
+// as their constructors may generate calls into the MFC
+// DLL.
+//
+// Please see MFC Technical Notes 33 and 58 for additional
+// details.
+//
+
+/////////////////////////////////////////////////////////////////////////////
+// CDefaultToolPaletteApp
+
+BEGIN_MESSAGE_MAP(CDefaultToolPaletteApp, CWinApp)
+ //{{AFX_MSG_MAP(CDefaultToolPaletteApp)
+ // NOTE - the ClassWizard will add and remove mapping macros here.
+ // DO NOT EDIT what you see in these blocks of generated code!
+ //}}AFX_MSG_MAP
+END_MESSAGE_MAP()
+
+/////////////////////////////////////////////////////////////////////////////
+// CDefaultToolPaletteApp construction
+
+CDefaultToolPaletteApp::CDefaultToolPaletteApp()
+{
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// The one and only CDefaultToolPaletteApp object
+
+CDefaultToolPaletteApp theApp;
+
+ToolPalette *sToolPalette;
+
+void *CALLBACK ConstructProgramPlugin(T2PluginSpecifier *inSpecifier) {
+ if (!sToolPalette) {
+#line 47
+ sToolPalette = new ToolPalette;
+ }
+
+ return sToolPalette;
+}
+
+void *CALLBACK DestructProgramPlugin() {
+ sToolPalette = NULL;
+ return NULL;
+}
+
+T2PluginSpecifier *GetAttr(T2PluginSpecifier *inSpecifier, CResFile *inResFile, T2WorldDef *inWorldDef, T2TenantPlugin *inPlugin) {
+#line 59
+ T2PluginSpecifier *specifier = new T2PluginSpecifier;
+ specifier->mPluginName = "Default Tool palette";
+ specifier->mType = 'TOPL';
+ specifier->mID = 1000;
+ specifier->mAttrib = 0xFFFFFFFF;
+ specifier->mGameLevel = 0;
+ return specifier;
+}
diff --git a/src/Plugins/ToolPalette/DefaultToolPalette/DefaultToolPalette.def b/src/Plugins/ToolPalette/DefaultToolPalette/DefaultToolPalette.def
new file mode 100644
index 0000000..7164b21
--- /dev/null
+++ b/src/Plugins/ToolPalette/DefaultToolPalette/DefaultToolPalette.def
@@ -0,0 +1,9 @@
+; DefaultToolPalette.def : Declares the module parameters for the DLL.
+
+LIBRARY "DEFAULTTOOLPALETTE"
+DESCRIPTION 'DEFAULTTOOLPALETTE Windows Dynamic Link Library'
+
+EXPORTS
+ ConstructProgramPlugin
+ DestructProgramPlugin
+ GetAttr
diff --git a/src/Plugins/ToolPalette/DefaultToolPalette/DefaultToolPalette.dsp b/src/Plugins/ToolPalette/DefaultToolPalette/DefaultToolPalette.dsp
new file mode 100644
index 0000000..c110573
--- /dev/null
+++ b/src/Plugins/ToolPalette/DefaultToolPalette/DefaultToolPalette.dsp
@@ -0,0 +1,157 @@
+# Microsoft Developer Studio Project File - Name="DefaultToolPalette" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 5.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=DefaultToolPalette - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "DefaultToolPalette.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "DefaultToolPalette.mak" CFG="DefaultToolPalette - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "DefaultToolPalette - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "DefaultToolPalette - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "DefaultToolPalette - Win32 Release"
+
+# PROP BASE Use_MFC 6
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 6
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_WINDLL" /D "_AFXDLL" /Yu"stdafx.h" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_WINDLL" /D "_AFXDLL" /D "_USRDLL" /Yu"stdafx.h" /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32
+# ADD BASE RSC /l 0x809 /d "NDEBUG" /d "_AFXDLL"
+# ADD RSC /l 0x809 /d "NDEBUG" /d "_AFXDLL"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 /nologo /subsystem:windows /dll /machine:I386
+# ADD LINK32 /nologo /subsystem:windows /dll /machine:I386
+
+!ELSEIF "$(CFG)" == "DefaultToolPalette - Win32 Debug"
+
+# PROP BASE Use_MFC 6
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 6
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_WINDLL" /D "_AFXDLL" /Yu"stdafx.h" /FD /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "Z:\Users\ash\src\t2-res\dx5\cdrom\sdk\inc" /I "Z:\Users\ash\src\t2-res\dxmedia51\DX51\dxmdev\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_WINDLL" /D "_AFXDLL" /D "_USRDLL" /Yu"stdafx.h" /FD /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32
+# ADD BASE RSC /l 0x809 /d "_DEBUG" /d "_AFXDLL"
+# ADD RSC /l 0x809 /d "_DEBUG" /d "_AFXDLL"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 ../../../T2DLL/Debug/T2DLL.lib /nologo /subsystem:windows /dll /debug /machine:I386 /out:"..\..\DefaultToolPalette.t2p" /pdbtype:sept
+
+!ENDIF
+
+# Begin Target
+
+# Name "DefaultToolPalette - Win32 Release"
+# Name "DefaultToolPalette - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\DefaultToolPalette.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\ToolPalette.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\ToolPaletteItem.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\DefaultToolPalette.def
+# End Source File
+# Begin Source File
+
+SOURCE=.\DefaultToolPalette.rc
+
+!IF "$(CFG)" == "DefaultToolPalette - Win32 Release"
+
+!ELSEIF "$(CFG)" == "DefaultToolPalette - Win32 Debug"
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=.\StdAfx.cpp
+# ADD CPP /Yc"stdafx.h"
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=.\DefaultToolPalette.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\ToolPalette.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\ToolPaletteItem.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Resource.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\StdAfx.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe"
+# Begin Source File
+
+SOURCE=.\res\DefaultToolPalette.rc2
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/src/Plugins/ToolPalette/DefaultToolPalette/DefaultToolPalette.h b/src/Plugins/ToolPalette/DefaultToolPalette/DefaultToolPalette.h
index e45dd5d..cb431ec 100644
--- a/src/Plugins/ToolPalette/DefaultToolPalette/DefaultToolPalette.h
+++ b/src/Plugins/ToolPalette/DefaultToolPalette/DefaultToolPalette.h
@@ -1,5 +1,45 @@
+// DefaultToolPalette.h : main header file for the DEFAULTTOOLPALETTE DLL
+//
+
+#if !defined(AFX_DEFAULTTOOLPALETTE_H__81154B54_BBFC_4E61_A2BC_BB53B98894B3__INCLUDED_)
+#define AFX_DEFAULTTOOLPALETTE_H__81154B54_BBFC_4E61_A2BC_BB53B98894B3__INCLUDED_
+
+#if _MSC_VER >= 1000
#pragma once
-#include "common.h"
+#endif // _MSC_VER >= 1000
+
+#ifndef __AFXWIN_H__
+ #error include 'stdafx.h' before including this file for PCH
+#endif
+
+#include "resource.h" // main symbols
+
+/////////////////////////////////////////////////////////////////////////////
+// CDefaultToolPaletteApp
+// See DefaultToolPalette.cpp for the implementation of this class
+//
+
+class CDefaultToolPaletteApp : public CWinApp
+{
+public:
+ CDefaultToolPaletteApp();
-class DefaultToolPalette {
+// Overrides
+ // ClassWizard generated virtual function overrides
+ //{{AFX_VIRTUAL(CDefaultToolPaletteApp)
+ //}}AFX_VIRTUAL
+
+ //{{AFX_MSG(CDefaultToolPaletteApp)
+ // NOTE - the ClassWizard will add and remove member functions here.
+ // DO NOT EDIT what you see in these blocks of generated code !
+ //}}AFX_MSG
+ DECLARE_MESSAGE_MAP()
};
+
+
+/////////////////////////////////////////////////////////////////////////////
+
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
+
+#endif // !defined(AFX_DEFAULTTOOLPALETTE_H__81154B54_BBFC_4E61_A2BC_BB53B98894B3__INCLUDED_)
diff --git a/src/Plugins/ToolPalette/DefaultToolPalette/DefaultToolPalette.rc b/src/Plugins/ToolPalette/DefaultToolPalette/DefaultToolPalette.rc
new file mode 100644
index 0000000..306f829
--- /dev/null
+++ b/src/Plugins/ToolPalette/DefaultToolPalette/DefaultToolPalette.rc
@@ -0,0 +1,132 @@
+// Microsoft Visual C++ generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "afxres.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+128 ATTR "res\\ATTR128_1.txt"
+
+128 DESC "res\\DESC128_1.txt"
+
+1000 OBJMAP "res\\OBJMAP1000_1.txt"
+
+1000 BITMAP "res\\BITMAP1000_1.bmp"
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE DISCARDABLE
+BEGIN
+ "resource.h\0"
+END
+
+2 TEXTINCLUDE DISCARDABLE
+BEGIN
+ "#include ""afxres.h""\r\n"
+ "\0"
+END
+
+3 TEXTINCLUDE DISCARDABLE
+BEGIN
+ "#define _AFX_NO_SPLITTER_RESOURCES\r\n"
+ "#define _AFX_NO_OLE_RESOURCES\r\n"
+ "#define _AFX_NO_TRACKER_RESOURCES\r\n"
+ "#define _AFX_NO_PROPERTY_RESOURCES\r\n"
+ "\r\n"
+ "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r\n"
+ "#ifdef _WIN32\r\n"
+ "LANGUAGE 9, 1\r\n"
+ "#pragma code_page(1252)\r\n"
+ "#endif\r\n"
+ "#include ""res\\DefaultToolPalette.rc2"" // non-Microsoft Visual C++ edited resources\r\n"
+ "#include ""afxres.rc"" // Standard components\r\n"
+ "#endif"
+ "\0"
+END
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // APSTUDIO_INVOKED
+
+
+
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+#ifdef _WIN32
+LANGUAGE 9, 1
+#pragma code_page(1252)
+#endif
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION 1,0,0,1
+ PRODUCTVERSION 1,0,0,1
+ FILEFLAGSMASK 0x3fL
+#ifdef _DEBUG
+ FILEFLAGS 0x1L
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS 0x4L
+ FILETYPE 0x2L
+ FILESUBTYPE 0x0L
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "040904B0"
+ BEGIN
+ VALUE "CompanyName", "\0"
+ VALUE "FileDescription", "DefaultToolPalette DLL\0"
+ VALUE "FileVersion", "1, 0, 0, 1\0"
+ VALUE "InternalName", "DefaultToolPalette\0"
+ VALUE "LegalCopyright", "Copyright (C) 1997\0"
+ VALUE "LegalTrademarks", "\0"
+ VALUE "OriginalFilename","DefaultToolPalette.DLL\0"
+ VALUE "ProductName", "DefaultToolPalette Dynamic Link Library\0"
+ VALUE "ProductVersion", "1, 0, 0, 1\0"
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x409, 1200
+ END
+END
+
+#endif
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+#define _AFX_NO_SPLITTER_RESOURCES
+#define _AFX_NO_OLE_RESOURCES
+#define _AFX_NO_TRACKER_RESOURCES
+#define _AFX_NO_PROPERTY_RESOURCES
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+#ifdef _WIN32
+LANGUAGE 9, 1
+#pragma code_page(1252)
+#endif
+#include "res\\DefaultToolPalette.rc2" // non-Microsoft Visual C++ edited resources
+#include "afxres.rc" // Standard components
+#endif
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
+
diff --git a/src/Plugins/ToolPalette/DefaultToolPalette/Resource.h b/src/Plugins/ToolPalette/DefaultToolPalette/Resource.h
new file mode 100644
index 0000000..bc66dbf
--- /dev/null
+++ b/src/Plugins/ToolPalette/DefaultToolPalette/Resource.h
@@ -0,0 +1,16 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Visual C++ generated include file.
+// Used by DEFAULTTOOLPALETTE.RC
+//
+
+// Next default values for new objects
+//
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+
+#define _APS_NEXT_RESOURCE_VALUE 129
+#define _APS_NEXT_COMMAND_VALUE 32771
+#define _APS_NEXT_CONTROL_VALUE 1000
+#define _APS_NEXT_SYMED_VALUE 101
+#endif
+#endif
diff --git a/src/Plugins/ToolPalette/DefaultToolPalette/StdAfx.cpp b/src/Plugins/ToolPalette/DefaultToolPalette/StdAfx.cpp
new file mode 100644
index 0000000..ef55339
--- /dev/null
+++ b/src/Plugins/ToolPalette/DefaultToolPalette/StdAfx.cpp
@@ -0,0 +1,6 @@
+// stdafx.cpp : source file that includes just the standard includes
+// DefaultToolPalette.pch will be the pre-compiled header
+// stdafx.obj will contain the pre-compiled type information
+
+#include "stdafx.h"
+
diff --git a/src/Plugins/ToolPalette/DefaultToolPalette/StdAfx.h b/src/Plugins/ToolPalette/DefaultToolPalette/StdAfx.h
new file mode 100644
index 0000000..8eacd17
--- /dev/null
+++ b/src/Plugins/ToolPalette/DefaultToolPalette/StdAfx.h
@@ -0,0 +1,40 @@
+// stdafx.h : include file for standard system include files,
+// or project specific include files that are used frequently, but
+// are changed infrequently
+//
+
+#if !defined(AFX_STDAFX_H__AF935A55_9E17_4611_818A_EF6A4343861E__INCLUDED_)
+#define AFX_STDAFX_H__AF935A55_9E17_4611_818A_EF6A4343861E__INCLUDED_
+
+#if _MSC_VER >= 1000
+#pragma once
+#endif // _MSC_VER >= 1000
+
+#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers
+
+#include <afxwin.h> // MFC core and standard components
+#include <afxext.h> // MFC extensions
+
+#ifndef _AFX_NO_OLE_SUPPORT
+#include <afxole.h> // MFC OLE classes
+#include <afxodlgs.h> // MFC OLE dialog classes
+#include <afxdisp.h> // MFC OLE automation classes
+#endif // _AFX_NO_OLE_SUPPORT
+
+
+#ifndef _AFX_NO_DB_SUPPORT
+#include <afxdb.h> // MFC ODBC database classes
+#endif // _AFX_NO_DB_SUPPORT
+
+#ifndef _AFX_NO_DAO_SUPPORT
+#include <afxdao.h> // MFC DAO database classes
+#endif // _AFX_NO_DAO_SUPPORT
+
+#ifndef _AFX_NO_AFXCMN_SUPPORT
+#include <afxcmn.h> // MFC support for Windows Common Controls
+#endif // _AFX_NO_AFXCMN_SUPPORT
+
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
+
+#endif // !defined(AFX_STDAFX_H__AF935A55_9E17_4611_818A_EF6A4343861E__INCLUDED_)
diff --git a/src/Plugins/ToolPalette/DefaultToolPalette/ToolPalette.cpp b/src/Plugins/ToolPalette/DefaultToolPalette/ToolPalette.cpp
index f290c82..53c032b 100644
--- a/src/Plugins/ToolPalette/DefaultToolPalette/ToolPalette.cpp
+++ b/src/Plugins/ToolPalette/DefaultToolPalette/ToolPalette.cpp
@@ -1,7 +1,860 @@
+#include "StdAfx.h"
#include "ToolPalette.h"
+#include "ToolPaletteItem.h"
+#include "../../../T2DLL/T2BitImage.h"
+#include "../../../T2DLL/T2ImageObj.h"
+#include "../../../T2DLL/T2PaletteAnimeDef.h"
+#include "../../../T2DLL/T2ToolDef.h"
+#include "../../../T2DLL/T2ToolHelpWnd.h"
+#include "../../../T2DLL/T2WorldDef.h"
+#include "../../../T2TowerDoc.h"
-#ifdef _DEBUG
-#define new DEBUG_NEW
-#undef THIS_FILE
-static char THIS_FILE[] = __FILE__;
-#endif
+ToolPalette::ToolPalette() {
+ mSize130.cx = 26;
+ mSize130.cy = 26;
+
+ mSize138.cx = 76;
+ mSize138.cy = 13;
+
+ m140 = 16;
+ m144 = 3;
+ m148 = 4;
+ m124 = 0;
+
+ mImageObj = NULL;
+ mImage = NULL;
+ mToolHelpWnd = NULL;
+
+ _184 = -1;
+}
+
+/*virtual*/ ToolPalette::~ToolPalette() {
+ int i;
+
+ for (i = 0; i < kNumCommand; i++)
+ delete mCommands[i];
+
+ delete mCategoryTitle;
+ for (i = 0; i < kNumCategory; i++)
+ delete mCategories[i];
+ delete mCategoryScroll;
+
+ delete mToolTitle;
+ for (i = 0; i < kNumTool; i++)
+ delete mTools[i];
+ delete mToolScroll;
+
+ if (mImageObj)
+ delete mImageObj;
+ if (mImage)
+ delete mImage;
+
+ POSITION pos = mHistoryList.GetHeadPosition();
+ while (pos)
+ delete mHistoryList.GetNext(pos);
+}
+
+/*virtual*/ void ToolPalette::ItemCallbackDown(ToolPaletteItem *inItem) {
+ if (inItem->GetMode() != kTPIMode1)
+ return;
+
+ T2ToolIconItem *icon = inItem->GetIcon();
+ if (icon->mEnableCount > 0)
+ return;
+ if (icon->m30 == 0)
+ return;
+
+ T2ToolIconItem *changeIcon = ChangeIconItem(icon);
+ if (changeIcon && changeIcon->mToolCallback) {
+ T2ToolCallback *theToolCallback = changeIcon->mToolCallback;
+ theToolCallback->toolCallback_vf00(this, changeIcon);
+ }
+
+ T2ToolCallback *theToolCallback = icon->mToolCallback;
+ if (theToolCallback)
+ theToolCallback->toolCallback_vf00(this, icon);
+
+ mClickedItem = icon;
+ m15C = (T2ToolDef *) GetIconPlugin(mSel);
+ ShowHelpWindow();
+}
+
+/*virtual*/ void ToolPalette::ItemCallbackUp(ToolPaletteItem *inItem) {
+ if (mTimerID)
+ KillTimer(mTimerID);
+
+ HideHelpWindow();
+
+ if (inItem->GetMode() != kTPIMode1)
+ return;
+
+ T2ToolIconItem *icon = inItem->GetIcon();
+ if (icon->mEnableCount > 0)
+ return;
+ if (icon->m30 == 0)
+ return;
+
+ int i;
+ if (icon->m18) {
+ icon->m24 = false;
+
+ switch (icon->mOption) {
+ case kToolOption0:
+ for (i = 0; i < kNumCommand; i++)
+ mCommands[i]->InvalidateRect(NULL);
+ break;
+
+ case kToolOption4:
+ for (i = 0; i < kNumCategory; i++)
+ mCategories[i]->InvalidateRect(NULL);
+ break;
+
+ case kToolOption1:
+ case kToolOption2:
+ case kToolOption3:
+ for (i = 0; i < kNumTool; i++)
+ mTools[i]->InvalidateRect(NULL);
+ break;
+ }
+
+ T2ToolCallback *theToolCallback = icon->mToolCallback;
+ if (theToolCallback)
+ theToolCallback->toolCallback_vf00(this, icon);
+ }
+}
+
+T2ToolIconItem *ToolPalette::ChangeIconItem(T2ToolIconItem *inItem) {
+ T2ToolIconItem *result = NULL;
+
+ if (inItem->m18 != 0) {
+ inItem->m24 = true;
+
+ int i;
+ switch (inItem->mOption) {
+ case kToolOption0:
+ for (i = 0; i < kNumCommand; i++)
+ mCommands[i]->InvalidateRect(NULL);
+ break;
+ case kToolOption4:
+ for (i = 0; i < kNumCategory; i++)
+ mCategories[i]->InvalidateRect(NULL);
+ break;
+ case kToolOption1:
+ case kToolOption2:
+ case kToolOption3:
+ for (i = 0; i < kNumTool; i++)
+ mTools[i]->InvalidateRect(NULL);
+ break;
+ }
+ } else {
+ T2ToolIconItem *oldItem = GetItem(mSel);
+ ToolHistoryItem *history;
+
+ switch (inItem->mOption) {
+ case kToolOption0:
+ mSel = inItem->mID;
+ Updated();
+ break;
+
+ case kToolOption4: {
+ POSITION pos = mToolIconList->GetHeadPosition();
+ T2ToolIconItem *lowItem = NULL;
+ T2ToolIconItem *theItem;
+ while (pos) {
+ theItem = mToolIconList->GetNext(pos);
+ if (theItem->mOption == kToolOption1 || theItem->mOption == kToolOption2 || theItem->mOption == kToolOption3) {
+ if (((T2ToolDef *) theItem->mPlugin)->mCategoryNo == inItem->mValiation) {
+ if (lowItem) {
+ if (lowItem->mToolDef) {
+ if (theItem->mToolDef) {
+ if (theItem->mToolDef->GetSortKey() < lowItem->mToolDef->GetSortKey())
+ lowItem = theItem;
+ }
+ } else {
+ lowItem = theItem;
+ }
+ } else {
+ lowItem = theItem;
+ }
+ }
+ }
+ }
+
+#line 330
+ _ASSERT(lowItem != NULL);
+
+ theItem = lowItem;
+ mSel = theItem->mID;
+ history = GetToolHistory(((T2ToolDef *) GetIconPlugin(mSel))->mCategoryNo);
+
+ int theScrollPos = 0;
+ if (history->_C != -1) {
+ mSel = history->_C;
+ theScrollPos = history->_8;
+ } else {
+ history->_C = mSel;
+ history->_8 = theScrollPos;
+ }
+
+ _184 = mSel;
+ mToolScroll->SetScrollPos(theScrollPos);
+ Updated();
+ break;
+ }
+
+ case kToolOption1:
+ case kToolOption2:
+ case kToolOption3:
+ mSel = inItem->mID;
+ history = GetToolHistory(((T2ToolDef *) GetIconPlugin(mSel))->mCategoryNo);
+ history->_8 = mToolScroll->GetScrollPos();
+ history->_C = mSel;
+ Updated();
+ break;
+ }
+ }
+
+ return result;
+}
+
+/*virtual*/ T2ToolIconItem *ToolPalette::EnableIcon(unsigned short inMask) {
+ T2ToolIconItem *icon = T2ToolWindow::EnableIcon(inMask);
+ if (icon) {
+ ChangeIconItem(icon);
+ ListUpdated();
+ }
+ return icon;
+}
+
+/*virtual*/ int ToolPalette::OnCreateProc(LPCREATESTRUCT lpCreateStruct) {
+#pragma var_order(windowRect, y, rect2, x2, y2, i, clientRect, y3, rect1, x)
+ int i;
+
+ mImageObj = new T2ImageObj;
+ mImage = new T2BitImage(mModule, 1000, true);
+ mImageObj->AddObject(mModule, 1000, mImage);
+
+ for (i = 0; i < kNumCommand; i++)
+ mCommands[i] = new ToolPaletteItem(mDocument, kTPIMode1);
+
+ mCategoryTitle = new ToolPaletteItem(mDocument, kTPIMode0);
+ for (i = 0; i < kNumCategory; i++)
+ mCategories[i] = new ToolPaletteItem(mDocument, kTPIMode1);
+ mCategoryScroll = new ToolPaletteItem(mDocument, kTPIMode2);
+
+ mToolTitle = new ToolPaletteItem(mDocument, kTPIMode0);
+ for (i = 0; i < kNumTool; i++)
+ mTools[i] = new ToolPaletteItem(mDocument, kTPIMode1);
+ mToolScroll = new ToolPaletteItem(mDocument, kTPIMode2);
+
+ mWndClass = AfxRegisterWndClass(CS_VREDRAW | CS_HREDRAW | CS_NOCLOSE, NULL, (HBRUSH) GetStockObject(WHITE_BRUSH));
+
+ CRect rect1, rect2;
+ int x = 0, y = 0, x2, y2, y3;
+ m14C[kToolHelpMode0] = y + 5;
+
+ for (i = 0; i < kNumCommand; i++) {
+ x2 = (mSize130.cx - 1) * x + 3;
+ y2 = (mSize130.cy - 1) * y + 5;
+ rect1.SetRect(x2, y2, x2 + mSize130.cx, y2 + mSize130.cy);
+ rect2.UnionRect(rect2, rect1);
+ mCommands[i]->Create(mWndClass, "", WS_VISIBLE | WS_CHILD, rect1, this, i + 1000);
+
+ x++;
+ if (x >= 3) {
+ x = 0;
+ y++;
+ }
+ }
+
+ x2 = 3;
+ y = 3;
+ y2 += mSize130.cy + 4;
+ rect1.SetRect(x2, y2, x2 + mSize130.cx * 3 - 2, y2 + m140 + 2);
+ rect2.UnionRect(rect2, rect1);
+ mCategoryTitle->Create(mWndClass, "", WS_VISIBLE | WS_CHILD, rect1, this, 1100);
+
+ y2 += m140 + 2;
+ m14C[kToolHelpMode1] = y2;
+
+ x = 0;
+ y = 0;
+
+ for (i = 0; i < kNumCategory; i++) {
+ x2 = (mSize130.cx - 1) * x + 3;
+ y3 = y2 + (mSize130.cy - 1) * y;
+ rect1.SetRect(x2, y3, x2 + mSize130.cx, y3 + mSize130.cy);
+ rect2.UnionRect(rect2, rect1);
+ mCategories[i]->Create(mWndClass, "", WS_CHILD, rect1, this, i + 1200);
+
+ y++;
+ if (y >= 3) {
+ y = 0;
+ x++;
+ }
+ }
+ y = 3;
+
+ y2 += (mSize130.cy - 1) * y;
+ x2 = 3;
+ rect1.SetRect(x2, y2, x2 + mSize138.cx, y2 + mSize138.cy);
+ rect2.UnionRect(rect2, rect1);
+ mCategoryScroll->Create(mWndClass, "", WS_VISIBLE | WS_CHILD, rect1, this, 1300);
+
+ y = m140;
+ y2 += mSize138.cy + 6;
+ rect1.SetRect(x2, y2, x2 + mSize130.cx * 3 - 2, y2 + y + 2);
+ rect2.UnionRect(rect2, rect1);
+ mToolTitle->Create(mWndClass, "", WS_VISIBLE | WS_CHILD, rect1, this, 1400);
+
+ y2 += y + 2;
+ m14C[kToolHelpMode2] = y2;
+
+ x = 0;
+ y = 0;
+
+ for (i = 0; i < kNumTool; i++) {
+ x2 = (mSize130.cx - 1) * x + 3;
+ y3 = y2 + (mSize130.cy - 1) * y;
+ rect1.SetRect(x2, y3, x2 + mSize130.cx, y3 + mSize130.cy);
+ rect2.UnionRect(rect2, rect1);
+ mTools[i]->Create(mWndClass, "", WS_CHILD, rect1, this, i + 1500);
+
+ y++;
+ if (y >= 4) {
+ y = 0;
+ x++;
+ }
+ }
+ y = 4;
+
+ y2 += (mSize130.cy - 1) * y;
+ x2 = 3;
+ rect1.SetRect(x2, y2, x2 + mSize138.cx, y2 + mSize138.cy);
+ rect2.UnionRect(rect2, rect1);
+ mToolScroll->Create(mWndClass, "", WS_VISIBLE | WS_CHILD, rect1, this, 1600);
+
+ CRect windowRect;
+ GetWindowRect(windowRect);
+
+ CRect clientRect;
+ GetClientRect(clientRect);
+
+ SetWindowPos(
+ NULL,
+ 0,
+ 0,
+ rect2.Width() + (windowRect.Width() - clientRect.Width()) + 6,
+ rect2.Height() + (windowRect.Height() - clientRect.Height()) + 11,
+ SWP_NOMOVE | SWP_NOZORDER
+ );
+
+ m124 = true;
+ ListUpdated();
+ Updated();
+
+ return 0;
+}
+
+/*virtual*/ BOOL ToolPalette::OnEraseBkgndProc(CDC *pDC) {
+ int saved = pDC->SaveDC();
+ pDC->SelectPalette(mWorldDef->GetPalette(), false);
+ pDC->RealizePalette();
+
+ CBrush backBrush;
+ backBrush.CreateStockObject(LTGRAY_BRUSH);
+
+ CRect rect1;
+ GetClientRect(rect1);
+ pDC->FillRect(rect1, &backBrush);
+
+ CPen pen1;
+ pen1.CreatePen(PS_SOLID, 0, PALETTEINDEX(T2PaletteAnimeDef::GetCommonColor(0)));
+
+ CPen pen2;
+ pen2.CreatePen(PS_SOLID, 0, PALETTEINDEX(T2PaletteAnimeDef::GetCommonColor(3)));
+
+ CRect rect2, rect3;
+ GetClientRect(rect2);
+
+ pDC->SelectObject(pen1);
+ pDC->MoveTo(rect2.right - 1, rect2.top);
+ pDC->LineTo(rect2.left, rect2.top);
+ pDC->LineTo(rect2.left, rect2.bottom);
+
+ pDC->SelectObject(pen2);
+ pDC->MoveTo(rect2.right - 1, rect2.top + 1);
+ pDC->LineTo(rect2.right - 1, rect2.bottom - 1);
+ pDC->LineTo(rect2.left, rect2.bottom - 1);
+
+ mCategoryTitle->GetWindowRect(rect2);
+ ScreenToClient(rect2);
+
+ mCategoryScroll->GetWindowRect(rect3);
+ ScreenToClient(rect3);
+
+ pDC->SelectObject(pen2);
+ pDC->MoveTo(rect3.right, rect2.top - 1);
+ pDC->LineTo(rect2.left - 1, rect2.top - 1);
+ pDC->LineTo(rect2.left - 1, rect3.bottom + 1);
+
+ pDC->SelectObject(pen1);
+ pDC->MoveTo(rect3.right, rect2.top);
+ pDC->LineTo(rect3.right, rect3.bottom);
+ pDC->LineTo(rect3.left - 1, rect3.bottom);
+
+ mToolTitle->GetWindowRect(rect2);
+ ScreenToClient(rect2);
+
+ mToolScroll->GetWindowRect(rect3);
+ ScreenToClient(rect3);
+
+ pDC->SelectObject(pen2);
+ pDC->MoveTo(rect3.right, rect2.top - 1);
+ pDC->LineTo(rect2.left - 1, rect2.top - 1);
+ pDC->LineTo(rect2.left - 1, rect3.bottom + 1);
+
+ pDC->SelectObject(pen1);
+ pDC->MoveTo(rect3.right, rect2.top);
+ pDC->LineTo(rect3.right, rect3.bottom);
+ pDC->LineTo(rect3.left - 1, rect3.bottom);
+
+ pDC->RestoreDC(saved);
+ return true;
+}
+
+/*virtual*/ void ToolPalette::OnSizeProc(UINT nType, int cx, int cy) {
+}
+
+/*virtual*/ void ToolPalette::Updated() {
+ if (!m124)
+ return;
+
+ T2ToolDef *thePlugin;
+ T2ToolIconItem *icon;
+ int theCategoryNo;
+ POSITION pos;
+
+ int theOption = GetIconOption(mSel);
+ BYTE isChange = 0;
+
+ switch (theOption) {
+ case kToolOption1:
+ case kToolOption2:
+ case kToolOption3:
+ thePlugin = (T2ToolDef *) GetIconPlugin(mSel);
+#line 596
+ _ASSERT(thePlugin != NULL);
+
+ theCategoryNo = thePlugin->mCategoryNo;
+ pos = mToolIconList->GetHeadPosition();
+ while (pos) {
+ icon = mToolIconList->GetNext(pos);
+ switch (icon->mOption) {
+ case kToolOption4:
+ if (icon->mValiation == theCategoryNo) {
+ if (!icon->m24) {
+ icon->m24 = true;
+ isChange |= 1;
+ }
+ } else {
+ if (icon->m24) {
+ icon->m24 = false;
+ isChange |= 1;
+ }
+ }
+ break;
+
+ case kToolOption1:
+ case kToolOption2:
+ case kToolOption3:
+ if (icon->mID == mSel) {
+ ToolHistoryItem *history = GetToolHistory(((T2ToolDef *) GetIconPlugin(mSel))->mCategoryNo);
+ if (history->_C == -1) {
+ history->_C = mSel;
+ history->_8 = 0;
+ }
+ if (!icon->m24) {
+ icon->m24 = true;
+ isChange |= 2;
+ }
+
+ mCategoryTitle->SetText(thePlugin->mCategoryName);
+ mToolTitle->SetText(*thePlugin->mToolName[icon->mValiation]);
+ } else {
+ if (icon->m24) {
+ icon->m24 = false;
+ isChange |= 2;
+ }
+ }
+ break;
+
+ case kToolOption0:
+ if (icon->m24) {
+ icon->m24 = false;
+ isChange |= 4;
+ }
+ break;
+ }
+ }
+
+ if (isChange & 1) {
+ for (int i = 0; i < kNumCategory; i++)
+ mCategories[i]->InvalidateRect(NULL);
+ ChangeCategory(theCategoryNo);
+ }
+ if (isChange & 2) {
+ for (int i = 0; i < kNumTool; i++)
+ mTools[i]->InvalidateRect(NULL);
+ }
+ if (isChange & 4) {
+ for (int i = 0; i < kNumCommand; i++)
+ mCommands[i]->InvalidateRect(NULL);
+ }
+
+ mDocument->SetCursorType(kCursorDefault, false);
+ break;
+
+ case kToolOption0:
+ pos = mToolIconList->GetHeadPosition();
+ while (pos) {
+ icon = mToolIconList->GetNext(pos);
+ switch (icon->mOption) {
+ case kToolOption1:
+ case kToolOption2:
+ case kToolOption3:
+ if (icon->m24) {
+ icon->m24 = false;
+ isChange |= 1;
+ }
+ break;
+
+ case kToolOption4:
+ if (icon->m24) {
+ icon->m24 = false;
+ isChange |= 2;
+ }
+ break;
+
+ case kToolOption0:
+ if (icon->mID == mSel) {
+ if (!icon->m24) {
+ icon->m24 = true;
+ isChange |= 4;
+ }
+ } else {
+ if (icon->m24) {
+ icon->m24 = false;
+ isChange |= 4;
+ }
+ }
+ break;
+ }
+ }
+
+ if (isChange & 1) {
+ for (int i = 0; i < kNumCategory; i++)
+ mCategories[i]->InvalidateRect(NULL);
+ ChangeCategory();
+ }
+ if (isChange & 2) {
+ for (int i = 0; i < kNumTool; i++)
+ mTools[i]->InvalidateRect(NULL);
+ }
+
+ if (isChange && 4) {
+ for (int i = 0; i < kNumCommand; i++)
+ mCommands[i]->InvalidateRect(NULL);
+ }
+ if (isChange) {
+ mCategoryTitle->SetText("");
+ mToolTitle->SetText("");
+ }
+
+ mDocument->SetCursorType(mSel, false);
+ break;
+ }
+
+ if (isChange) {
+ mCategoryTitle->InvalidateRect(NULL);
+ mToolTitle->InvalidateRect(NULL);
+ }
+}
+
+/*virtual*/ void ToolPalette::ListUpdated() {
+ if (!m124)
+ return;
+
+ UpdateCommand();
+ UpdateCategory();
+ UpdateTool();
+}
+
+void ToolPalette::UpdateScroll(ToolPaletteItem *inItem) {
+ if (inItem == mCategoryScroll)
+ UpdateCategory();
+
+ if (inItem == mToolScroll) {
+ UpdateTool();
+ if (_184 != -1) {
+ ToolHistoryItem *history = GetToolHistory(((T2ToolDef *) GetIconPlugin(_184))->mCategoryNo);
+ history->_8 = mToolScroll->GetScrollPos();
+ }
+ }
+}
+
+static const char *commandNames[] = {
+ "ToolDestruct",
+ "ToolFinger",
+ "ToolInfo",
+ "ToolZoom",
+ "ToolHand",
+ "ToolMic",
+ "ToolRoot"
+};
+
+void ToolPalette::UpdateCommand() {
+ BOOL valid = true;
+ int i;
+
+ for (i = 0; i < kNumCommand; i++) {
+ if (GetID(commandNames[i], 0) == -1) {
+ valid = false;
+ break;
+ }
+ }
+
+ if (valid) {
+ for (i = 0; i < kNumCommand; i++)
+ mCommands[i]->SetIcon(GetItem(commandNames[i], 0));
+ }
+}
+
+void ToolPalette::UpdateCategory() {
+ int baseIndex = mCategoryScroll->GetScrollPos() * m144;
+ int currIndex = 0;
+ int numIcons = 0;
+ CList<T2ToolIconItem *, T2ToolIconItem *> iconList;
+
+ POSITION pos = mToolIconList->GetHeadPosition();
+ while (pos) {
+ T2ToolIconItem *icon = mToolIconList->GetNext(pos);
+ if (icon->mOption == kToolOption4) {
+ BOOL added = false;
+ if (icon->mToolDef) {
+ POSITION pos2 = iconList.GetHeadPosition();
+ while (pos2) {
+ POSITION prevPos2 = pos2;
+ T2ToolIconItem *icon2 = iconList.GetNext(pos2);
+ if (icon2->mToolDef && icon2->mToolDef->GetSortKey() > icon->mToolDef->GetSortKey()) {
+ iconList.InsertBefore(prevPos2, icon);
+ added = true;
+ break;
+ }
+ }
+ }
+
+ if (!added)
+ iconList.AddTail(icon);
+ }
+ }
+
+ pos = iconList.GetHeadPosition();
+ while (pos) {
+ T2ToolIconItem *icon = iconList.GetNext(pos);
+ if (currIndex >= baseIndex && numIcons < kNumCategory) {
+ mCategories[numIcons]->SetIcon(icon);
+ mCategories[numIcons]->ShowWindow(SW_SHOW);
+ numIcons++;
+ }
+ currIndex++;
+ }
+
+ for (; numIcons < kNumCategory; numIcons++)
+ mCategories[numIcons]->ShowWindow(SW_HIDE);
+
+ currIndex = ((currIndex + m144 - 1) / m144) - 3;
+ if (currIndex < 0)
+ currIndex = 0;
+ mCategoryScroll->SetScrollRange(currIndex);
+}
+
+void ToolPalette::UpdateTool() {
+ T2ToolIconItem *icon;
+ POSITION pos = mToolIconList->GetHeadPosition();
+
+ while (pos) {
+ icon = mToolIconList->GetNext(pos);
+ if (icon->mOption == kToolOption4 && icon->m24) {
+ ChangeCategory(icon->mValiation);
+ break;
+ }
+ }
+}
+
+void ToolPalette::ChangeCategory(int inCategory) {
+ if (!m124)
+ return;
+
+ int baseIndex = mToolScroll->GetScrollPos() * m148;
+ int currIndex = 0;
+ int numIcons = 0;
+ CList<T2ToolIconItem *, T2ToolIconItem *> iconList;
+
+ POSITION pos = mToolIconList->GetHeadPosition();
+ while (pos) {
+ T2ToolIconItem *icon = mToolIconList->GetNext(pos);
+ if (icon->mOption == kToolOption1 || icon->mOption == kToolOption2 || icon->mOption == kToolOption3) {
+ if (((T2ToolDef *) icon->mPlugin)->mCategoryNo == inCategory) {
+ BOOL added = false;
+ if (icon->mToolDef) {
+ POSITION pos2 = iconList.GetHeadPosition();
+ while (pos2) {
+ POSITION prevPos2 = pos2;
+ T2ToolIconItem *icon2 = iconList.GetNext(pos2);
+ if (icon2->mToolDef && icon2->mToolDef->GetSortKey() > icon->mToolDef->GetSortKey()) {
+ iconList.InsertBefore(prevPos2, icon);
+ added = true;
+ break;
+ }
+ }
+ }
+
+ if (!added)
+ iconList.AddTail(icon);
+ }
+ }
+ }
+
+ pos = iconList.GetHeadPosition();
+ while (pos) {
+ T2ToolIconItem *icon = iconList.GetNext(pos);
+ if (currIndex >= baseIndex && numIcons < kNumTool) {
+ mTools[numIcons]->SetIcon(icon);
+ mTools[numIcons]->ShowWindow(SW_SHOW);
+ numIcons++;
+ }
+ currIndex++;
+ }
+
+ for (; numIcons < kNumTool; numIcons++)
+ mTools[numIcons]->ShowWindow(SW_HIDE);
+
+ currIndex = ((currIndex + m148 - 1) / m148) - 3;
+ if (currIndex < 0)
+ currIndex = 0;
+ mToolScroll->SetScrollRange(currIndex);
+}
+
+void ToolPalette::ChangeCategory() {
+ if (!m124)
+ return;
+
+ for (int i = 0; i < kNumTool; i++)
+ mTools[i]->ShowWindow(SW_HIDE);
+ mToolScroll->SetScrollRange(0);
+}
+
+/*virtual*/ void ToolPalette::RedrawButton() {
+ if (!m124)
+ return;
+
+ int i;
+ for (i = 0; i < kNumCategory; i++)
+ mCategories[i]->InvalidateRect(NULL);
+ for (i = 0; i < kNumTool; i++)
+ mTools[i]->InvalidateRect(NULL);
+ for (i = 0; i < kNumCommand; i++)
+ mCommands[i]->InvalidateRect(NULL);
+}
+
+void ToolPalette::ShowHelpWindow() {
+ HideHelpWindow();
+
+ int mode;
+ switch (mClickedItem->mOption) {
+ case kToolOption0:
+ mode = kToolHelpMode0;
+ break;
+ case kToolOption4:
+ mode = kToolHelpMode1;
+ break;
+ default:
+ mode = kToolHelpMode2;
+ break;
+ }
+
+ RECT rect;
+ GetWindowRect(&rect);
+
+ mToolHelpPt.y = GetSystemMetrics(SM_CYSMSIZE);
+ mToolHelpPt.y += rect.top;
+ mToolHelpPt.x = rect.right + 8;
+ mToolHelpPt.y += m14C[mode];
+
+ CString text;
+ mToolHelpValiation = mClickedItem->mValiation;
+ mToolHelpMode = mode;
+
+ switch (mode) {
+ case kToolHelpMode0:
+ mToolHelpStr2 = mClickedItem->m2C;
+ break;
+ case kToolHelpMode1:
+ mToolHelpStr1 = m15C->mCategoryName;
+ mToolHelpStr2 = m15C->mCategoryCommentString;
+ break;
+ case kToolHelpMode2:
+ mToolHelpDef = m15C;
+ break;
+ }
+
+ mToolHelpWnd = new T2ToolHelpWnd;
+ StartTimer(500);
+}
+
+void ToolPalette::HideHelpWindow() {
+ if (mToolHelpWnd) {
+ mToolHelpWnd->CloseToolHelp();
+ mToolHelpWnd = NULL;
+ }
+ StopTimer();
+}
+
+/*virtual*/ void ToolPalette::OnTimerProc(UINT nIDEvent) {
+ mToolHelpWnd->OpenToolHelp(mToolHelpPt, mToolHelpMode, mToolHelpStr1, mToolHelpStr2, mToolHelpDef, mToolHelpValiation);
+ StopTimer();
+}
+
+ToolHistoryItem *ToolPalette::GetToolHistory(int inID) {
+ ToolHistoryItem *history;
+ POSITION pos = mHistoryList.GetHeadPosition();
+ while (pos) {
+ history = mHistoryList.GetNext(pos);
+ if (history->_4 == inID)
+ return history;
+ }
+
+ history = new ToolHistoryItem;
+ history->_4 = inID;
+ mHistoryList.AddTail(history);
+ return history;
+}
+
+
+ToolHistoryItem::ToolHistoryItem() {
+ _4 = -1;
+ _8 = 0;
+ _C = -1;
+}
+
+/*virtual*/ ToolHistoryItem::~ToolHistoryItem() {
+}
+
+
+
+ToolHistoryList::ToolHistoryList() {
+}
+
+/*virtual*/ ToolHistoryList::~ToolHistoryList() {
+}
diff --git a/src/Plugins/ToolPalette/DefaultToolPalette/ToolPalette.h b/src/Plugins/ToolPalette/DefaultToolPalette/ToolPalette.h
index 70ecbcc..c36f8dd 100644
--- a/src/Plugins/ToolPalette/DefaultToolPalette/ToolPalette.h
+++ b/src/Plugins/ToolPalette/DefaultToolPalette/ToolPalette.h
@@ -1,5 +1,86 @@
#pragma once
-#include "common.h"
+#include "../../../common.h"
+#include "../../../T2DLL/T2ToolWindow.h"
-class ToolPalette {
+class ToolPaletteItem;
+
+class AFX_CLASS_EXPORT ToolHistoryItem {
+public:
+ ToolHistoryItem();
+ virtual ~ToolHistoryItem();
+
+ int _4;
+ int _8;
+ int _C;
+};
+
+class AFX_CLASS_EXPORT ToolHistoryList : public CList<ToolHistoryItem *, ToolHistoryItem *> {
+public:
+ ToolHistoryList();
+ virtual ~ToolHistoryList();
+};
+
+class AFX_CLASS_EXPORT ToolPalette : public T2ToolWindow {
+public:
+ ToolPalette();
+ virtual ~ToolPalette();
+ T2ToolIconItem *ChangeIconItem(T2ToolIconItem *inItem);
+ virtual T2ToolIconItem *EnableIcon(unsigned short inMask);
+ virtual int OnCreateProc(LPCREATESTRUCT lpCreateStruct);
+ virtual BOOL OnEraseBkgndProc(CDC *pDC);
+ virtual void OnSizeProc(UINT nType, int cx, int cy);
+ void UpdateScroll(ToolPaletteItem *inItem);
+ void UpdateCommand();
+ void UpdateCategory();
+ void UpdateTool();
+ virtual void OnTimerProc(UINT nIDEvent);
+ virtual void RedrawButton();
+ virtual void ItemCallbackDown(ToolPaletteItem *inItem);
+ virtual void ItemCallbackUp(ToolPaletteItem *inItem);
+
+ enum {
+ kNumCommand = 7,
+ kNumCategory = 9,
+ kNumTool = 12
+ };
+
+ T2ImageObj *mImageObj;
+ BOOL m124;
+ T2BitImage *mImage;
+ CString mWndClass;
+ CSize mSize130;
+ CSize mSize138;
+ int m140;
+ int m144;
+ int m148;
+ int m14C[3];
+ T2ToolIconItem *mClickedItem;
+ T2ToolDef *m15C;
+ POINT mToolHelpPt;
+ ToolHistoryList mHistoryList;
+ int _184;
+ ToolPaletteItem *mCommands[kNumCommand];
+ ToolPaletteItem *mCategoryTitle;
+ ToolPaletteItem *mCategories[kNumCategory];
+ ToolPaletteItem *mCategoryScroll;
+ ToolPaletteItem *mToolTitle;
+ ToolPaletteItem *mTools[kNumTool];
+ ToolPaletteItem *mToolScroll;
+ T2ToolHelpWnd *mToolHelpWnd;
+ CString mToolHelpStr1;
+ CString mToolHelpStr2;
+ T2ToolDef *mToolHelpDef;
+ int mToolHelpValiation;
+ int mToolHelpMode;
+
+protected:
+ virtual void Updated();
+ virtual void ListUpdated();
+ ToolHistoryItem *GetToolHistory(int inID);
+
+private:
+ void ChangeCategory(int inCategory);
+ void ChangeCategory();
+ void ShowHelpWindow();
+ void HideHelpWindow();
};
diff --git a/src/Plugins/ToolPalette/DefaultToolPalette/ToolPaletteItem.cpp b/src/Plugins/ToolPalette/DefaultToolPalette/ToolPaletteItem.cpp
index ad675b8..f4993fc 100644
--- a/src/Plugins/ToolPalette/DefaultToolPalette/ToolPaletteItem.cpp
+++ b/src/Plugins/ToolPalette/DefaultToolPalette/ToolPaletteItem.cpp
@@ -1,7 +1,269 @@
+#include "StdAfx.h"
+#include "ToolPalette.h"
#include "ToolPaletteItem.h"
+#include "../../../T2DLL/T2ImageObj.h"
+#include "../../../T2DLL/T2ToolWindow.h"
+#include "../../../T2DLL/T2WorldDef.h"
+#include "../../../T2TowerDoc.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
+
+ToolPaletteItem::ToolPaletteItem() {
+}
+
+ToolPaletteItem::ToolPaletteItem(T2TowerDoc *inDoc, int inMode) {
+ ToolPaletteItem();
+
+ mIcon = NULL;
+ mMode = inMode;
+ mDocument = inDoc;
+ mPalette = inDoc->mWorldDef->GetPalette();
+ mStatus = 0;
+ mScrollPos = 0;
+ mScrollRange = 0;
+ mOption = 0;
+
+ if (inMode == kTPIMode2)
+ mStatus = 22;
+}
+
+/*virtual*/ ToolPaletteItem::~ToolPaletteItem() {
+}
+
+BEGIN_MESSAGE_MAP(ToolPaletteItem, CWnd)
+ //{{AFX_MSG_MAP(ToolPaletteItem)
+ ON_WM_ERASEBKGND()
+ ON_WM_LBUTTONDOWN()
+ ON_WM_LBUTTONUP()
+ ON_WM_MOUSEMOVE()
+ //}}AFX_MSG_MAP
+END_MESSAGE_MAP()
+
+/*virtual*/ int ToolPaletteItem::GetScrollPos() {
+ return mScrollPos;
+}
+
+/*virtual*/ void ToolPaletteItem::SetScrollRange(int inRange) {
+ if (mScrollRange != inRange) {
+ mScrollRange = inRange;
+ SetScrollStatus(false, false);
+ if (mScrollPos > mScrollRange)
+ mScrollPos = mScrollRange;
+
+ ((ToolPalette *) GetParent())->ItemCallbackDown(this);
+ }
+}
+
+/*virtual*/ void ToolPaletteItem::SetScrollPos(int inPos) {
+ if (mScrollPos != inPos)
+ mScrollPos = inPos;
+}
+
+void ToolPaletteItem::SetScrollStatus(BOOL inLeftPressed, BOOL inRightPressed) {
+ int theStatusL = inLeftPressed ? 1 : 0;
+ int theStatusR = inRightPressed ? 1 : 0;
+ if (mScrollPos == 0)
+ theStatusL = 2;
+ if (mScrollPos == mScrollRange)
+ theStatusR = 2;
+ mStatus = theStatusL * 10 + theStatusR;
+ InvalidateRect(NULL);
+}
+
+/*virtual*/ void ToolPaletteItem::SetStatus(int inStatus) {
+ mStatus = inStatus;
+ InvalidateRect(NULL);
+}
+
+/*virtual*/ int ToolPaletteItem::GetOption() {
+ return mOption;
+}
+
+/*virtual*/ void ToolPaletteItem::SetOption(int inOption) {
+ mOption = inOption;
+}
+
+/*virtual*/ void ToolPaletteItem::SetIcon(T2ToolIconItem *inItem) {
+ mIcon = inItem;
+ InvalidateRect(NULL);
+}
+
+/*virtual*/ void ToolPaletteItem::SetText(const char *inText) {
+ SetWindowText(inText);
+}
+
+/*virtual*/ int ToolPaletteItem::GetMode() {
+ return mMode;
+}
+
+/*virtual*/ T2ToolIconItem *ToolPaletteItem::GetIcon() {
+ return mIcon;
+}
+
+BOOL ToolPaletteItem::OnEraseBkgnd(CDC *pDC) {
+ CRect clientRect;
+ GetClientRect(clientRect);
+
+ int save = pDC->SaveDC();
+ pDC->SelectPalette(mPalette, false);
+ pDC->RealizePalette();
+
+ CBrush brush;
+ CPen pen;
+ CFont font;
+
+ if (mMode == kTPIMode1 && mIcon->mName != "") {
+ int pattern = mIcon->mValiation * 10;
+ if (mIcon->m30) {
+ if (mIcon->mEnableCount > 0)
+ pattern += 2;
+ else
+ pattern += mIcon->m24 ? 1 : 0;
+ } else {
+ pattern += 2;
+ }
+
+ int index = mDocument->mWorldDef->m1D0->FindObject(mIcon->mName, pattern);
+ if (index < 0) {
+ if (mIcon->m30) {
+ if (mIcon->mEnableCount > 0) {
+ pattern -= 2;
+ index = mDocument->mWorldDef->m1D0->FindObject(mIcon->mName, pattern);
+ }
+ } else {
+ pattern -= 2;
+ index = mDocument->mWorldDef->m1D0->FindObject(mIcon->mName, pattern);
+ }
+ }
+
+#line 172
+ _ASSERT(index >= 0);
+
+ mDocument->mWorldDef->m1D0->DrawObject(pDC, index, clientRect);
+
+ } else if (mMode == kTPIMode0) {
+ brush.CreateSolidBrush(PALETTERGB(255, 255, 255));
+ pen.CreateStockObject(BLACK_PEN);
+
+ pDC->SelectObject(brush);
+ pDC->SelectObject(pen);
+ pDC->Rectangle(clientRect);
+
+ CString text;
+ GetWindowText(text);
+
+ int currWidth, width;
+ currWidth = width = clientRect.Width();
+
+ unsigned int textLen = strlen(text);
+ if (textLen > 8)
+ currWidth /= textLen;
+ else
+ currWidth = 7;
+
+ currWidth = -currWidth;
+
+ CRect theRect;
+ BOOL isWidthFinish = false;
+ while (!isWidthFinish) {
+ theRect = clientRect;
+ theRect.top += 1;
+ theRect.left += 1;
+ theRect.bottom -= 1;
+ theRect.right -= 1;
+
+ font.CreateFont(-15, currWidth, 0, 0, FW_DONTCARE, false, false, false, DEFAULT_CHARSET, OUT_TT_PRECIS, CLIP_TT_ALWAYS, DRAFT_QUALITY, FIXED_PITCH, "\x82\x6C\x82\x72 \x83\x53\x83\x56\x83\x62\x83\x4E");
+ pDC->SelectObject(font);
+ pDC->SetTextColor(RGB(0, 0, 0));
+ pDC->SetBkMode(TRANSPARENT);
+ pDC->DrawText(text, theRect, DT_CENTER | DT_WORDBREAK | DT_CALCRECT | DT_NOPREFIX);
+ if (width >= theRect.Width())
+ isWidthFinish = true;
+ else
+ currWidth++;
+ }
+
+ int textWidth = theRect.Width();
+ int textHeight = theRect.Height();
+
+ TEXTMETRIC textMetric;
+ pDC->GetTextMetrics(&textMetric);
+
+ CPoint textCenterPt = clientRect.CenterPoint();
+ theRect.top = textCenterPt.y - textHeight / 2;
+ theRect.bottom = theRect.top + textHeight;
+ theRect.left = textCenterPt.x - textWidth / 2;
+ theRect.right = theRect.left + textWidth;
+
+ pDC->DrawText(text, theRect, DT_CENTER | DT_WORDBREAK | DT_NOPREFIX);
+ } else if (mMode == kTPIMode2) {
+ T2ImageObj *theImageObj = ((ToolPalette *) GetParent())->mImageObj;
+ int index = theImageObj->FindObject("ScrollButton", mStatus);
+ theImageObj->DrawObject(pDC, index, clientRect);
+ } else {
+ brush.CreateSolidBrush(PALETTERGB(255, 255, 255));
+ pen.CreateStockObject(BLACK_PEN);
+
+ pDC->SelectObject(brush);
+ pDC->SelectObject(pen);
+ pDC->Rectangle(clientRect);
+ }
+
+ pDC->RestoreDC(save);
+ return true;
+}
+
+void ToolPaletteItem::OnLButtonDown(UINT nFlags, CPoint point) {
+ SetCapture();
+
+ switch (mMode) {
+ case kTPIMode1:
+ ((ToolPalette *) GetParent())->ItemCallbackDown(this);
+ break;
+ case kTPIMode2:
+ if (point.x < 38)
+ SetScrollStatus(true, false);
+ else
+ SetScrollStatus(false, true);
+ break;
+ }
+}
+
+void ToolPaletteItem::OnLButtonUp(UINT nFlags, CPoint point) {
+ if (mMode == kTPIMode1)
+ ((ToolPalette *) GetParent())->ItemCallbackUp(this);
+
+ if (mMode == kTPIMode2) {
+ BOOL changed = false;
+ if (point.x < 38) {
+ if (mScrollPos != 0) {
+ mScrollPos--;
+ changed = true;
+ }
+ } else {
+ if (mScrollPos < mScrollRange) {
+ mScrollPos++;
+ changed = true;
+ }
+ }
+
+ if (changed)
+ ((ToolPalette *) GetParent())->UpdateScroll(this);
+
+ SetScrollStatus(false, false);
+ }
+
+ if (::GetCapture() == m_hWnd)
+ ReleaseCapture();
+}
+
+void ToolPaletteItem::OnMouseMove(UINT nFlags, CPoint point) {
+ CWinApp *app = AfxGetApp();
+ HCURSOR cursorH = app->LoadStandardCursor(IDC_ARROW);
+ if (cursorH)
+ SetCursor(cursorH);
+}
diff --git a/src/Plugins/ToolPalette/DefaultToolPalette/ToolPaletteItem.h b/src/Plugins/ToolPalette/DefaultToolPalette/ToolPaletteItem.h
index bee9108..b119b17 100644
--- a/src/Plugins/ToolPalette/DefaultToolPalette/ToolPaletteItem.h
+++ b/src/Plugins/ToolPalette/DefaultToolPalette/ToolPaletteItem.h
@@ -1,5 +1,50 @@
#pragma once
-#include "common.h"
+#include "../../../common.h"
-class ToolPaletteItem {
+enum {
+ kTPIMode0 = 0,
+ kTPIMode1 = 1,
+ kTPIMode2 = 2
+};
+
+class AFX_CLASS_EXPORT ToolPaletteItem : public CWnd {
+protected:
+ ToolPaletteItem();
+public:
+ ToolPaletteItem(T2TowerDoc *inDoc, int inMode);
+ virtual ~ToolPaletteItem();
+
+ virtual void SetIcon(T2ToolIconItem *inItem);
+ virtual void SetText(const char *inText);
+ virtual void SetScrollRange(int inRange);
+ virtual void SetScrollPos(int inPos);
+ virtual void SetStatus(int inStatus);
+ virtual int GetOption();
+ virtual void SetOption(int inOption);
+ virtual int GetScrollPos();
+ virtual int GetMode();
+ virtual T2ToolIconItem *GetIcon();
+
+ int mMode;
+ T2TowerDoc *mDocument;
+ CPalette *mPalette;
+ T2ToolIconItem *mIcon;
+ int mStatus;
+ int mOption;
+ int mScrollPos;
+ int mScrollRange;
+
+ //{{AFX_VIRTUAL(ToolPaletteItem)
+ //}}AFX_VIRTUAL
+
+protected:
+ void SetScrollStatus(BOOL inLeftPressed, BOOL inRightPressed);
+
+ //{{AFX_MSG(ToolPaletteItem)
+ afx_msg BOOL OnEraseBkgnd(CDC *pDC);
+ afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
+ afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
+ afx_msg void OnMouseMove(UINT nFlags, CPoint point);
+ //}}AFX_MSG
+ DECLARE_MESSAGE_MAP()
};