Provide a mechanism for the server to define what client side features should be present

Registered by Erik Ogenvik

As we now add support for Mercator mods, we'll get into the situation where any older client connecting to a newer version of cyphesis where there are mods applied will get a terrain that is different from the one defined on the server (since older Ember clients won't understand the "terrainmod" attribute). This might make the experience a little bit jarring, and I'm thinking of perhaps adding some kind of mechanism for allowing the server to specify a series of "features". Any client which doesn't implement any of the "features" should then be able to tell the user this.
I'm thinking of a simple mechanism, where "features" are just specified by simple strings, such as "mercator_terrainmod_1_0" or similiar. This should just be something that the server sends, and it's then up to the client to determine what to do (just show a warning or actively disconnect if not all features are supported).

As "features" I'm thinking of anything that will make the client not represent the world in the correct way. The way we designed the world so far has prevented most of these "breaking" additions, but I'm sure we'll see some more as development proceeds.
If we implement this we'll however have to be quite careful about what "features" we specify. We should only define those things that are actively breaking, not those many cases where older clients just doesn't show as much.

Blueprint information

Erik Ogenvik
Needs approval
Erik Ogenvik
Series goal:
Milestone target:
Started by
Erik Ogenvik

Related branches



Why not specify the features as a string key to integer value pair, and then the number can be incremented as the feature changes?

Rather than having "mercator_terrainmod_1_0", it would have

"mercator_terrainmod" = 1.0

The reason I didn't suggest that was that I don't want to make this feature too complicated and bind us to all kinds of backwards and forwards compatibility web. If the server wants "mercator_terrainmod" = 1.0, but the client supports "mercator_terrainmod"= 1.1, what does that mean then? And if it means that the client should support "1.0", that would lead us to a path where we would need a lot of tests to make sure that backwards compatibility isn't broken when the client feature support is updated. It's easy that this then expands into a mess. That's why I think it's easier if the features didn't have any relation to each other, and just were defined by strings.


Work Items

This blueprint contains Public information 
Everyone can see this information.


No subscribers.