]> de.git.xonotic.org Git - voretournament/voretournament.git/commitdiff
Merge branch 'master' into mirceakitsune/health_size
authorMirceaKitsune <sonichedgehog_hyperblast00@yahoo.com>
Mon, 2 May 2011 17:09:39 +0000 (20:09 +0300)
committerMirceaKitsune <sonichedgehog_hyperblast00@yahoo.com>
Mon, 2 May 2011 17:09:39 +0000 (20:09 +0300)
data/defaultVT.cfg
data/qcsrc/server/cl_client.qc
data/qcsrc/server/cl_physics.qc
data/qcsrc/server/cl_player.qc
data/qcsrc/server/cl_weaponsystem.qc
data/qcsrc/server/vore.qc

index 1fa995f9284b5854998d26d7fc8b76580be8fbb1..f2d04205c2550cb2ce95d252b31dc80a72af1f47 100644 (file)
@@ -1547,6 +1547,14 @@ set g_vore_regurgitatecolor_release_fade 0.01 "how quickly the regurgitation col
 set g_vore_regurgitatecolor_digest "0.15 0.25 0" "the color players will have when digested, only works when g_vore_keepdeadprey is disabled"\r
 set g_vore_keepdeadprey 1 "If enabled, prey remains in the stomach after dying, else the predator throws up their dead body. 0 = disabled, 1 = enabled, anything between = probability"\r
 \r
+set g_healthsize 100 "Players who are low on health shrink and become smaller, value specifies health at which the player has default size"\r
+set g_healthsize_movementfactor 0.5 "Amount by which player size affects jumping and running"\r
+set g_healthsize_exteriorweapon_scalefactor 1 "Amount by which player size resizes the exterior weapon model"\r
+set g_healthsize_weapon_scalefactor 0.5 "Amount by which player size resizes the view weapon model"\r
+set g_healthsize_weapon_scalefactor_pos 4 "Amount by which the view model is moved vertically based on player size"\r
+set g_healthsize_min 50 "Player size may not drop below this amount of health"\r
+set g_healthsize_max 150 "Player size may not grow past this amount of health"\r
+\r
 // part of an ugly hack for the menu audio sliders to work with the cutsound feature\r
 seta menu_volume 0.5\r
 seta menu_bgmvolume 1\r
index a9668ea4e11423339fcd34aab1728f68bc52648e..c26a5530cbeb73f436dee938ef2fc799e28accef 100644 (file)
@@ -2246,6 +2246,37 @@ float vercmp(string v1, string v2)
        return vercmp_recursive(v1, v2);\r
 }\r
 \r
+void ApplyHealthSize()\r
+{\r
+       if not(cvar("g_healthsize"))\r
+               return;\r
+\r
+       if(self.predator.classname == "player" || self.fakeprey)\r
+       {\r
+               self.view_ofs = PL_CROUCH_VIEW_OFS * self.predator.scale;\r
+               self.scale = 0;\r
+       }\r
+       else\r
+       {\r
+               self.scale = bound(cvar("g_healthsize_min"), self.health, cvar("g_healthsize_max")) / cvar("g_healthsize");\r
+\r
+               // The following code sets the bounding box to match the player's size.\r
+               // It is currently disabled because of issues with engine movement prediction (cl_movement).\r
+               // The engine expects the bounding box to be default size, and changing it will cause glitches.\r
+               // This code may be enabled once the engine has the ability to use different bbox sizes for movement prediction.\r
+               if(self.crouch)\r
+               {\r
+                       //setsize (self, PL_CROUCH_MIN * self.scale, PL_CROUCH_MAX * self.scale);\r
+                       self.view_ofs = PL_CROUCH_VIEW_OFS * self.scale;\r
+               }\r
+               else\r
+               {\r
+                       //setsize (self, PL_MIN * self.scale, PL_MAX * self.scale);\r
+                       self.view_ofs = PL_VIEW_OFS * self.scale;\r
+               }\r
+       }\r
+}\r
+\r
 void ObserverThink()\r
 {\r
        if (self.flags & FL_JUMPRELEASED) {\r
@@ -2568,6 +2599,9 @@ void PlayerPreThink (void)
                        }\r
                }\r
 \r
+               // health based player size\r
+               ApplyHealthSize();\r
+\r
                FixPlayermodel();\r
 \r
                GrabberFrame();\r
index 2c28409161ef0dfca59dab7309326cc4c0bfd996..9c2a82d6e3414b5cb89604368dd08c38c3655a86 100644 (file)
@@ -55,6 +55,8 @@ void PlayerJump (void)
        }\r
 \r
        mjumpheight = cvar("sv_jumpvelocity");\r
