All brush based entities now support loading models from external files, rather than from models within the bsp file of the map. Simply create a point entity with the correct classname, and set the “model” field to the path of the model file. For example, to create a func_illusionary of an exploding box, set the “model” key to “maps/b_explob.bsp”. You can use this method to create a prefab like a door or wall fitting, and use the same model repeatedly throughout the map, which will save precaches.
Don’t forget that Quoth 2.2 supports map packages so that you can keep the external resources your map needs bundled together. If you aren’t using a package, we recommend creating a subdirectory of /maps with the same name as your map filename to store your external models. For instance, models to be used in the map slither.bsp should be kept in maps/slither/.
Tip: if your entity’s class is SOLID_BSP, you must use a .bsp format model. However, if you use a class which is non-solid, you can use .mdl or .spr format models as well! func_rotate_door or func_rotate_train are very flexible choices of non-solid entity.
To create new models, simply make a new map in your editor, design your model and compile it. Run light on it, but there is no need for vis. Then place the newly compiled map in the required folder. The origin of your map will correspond with the origin of the point entity, so bear this in mind when building the model. Since this will also be the center of rotation for your model, this feature can be useful for making rotating entities
Care must be taken to light your model in such a way that it suits the region of the map it is placed in. If the model will be static, it will not have the correct world lighting that an internal model would have. On the other hand, for moving entities you have the flexibility of lighting it to look reasonable in all places, rather than perfect at one point but perhaps unconvincing at other positions.
Again, to help worldcraft users, you can add the suffix _point to any func_ classname to create a functionally identical class of entity. See Point Triggers for the full details