Unit types are 64 bit. They are not mutually exclusive. Eventually we might create the mapping from a JSON file, but until then it is hard coded in C++. Here is the list of currently used values: UNITTYPE_Commander, UNITTYPE_Fabber, UNITTYPE_Debug, UNITTYPE_Tank, UNITTYPE_Bot, UNITTYPE_Bomber, UNITTYPE_Fighter, UNITTYPE_Gunship, UNITTYPE_Transport, UNITTYPE_Teleporter, UNITTYPE_Scout, UNITTYPE_Structure, UNITTYPE_Mobile, UNITTYPE_Wall, UNITTYPE_Sub, UNITTYPE_Nuke, UNITTYPE_NukeDefense, UNITTYPE_Heavy, UNITTYPE_Artillery, UNITTYPE_Tactical, UNITTYPE_LaserPlatform, UNITTYPE_AirDefense, UNITTYPE_SurfaceDefense, UNITTYPE_OrbitalDefense, UNITTYPE_MetalProduction, UNITTYPE_EnergyProduction, UNITTYPE_Construction, UNITTYPE_Land, UNITTYPE_Naval, UNITTYPE_Air, UNITTYPE_Orbital, UNITTYPE_Basic, UNITTYPE_Advanced, UNITTYPE_CmdBuild, UNITTYPE_FabBuild, UNITTYPE_FabAdvBuild, UNITTYPE_FabOrbBuild, UNITTYPE_FactoryBuild, UNITTYPE_CombatFabBuild, UNITTYPE_CombatFabAdvBuild, UNITTYPE_Economy, UNITTYPE_Factory, UNITTYPE_Defense, UNITTYPE_Offense, UNITTYPE_Recon, UNITTYPE_NoBuild,
well this is pretty hilarious - https://forums.uberent.com/threads/ref-unit-types-list.60752/#post-942903
Correct. By using a combination of unit types on a unit that make no sense though (Structure and mobile, for example) and giving those unit types as build prerequisites on a factory you can accomplish the same thing, in a more complex fashion.