+       if(self.scale) // we are smaller or larger, so we jump lower or higher\r
+               mjumpheight *= (1 - cvar("g_healthsize_movementfactor")) + cvar("g_healthsize_movementfactor") * self.scale; \r
        if (self.waterlevel >= WATERLEVEL_SWIMMING)\r
        {\r
                if (self.watertype == CONTENT_WATER)\r
@@ -500,6 +502,9 @@ void PM_Accelerate(vector wishdir, float wishspeed, float wishspeed0, float acce
        if(speedclamp)\r
                accelqw = -accelqw;\r
 \r
+       if(self.scale) // we are smaller or larger, so we run slower or faster\r
+               wishspeed *= (1 - cvar("g_healthsize_movementfactor")) + cvar("g_healthsize_movementfactor") * self.scale; \r
+\r
        if(cvar("sv_gameplayfix_q2airaccelerate"))\r
                wishspeed0 = wishspeed;\r
 \r
index a867cd5f460e142c5a9446761405cf3b43ed641a..c3bde6ce9c7357358bad2f0a4690c97c56a6ec43 100644 (file)
@@ -143,6 +143,7 @@ void CopyBody(float keepvelocity)
        self.solid = oldself.solid;\r
        self.takedamage = oldself.takedamage;\r
        self.think = oldself.think;\r
+       self.scale = oldself.scale;\r
        self.customizeentityforclient = oldself.customizeentityforclient;\r
        self.uncustomizeentityforclient = oldself.uncustomizeentityforclient;\r
        self.uncustomizeentityforclient_set = oldself.uncustomizeentityforclient_set;\r
index d4253c4d0ec4bc88d02dce49092bc28b91ba3a5b..2b224bac5ad5d766c647f13522d74380289638e2 100644 (file)
@@ -737,6 +737,13 @@ void CL_Weaponentity_Think()
        }\r
 \r
        // create or update the lasertarget entity\r
+\r
+       // if we are a micro or macro, size the weapon model accordingly\r
+       if(self.owner.scale && cvar("g_healthsize_weapon_scalefactor"))\r
+       {\r
+               self.weaponentity.scale = (1 + cvar("g_healthsize_weapon_scalefactor")) - cvar("g_healthsize_weapon_scalefactor") * self.owner.scale;\r
+               self.weaponentity.origin_z = (1 - self.weaponentity.scale) * cvar("g_healthsize_weapon_scalefactor_pos");\r
+       }\r
 };\r
 \r
 void CL_ExteriorWeaponentity_Think()\r
@@ -819,6 +826,13 @@ void CL_ExteriorWeaponentity_Think()
                self.angles = ang;\r
        }\r
 \r
+       // if we are a micro or macro, size the weapon model accordingly\r
+       if(self.owner.scale && cvar("g_healthsize_exteriorweapon_scalefactor"))\r
+       {\r
+               self.scale = 1 / self.owner.scale; // for some reason, the exterior weapon entity copies the player's scale somewhere else, so undo that first\r
+               self.scale = (1 - cvar("g_healthsize_exteriorweapon_scalefactor")) + cvar("g_healthsize_exteriorweapon_scalefactor") * self.scale;\r
+       }\r
+\r
        self.colormap = self.owner.colormap;\r
        self.customizeentityforclient = CL_ExteriorWeaponentity_CustomizeEntityForClient;\r
 };\r
index 60999e71fe0f3474eabc1923e7413833c8aa8f37..2429326b16f27201a30e3b64501e923cbb51bfd4 100644 (file)
@@ -12,11 +12,16 @@ entity Swallow_player_check()
 {\r
        // check if we can swallow a player instead of firing our weapon\r
 \r
+       float swallow_range;\r
        vector vore_w_shotorg, vore_w_shotdir;\r
-       vore_w_shotorg = self.origin + self.view_ofs;\r
+\r
+       swallow_range = cvar("g_balance_vore_swallow_range");\r
+       if(self.scale) // we can swallow from further or closer based on our size\r
+               swallow_range *= self.scale;\r
+       vore_w_shotorg = self.origin;\r
        vore_w_shotdir = v_forward;\r
 \r
-       WarpZone_traceline_antilag(self, vore_w_shotorg, vore_w_shotorg + vore_w_shotdir * cvar("g_balance_vore_swallow_range"), FALSE, self, ANTILAG_LATENCY(self));\r
+       WarpZone_traceline_antilag(self, vore_w_shotorg, vore_w_shotorg + vore_w_shotdir * swallow_range, FALSE, self, ANTILAG_LATENCY(self));\r
        if(trace_fraction < 1)\r
        if(trace_ent.classname == "player")\r
                return trace_ent;\r