]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/mutators/mutator_physical_items.qc
Allow turning off damage from lava and slime in instagib, as it used to be
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / mutators / mutator_physical_items.qc
index 285dc4a7cbe4d9a886cd2c706503d6bc5a1d3075..08bb81a9f6a9d6a646a1103a6771b7b23eae7952 100644 (file)
@@ -1,3 +1,7 @@
+#include "../_all.qh"
+
+#include "mutator.qh"
+
 .vector spawn_origin, spawn_angles;
 
 void physical_item_think()
@@ -45,7 +49,7 @@ void physical_item_touch()
        }
 }
 
-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))
@@ -58,9 +62,9 @@ void physical_item_damage(entity inflictor, entity attacker, float damage, float
 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.
@@ -95,19 +99,33 @@ MUTATOR_HOOKFUNCTION(item_spawning)
        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;
 }