Ah... well then you'll hate my next trick.

Use a TBasicShipParentClass pointer and check for their type every time you need to see if it's a specific kind of ship object. I did this a lot, not realizing how much memory leaks I put into the poor thing.

The trick worked great, but I handled the memory management badly so it made things tricky to manage. I'm sure you can do a better job though, esp. since you are much more skilled than I was back then.