Instead of instantiating a new Scavenger to read the "original", just read it straight off disk. Created a class dedicated to retrieving a "read-only" version of the scavenger. I know this sounds less safe, but it's actually immutable in packages for all users, and won't save anything unless an Undo State or SetDirty is called on it.
RenderPlayer, and RenderItem are no longer serialized. They've been turned into getters/setters that directly affect the respective renderers. This prevents them from needing to be set during Update(); I also named them to have the keyword "preview" so users know they aren't a tangible setting.
Also, HideFlags have been set on the preview objects so they don't get saved to the scene or within prefabs. The walkie talkie in particular has been made uneditable. (Should consider hiding it from the hierarchy too).
Rezero Root Position has been switched to be a "Reinitialize" button, which will force refresh all calculations (including re-zeroing the model). This is an alternative to refreshing everything every time the script loads.
RootTransform is unused in the api, and references a Missing on build anyhow, so it has been moved into UNITY_EDITOR only code.
Some small bugs I detected through this as well:
Fixed CalculateRootPosition not taking original root offset into account.
Fixed GetBounds() generating a 0 width X boundary due to a typo.
RootTransform was unused and serialized an immutable, transient asset.
Some small bugs I detected through this as well: