+#include "../_all.qh"
+
+#include "mutator.qh"
+
.vector spawn_origin, spawn_angles;
void physical_item_think()
}
}
-void physical_item_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
+void physical_item_damage(entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector force)
{
if(!self.cnt) // not for dropped items
if(ITEM_DAMAGE_NEEDKILL(deathtype))
MUTATOR_HOOKFUNCTION(item_spawning)
{
if(self.owner == world && autocvar_g_physical_items <= 1)
- return FALSE;
+ return false;
if (self.spawnflags & 1) // floating item
- return FALSE;
+ return false;
// The actual item can't be physical and trigger at the same time, so make it invisible and use a second entity for physics.
// Ugly hack, but unless SOLID_TRIGGER is gotten to work with MOVETYPE_PHYSICS in the engine it can't be fixed.
self.movetype = MOVETYPE_FOLLOW;
self.aiment = wep; // attach the original weapon
- return FALSE;
+ return false;
}
MUTATOR_DEFINITION(mutator_physical_items)
{
+ MUTATOR_HOOK(Item_Spawn, item_spawning, CBC_ORDER_ANY);
+
// check if we have a physics engine
- if not(autocvar_physics_ode && checkextension("DP_PHYSICS_ODE"))
+ MUTATOR_ONADD
+ {
+ if (!(autocvar_physics_ode && checkextension("DP_PHYSICS_ODE")))
+ {
+ LOG_TRACE("Warning: Physical items are enabled but no physics engine can be used. Reverting to old items.\n");
+ return -1;
+ }
+ }
+
+ MUTATOR_ONROLLBACK_OR_REMOVE
{
- dprint("Warning: Physical items are enabled but no physics engine can be used. Reverting to old items.\n");
- return FALSE;
+ // nothing to roll back
}
- MUTATOR_HOOK(Item_Spawn, item_spawning, CBC_ORDER_ANY);
+ MUTATOR_ONREMOVE
+ {
+ LOG_INFO("This cannot be removed at runtime\n");
+ return -1;
+ }
- return FALSE;
+ return 0;
}