A new Any macro has been added to handle generic keypresses. Anywhere you use [[*]] in the macro command, the key name will be substituted. Any+UP handles key releases.

Support for gamepads has been added. Up to 4 gamepads may be used, and these are mapped to a default control scheme via the joysticks.txt file. (You can create new setups for unrecognized gamepads via the Gamepad Setup dialog in Dream Seeker. If you create a new setup, please post in the gamepad thread in Beta Testers.) Gamepad buttons, analog sticks, and Dpads can be given macro commands and/or mapped to other things like keys.

Multiple animations can be run in parallel on the same atom (or the client). Use the ANIMATION_PARALLEL flag to start a new parallel animation.

ANIMATION_RELATIVE is another flag added to animations that lets you specify values as relative changes rather than absolute ones.

There is now a client.fps var and client.tick_lag, to mirror world.fps and world.tick_lag. When not set to 0, they will override the world framerate with a higher one used by the client. This also means that games using pixel movement will have pixel changes animated smoothly if they're interpreted as a glide.

The new PIXEL_SCALE value for appearance_flags lets you specify that an icon should be upscaled with point sampling rather than linear sampling, for a pixelated look.

A new map control parameter, zoom-mode, allows you to control upscaling. The default value of "normal" tries to preserve a pixelated look without distortion. The "distort" setting uses nearest-neighbor upscaling and will cause distortion; distortion will be most visible when the zoom value is relatively low and not very close to an integer, but at higher zooms it may be difficult to see. There is also "blur" to use bilinear sampling when upscaling. All downscaling uses bilinear sampling.

Mouse cursors now use the actual size of the icon they're given, and are not limited to world.icon_size.

pixel_w has been added, as a horizontal counterpart to pixel_z. While pixel_x/y are mapped to the logical tile system, pixel_w/z are based on display coordinates only. pixel_w/z behave identically to pixel_x/y when in topdown mode and when client.dir is the default NORTH, which is actually the majority of games.

SEE_THRU has been added as a mob sight flag. When used, it ignores opacity.

SEE_BLACKNESS is another new mob sight flag. This works like SEE_PIXELS by rendering actual blackness on blank tiles (therefore it too only applies to topdown map formats), but unlike SEE_PIXELS it does not "virtually" turn on SEE_TURFS/OBJS/MOBS to render them underneath the blackness. This is important for some games that want to use the black squares in plane effects.

/mutable_appearance has been added, to allow quick changing of multiple appearance parameters.

Variadic #define macros are supported, allowing for a flexible number of arguments.

Assignment operators can be chained, like for instance a = b = 2 or c = d += e, and they operate in right-to-left order. When using = in a conditional statement like an if(), while(), or the middle of for(), a warning will be given unless you surround the expression with extra parentheses; this is to avoid accidentally using = in place of the == operator.

flick() has been extended to images and areas.

Exceptions re-thrown by a handler now stay intact, preserving the original stack trace instead of generating a new one.

200% and 400% zoom options were added to the map editor.

Sound datums now allow you to specify a list of sounds, which allows for fallbacks if the first one isn't supported. The webclient already did this in version 510.

Setting TILE_BOUND on a HUD object will prevent it from extending the HUD size if it has a large icon.

Changing fonts and/or increasing font size are no longer allowed in world.status; they will not display on the site or the pager.