Ammo Boxes As Mdl, Triggers As Point Entities
Dammit Than, you pre-empted both my ideas there. Here's a bunch of mdl replica of the id ammo crates:
They are lit according to the light levels in the map, so you'd have to place them in well lit areas. Some of the skins have fullbright lights on them, ala doom 3. But since fullbrights don't work in some engines you have to be careful. Also at the moment there is one replacement for each model, none of them are combined, but with a bit of care you could get four or more models combined.
For point entity based triggers, there's a neat 4 line change that will give you every type of trigger at once:
Find the line
setmodel (self, self.model);// set size and link into world
and replace it with this chunk of code
setmodel (self, self.model); // set size and link into world
setsize(self, self.pos1 - self.origin, self.pos2 - self.origin );
Then simply add a point entity with the correct classname(eg trigger_multiple). Set pos1 to the absolute coordinates of the minimum point of the trigger, and pos2 to the absolute coordinates of the maximum point.
Doing things so quickly, without making any new entity classes, does have one downside. In worldcraft if a classname is already defined as being a brush entity, it can cause problems making point entities with the same classname.
Adding some extra classnames like
void() trigger_multiplep =
can help with this, as now you can make trigger_multiplep
a point class. This has the advantage that if you need to make changes to trigger_multiple then you only change the code in one place and both classnames are affected.
Other model optimisations:
* Combine all the generic gibs into one gib with three frames, perhaps even combine the zombie gib while you're at it.
* To take it a step further, you could have an optional global flag for maps to disable head gib models(to be replaced by a generic lump of flesh). A saving of one model per monster it pretty good by my reckoning, even if it's a bit of a loss in visual terms.
* Combine the silver/gold keys into a single model with two skins. Only saves you one but it's a total waste right now.
* Combine the flames into one model with multiple sequences - Start with the flaming torch and shrink down/hide all the wooden bits for the other flame. Only a saving if you use both of them in your map, but gets you an extra model if so. This was better when I thought the large flame had a different model to the small one, but that optimisation is already present.
* Combining all the sprites into one large sprite could save you a few models if you're willing to do the work...
There's also a very desperate way to optimise bsp models if you have models that don't overlap in skill settings/coop. For example, you have a wall that appears only in coop, and a totally different brush entity that appears only in non-coop, so that the two are never loaded on the same map. I think I'm right in saying all of the brush entities in a map have their models loaded, even if the actual entity that uses that model is removed because of spawnflags. If you find an entity for which it's worth strictly checking it's in the map before precaching its model, then there is a way: Compile the model as a seperate bsp file, in the way that the original ammo boxes are bsp models. Then have the spawn function for the entity precache the external model.
This last tip is quite fiddly and it's most likely that it's not helpful for any given map. On the other hand, there might be some maps where it makes quite a difference, if the map is very different for coop than single player for instance. So it's worth a mention.