Creating something that rotates in quake requires a combination of many entities. rotate_object is the classname for the visible part of the object. It is always non-solid, you will need to use other entities to simulate collision, for example a func_togglewall or some func_movewalls. rotate_object also has no action by itself, it need a func_rotate_door, func_rotate_train or func_rotate_entity to drive it. Finally you need an info_rotate to tell the compiler where the rotate_object’s centre of rotation is.
You should give your rotate_object a unique targetname so that the func_rotate_door/train/entity which drives it can locate the model
The rotate_object should target an info_rotate positioned on the centre of rotation you wish to apply. When the compiler builds your map, it will attach the info_rotate to your rotate_objects’s brushes, then pick the pair of them up and move them to the centre of the map – the info_rotate will be positioned exactly at ‘0 0 0’. It will build the model from the brushes there, then add an ‘origin’ key to your rotate_object, which will push it back to its starting position.
If you can’t get the info_rotate method to work or your compiler doesn’t support it, Quoth offers an alternative method based on external models. Build your rotating object as an external bsp model, so that the model’s centre of rotation is at the origin of the map. Then create a point-size rotate_object positioned where you want the centre of rotation to lie in your level, and have it load your external bsp file as its model.