MAPGEN TOOLS
MapGen is part of a set of three powerful and professional level development tools that allow to create game content for a three dimensional engine. The engine itself and/or parts of it cannot be presented here for copyright reasons. The tools can be considered fully working and implemented. The MapGen tools suite was developed by me (Vito Plantamura) in 1999.
|
1: MapGen editor: the shot shows the advanced UI of the editor (scrollable toolbars and dialogs and editable Bezier patches). |
|
|
2: MapGen editor: the shot shows some advanced UI solutions developed for the editor (in the shot: a list box with controls and a code edit box with highlighted syntax). |
|
|
3: MapGen editor: the shot shows the advanced system of entity management and the HTML help (available in a WebBrowser ActiveX control directly inside the UI). |
|
|
4: Modeler editor: the shot shows the MDI environment of the editor (Modeler allows to import skinned characters and simple meshes with animation data into documents). |
|
|
5: Server Control plugin: the shot shows the plugin interface (the MSC plugin allows to export the current scene from 3DStudio Max into Modeler and to import shaders as materials from MapGen into MAX). |
FEATURES
|
Full written in C, C++ and 80x86 assembly with the aid of MFC for user interface programming. |
|
|
Brush-based CSG editor with support for biquadratic Bezier patches. |
|
|
Location transparency of each tools through extensive use of DCOM. |
|
|
Integrated environment for developing maps and writing scripts. MapGen allows to compile maps and scripts seamlessly in the same UI (strong multithreaded structure for simultaneous compilation operations). |
|
|
Patch editing with operations such as capping, thickening etc... |
|
|
OLE Automable to allow writing of addins, plugins etc... (full access to map primitives through the MapGen Object Model and support for classes for representing matrices, vectors, texcoords etc...) |
|
|
Integrated proprietary C compiler to allow script compilation inside the IDE (in native Intel 80x86 code or in pseudo-code for execution by a virtual machine). |
|
|
Proprietary script language parser for defining entity behavior and properties. |
|
|
Powerful and intuitive user interface (scrollable toolbars and dialogs, ActiveX controls, customizable menus, full shader properties editing in UI etc...). |
|
|
Integrated BSP, PVS, lightmap generators. |
|
|
Editing windows with highlighted syntax for C code and entity scripts. |
|
|
Support for groups, named selections, clipboard operations etc... |
INTRODUCTION
MapGen is a powerful CSG editor and an integrated environment for developing maps, scripts and content from the same IDE, developed entirely by Vito Plantamura in 1999. It includes also a proprietary C compiler and a BSP and PVS compiler. MSC is a plugin for 3DStudio Max 3.1 that allows to export characters (eventually bipeds with physique information) and to import materials. Modeler is an application that is useful for creating and composing animations. All the tools comunicate through DCOM achieving a full location transparency.
OLE AUTOMATION
As my current professional focus (in 2005, at the time of this writing) is on component software and on Microsoft technologies in general, I'll put emphasis in this section on the OLE Automable features of MapGen. As a side note, I developed the MapGen OLE Automation server (with ISupportErrorInfo features) in 1999 entirely in C++ without the aid of any higher level framework.
You can view a detailed description of the MapGen Type Library opening the MapGenGeom.tlb file with OLE View. This is a very concise surrogate of that information:
// MapGen.idl
interface IMapGen3DVector : IDispatch
{
HRESULT x ([out, retval] float* pRetVal);
HRESULT x ([in] float sX);
HRESULT y ([out, retval] float* pRetVal);
HRESULT y ([in] float sY);
HRESULT z ([out, retval] float* pRetVal);
HRESULT z ([in] float sZ);
HRESULT isValid ([out, retval] VARIANT_BOOL* pRetVal);
HRESULT copyVector ([in] IMapGen3DVector* pSourceVector);
HRESULT setVector ([in, optional, defaultvalue(0)] float sX, [in, optional, defaultvalue(0)] float sY, [in, optional, defaultvalue(0)] float sZ);
HRESULT lengthOfVector ([out, retval] float* pRetVal);
HRESULT normalizeVector ();
HRESULT crossproductOf2Vectors ([in] IMapGen3DVector* pFirstVector, [in] IMapGen3DVector* pSecondVector);
HRESULT dotproductWithVector ([in] IMapGen3DVector* pSecondVector, [out, retval] float* pRetVal);
HRESULT addVector ([in] IMapGen3DVector* pSecondVector);
HRESULT subtractVector ([in] IMapGen3DVector* pSecondVector);
HRESULT multiplyByScalar ([in] float sScalar);
HRESULT maxComponent ([out, retval] E3DVectorComponent* pRetVal);
HRESULT minComponent ([out, retval] E3DVectorComponent* pRetVal);
HRESULT duplicateVector ([out, retval] IMapGen3DVector** pRetVal);
};
interface IMapGen2DTexCoords : IDispatch
{
HRESULT s ([out, retval] float* pRetVal);
HRESULT s ([in] float sS);
HRESULT t ([out, retval] float* pRetVal);
HRESULT t ([in] float sT);
HRESULT isValid ([out, retval] VARIANT_BOOL* pRetVal);
};
interface IMapGen3DBoundingBox : IDispatch
{
HRESULT min ([out, retval] IMapGen3DVector** pRetVal);
HRESULT max ([out, retval] IMapGen3DVector** pRetVal);
HRESULT isValid ([out, retval] VARIANT_BOOL* pRetVal);
};
interface IMapGen4x3Matrix : IDispatch
{
HRESULT setMatrix ([in] IMapGen3DVector* pRow0, [in] IMapGen3DVector* pRow1, [in] IMapGen3DVector* pRow2, [in] IMapGen3DVector* pRow3);
HRESULT getMatrixRow ([in] int iIndex, [out, retval] IMapGen3DVector** pRetVal);
HRESULT setIdentity ();
HRESULT generateTranslationMatrix ([in] IMapGen3DVector* pTranslation);
HRESULT generateTranslationMatrix3s ([in] float sX, [in] float sY, [in] float sZ);
HRESULT generateScalingMatrix ([in] IMapGen3DVector* pScale);
HRESULT generateScalingMatrix3s ([in] float sX, [in] float sY, [in] float sZ);
HRESULT generateXRotationMatrix ([in] float sAngle);
HRESULT generateYRotationMatrix ([in] float |