IPrototypeManager.Index(Type kind, string id) now throws UnknownPrototypeException instead of KeyNotFoundException, for consistency with IPrototypeManager.Index<T>.
New features
Types can now implement the new interface IRobustCloneable<T> to be cloned by the component state source generator.
Added extra Roslyn Analyzers to detect some misuse of prototypes:
Network serializing prototypes (tagging them with [Serializable, NetSerializable]).
Constructing new instances of prototypes directly.
Add PrototypeManagerExt.Index helper function that takes a nullable ProtoId<T>, returning null if the ID is null.
Added an AlwaysActive field to WebViewControl to make a browser window active even when not in the UI tree.
Made some common dependencies accessible through IPlacementManager.
Added a new GENITIVE() localization helper function, which is useful for certain languages.
Bugfixes
Sprite scale is now correctly applied to sprite boundaries in SpriteSystem.GetLocalBounds.
Fixed documentation for IPrototypeManager.Index<T> stating that KeyNotFoundException gets thrown, when in actuality UnknownPrototypeException gets thrown.
Other
More tiny optimizations to DataDefinitionAnalyzer.
NetSerializer has been updated. On debug, it will now report where a type that can’t be serialized is referenced from.