]> de.git.xonotic.org Git - voretournament/voretournament.git/blobdiff - data/qcsrc/server/vore.qc
Player size now influences a player's weight as well, alongside stomach load. Macros...
[voretournament/voretournament.git] / data / qcsrc / server / vore.qc
index b88e2802d1d5724ec84fe6e2f1f8a50a4011507b..e64eaab61b59fcf4e7fcaeb06e0145c73092f9bc 100644 (file)
@@ -157,10 +157,12 @@ void Vore_AutoDigest(entity e)
 \r
        if(!cvar("g_vore_digestion") || e.digesting)\r
                return;\r
-       if(clienttype(e) != CLIENTTYPE_REAL)\r
-               return; // this feature is only for players, not bots\r
+       if(g_rpg)\r
+               return; // RPG is choice based, so don't do things automatically there\r
        if(e.stomach_load)\r
                return; // don't start digestion if we already ate someone, as that means we manually disabled it after the first prey and want it off\r
+       if(clienttype(e) != CLIENTTYPE_REAL)\r
+               return; // this feature is only for players, not bots\r
        if(Stomach_TeamMates_check(e))\r
                return; // never begin automatic digestion if we've swallowed a team mate\r
 \r
@@ -207,7 +209,7 @@ void Vore_StomachLoad_Apply()
        self.stomach_load = final_load;\r
 \r
        // apply weight\r
-       self.gravity = 1 + (self.stomach_load / self.stomach_maxload) * cvar("g_balance_vore_load_pred_weight");\r
+       self.gravity = 1 * (cvar("g_healthsize") ? pow(self.scale, cvar("g_healthsize_weight")) : 1) + (self.stomach_load / self.stomach_maxload) * cvar("g_balance_vore_load_pred_weight");\r
        if(!self.gravity && self.stomach_load)\r
                self.gravity = 0.00001; // 0 becomes 1 for gravity, so do this to allow 0 gravity\r
 }\r
@@ -409,7 +411,7 @@ void Vore_Regurgitate(entity e)
        // apply velocities\r
        makevectors(e.predator.v_angle);\r
        e.velocity = v_forward * cvar("g_balance_vore_regurgitate_force") * scalediff;\r
-       e.predator.velocity = e.predator.velocity + (-v_forward * cvar("g_balance_vore_regurgitate_predatorforce") * scalediff); // don't use += here to avoid a fteqcc bug\r
+       e.predator.velocity += -v_forward * cvar("g_balance_vore_regurgitate_predatorforce") * scalediff;\r
        e.pusher = e.predator; // allows us to frag players by regurgitating them in deadly pits\r
        e.pushltime = time + cvar("g_maxpushtime");\r
 \r
@@ -450,7 +452,7 @@ void Vore_Regurgitate(entity e)
        e.predator = world;\r
 }\r
 \r
-void Vore_Disconnect()\r
+void Vore_Disconnect(float consumables)\r
 {\r
        // frees prey from their predators when someone disconnects or goes spectating, or in other circumstances\r
        entity e;\r
@@ -467,10 +469,13 @@ void Vore_Disconnect()
                        Vore_Regurgitate(head);\r
        }\r
        // remove consumable items when we disconnect\r
-       for(e = world; (e = find(e, classname, "consumable")); )\r
+       if(consumables)\r
        {\r
-               if(e.predator == self)\r
-                       Item_Consumable_Remove(e, TRUE);\r
+               for(e = world; (e = find(e, classname, "consumable")); )\r
+               {\r
+                       if(e.predator == self)\r
+                               Item_Consumable_Remove(e, TRUE);\r
+               }\r
        }\r
 \r
        self.stomach_load = self.gravity = 0; // prevents a bug\r
@@ -776,12 +781,12 @@ void Vore()
        // apply delays and skip the vore system under some circumstances\r
        if(!cvar("g_vore")) // the vore system is disabled\r
        {\r
-               Vore_Disconnect();\r
+               Vore_Disconnect(TRUE);\r
                return;\r
        }\r
        if(time < game_starttime || (time < warmup && !inWarmupStage)) // don't allow vore before a round begins\r
        {\r
-               Vore_Disconnect();\r
+               Vore_Disconnect(FALSE);\r
                return;\r
        }\r
        if(self.spectatee_status)\r