Since my last update, I've snuck in a few extra features. client.color has been implemented, which lets you cast a color or color matrix over your entire map. It doesn't do secondary maps. There's an appearance_flags value, NO_CLIENT_COLOR, that can make an atom/image/overlay immune to the effect (good for HUDs), and that flag is inherited from the base atom. I know I said last time that felt tacky, but in hindsight it was really the only way to do it.
The client can be animated. It only supports pixel_x/y/z and color at present, as there's no client.transform (yet?) and a number of other appearance values simply don't matter. The pixel offsets will not cause the map's "overflow" bounds to expand, so don't expect you can use this to zoom across the world, but it can still manage a lot of cool effects for you--like a quick shake.
Have fun with this gem as you write your next Halloween-themed game:
animate(client, color=list(6,0,0, 0,5,0, 0,0,7.5, 1.2,1,1.5), time=0)
animate(color=null, easing=BOUNCE_EASING, time=2.5)
The animate() proc now has a flags parameter, and two new flags have been defined: ANIMATION_END_NOW which doesn't bother with transitioning away from the old mid-animation state if any, and ANIMATION_LINEAR_TRANSFORM which forces transform matrices to use linear interpolation instead of separating out the rotation. I foresee that this argument could have other uses in the future, including the possibility of eventually being used to support parallel animations--vars changing with different timing and easing than other vars.
While I was at it, I fixed a few webclient bugs, and this week a few bugs in Dream Daemon and Dream Seeker got fixed as well.
GiaD 2015 is coming up! Put this newfound awesomeness to good use, and please don't forget to donate or become a Member if you haven't already. And hey, this is a good time to get your friends involved in BYOND too.