MSTE - MegaStorm Tile-based Engine  v1.10
 All Classes Functions Groups Pages
MegaStorm Tile-based Engine guide

1. What's MegaStorm Tile-based Engine?

     MSTE is a cross-platform engine for developing tile-based games using CRM32Pro SDK library. Although in its origins it was created as a scroll engine, after some code revisions, it reached a higher level status than that and now it is a powerful, stable and easy to use tile-based engine. It can be used for creating almost any kind of 2D game. This software is licensed under the LGPL license.


- Level (the top level entity created by 1 or more layers)
Orthogonal view.
Any number of layers. It can also be modified at runtime.
Viewport and target surface can be modified at runtime.
Layers can be independent or group fixed supporting standard scroll or parallax scroll.
Auto-scrolling capabilities.
- Layer (contains the tile-based data among other features)
Can have any width and/or height (number of cells).
Can have any cell size.
Can use any number of tilesets and each one can be of any size. Larger tiles than cell size will extend at the top and right.
Alpha value attribute ranging from 0 (full transparent) to 255 (full opaque).
OnUpdateEnd event raised at the end of each layer update.
OnRenderEnd event raised at the end of each layer render.
Optional Smooth scroll rendering for getting a very smooth scroll effect
Adding your custom maps for managing any kind of data is done using C++  inheritance class
For debugging purposes, the cell limits can be rendered showing the cell grid.
- Tilesets (contains the tiles for the layers)
They are CRM32Pro_CTile objects. They can be stored on external files or in a DPF.
- I/O Formats
Native XML-based file format (MSM). The MSM can be an external file or stored in a DPF.
Import a BMP/PNG image into a layer or export a layer to a BMP/PNG external image.

Full support for TMX files from Tiled Qt 0.81 or greater

2. Supported platforms

Any Windows x86 or x86-64 version. Compilers supported:
 - Visual Studio (from 6.0 to 2010)
 - GNU GCC (from 3.x to 4.x). Also, you can use mingw32/devc++.

Any Linux x86 or x86-64 distribution. Compiler supported:
 - GNU GCC (from 3.x to 4.x).

MacOS X 10.x x86. Compiler supported:
 - GNU GCC (4.x).

3. Change log
  MegaStorm Tile-based Engine - Roberto Prieto
  Copyright (C) 2007-2012 MegaStorm Systems

    MSTE is a cross-platform engine for developing tile-based games using CRM32Pro SDK library.      
    This software is distributed under LGPL license.

15 September 2012 - v1.10
 - ExportImage() and ImportImage() now support OpenGL modes without crashing
 - ExportImage() can now export all the layers instead of only one
 - New TE_LAYERPOSITION_CENTER flag for SetLayerPosition(), it will center the requested position
   depending on the viewport
   but centered on the current viewport
 - When setting a new layer position, if the requested position is out of the layer bounds,
   we fix it to the bounds instead of do nothing as before.
 - New LogVerbosity() method for controlling the log output

5 August 2012 - v1.00
 - Renamed from MSSE to MSTE.
 - Render() method re-coded from scratch improving performance, smooth rendering and code structure
 - Update() method re-coded from scratch improving performance and code structure
 - Supports tilesets with tiles greater than cellsize of the mapdata
 - Improved TMX (Tiled Qt) loader:
   + If the tileset does not specify a trans value and has not alpha per-pixel enabled,
     Tiled Qt seems to enable 0 as colorkey but this loader just disables the colorkey.
 - KNOWN ISSUE #001: tileset used in a layer with alpha now remember its original value
17 July 2012 - v1.00 Beta
 - Supports opacity in layers
 - New SetLayerAlpha() and GetLayerAlpha() methods 
 - Improved TMX (Tiled Qt) import/export:
   + Special MSTE level features are exported/imported as properties
   + If there are not special MSM layer properties: update flag is set and render too if visible is 1.
     The layers will be linked at 1.0 ratio (no parallax effect)
   + Full support for opacity layers
 - Improved docs
 - Migrated old examples to the new engine and added a Tiled Qt example
