Major switch to a "proper" entity-component-system