What's New
Looking for just the new fixes/features? Here they are:
Version 1.4.6:
-  A Special Function that activated a series of other special functions would
   not play a media clip if one was associated with it. Fixed.
 -  Minimizing the layer quick view window would cause an error and could
   corrupt the window settings preventing it from displaying correctly until
   its registry entry was deleted. Fixed.
 -  In the map editor, drawing a sprite path that was very far off the edge of
   the current display could cause an overflow error. Fixed.
 -  A collision test between sprites that are more than 32767 pixels apart would
   cause an overflow error. Fixed.
 -  VBScript does not support SavePicture.  A feature has been implemented in
   GameDev's script hosting object to support this using code like:
   HostObj.DoCommand Array("SavePicture", CurrentDisplay.ScreenShot, "C:\A.BMP")
 -  GameDev now warns the user that the action is not officially supported when
   trying to create a tileset with more than 255 tiles in it.  Also, the
   dialog where categories and solidity are defined was causing a terminal
   error when dealing with such a tileset.  Now it displays an error message
   and fails more gracefully without terminating.
 -  Changing the name of a layer that had tile animations and paths linked to it
   would break all the references between the layer and its animations and
   paths. Now the references are maintained when a layer name is changed, and
   the tile animation dialog fails more gracefully if a reference to a layer is
   broken while it is active (due to a layer being deleted or whatever).
 
Version 1.4.5:
-  An error would occur in rare circumstances when multiple sprites reaching
   the end of their paths at same time activated functions to delete sprites. (fixed)
 -  Scripted sprites on background layers caused sprites on foreground layers
   to ALL be treated as scripted sprites. (fixed)
 -  Deleting a tileset would not check to see if the tileset was being referenced
   by an inventory item before allowing the delete. (fixed)
 -  Deleting a tileset and saving the game before navigating to the player
   settings dialog could result in inventory tileset references being shifted
   to refer to the wrong tileset. (fixed)
 -  Scripting wizard would error if recording was set to begin on a function
   that is triggered before gameplay begins. (fixed)
 
Version 1.4.4:
-  Map Editor was slow when drawing a small tile on a large screen without using tile
matching due to a bug in the map editor code.  After this was fixed, map editor operates
significantly faster in this situation.
 -  A sprite set to follow nearest sprite was ignoring solidity when there was no sprite
to follow.  Fixed.
 -  The Switch to Sprite function now properly implements switching to a sprite on another layer.
 -  Tile interactions that trigger special functions would not handle the Switch Map
function well.  Fixed -- it's now possible to have a tile properly trigger a switch map function.
 -  If "prevent player edits in map editor" option is checked in the options dialog, the map editor
will now prevent the Save Game function from loading a game, which would seriously alter the project.
 -  Error messages and handling improved.  Some errors were being cleared before they were
displayed.
 -  Creating an empty tile animation and saving the project would corrupt the project.  Fixed.
 -  GameDev now prevents the creation of duplicate sprite names within a map.  Attempting
to create a sprite whose name is already used by other sprite in the same map gives an appropriate
error message.
 -  The scripting wizard distributed with versions 1.3 through 1.4.3 was from version 1.2.
The correct version of the scripting wizard (with many fixes and features) is being distributed
with the 1.4.4 install.
 -  Improved validation of inventory items.  If an inventory display definition would access a
tile outside the bounds of the tileset, an appropriate error message is displayed.  (For example,
if you try to create an item that uses tile number 99 and is set to "increase icon index", if your
tileset only contains 100 tiles, 0 to 99, and the max quantity of the item is more than 1, you will get an
error message indicating that there aren't enough tiles for that.)
 
Version 1.4.3:
-  GameDev installation no longer overwrites Quartz.dll. When it did this,
   DirectX Media (DirectShow) no longer worked if the machine had an older
   version of DirectX installed than the machine that created the install
   (mine) which has DirectX 9.  (If you are experiencing this problem,
   installing version 1.4.3 will NOT fix it.  You must upgrade DirectX to 9.0
   or later, or delete Quartz.dll from your System32 directory, and re-install
   your current version of DirectX.)
 -  The install packager no longer creates scripts that install Quartz.dll
 -  The install packager has been upgraded to use and require NSIS version 2.0,
   which generates installers with a much nicer user interface.
 -  The player settings dialog had a typo for resolution "1024x786" which has
   been fixed to read "1024x768".
 
Version 1.4.2
-  Sprites that did something other than cycle to the first point at the end of
   their path were not working properly in some cases.  They would activate
   the end of path action immediately if the sprite was set to start somewhere
   other than its default location.  This has been fixed.
 -  Error checking on the interactions tab of the maps dialog has improved.
 -  The "Switch to Sprite" function was ignoring the setting "Follow path
   relative to sprite's starting point".  The setting was only being used for
   the create sprite function, but now both functions heed this setting when
   creating a new sprite.
 -  The quick tutorial has been updated to reflect new palette from version
   1.4.1.
 -  The "Follow flat floor" type sprite was fixed again to address problems
   seen in the Ethereal Peace project.
 -  When a platform is destroyed, the sprite riding the platform could have
   accumulated a lot of vertical velocity from gravity that was never reset,
   and would cause the sprite to fall very fast.  Normally it is reset when
   the sprite steps off the platform, but this did not occur if the platform
   was unexpectedly destroyed.  Now the vertical velocity of a sprite riding
   a platform is maintained at 0 when riding a platform.
 -  If no tileset was selected in the tilesets dialog, the program would abort
   if you tried to click the update button.  Now an appropriate error is
   displayed instead.
 
Version 1.4.1
-  The icon used for GameDev projects is now distinct from the icon
   used for GameDev.exe and GDPlay.exe itself.  (Restarting windows may
   be required, or you can go to Folder Options in windows explorer and
   pretend to modify an icon; then it will update all icons.)
 -  GameDev was designed to run GameDev.vbs (if it exists) from the
   GameDev.exe directory when gamedev starts.  However, this was only occurring
   if the "/e" switch was specified on the command line, so it wasn't a very
   useful mechanism for developing GameDev plug-ins.  Now it will run even when
   no parameters are present on the command line.  The only times it doesn't
   run is when another script is specified or "/p" is specified on the command
   line (to play a project without going into the editor).
 -  Bug fix: The map editor was hard coded to scroll based on a 640x480
   resolution, so in 1024x768, the map would start scrolling long before the
   mouse reached the edge of the display.  Now it works as you'd expect.
 -  Bug fix: Pressing alt-tab at the same time a message was appearing would
   cause an error (this was possible if, for instance, you forgot to set a
   message function to activate only on initial touch, and tried to use alt-tab
   to get out).
 -  Version 1.4.0 altered the behavior of initial touch functions so they
   would not activate if the function was at the location where the player
   starts out on the map.  This has been reverted to the old behavior and
   improved to ensure that such a function is ALWAYS activated.
 -  Bug fix: Sprites designed to "Follow flat floor" would sometimes freeze when
   they hit a left wall if they started out in the air.  Now they are sure to
   keep moving if possible.
 -  The default color palette in the tileset editor has a much better set of
   colors now (same number and layout, just different colors).
 -  The scripting docutorial had a reference to "line 386" of GoldYoink.vbs, but
   the reference was wrong.  Fixed to refer to "line 396."
 -  The help file for GameDev has an entry for GoldYoink.vbs so you can view the
   script with line numbers by itself.  This link has been modified so that the
   script appears in a window of its own, so you can view other topics at the
   same time.
 -  Step 1 of the tutorial was referring to old color positions in an old
    palette.  It has been modified to refer to the newest palette colors.
 -  Bug Fix: Adding a sprite without specifying the required parameters used to
    add a blank sprite definition if a path was selected.  Now if you get an
    error message when adding a sprite, you can be sure that nothing was
    added to the sprite list.
 -  Radeon video cards have problems with GameDev.  Version 1.4.0 made the
    problems worse: games with a graphical title screen would be unable to
    properly display messages.  1.4.1 fixes that problem. Using catalyst
    drivers version 3.4 (or later, hopefully) GameDev 1.4.1 seems to work
    without problems.
 -  Automatically unload tilesets while switching maps.  In version 1.4.0
    and earlier, if your project contained more than 50 tilesets, you could
    hit the limit when playing through the whole game when the 51st tileset
    was loaded because tilesets were never unloaded once they were loaded.
    Version 1.4.1 fixes this problem and also minimizes memory usage in this
    regard.
 
Version 1.4
      * Items marked with an asterisk indicate possible backwards compatibility 
      issues. A game may not play exactly as it did before, but largely, there should 
      be no real issues with these changes.
      Main New Features
      
         - 
         New "Loading Screen" functionality allows specification of a 400x250-pixel 
         bitmap to display with a progress bar while loading the project GDP and map 
         files. (Empty value behaves as before.)
         
 - 
         Display of inventory can now be selective for maps. Each map can display a 
         specific subset of the available inventory. (By default, all inventory is 
         displayed, as before.) Note, if the total number of inventory item types 
         available is greater than 255, any items beyond the 255 limit will 
         automatically be displayed.
         
 - 
         Tile interactions can now interact with quantities of inventory greater than 1 
         (a single tile can alter an inventory quantity by any number).
         
 - 
         Multiple resolutions are now supported. Games can be played in 320x240, 
         640x480, 800x600 and 1024x768 resolutions. Map Editor will use the same 
         resolution except for 320x240 mode, which will display the map in the top left 
         quadrant of a 640x480 display.
         
 - 
         Tile interactions can now trigger special functions.
         
 - 
         New concept of “trigger points” allow you to create sprites, copy sections of 
         map or teleport the player relative to the trigger point instead of having to 
         specify an absolute or player-relative coordinate. The trigger point is set 
         when the player touches an interaction tile, when a sprite terminates at the 
         end of a path activating a function, when two sprites collide, and when the 
         player touches a special function (all actions that can trigger special 
         functions). When a tile interaction sets the trigger point, it is set to the 
         tile’s location (in pixels). When a sprite reaches the end of a path and 
         activates a function, it is set to the last position of the sprite. When two 
         sprites collide, it is set to the coordinate of sprite A. When the player 
         touches a special function, it is set to the coordinate of the player. This can 
         be used, for instance, to create an explosion sprite at the location of two 
         sprites colliding (even if neither are the player sprite).
         
 - 
         There is a new activation parameter for special functions called “Global” that 
         allows the function to be checked regardless of the player’s position. It acts 
         as if the function covers the entire layer, but the nice thing is, it won’t be 
         drawn over the entire layer, blocking your view of other functions when you are 
         looking at functions. Also, it’s a bit more optimized since it knows the player 
         is always touching it. This will be handy for creating functions that only 
         require button presses to activate, like a button to drop a bomb, no matter 
         where you are.
         
 - 
         Save game support has been added as a new special function. The new Save/Load 
         game function allows you to save a game under a specified name, load a game of 
         a specified name, delete a game of a specified name, activate another function 
         if the specified game exists or activate another function if the specified game 
         does not exist. The specified name is defined as part of the function, so the 
         available save game “slots” are defined by the game developer, but there are an 
         unlimited number of slots (determined by how many different names are used). 
         Saved games are perfect and, when loaded, should restore exactly to the point 
         where the player left off.
         
 - 
         Sprites can now follow paths relative to their starting point. For example, if 
         you define a path that follows an arc to the right, you can now create that 
         sprite anywhere and it will follow that arc to the right of its starting point 
         instead of heading toward the paths absolute position. This could be handy, for 
         example, to allow the player to throw items no matter where the player is 
         standing (no scripting required).
         
 - 
         Paths can now have pause points in them. Pressing P while creating a path 
         allows you to enter a number specifying for how many frames the sprite will 
         become inert after reaching that point. Delay points can also be added and 
         deleted in the sprites and paths dialog.
         
 - 
         Special functions can now be triggered based on any of the buttons configured 
         in the controller configuration screen instead of just up, down and button 1. 
         The new buttons available for activation parameters are left, right, button 2, 
         button 3 and button 4.
         
 - 
         It is now possible to remember the current map when switching to another map. 
         The map is put on a “stack” so that you can return to it later by activating 
         another “Switch Map” function set to “<Return to old map>”. There can be 
         up to 5 remembered maps. This is handy for cases where there are multiple ways 
         to get to a map and you want to return to wherever you came from… particularly 
         useful for a menuing system (jumping quickly to a map where you can select a 
         save game or something).
         
 - 
         It is now possible to switch to a map without re-initializing the sprites. 
         Don’t want to forget that the player had killed the big boss monster on this 
         map? Just un-check the box that restarts the sprites in the switch to map 
         function.
         
 - 
         Media clips can now be interrupted and re-triggered. Before, if a media clip 
         was triggered and it was already playing, you couldn’t hear anything new, but 
         now you can check the “Allow interrupt/restart” box to allow such clips to 
         re-play from the start when this occurs.
         
 - 
         There is a new auto-validation setting in the options dialog (turned on by 
         default) that determines whether a project is automatically validated before 
         game-play begins. Right now this just confirms that all your sprites have at 
         least one frame in each available state.
         
 - 
            When triggering a function based on button presses, it’s now possible to 
            require multiple buttons be simultaneously pressed. By checking the “All at 
            once” box, you can specify that the function will only activate if all the 
            checked buttons are pressed at once instead of when any of them are pressed 
            alone.
 
         - There are 3 new "Auto delete" settings available in the motion
             tab of the sprites and paths dialog.  They allow a sprite to be deleted
             when it hits a solid (when its velocity is altered because of solid pixels
             on the map).  There are 3 new variations combining this criteria with
             existing criteria.
 
         - Pressing a button to trigger a function can now restrict the triggering of
             the function to only the initial press instead of repeatedly triggering the
             function as long as the button is pressed.  (This is a similar idea to
             "Initial touch only" but applies to the button press instead of
             the player touching the function area.) This is accomplished by checking the
             "Initial press only" option in the Activation Paremeters for a
             special function.
 
         - When specifying which buttons can trigger a function, it is now possible to
             exclude key combinations where extra buttons are being pressed.  For
             instance, if you have a function to shoot left and another to shoot right,
             but you don't want to allow the player to be able to shoot left and right
             at the same time, then make sure that the activation parameters for the
             function that shoots left has the "And nothing else" option
             checked.  If the function is activated by a button press, then this
             option will ensure that only that button is being pressed; if others
             are also being pressed, then the function will not activate.
 
         - Tileset graphics may now be up to 128x128 pixels per tile as
             opposed to the old limit of 64x64 pixels.  When the width or height of
             tiles in a tileset exceeds 64, the tileset editor will come up in 800x600
             mode instead of 640x480 mode.  That means your video card better support
             800x600 in the color depth you have selected for the tileset editor if you
             want to edit tiles larger than 64x64.  A number of tile display windows
             throughout GameDev have been enlarged to allow display of the larger tile
             size.  Perhaps the most notable of these is the support for larger graphics
             in the Sprites and Paths dialog.
 
         - New sprite motion types are available in the "Controlled by"
             dropdown list on the motion tab in the Sprites and Paths dialog.
             
                - Path vector - Whenever a sprite of this type it created, it
                    immediately takes on an initial velocity determined by the first
                    two points in its path.  The sprite's direction will be determined
                    by the direction from the first point on the path to the second
                    point on the path.  The speed will be determined by the sprite's
                    movement speed setting.
 
                - Follow path random direction - Same as "Follow approximate
                    path" except the sprite will randomly change direction on
                    its path.
 
                - Follow path random points - Same as "Follow approximate
                    path" except each time the sprite reaches a point in the path
                    it will pick the next point at random instead of going to the next
                    point on the path.  The points that it picks from are determined by
                    the distance between the first and second point on the path.  If
                    the first point is 50 pixels from the second point, the sprite will
                    only pick a point within 50 pixels of the current point to head
                    toward next.  (Only points from the current path are candidates.)
 
                - Strict path random direction - Same as "Follow path random
                    direction" except this follows the path exactly instead of
                    approximately.
 
                - Strict path random points - Same as "Follow path random
                    points" except this follows the path exactly instead of
                    approximately.
 
             
          
         - There are now twice as many colors in the palette in the tileset editor
             (4 rows of 30 instead of 2 rows of 30).
 
      
      Minor Improvements / Behavior Changes
      
         - 
         Optimized special function handling. Now you can have any number of special 
         functions created with the “Add function” button (not positioned within the 
         map) and they will not be looked at during every frame; only when activated by 
         another trigger. Only functions within the bounds of the current layer will be 
         tested for player touching during each frame.
         
 - 
         Sprites now terminate when outside the visible map window instead of when they 
         would be off the entire screen space. Before, a sprite set to be deleted when 
         “off display” would remain active until it left the boundaries of the physical 
         screen rather than the map window.*
         
 - 
         When using the “repelling” functionality of a sprite collision, you can now 
         click both “A Repels B” and “B Repels A” and get desired results. However, A 
         repelling B will take precedence. The new behavior is that, if B is blocked by 
         solid tiles, it will push back on A, preventing A from pushing it any farther, 
         and preventing A from walking through B.*
         
 - 
         Instructions are displayed on screen while creating a path in the map editor.
         
 - 
         The frame rate limit set in the player settings dialog is now applied to the 
         map editor also.
         
 - 
         Special functions and selection rectangles in the map editor are now clipped to 
         the edges of the map display instead of being allowed to draw in the area 
         between the edge of the map and the edge of the screen.
         
 - 
         The volume slider on the media clip management dialog now adjusts for the fact 
         that the volumes are logarithmic. You should be able to get a more linear 
         volume out of this slider now like you do with the standard Windows volume 
         control.
         
 - 
         Quick Tutorial has a new note about using Alt-Tab.
         
 - 
         New checkbox in tile import window to snap the import selection rectangle to 
         tile-sized offsets.
         
 - 
            The tileset management dialog will now prevent you from removing a tileset from 
            the project if the tileset is in use by sprite definitions or map layers.
 
         - GameDev.exe and GDPlay.exe will automatically attempt to "register"
             (in the windows registry) BMDXCtls.dll and ScrHost.dll on startup. This is
             required for proper operation. That means you should now be able to
             un-install a game package created with the install packager, and then
             run GameDev or another game without errors, if BMDXCtls.dll and ScrHost.dll
             are in the same directory as the EXE.
 
         - There is now a way to hide the splash screen on start up if you really want
             to do that.  Contact me for more information.
 
         - MSComCtl.ocx is now delivered as part of a self-installing game package
             because it is required by the progress bar for the loading screen in
             case the project uses a loading screen.
 
         - You can now use the shift-key when selecting tiles (in the sprites and paths
             dialog or any of the many other dialogs that have a tile selection window).
             This allows you to select a range of tiles with a single click.  When you
             shift-click a tile, that tile will be selected along with all the tiles to
             the next nearest selected tile.
 
         - Selecting the "Activate series of special functions" effect would
             sometimes display an invalid function in the activation sequence, if the
             function used to be a different type.  Now it initializes to blank instead.
             
 
         - When clicking on a special function whose effect has not been defined,
             GameDev used to leave the existing effect listed, but now it clears the
             selection indicating no effect has been selected for the current function.
             
 
      
      Bug Fixes
      
         - 
         Unhandled (terminal) error could occur if tileset bitmap file was not available 
         when attempting to edit categories on that tileset. Now a proper error is 
         displayed.
         
 - 
         Errors could occur if a sprite collision triggered switching to a new map. Now 
         these potential errors are avoided, allowing sprite collisions to switch maps 
         seamlessly.
         
 - 
         Map file loading was incorrect, but did not seem to cause errors for normal 
         projects. It did, however, result in an infinite loop when loading a corrupted 
         project in some cases. (ie. A project saved by an old version of GameDev and 
         manually edited to have a newer version number or vice versa).  This has been
         fixed.
         
 - 
         If a sprite was set to be automatically deleted when it was off the map or 
         display and also set to be deleted when it was motionless, there would 
         occasionally be an error: if the sprite was the last sprite in the array, the 
         game would terminate with an error message, otherwise additional sprites might 
         be improperly deleted. This has been fixed.
         
 - 
         Clicking the button to update a map in the maps dialog now validates the map 
         view parameters before updating the map. Before, this validation was only being 
         done on the creation of a new map.
         
 - 
         Exiting the game while a video clip was playing would cause errors as GameDev 
         attempted to “fade out” the video. Now when you quit a game, any video clips 
         that are playing will stop abruptly to avoid this error.
         
 - 
         Pressing a button to cancel the playback of a modal media clip was checking the 
         wrong flag (it was checking of the clip was suspending other clips instead of 
         if it was modal). Now you can properly cancel modal media clips with a button 
         press.
         
 - 
         Inventory quantities exceeding 32767 could be drawn incorrectly or cause an 
         error.  This has been fixed.
         
 - 
         Special functions that displayed a message were improperly sizing the message 
         frame when the message contained hidden text (text inserted by the message 
         wizard to format the message). This has been fixed.
         
 - 
         If there is an error storing the player settings after clicking OK on the 
         Player Settings dialog, it will now stay open instead of closing.
         
 - 
         Left/right sprites with gravity would sometimes jump for no reason immediately 
         after landing due to a glitch in the sprite’s ReactToSolid function. This has 
         been fixed.*
         
 - 
         The flag to reset a sprite’s current frame when it stops moving was operating 
         incorrectly when the animation speed was not correlated with the movement 
         speed. This has been fixed.*
         
 - 
         Some bugs in the sprites and paths dialog have been fixed including one that 
         causes a sprite to be incompletely loaded when it contains more states that the 
         previously loaded sprite.
         
 - 
         Tile import functionality would not import a complete tile unless it was 
         entirely visible in the import selection window. Now it will import properly 
         even if the tile is partially scrolled off the window.
         
 - 
         Tile import window now reports the correct coordinates in the title bar (they 
         were incorrect when the window was scrolled).
         
 - 
         The tileset re-slicer would not import the proper number of columns or rows for 
         certain bitmap widths and heights. The math rounding problem has been fixed.
         
 - 
         Attempting to edit a tileset whose bitmap file could not be found would cause a 
         terminal error. Now the proper “nice” error message is displayed instead.
         
 - 
         Attempting to save a tileset that was already part of the project but whose 
         image file could not be found used to cause a terminal error. This has been 
         replaced with a nicer non-terminal error.
         
 - 
            Attempting to open (double-click) a tileset whose image file could not be found 
            used to cause a terminal error. This has been replaced with a nicer 
            non-terminal error.
 
         - Creating a new map would not properly store the background color for the
             new map until you used the update button. This has been fixed.
 
         - In the player settings and inventory dialog, switching the tileset for an
             inventory item or switching from an inventory item using one tileset to
             an inventory item using another tileset or no tileset was not showing up
             properly.  This has been fixed.
 
         - After initially entering the map editor, if you tried to copy a block of tiles,
             and the end drag point is above or to the left of the starting point, an error
             would occur.  This has been fixed (the copy is silently cancelled).
 
         - A left/right type sprite with separate accelerating states and drifting states
             would sometimes appear as accelerating when it was drifting.
 
         - The tileset window in the sprites and path dialog would "remember"
             an old tileset after loading a new project when it should have been cleared
             out. Fixed.
 
         - Creating a new tile animation was properly preventing a duplicate name, but
             it was still possible to rename an existing animation to a name that was
             already in use.  This has been fixed.
 
         - Tile matching definitions would not prevent duplicate names.  This resulted in
             the inability to access a definition if it had the same name as another, but
             wasn't the first one.  Now GameDev prevents duplicate tile matching
             definitions.
 
      
      Effects on Scripting
      
         - 
         NewInteraction method added to Engine object (global method) to create new 
         Interation objects.
         
 - 
         NewMatchDef method added to Engine object.
         
 - 
         NewPlayer method added to Engine object.
         
 - 
         New values "frmLoadScreen" and "frmMapInventory" added as valid inputs to 
         GameDevForm property.
         
 - 
         New values "Interaction" and "MatchDef" added as valid inputs to NewGameDevObj 
         function.
         
 - 
         Map object has new methods SerializeRuntime and DeserializeRuntime to store and 
         load runtime-only information like sprite instances and positions.
         
 - 
         Sprite definitions are now case-sensitive when you refer to them by name using 
         the SpriteDefs property of the map class.*
         
 - 
         New SpriteDefExists property on a map object indicates if a sprite definition 
         exists by the specified name on that map.
         
 - 
         Media clip object now has a “StartClip” function that properly handles the 
         “allow interrupt/restart” flag properly. Use this instead of the “Play” method 
         for most cases.
         
 - 
         New InsertPoint method on a path allows insertion of a path point anywhere 
         along a path without having to recreate the path from the beginning. (Delay 
         points have negative X corresponding to delay time.)
         
 - 
         New bIgnoreValidate property on Player object allows script to turn off 
         automatic validation if they know the project looks invalid, but probably is 
         valid (GoldYoink version 1.1 and later uses this).
         
 - 
         New playback resolution properties are exposed on the Player object. 
         “PlaybackResolution” can be any value from the Resolution Enum (1=320x240, 
         2=640x480, 3=800x600, 4=1024x768). New read-only properties 
         “VerticalResolution” and “HorizontalResolution” will return the respective 
         values based on the Resolution setting.
         
 - 
         SerializeRuntime methods exist on Map and Player objects to serialize the data 
         that is stored for a saved game. Only the data not saved by standard save 
         methods are serialized by these functions.
         
 - 
         New method “SaveRuntime” on the project object effectively saves the game in 
         the specified slot name. “LoadRuntime” loads a specified save-game from a slot. 
         “DeleteSave” deletes it.
         
 - 
         New “Validate” function on the project returns a string containing any 
         validation errors that may exist.
         
 - 
         New “SetLoadingStatus” method on project object manipulates the loading screen 
         (I see no real use for this from script).
         
 - 
         New methods “PushLocation” and “PopLocation” on the player object allow you to 
         remember and return to a map (up to 5).
         
 - 
         New Method “PrepareMapInventory” is called before playing on a map to prepare 
         the cached array of inventory items that will be displayed on this map. (If you 
         switch maps manually, you may have to call this yourself.)
         
 - 
         The following new Enum values are available to use with the Flags property of a 
         SpecialFunction object: INTFL_ALLBUTTONS (mask returns only button-related 
         flags), INTFL_REMEMBER_SPRITES (0=“Restart Sprites”), INTFL_REMEMBER_MAP. Flags 
         for the Load/Save Game function: INTFL_LOADGAME, INTFL_CHECK_EXIST, 
         INTFL_IF_NOT_EXIST, INTFL_DELETE_GAME (default is save game when all flags are 
         0). INTFL_RELATIVETOTRIGGER.
         
 - 
         The new Enum value INTFL_ACTIVATE_FUNCTION can be added to the Flags property 
         of an Interaction object to indicate that its media clip property is actually a 
         special function name. (New property “ActivateFunction” returns the same string 
         as “Media” property.)
         
 - 
         The following new Enum values are available for use with the SpecialFunction 
         object’s new Flags2 property: INTFL2_ALLATONCE, INTFL2_ACTONBUTTON2, 
         INTFL2_ACTONBUTTON3, INTFL2_ACTONBUTTON4, INTFL2_ACTONLEFT, INTFL2_ACTONRIGHT, 
         INTFL2_ALLBUTTONS (mask returns only button-related flags), INTFL2_GLOBAL
         
 - 
         SaveGameFuncName property on SpecialFunction object returns the name of the 
         special function that can be activated by a “Save/Load game” function. (It is 
         stored in the same location where a sprite name is stored for other function 
         types.)
         
 - 
         New enum value FLAG_RELATIVE_PATH available for use with the SpriteDef’s Flags 
         property.
         
 - 
         New WaitCounter property on sprite object returns a negative value 
         corresponding to the X coordinate of a delay point in a path. (The x coordinate 
         is a negative number indicating how many frames to wait). When WaitCounter 
         reaches X, sprite stops waiting.
         
 - 
         Sprites have new PathOffsetX and PathOffsetY properties indicating the offset 
         of their starting point from the path starting point (if the relative path flag 
         is set).
         
 - 
            New SetAll method in a TileGroup object allows you to set all bits of a tile 
            group to true (add all tiles to a group or, in the case of map inventory, add 
            all items to the map’s inventory display).
 
         - New TranslateCtlActions method in the Player object will convert action flags
             as represented by CtlActions and the eActionBits enum into Special Function
             flags and the INTERACTION_FLAGS and INTERACTION_FLAGS2 enum.  (Note, the flags
             representing buttons in the INTERACTION_FLAGS enum do not overlap the flags
             representing buttons in the INTERACTION_FLAGS2 enum, so they can be combined
             into a single bit map without losing any informaton.)
 
         - There is a new bHitSolid property on every sprite object that gets set to
             True during the call to ReactToSolid if the sprite hits a solid (used for
             the new auto-delete options for hitting solids).
 
         - There is a new NextRandomPoint function on every sprite object that returns
             the index of a point that the sprite can head toward next if it is one of
             the types that follows paths randomly.
 
         - The tileset editor class ("TileEdit") has new properties to
             describe the screen resolution being used: EditResolution,
             HorizontalResolution and VerticalResolution.
 
      
      * Items marked with an asterisk indicate possible backwards compatibility 
      issues. A game may not play exactly as it did before, but largely, there should 
      be no real issues with these changes.
Version 1.3.1
- Prevent deletion of tile categories and solidity definitions that
    are in use. (Instead of allowing it and having serious errors
    later.)
 
- Improved error handling in a few places to prevent terminal errors
 
- Layer Quick View would have a terminal error after playing the map
    if it was left active.  This has been fixed.
 
- Attempting to move a layer down in the layer sequence without selecting
    a layer had a terminal error, which has been fixed.
 
- Moving a layer in the layer sequence now keeps the layer selected as
    it moves through the list.
 
- A function that was set to activate on startup and remove after use
    would cause an error on startup after being activated.  This has
    been fixed.
 
- After editing a tileset (without saving it), playing the game and then
    editing the map could lose the changes to the tileset.  This is fixed
    
 
- Jump height was sometimes editable even when "Up requires 
    solid" was
    not checked.  Now Jump height follows movement speed when this is not
    checked because it affects vertical movement speed of any sort.
 
- The fixes for the scripting wizard in version 1.3.0 were not compiled
    into the released binary files, but this has now been done for
    1.3.1
 
- Attempting to play a project containing media clips without saving it
    at all would result in an error.  This has been fixed.
 
Version 1.3
    - Fixed support for large maps (again?) so it's possible to have map
        that's 32,767 tiles wide or high instead of just 32,767
        pixels wide or high.
 
    - Introduction of GDPlay.exe which is a runtime-only version of
        GameDev.exe.  Use GDPlay.exe with the install packager to create
        an install for your game that doesn't also install obvious support
        for editing the game.  It also makes for significantly smaller
        install packages.
 
    - New special function type to alter inventory implemented.
 
    - Functions are now exposed to script that convert the project to
        and from XML (possibly handy for saved game support).
 
    - Browse button added to the Create Shorcut dialog to browse for
        GDP file.
 
    - Prevent duplicate naming of tile Animation Definitions (AnimDefs).
 
    - Fixed error when attempting to shoot in end level of sample game.
 
    - Fixed the "Play Clip" button on the Media Clips dialog to
        automatically reset when a clip finishes.
 
    - New flags added on sprite dialog (Frames tab) to allow correlation
        between animation speed and movement speed to be optional.
 
    - New flag on sprite dialog (Frames tab) to allow reset to first frame
        when sprite stops moving.
 
    - Sprite dialog Path selection improved: Selecting a new path will not
        clear the current template selection if it can be retained now.
 
    - Selecting New or Open from the main file menu now closes all open
        child windows.
 
    - New button in Maps dialog (Special Functions tab) to allow special
        functions to be renamed.
 
    - Selecting "Follow Nearest Sprite" now allows you to specify which
        classes of sprite you are interesting in following.
 
    - Scripting wizard would generate incorrect code for an 8-state sprite
        that had separate drifting and accelerating states.  This has been
        fixed.
 
    - Updating a media clip and the reference to the map's background music
        had a problem which has been fixed.
 
    - Jump velocity is a new separate setting on the Motion tab of the
        Sprite dialog instead of using the movement speed to determine the
        jump height.
 
    - When a map or layer is renamed in the maps dialog, it is now
        immediately reflected in the map or layer listbox.
 
    - New frame rate limiting functionality added for more consistent
        performance accross a range of system performance.  See Player Settings.
 
    - New field in Movement tab of Sprite dialog that allows you to
        set when a sprite will be automatically deleted (when off screen,
        etc).
 
    - New field in Movement tab of sprite dialog to allow specification
        of what happens when a path-following sprite reaches the end of its
        path (jump to start, cycle to start, delete, activate functions).
 
    - Error occurred when selecting blank area after tile number 256 in
        map editor.  This has been fixed.
 
    - New event OnFrameStart added which executes even when the game is
        inactive (even when OnAfterMoveSprites etc is not executing).
 
    - Now it's possible to disable the script timeout by setting
        HostObj.ScriptTimeOutSeconds = 0.
 
    - New checkbox in Special Function Activation Parameters tab that
        allows any special function to raise an event for script.
 
    - New field in Player Settings dialog to allow specification of a
        default play script that will be executed with the project if started
        with "/p" on the command line and no other script is
        specified.
 
    - Re-select the current tileset after importing a tile into it.
 
    - New field in Maps dialog to specify the background for a map -- the
        color to draw around the edge of the layers and behind the inventory
        when the specified map is active.
 
    - New special function type to activate a series of other special
        functions.
 
    - New button on Special Function tab to create a "dummy"
        special function off the edge of the map.  This allows quick creation
        of functions that are activated only by other functions or
        collisions and do not need a specific location.
 
    - Extra large sprites are now handled better in the Sprites dialog
        rather than displaying an error.  Although I don't officially claim
        they're fully supported, they're more likely to work now if you
        really want to use them.
 
    - TilePic tool had been integrated into GameDev tools menu -- allows
        re-slicing of tilesets, dividing up into individual files or combining
        files into single bitmap.
 
    - Install packager incorporated into GameDev tools menu.
 
    - Using Ctrl key it's now possible to select multiple sprite frames
        and drag them into the state preview all at once in the Sprites
        dialog.
 
    - "Display Message" Special Function enhanced with the
        abililties to change font, color, background picture, size.
 
    - New Message Wizard assists in creating special functions to display
        messages.
 
    - New "Quick View" button in layers tab of Map dialog allows
        quick viewing of individual layers in a window, as well as ability to
        zoom in and out and see sprite and path names.
 
    - New option when switching sprites (Special Function) to retain
        old velocity and state, etc. when applicable.
 
    - Tileset editor would not keep the "lclip" picture clean
        when repeating copy command.  Now clip is cleaned up before copy
        command finishes.
 
    - New "A Repels B" functionality in sprite collision dialog
        provides much better sprite "repellance" that old A & B swap
        velocities.  Sprites can be more solid.
 
    - Using the "Remove function after use" option now works OK
        on functions that switch to another map.
 
    - Switching to another sprite and then back to the original player
        sprite now functions better than before.
 
    - Improved general speed/efficiency.
 
    - All documentation reviewed and updated.
 
Version 1.2
    - The collision definition dialog
        now allows you to add inventory conditions to a collision
        test. It also allows you to add sound effects (media
        clip) when a collision test is activated.
 
    - Player map interactions now
        include support for sound effects.
 
    - Special functions can now be
        activated once before gameplay begins -- useful for
        things like title screens.
 
    - The "Display a message" special function now
        allows you to display a picture instead of just text.
 
    - A new special function exists to delete sprites.
 
    - The Create Sprite special function allows you to limit
        the number of sprites.
 
    - Special functions from all layers now appear in the map
        editor dialog whereas previous versions restricted this
        list to functions on the player sprite's layer because
        only the player sprite can trigger a special function.
        Now all are displayed so you can at least delete them, if
        not use them as a function activated by game startup.
 
    - Create shortcut files to play games with the new Make Shortcut dialog.
 
    - There's a new Quick Start Tutorial in the Help menu.
 
    - There's a new Options dialog
        (see the View menu) to allow you to:
            - Disable unwanted edits by the player sprite in
                the map editor
 
            - Toggle a warning message displayed before playing
                the game from the editor environment
 
            - Toggle the storing of the project in memory
                before play so that it can be restored after play
 
            - Specify a default color depth for map and
                graphics editing.
 
        
     
    - Great speed improvements in the number of sprites you can
        have on the map (3 to 4 times as many).
 
    - Built in support for exporting and importing the project
        and maps as an XML file.
 
    - Memory-resident backup of the project (as XML string)
        during the play command allows restoring the state of the
        project after play.
 
    - Toolbar on the main project window.
 
    - Miscellaneous bug fixes.