30 June 2012 - v0.99
 - Requires CRM32Pro v5.21 or greater.
 - MoveLayer() and SetLayerPosition() methods have been improved.
 - New Pause flag to pause the scroll engine.
 - New Screen2LayerCell() and Screen2LayerAbsolute() methods.
 - Supports tileset gfx effects: rotation, mirror and flip 
 - Added TMX (Tiled Qt) support:
   + TMX v1.0
   + All layers must have the same width and height (in cells)
   + Only supports orthogonal maps
   + Special MSTE level features are exported/imported as properties
   + Import/Export:				
     . almost-full support for "flipped-tiles":
         mirror(flipped horizontally in Tiled Qt terminology): supported 
         flip(flipped vertically in Tiled Qt terminology): supported
         rotated 90 degrees: supported
         rotated 180 degrees: supported
         rotated 270 degrees: supported
         rotated 90 degrees + mirror: unsupported
         rotated 90 degrees + flip: unsupported
  + Import:
     . layers: update flag is always set and if visible = 1, render flag is also on
     . tilesets: with margin!=0 and spacing!=0 are converted to margin=0 and spacing=0
     . tilesets: image BMP or PNG (only), external .tsx are not yet supported
     . tilesets: only one image source
     . tilesets: individual tile properties are not supported
     . can read data enconding: csv and base64(uncompressed and compressed)		
  + Export:
     . layers: update flag is converted to visible 1
     . tilesets: are always stored in PNG format
     . data encoding is always set to csv
     . custom mapdata is exported as a property
18 June 2012 - v0.98
 - Logic and render operations have been decoupled following CRM32Pro philosophy.
 - Update() method only perform logic operations.
 - New Render() method is on charge of the rendering the output.
 - CellRender() and CellUpdate() can get full access to the scrollengine instance
 - Improved InfoPrint() method
 - All the scroll operations are done with double values for improved precision.
 - New ShowGrid flag for the layers and SetLayerGridColor() method.
 - New SmoothScroll flag for enabling a smooth scrolling effect. 
4 June 2012 - v0.96
 - Dynamic number of layers.
 - Status flags modified. Loop attribute removed as now is controlled via status flag.
30 May 2012 - v0.95
 - The level format has changed a lot and it is not compatible with previous versions.
 - Improve custom mapdata flexibility. 
 - Tilesets are now defined for the level and any layer can use any tilesets.
 - Tilesize must be equal or lesser than the cellsize of the mapdata.
 - Layers have a name.
 - Creation and modification dates at SaveLevel() and LoadLevel() are now working.
 - New methods: GetModificationDate() and GetCreationDate().
 - Improve XML parsing during loading and saving processes.
 - Library available in static and shared formats.
 - Available under LGPL license

September 2010 - v0.90b
 - Modified project tree.
 - Using new CRM32Pro v5.
 - Win32 version compiled using Visual Studio 2008.

July 2007 - v0.90
 - Added an easy, flexible and powerful way to use your own custom map.
 - Fixed some bugs.
 - First public version.
 - Includes five examples and documentation.

July 2007 - v0.81
 - Solved some problems on SaveLevel() and LoadLevel().
 - Fixed and variable tile size.
 - Full working engine.
 - Using new CRM32Pro v4.98.

June 2007 - v0.8
 - Save and Load native maps to XML or DPF/XML.

May 2007 - v0.7
 - Import maps from image files(BMP/PNG).
 - Export maps to image files(BMP/PNG).

April 2007 - v0.6
 - Native support up to 5 layers. Easy update to n layers.
 - Full and customizable parallax scroll support.
 - Independent or group fixed, with scroll or with parallax scroll layers.
 - Viewport and target surface can be selected in realtime.
 - OnDrawEnd function event for each layer.
 - MapData inherit to allow you the creation of custom layers.

4. License
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA

Author: Roberto Prieto Prieto
Web page:

Note that all library licenses (including the one for this library)
are located at /licenses directory. Please, include them on your applications.