Quake III Arena mod that makes gibs' physics more realistic and satisfying.
gib-directional-3.mp4
better-gibs-comparison.mp4
Namely, with this mod gibs' speed and direction depends on the direction and the amount of damage you inflicted on the poor opponent.
This mod also fixes a few gibs-related bugs,
e.g. the fact that in the original game the shotgun gibs very rarely
(namely it only gibs when you aim at the enemy's feet).
See the individual .patch files.
And yes, if you simply want MOAR GIBS,
we got you covered: \set cg_gibs 10; set cg_gibsExtraRandomVelocity 1000 (or however much you need instead of 10):
The installation steps for this mod are the same as for almost every other mod.
-
Download the mod file
-
For vanilla (original) Quake III Arena:
pak999-vanillaq3-baseq3-better-gibs-mod.pk3This file is also compatible with ioquake3 and engines based on it, so download this one if in doubt.
-
For ioquake3 and other ioquake3-based games:
-
For vanilla (original) Quake III: Team Arena:
-
For ioquake3 Quake III: Team Arena:
-
There is also a version of the "baseq3a" mod with the "better gibs" mod on top:
-
-
Put the file alongside the
pak0.pk3file of your game, usually
C:\Programs (x86)\ioquake3\baseq3or
C:\Programs (x86)\Steam\steamapps\common\Quake 3 Arena\baseq3. For Team Arena the final folder ismissionpackinstead ofbaseq3.The directory structure will look like this:
Quake 3 Arena ├── baseq3 │ ├── pak0.pk3 │ ├── pak1.pk3 │ ├── pak2.pk3 │ ├── pak3.pk3 │ ├── pak4.pk3 │ ├── pak5.pk3 │ ├── pak6.pk3 │ ├── pak7.pk3 │ ├── pak8.pk3 │ └── pak999-baseq3-better-gibs-mod.pk3 ├── missionpack │ ├── pak0.pk3 │ └── pak999-missionpack-better-gibs-mod.pk3 └── quake3.exeAgain, if you don't have
missionpack, you don't need to create it. -
Start the game!
This mod is not compatible with mods
that modify the client-side logic of the game, i.e. vm/cgame.qvm.
Some (but not all) features of this mod
don't require it to be installed on the server,
so you can enjoy it on basically any server
(except the ones with sv_pure 1).
cg_oldGibsandg_oldGibs: set to 0 to disable most (but not all!) of this mod's featurescg_gibsis now non-binary, (acting the same ascg_gibfactorin the GibHappy mod!): set to 1.3 to launch 3 more pieces of gibs, or to 0.5 to half the amount of gibscg_gibsInheritPlayerVelocitycg_gibsExtraRandomVelocitycg_gibsRandomVelocityFromKnockbackcg_gibsExtraVerticalVelocitycg_gibsBounceFactorcg_gibsRotationFactorcg_gibsBetterCameraOnGibcg_bounceMarksMinImpactSpeedcg_bounceSoundMinImpactSpeedg_gibsMissileDirectionKnockbackWeightAs you can tell by theg_prefix, this variable techically changes gameplay. However, this only affects the direction in which the player's camera will fly when they get gibbed.g_gibsNewEvGibPlayerParmProtocol: this mod technically modifies the network protocol, namely theEV_GIB_PLAYERevent's argument. Now we pass the knockback speed as the argument, instead of the killer's entity number. But in vanilla Quake 3 the argument is anyway unused so it is fine. However, if some other mod does rely on this argument, you can set this CVAR to 0 to revert this change.- (maybe I've missed some: search the code for
+vmCvar_t)
Another way to (almost) restore the old behavior:
// cg_oldGibs 0
// g_oldGibs 0
set cg_gibs 1.0
set cg_gibsInheritPlayerVelocity 0
set cg_gibsExtraRandomVelocity 250
set cg_gibsRandomVelocityFromKnockback 0
set cg_gibsExtraVerticalVelocity 250
set cg_gibsBounceFactor 0.6
set cg_gibsRotationFactor 0
set cg_gibsBetterCameraOnGib 0
set g_gibsMissileDirectionKnockbackWeight 1
set g_gibsNewEvGibPlayerParmProtocol 0
// Can't "restore" these
// cg_bounceMarksMinImpactSpeed
// cg_bounceSoundMinImpactSpeedAdd the following to the baseq3/autoexec.cfg file,
then enter a game and press F8.
`autoexec.cfg`
// For https://github.com/WofWca/quake3-better-gibs-mod
// `F8` can be replaced with any other key, such as `L` or `KP_PGUP`.
bind F8 "vstr gibsFunCmd"
set gibsFunCmd "vstr gibsFunCmd_1"
set gibsFunCmd_1 "echo Gibs settings: 1/9 Normal; set gibsFunCmd vstr gibsFunCmd_2; set cg_gibs 1.1; reset cg_oldGibs; reset g_oldGibs; reset cg_gibsInheritPlayerVelocity; reset cg_gibsRandomVelocityFromKnockback; reset g_gibsMissileDirectionKnockbackWeight; reset g_gibsNewEvGibPlayerParmProtocol; reset cg_gibsExtraRandomVelocity; reset cg_gibsExtraVerticalVelocity; reset cg_gibsBounceFactor; reset cg_gibsRotationFactor; reset cg_bounceMarksMinImpactSpeed; reset cg_bounceSoundMinImpactSpeed;";
set gibsFunCmd_2 "echo Gibs settings: 2/9 Vanilla; set gibsFunCmd vstr gibsFunCmd_3; set cg_gibs 1.0; set cg_oldGibs 1; set g_oldGibs 1;";
set gibsFunCmd_3 "echo Gibs settings: 3/9 Purely damage-based random velocity; set gibsFunCmd vstr gibsFunCmd_4; set cg_gibs 1.1; cg_oldGibs 0; reset g_oldGibs; reset cg_gibsInheritPlayerVelocity; set cg_gibsRandomVelocityFromKnockback 0.5; reset g_gibsMissileDirectionKnockbackWeight; reset g_gibsNewEvGibPlayerParmProtocol; set cg_gibsExtraRandomVelocity 50; set cg_gibsExtraVerticalVelocity 50; reset cg_gibsBounceFactor; reset cg_gibsRotationFactor; reset cg_bounceMarksMinImpactSpeed; reset cg_bounceSoundMinImpactSpeed;";
set gibsFunCmd_4 "echo Gibs settings: 4/9 I hear a boomer around; set gibsFunCmd vstr gibsFunCmd_5; set cg_gibs 4; cg_oldGibs 0; reset g_oldGibs; set cg_gibsInheritPlayerVelocity 0.25; set cg_gibsRandomVelocityFromKnockback 0.05; reset g_gibsMissileDirectionKnockbackWeight; reset g_gibsNewEvGibPlayerParmProtocol; set cg_gibsExtraRandomVelocity 750; set cg_gibsExtraVerticalVelocity 500; set cg_gibsBounceFactor 0.2; set cg_gibsRotationFactor 0.1; reset cg_bounceMarksMinImpactSpeed; reset cg_bounceSoundMinImpactSpeed;";
set gibsFunCmd_5 "echo Gibs settings: 5/9 Anatomy 101 a.k.a. Freeze tag; set gibsFunCmd vstr gibsFunCmd_6; set cg_gibs 1.1; cg_oldGibs 0; reset g_oldGibs; reset cg_gibsInheritPlayerVelocity; reset cg_gibsRandomVelocityFromKnockback; reset g_gibsMissileDirectionKnockbackWeight; reset g_gibsNewEvGibPlayerParmProtocol; reset cg_gibsExtraRandomVelocity; set cg_gibsExtraVerticalVelocity -999999999; set cg_gibsBounceFactor 0; set cg_gibsRotationFactor 0; reset cg_bounceMarksMinImpactSpeed; reset cg_bounceSoundMinImpactSpeed;";
set gibsFunCmd_6 "echo Gibs settings: 6/9 Get spooked a.k.a. You need a hug a.k.a. BFG is a gravity gun; set gibsFunCmd vstr gibsFunCmd_7; set cg_gibs 1.1; cg_oldGibs 0; reset g_oldGibs; set cg_gibsInheritPlayerVelocity -1.0; set cg_gibsRandomVelocityFromKnockback 0.0; reset g_gibsMissileDirectionKnockbackWeight; reset g_gibsNewEvGibPlayerParmProtocol; set cg_gibsExtraRandomVelocity 20; set cg_gibsExtraVerticalVelocity 200; reset cg_gibsBounceFactor; set cg_gibsRotationFactor 0; reset cg_bounceMarksMinImpactSpeed; reset cg_bounceSoundMinImpactSpeed;";
set gibsFunCmd_7 "echo Gibs settings: 7/9 Sticky gibs; set gibsFunCmd vstr gibsFunCmd_8; set cg_gibs 1.1; cg_oldGibs 0; reset g_oldGibs; reset cg_gibsInheritPlayerVelocity; reset cg_gibsRandomVelocityFromKnockback; reset g_gibsMissileDirectionKnockbackWeight; reset g_gibsNewEvGibPlayerParmProtocol; reset cg_gibsExtraRandomVelocity; reset cg_gibsExtraVerticalVelocity; set cg_gibsBounceFactor -0.985; set cg_gibsRotationFactor 0; set cg_bounceMarksMinImpactSpeed 1000; set cg_bounceSoundMinImpactSpeed 3000;";
set gibsFunCmd_8 "echo Gibs settings: 8/9 Necromorph metamorphosis; set gibsFunCmd vstr gibsFunCmd_9; set cg_gibs 1.1; cg_oldGibs 0; reset g_oldGibs; set cg_gibsInheritPlayerVelocity -0.2; set cg_gibsRandomVelocityFromKnockback 0.0; reset g_gibsMissileDirectionKnockbackWeight; reset g_gibsNewEvGibPlayerParmProtocol; set cg_gibsExtraRandomVelocity 0; set cg_gibsExtraVerticalVelocity 50; set cg_gibsBounceFactor 1; set cg_gibsRotationFactor 0; set cg_bounceMarksMinImpactSpeed 500; reset cg_bounceSoundMinImpactSpeed;";
set gibsFunCmd_9 "echo Gibs settings: 9/9 Instapuddle; set gibsFunCmd vstr gibsFunCmd_1; set cg_gibs 1.1; cg_oldGibs 0; reset g_oldGibs; set cg_gibsInheritPlayerVelocity 0.25; set cg_gibsRandomVelocityFromKnockback 0.5; reset g_gibsMissileDirectionKnockbackWeight; reset g_gibsNewEvGibPlayerParmProtocol; set cg_gibsExtraRandomVelocity 250; set cg_gibsExtraVerticalVelocity -1500; set cg_gibsBounceFactor 0.05; set cg_gibsRotationFactor 0.5; reset cg_bounceMarksMinImpactSpeed; set cg_bounceSoundMinImpactSpeed 3000;";As was said, this mod modifies vm/cgame.qvm and vm/qagame.qvm,
and thus it cannot run alongside other mods that modify those files.
Thus, if you want to run this mod together with another mod
that modifies those files,
you must merge the source code of that mod
with the source code of this mod,
and compile the .qvm files.
To do that:
cd my-mod-dir
git clone https://github.com/WofWca/quake3-better-gibs-mod.git` ../quake3-better-gibs-mod
git am ../quake3-better-gibs-mod/patches/*.patchThis should apply the patches to your mod's code, by creating git commits.
There might be conflicts, which should not be too hard to resolve.
Then apply the copyright notice, Copyright (C) 2025, 2026 WofWca,
wherever you have them.
Also see the ioq3 branch in this repo,
which already applied these patches on top of ioquake3.
In fact, the .patch files have been generated from that branch,
with git format-patch --output-directory=../quake3-better-gibs-mod/patches --no-numbered ioquake/main.
To build a vanillaq3-compatible version in CI,
replace COMMAND ${Q3ASM} -o ${QVM_FILE} ${ASM_FILES}
with COMMAND ${Q3ASM} -vq3 -o ${QVM_FILE} ${ASM_FILES}.
See instructions.
Some of the patches of this mod have already been integrated
into the "baseq3a" mod.
The pak8a-baseq3a-mod-with-better-gibs.pk3 file was built
from the baseq3a branch of this repo.
-
Also downloadable on lvlworld.com.
GibHappy doesn't have directional gibs, but has a Gib Gun!!
-
Quake 3 Movie Maker's Edition (q3mme)
You might have seen it in action while watching some Quake movies.
(As I discovered after already having made my mod), q3mme implements directional gibs, flexibly scripted with a config file.
The direction is configurable to be either the direction from the killer to the gibbed player, or the gibbed player's velocity (as in our mod).
See- https://github.com/entdark/q3mme/blob/09b42e6b69367538961b3e33ed6c5acb9263d7bd/trunk/code/cgame/cg_event.c#L1073-L1103
- https://github.com/entdark/q3mme/blob/09b42e6b69367538961b3e33ed6c5acb9263d7bd/trunk/code/cgame/cg_effects.c#L378-L392
- https://github.com/entdark/q3mme/blob/09b42e6b69367538961b3e33ed6c5acb9263d7bd/trunk/files/scripts/base_player.fx#L93-L144
-
wolfcamql: quakelive/quake3 demo player
Implements Quake Live -looking "gibs" (sparks) that have directionality (but also still supports Quake 3 gibs), a bunch of
cg_gibCVARs (most of which seem to only apply to Quake Live sparks?), and it also supports q3mme scripts.
(As you can tell by the name of the project, it supports Quake Live replays, whereeventParmofEV_GIB_PLAYERis direction.)- https://github.com/brugal/wolfcamql/blob/f33dd8819efc3f837b84ade5aff849acd7503ba0/code/cgame/cg_event.c#L3723-L3786
- https://github.com/brugal/wolfcamql/blob/cdd9d29cd7c20d7d98f17a58e2bee4186ed4bcd3/code/cgame/cg_effects.c#L1091-L1185
- https://github.com/brugal/wolfcamql/blob/cdd9d29cd7c20d7d98f17a58e2bee4186ed4bcd3/code/cgame/cg_effects.c#L968-L1049
- https://github.com/brugal/wolfcamql/blob/f33dd8819efc3f837b84ade5aff849acd7503ba0/code/cgame/cg_main.c#L1387-L1407
- https://github.com/brugal/wolfcamql/blob/77c7c5752cecaeb3f1d7467e205bd2076f39ea40/package-files/wolfcam-ql/scripts/q3mme.fx#L214-L370
-
Wolfenstein: Enemy Territory, or ET: Legacy
Implements proper initial position of individual gibs matching the player model's parts (as we try to do in this mod), and directionality.
-
Maybe you could find other id Tech 3 -based games or mods for those games that modify
CG_GibPlayer?
id Tech forks are truly innumerable...
One can start with https://github.com/search?q=%22CG_GibPlayer%22+path%3Acg_effects.c&type=code, and hide identical files.
These patches are dual-licensed under either the "QIIIA Game Source License", or the "GPL-2.0", at your option. That is, you may apply these pathes to any other project based on Quake III Arena source code, be it the GPL or pre-GPL release.
Some more about Quake III licensing here:
