This release is a major upgrade, so users should read these notes and the new entries in the DM Reference before using any new features. Older games will continue to work, but if they are recompiled in the new version you will need to make a minor change to ensure they still work the way they used to.
Backward-compatibility
If you are recompiling an older project in the new version, you will probably want to add this line to your code:
world/map_format = TILED_ICON_MAP
Changes to our icon functions could cause old worlds to no longer work correctly once they are recompiled unless this line is added. If you want to maintain compatibility with older versions of Dream Maker (such as when several people are working on a project together), use this instead:
#if DM_VERSION >= 455 world/map_format = TILED_ICON_MAP #endif
See the section on "Native icons" below, and the Reference entry for world.map_format, for more information.
Map editor
Because the old behavior of looking for a fully opaque icon to decide whether replacing or overlaying a turf was appropriate does not apply in isometric mode, the behavior for the Click and Ctrl+Click actions has been switched. Now, Click is a replace and Ctrl+Click is an insert.
The map editor has been upgraded to handle isometric maps. In the process we have made a few improvements. Most notably, the editor now shows pixel offsets.
A new set of "Nudge" commands has been added to the right-click menu for any object on the map. If you have an active object currently selected on the map, you can use the Shift+arrow keys to adjust pixel_x/y, and + or - to adjust pixel_z.
The map editor's object-browser now only displays the base object, instances of the object created during the session (via the instance-editor), and instances which have the "tag" variable set. So if you want to keep track of a unique instance after you close the map, set its "tag" in the instance-editor.
Custom icon sizes
The new world.icon_size var can be used for displaying larger tiles in your game. Normally this is set to 32, but it can be smaller or larger as you wish. It can also be a non-square size, like "32x64". The largest size you can use is 256 pixels in either direction.
Because bigger sizes can be used, you can now also use bigger pixel offsets. The pixel_x, pixel_y, and pixel_step_size vars, in addition to the new pixel_z, now support values in a range of about +/-30000 instead of +/-127.
The icon editor now supports editing icons bigger than 32x32, up to 256x256. Icons with larger sizes can still be handled via pasting from external editors.
To find the size of an icon (in pixels), the new /icon/Width() and /icon/Height() procs can be used.
Isometric mapping
(Note: Isometric is not 3D; it is an illusion of 3D, using 2D images arranged in a special way. There are limitations and behavior changes that go along with this mode, so please be sure to read the Reference for world.map_format thoroughly.)
By setting world.map_format to ISOMETRIC_MAP (it is set to TOPDOWN_MAP by default), you can tell BYOND to display maps in isometric format. In an isometric map, tiles are displayed in a diamond pattern where the north side of the map points to the northeast of the screen. Isometric maps behave just like regular tiled maps as far as the game code is concerned. A good icon_size for isometric is 64, but you can use bigger icons. In a 64x64 icon, the base is a 64x32 diamond but the extra 32 pixels above can show vertical details. You could easily use a 64x96 icon size for taller structures.
Layering is affected by this mapping mode, since to display isometric icons properly their position relative to the viewer must be taken into account. Tiles that are "closer" are drawn above "farther" tiles, regardless of layer. Within the same tile, the atom.layer var still matters. Pixel offsets, whether manual or from gliding between tiles, affect which tile an atom "belongs to" for layering purposes; when between tiles, the atom will always be drawn as part of the nearer tile. Because of this, during diagonal movement it is also possible for a moving atom to temporarily appear "above" a nearer tile, so keep that limitation in mind when designing your game. You should see no anomalies if your game doesn't allow players to move diagonally around corners. (SuperSaiyanX found a workaround that could be helpful; giving your dense turfs a higher layer than the mob should eliminate this most common case, since when moving diagonally behind a turf a mob temporarily becomes part of that turf.)
To show vertical height, two new vars have been added: atom.pixel_z, and client.pixel_z. An atom with a positive pixel_z value appears to be higher above the isometric plane, while a negative value will place it lower.
In isometric mode, world.view or client.view is used to define the minimum number of map tiles you will see, not the screen/HUD size which is calculated from client.view. Extra map tiles are shown to fill out the screen size. HUD objects still use screen coordinates, so 1,1 is still the lower left. HUD objects appear above the isometric map, regardless of layer.
Since it may be desirable in some games to use a topdown map for some situations (like a special battle map), you can add TOPDOWN_LAYER to any atom's layer--e.g., TOPDOWN_LAYER+TURF_LAYER--to make it appear in topdown mode. Topdown and isometric tiles really aren't meant to be mixed, but if they do mix you'll see topdown tiles always display above isometric tiles, just like screen objects do. The best way to use this is to apply TOPDOWN_LAYER to every tile in a certain part of the map that the players can't walk to. This special layer has a very high numerical value.
Native icons
This is the first BYOND version to support "native" icon sizes. That is, you can mix different icon sizes freely within the same project. For any given icon file you still have to have the same size for all the individual images within it. The icon will always be "anchored" to the southwest corner of the map tile where it is displayed, so for instance in a topdown view with a 32x32-tiled project, a 64x96 icon extends one more tile to the east and two more tiles to the north.
The display of native icons is purely visual. Bumping, etc. will not work for the "extra" tiles covered by the icon. To avoid irregularities in how the icons display, usually you should make big icons dense. In isometric mode, a small mob walking onto a big turf or vice-versa is particularly noticeable and will show artifacts. This is unavoidable because isometric is not true 3D and there is no ideal way to layer the images to avoid this problem.
Native icons also eliminate the old method BYOND used of breaking big icons up into single-tile portions, like "0,0", "1,0", and so on. If your project relies on this behavior however, it is still available using map_format=TILED_ICON_MAP, which is also the default for old games compiled prior to 455.
Big icons up to 4x a regular tile size (in either or both dimensions) will appear and disappear smoothly while walking around the map. BYOND does this by sending extra turf info to the client.
Due to the change in icon behavior, DmiFontsPlus has been upgraded to work with native icons.
New /icon procs were added, or updated, to handle native icons as well. Because the method of counting icon states to find an icon's size in tiles doesn't apply in native mode, there are now Width() and Height() procs in the /icon datum as mentioned above.
The /icon/Blend() proc has also been updated to take two more arguments, so that when you blend two icons together you can specify a position where the second icon will be placed. The default position is 1,1, which means both icons will be lined up at their southwest corners. 13,1 will position the second icon 12 pixels to the right of that. When you blend with a color, position is ignored.
Fixes (more info)
Features