Not sure if this would introduce a lot of overhead, but how about adding a class to libUltra containing functions with the same name as the ones in the oapi, i.e. wrappers where we can add checks (if needed)?
Each instance of this "WOAPI" (wrapper OAPI) class would be owned by a vessel, to handle the VESSEL class functions, and it would also contain the oapiXYZ functions. For example, the upgrade in a subsystem would be like:
Code:
STS()->SetAnimation( anim, pos );// old
STS()->woapi->SetAnimation( anim, pos );// new
It might not really make it easier when the oapi changes, but it probably won't make it harder.