Kindjal
- weapons
- gameplay
- content
- Sandboxed: no raw memory access
- SHA-256
21e5d99aef158efdedcbc88a282427f851ab316434d0793c0099641ebce695b6
The Store in the game installs and updates it for you; the zip is for installing by hand.
- Needs
- Melange 0.9.0 or later
>=0.9.0 - Install
- In the game, press ` and open Thumper > Store
- Authors
- Melange
- Licence
- MIT
- Source
- plugins/kindjal on GitHub
A content plugin for Worms Ultimate Mayhem that shifts every weapon a dimension darker. A kindjal is a heavy fighting
dagger; in Dune it is the blade kept for close, personal violence. Melee weapons maim, explosives hit harder and throw
worms a little further than the game does, every weapon has a grimmer name, and three new weapons join the panel: the Acid
Spitter, the Acid Flask and the Crucible. Acid is real poison gas, and on the screen it clings to a worm’s
skin, bubbles and smokes. New impact, launch, explosion and acid sounds play on top of the game’s own. Every renamed
weapon and the three new ones carry their own 3D model (held, thrown, fired or flying; 37 mesh banks in all), and the
Airstrike and Super Airstrike helicopters are replaced. The icons, sounds and sprites are original work generated by
the scripts in tools/. The models are re-authored, but 18 of the 37 banks are clones of the game’s own skinned
meshes and keep its rig, skin weights, animation clips and UV layout; see “What is derived from the game” below.
It needs Melange 0.9.0 or later: the sounds use wum.audio, the weapon names use weaponText, the panel and HUD
icons use weaponIcons, the models use meshes, and the Banana Bomb’s seven bomblets need the u32 weapon fields.
It is a content mod
Section titled “It is a content mod”Kindjal changes the simulation, so every player in an online match needs the same version of it. Melange handles that: a host with Kindjal refuses to start against a player who lacks it or has another version, the lobby says who and what differs, and a match recorded with Kindjal replays only with Kindjal. Offline it just works. Everything the plugin changes in the simulation happens once, at match start, identically on every machine, and is undone when the match ends; the visuals and sounds are local and never feed back into the game.
The AI uses the re-statted weapons exactly as it used the originals (they are the same weapons), and treats the three new ones as their base weapons.
The weapons
Section titled “The weapons”Damage is the number a direct hit takes off a worm; radius is the damage radius; crater is the land damage radius; knockback is the impulse (the vanilla Bazooka is 0.29) and reach the impulse radius. Knockback is roughly vanilla x1.2 and reach roughly vanilla x1.1, so a hit throws a worm about as far as you expect, a little further; “vanilla x1.2” in the table means Kindjal reads the game’s own number at match start and multiplies it, for the few weapons whose vanilla figure is not known here. All of it can be scaled; see “Tuning the knockback” below.
| Weapon | New name | Damage | Radius | Crater | Knockback / reach | Vanilla |
|---|---|---|---|---|---|---|
| Baseball Bat | Nail Bat | 45 | hit 24 | 0.30 | 30, hit 20, 0.25 | |
| Fire Punch | Hellfist | 40 | hit 18 | 0.27 | 30, hit 16, 0.22; hit FX is now a small blast | |
| Prod | Shiv | 10 | hit 6 | 0.15 | 0, hit 5, 0.12 | |
| No More Nails | Railspike | 30 | hit 22 | 0.08 | 15, hit 20, no knockback | |
| Bazooka | Ripper | 65 | 95 | 75 | 0.35 / 120 | 50, 82, 60, 0.29 / 110 |
| Grenade | Pipe Bomb | 85 | 85 | 60 | 0.34 / 120 | 55, 83, 51, 0.28 / 110 |
| Dynamite | Blast Keg | 80 | 150 | 120 | 0.43 / 145 | 75, 115, 78, 0.35 / 130 |
| Holy Hand Grenade | Profane Grenade | 100 | 200 | 150 | 0.55 / 165 | 80, 187, 129, 0.45 / 150 |
| Banana Bomb | Plantain Hell | 50 (7 bomblets of 60) | 0.48 / 140 (bananettes vanilla x1.2 / x1.1) | 5 bomblets, 0.40 / 125 | ||
| Cluster Grenade | Nail Cluster | 25 (bomblets 30) | bomblets 0.06 / vanilla x1.1 | 15 (bomblets 15), 0.05 | ||
| Landmine | Bear Trap | 55 | 85 | 65 | 0.30 / 110 | 40, 75, 52, 0.25 / 100 |
| Homing Missile | Harpoon | 45 | 0.27 / 110 | 50, 0.22 / 100 | ||
| Airstrike | Carpet Bombing | 35 a bomb | 80 | 72 | 0.27 / 120 | 25, 69, 58, 0.22 / 110 |
| Super Airstrike | Carrion Drop | 100 a cow | 145 | 105 | 0.36 / 145 | 80, 126, 92, 0.30 / 130 |
| Concrete Donkey | Earthquake Ass | 80 | 180 | 0.56 / 185 | 80, crater 110, 0.46 / 170 | |
| Sheep, Super Sheep | Rabid Flock, Plague Ram | 95 | 130 | 105 | 0.39 / 145 | 75, 115, 93, 0.32 / 130 |
| Old Woman | Hangwoman | 82 | 0.38 / 120 | 75, 0.31 / 110 | ||
| Scouser | Knifeman | 44 | 0.12 / 80 | 40, no knockback | ||
| Fatkins | Gorger | 82 (food 72) | 0.72 / 220 (food vanilla x1.2 / x1.1) | 75, 0.60 / 200 | ||
| Starburst | Dead Star | 110 | 0.90 / 165 | 100, 0.75 / 150 | ||
| Shotgun | Slug Gun | 50 a slug (land 35) | 0.16, accuracy 0.97 | 25, 0.13, 0.92 | ||
| Sniper Rifle | Elephant Gun | 45 | 0.12 / 45 | 40, 0.10 / 40 | ||
| Sentry Gun | Gibbet Turret | shots 80 | 95 | 70 | 0.35 / 120 | unset |
| Poison Arrow | Plague Arrow | impact 45 | 25 | |||
| Gas Canister | Rust Canister | 20 | 60 | 40 | 0.15 / 65 | no blast |
The Rust Canister’s blast and the Gibbet Turret’s shot numbers are applied without a refusal, but whether the engine honours damage on those two containers has not been confirmed in play. Utilities, the Alien Abduction and the Flood are untouched. The Knifeman, Railspike and Rust Canister have no knockback in the game; Kindjal gives them a small one (0.12, 0.08 and 0.15), enough to nudge a worm, not to throw it.
The new weapons
Section titled “The new weapons”They sit in the three free panel cells (29, 39 and 40) and follow their base weapon’s ammo and delay in the game style.
- Acid Spitter (Bazooka base): a direct-fire corrosive round, 35 damage, knockback 0.28 over 110 (a little under the Ripper’s); the burst is the gas canister’s poison cloud, and the client paints the acid on every worm in reach.
- Acid Flask (Grenade base): shatters where it lands, no fuse, 25 damage, a light knockback of 0.22 over 100, and two more acid bursts 40 units to each side, so the spill spreads.
- Crucible (Holy Hand Grenade base): 120 damage, radius 243, crater 168, knockback 0.62 over 185 (the Profane Grenade’s 0.55 / 165 and a little more); no pause and no choir, it detonates when it settles.
Their knockback is in the manifest and set again at match start by name, so the tuning multipliers below apply to them as well. Melange’s weapon clones share their base’s code; the ammo, delay, crate and AI behaviour are the base’s.
Tuning the knockback
Section titled “Tuning the knockback”Three numbers at the top of mod/sim/main.lua scale every knockback the plugin sets, the three new weapons included:
| Constant | Default | Meaning |
|---|---|---|
KNOCKBACK |
1.0 | Multiplies every knockback (impulse): 0.5 is half the throw, 2.0 double. Kept between 0 and 3. |
REACH |
1.0 | Multiplies every reach (impulse radius). Kept between 0 and 3. |
MELEE |
1.0 | Multiplies the four melee weapons’ knockback, on top of KNOCKBACK. Kept between 0 and 3. |
The results are rounded to 0.001 (knockback) and to whole units (reach), and the log line kindjal 1.1.0: ... fields applied names the multipliers the match played with. They are not on the Mods page on purpose: Mods-page settings
belong to one machine, and the match script cannot read them (Melange gives the simulation no settings at all), so a
slider there could never change a match. Editing the file is the supported way, and it is safe online: the file is part
of Kindjal’s content hash, so every player in an online match must have the same edit. A player whose multipliers
differ has a different Kindjal, and the host refuses to start, the same as for a different version. Offline, edit and
play.
Presets
Section titled “Presets”Two small add-on plugins change the knockback without editing any file:
- Kindjal Heavy (
kindjal-heavy) multiplies the knockback Kindjal sets by 1.4 and its reach by 1.15, about 1.7 times vanilla knockback. - Kindjal Brutal (
kindjal-brutal) restores Kindjal 1.0.0’s original knockback, two to three times vanilla.
To use one, enable it on the Mods page next to Kindjal (each needs Kindjal 1.1.0 or later). Enable at most one; they conflict with each other. Each is a content mod like Kindjal, so every player in an online match must enable the same one (or none): a player with a different set of add-ons has a different content hash and the host refuses to start. They stack on the multipliers above only in the sense that Heavy scales whatever Kindjal wrote; Brutal writes its own absolute numbers and ignores them.
What you see and hear
Section titled “What you see and hear”All of this is client-side and off by a setting; none of it touches the simulation.
- Acid on skin. A worm caught in an acid burst gets a glossy green-yellow coat that spreads from spots to a full coat over about ten seconds, bubbles, and fades over about a minute; wisps of smoke rise from it. The coat is a screen-space pass on skin-coloured pixels inside the worm’s body, after Bloodsand’s blood if that plugin is on, so blood still shows through acid.
- Acid bursts. Green-yellow smoke and a bubbling puddle at the burst that smokes and dies over about twenty seconds (at most three puddles).
- Melee impact. A spray of dark sparks at the victim and a short red hit-flash on a bat, prod, punch or nail hit, with its own impact sound. Spike glints on the swing are an experimental setting, off by default.
- Sounds. A swing, four impacts, a launch thump, three explosion sizes, the Crucible and two acid sounds, all
synthesised by
tools/make_sounds.py, played through Melange’swum.audioon top of the game’s own sounds with distance attenuation from the camera. - Icons. Every renamed weapon has its own panel icon and HUD icon in the game’s cel style, drawn by
tools/make_icons.pyand its group modules (tools/icons_*.py): a nail bat, a flaming fist, a shiv, a railspike, a black rocket, a pipe bomb, a powder keg, a profane orb, black bananas, a nail-studded cluster, a bear trap, a harpoon, a bomber, a falling carcass, a cracked stone donkey, a rabid sheep, a ram in a gas mask, a hooded crone with a noose, a hooded knifeman, a falling glutton, a dead star, a sawn-off, an elephant gun, a gallows turret, a dripping arrow and a rusted drum. - Models. Every renamed weapon and the three new ones have their own held and/or projectile model (the Plantain
Hell’s bananas, the Nail Cluster and its pieces, the Plague Ram, the Hangwoman, the Knifeman, the Gorger and so on),
and the Airstrike and Super Airstrike helicopters become a black and a bone-white gunship (
vehicleMeshes). 37 banks in all: 19 static meshes built bytools/make_meshes.pyandtools/build_meshes.py, and 18 clones of vanilla skinned meshes built bytools/clones_*.py(seetools/README-meshes.md). Seen in play so far: the Nail Bat, Acid Flask and Crucible in hand; the rest are only checked by rebuilding them byte for byte, and have not been looked at in a match.
Settings
Section titled “Settings”| Setting | Default | Meaning |
|---|---|---|
| Acid and impact visuals | full | off, subtle (about half strength and half the particles) or full |
| Acid smoke and puddles | on | The sprites at a burst and on coated worms |
| Melee impact flourish | on | Sparks, hit-flash and impact sounds on melee hits |
| Kindjal sound volume | 0.8 | Volume of the plugin’s own sounds, 0 to 1 |
| Spike glints | off | Experimental billboards near the hand during a swing |
These are all client-side; the knockback is tuned in the sim script instead (see “Tuning the knockback”).
In a match the overlay’s Lua menu has Preview acid, Preview melee and Acid +10 s for a look at the effects.
With Bloodsand and Sunstone
Section titled “With Bloodsand and Sunstone”Kindjal needs neither, and all three can run together. Kindjal’s acid pass runs after Bloodsand’s skin, guts and gibs
(order 54, against 51 to 53) and before Sunstone’s occlusion and grade (100 and 300), and the hit-flash is the last
thing drawn of Kindjal’s (Final 900, after Sunstone’s lens at 800 and Bloodsand’s lens splatter at 60). The client finds
the other two by their effect ids in wum.postfx.list() (checked at the start, at a match edge, when the mod list
changes and every five seconds) and adapts. It only ever switches or sets effects named kindjal/....
- Acid on Bloodsand’s worms. The acid’s skin test is Bloodsand’s (the same ratios of green and blue to red, hue and saturation) with one more limit: a hue under about 6 degrees is not skin, so Bloodsand’s red blood, the raw pink of a wound and torn skin are left as they are and green-yellow acid does not paint over them. Bloodsand’s green blood palette has green well above red and is cut by the skin test’s upper limit. A worm Bloodsand is gibbing (health gone, though the game still calls it alive) loses its coat and wisps at once instead of steaming from nothing. The hit-flash is lowered to 0.6 of its peak, because Bloodsand adds its own red splat on the lens for a hard hit near the camera.
- Acid under Sunstone. Sunstone’s model lighting tints the sun side warm and the shade cold, which pushes skin in shade to more blue over red than the game does. When any Sunstone effect is on, the acid’s skin test widens: a higher blue limit in the dark, a hue limit of 33 degrees instead of 30, a little more saturation, a lower brightness floor so skin in caves is still found (every limit is a ratio or relative to the pixel’s own brightness, so Sunstone’s exposure does not matter), and the acid is 15 percent more opaque (at the subtle intensity; at full it is already opaque). Both ease in over 0.3 s when Sunstone is switched on or off, rather than stepping, since the check can notice the change up to five seconds late. Sunstone’s tonemap keeps a colour’s hue and saturation and only moves brightness, so the acid’s yellow-green (hue 64 to 80 degrees, saturation 0.76 to 0.80) comes out at the same hue and saturation, a little brighter in the darks and whiter only on the specular rim. Its colour grade at the default strength shifts it by about 2 degrees, and 4 in the darkest spots.
- Cost. The acid pass is on only while a coated worm is within half a screen of the view. It rejects pixels off every
coated worm’s body with a sphere test, then off its skin shell, and runs the colour test before the surface normal and
the long painting code. Estimated (counted from the operations, not measured) at about 0.1 ms at 1080p. At Sunstone’s
Ultra 2x2 supersampling, which has four times the pixels, the estimate is about 0.3 to 0.4 ms, which is over the 0.3 ms
the pass was meant to stay under; treat that setting as unproven and read
gpuMsin the Mirage/Post-FX panel. The cost is assumed to be mostly the full-screen fetch, which is also a guess.
What has been checked, and how: the effect orders, Sunstone’s tints and tonemap (a Python port of its display.glsl
and Saturation, with its golden.png and dusk.png colour grades decoded) and Bloodsand’s skin test were read from
the source, the new skin test was ported to Python and swept over 300 000 random colours (it admits no more than a wider
blue, hue and brightness window, and loses only reds below 13 degrees), and the client’s detection, the opacity and
flash scaling, the gibbed-worm rule, the off-screen switch and the kindjal/ check ran against a stub of the Lua API.
No standalone GLSL compiler was used on the shaders; the game’s driver compiled both effects when Kindjal, Bloodsand
and Sunstone ran together (see Limits). Not checked: the real colours of skin under Sunstone are worked out from its
constants and not measured on frames, the GPU times above are estimates, and whether the lowered flash still reads
well next to Bloodsand’s splat is a judgement for a person to make in play.
Limits
Section titled “Limits”- Every peer needs the plugin; see above. A peer with a different version is refused by the host, and so is a peer
who has changed the knockback multipliers in
mod/sim/main.lua. - The knockback numbers are vanilla x1.2 by design, measured against the vanilla figures in the table above; those vanilla figures are the author’s readings and have not been re-checked against the game for 1.1.0. The new defaults have not yet been played in a match.
- The acid coat has sixteen worm slots. Hats, glasses and clothes are not coated (the pass only paints skin).
- The melee victim is a guess (the worm whose health dropped within reach right after a swing), so a hit that pushes a worm out of reach before the damage lands may not get its flourish.
- The sounds are synthesised; they have been checked for format and level, not auditioned by the author before the first release.
- Verified in the game before the first release: the renames (panel and tag), every stat field applied, the three clones in the panel with their icons, the 26 replaced panel and HUD icons, all three plugins (Kindjal, Bloodsand, Sunstone) running together with every effect compiled and no Lua faults, the acid coat under Sunstone’s grading, the acid coat, smoke, puddle and melee flourish, sounds playing, the Nail Bat, Acid Flask and Crucible models in hand, and a two-player LocalNet match with identical Wormsign hashes on both machines over six turns. Not yet seen in play: the three projectiles in flight, every other model (the other 34 banks and the two gunships), and whether the Rust Canister’s blast and the Gibbet Turret’s shot numbers take effect.
- The Crucible follows the Holy Hand Grenade’s ammo and delay: in the Standard style it reads “Delayed” until the third turn, like the grenade it is built on.
Licence
Section titled “Licence”MIT, see LICENSE, for everything the author wrote: the scripts in tools/, the weapon data, the icons, sprites and
sounds, the 19 static meshes and the deformations and paint of the 18 clones. The rig, skin weights, animation clips
and UV layout inside the 18 clone banks come from the game and remain Team17’s; the licence does not cover them.
Kindjal is not made by, affiliated with, or endorsed by Team17.
What is derived from the game
Section titled “What is derived from the game”Kindjal ships no copy of a game file, but some of the .xom banks in mod/assets/meshes/ are built from vanilla data
read from Bundl09.xom at build time:
- 19 static banks (
make_meshes.py,build_meshes.py): geometry and textures are generated from scratch. Each bank borrows the material and shader setup of one vanilla mesh so that it is lit like the game’s own models. - 18 clone banks (
clones_beasts.py,clones_people.py,clones_air.py,clones_guns.py,clones_props.py, made withxomtool clone): the vanilla skinned mesh is kept as the base, so its skeleton, node names, skin weights, animation clips, texture stages, vertex count and order, and UV layout are the game’s. Only the vertex positions (deformed) and the texture pixels (repainted per UV island) are new; the gunships also use the vanilla atlas as shading detail under the new colours. The Rabid Flock, Plague Ram, Carrion Drop’s carcass, the Hangwoman, the Knifeman, the Gorger, both gunships, the Slug Gun, Gibbet Turret, Harpoon launcher and Harpoon, the Plague Arrow’s bow, the Nail Cluster and its piece, the Carpet Bombing shell, the Bear Trap and the Dead Star are of this kind.
Rebuilding any of them needs a game install and xomtool (see tools/README-meshes.md).
Versions
Section titled “Versions”Released 2026-10-15 · Melange 0.9.0 or later · kindjal-1.1.0.zip (5.5 MB)
SHA-256 21e5d99aef158efdedcbc88a282427f851ab316434d0793c0099641ebce695b6
- Knockback brought back to near the game’s own: every weapon now throws worms about 1.2 times as hard as vanilla, over about 1.1 times the reach, instead of two to three times as hard (the Ripper 0.64 to 0.35, the Gorger 1.80 to 0.72, the Earthquake Ass 1.30 to 0.56, the Crucible 1.35 to 0.62). Damage, blast radius and craters are unchanged.
- The Railspike, Knifeman and Rust Canister, which have no knockback in the game, get a small one.
- Knockback is tunable:
KNOCKBACK,REACHandMELEEat the top ofmod/sim/main.luascale every knockback and reach, the three new weapons included. They live in the sim script, not on the Mods page, because the match cannot read Mods-page settings; the file is content-hashed, so every online player must have the same values. - Two optional add-on plugins pick a different knockback power: Kindjal Heavy (about 1.7 times vanilla) and Kindjal Brutal (the 1.0.0 numbers). Enable one; every online player must enable the same one.
- Weapon descriptions no longer promise worms thrown across the map.
Released 2026-10-10 · Melange 0.9.0 or later · kindjal-1.0.0.zip (5.5 MB)
SHA-256 823a350e59cbd9f47998f427a143b9b36045a0f8176f601a15b18ee9babcc09c
First release. Needs Melange 0.9.0 or later.
- Every vanilla weapon re-statted darker at match start (damage, blast radius, crater, knockback) and renamed: Nail Bat, Hellfist, Shiv, Railspike, Ripper, Pipe Bomb, Blast Keg, Profane Grenade, Plantain Hell, Nail Cluster, Bear Trap, Harpoon, Carpet Bombing, Carrion Drop, Earthquake Ass, Rabid Flock, Plague Ram, Hangwoman, Knifeman, Gorger, Dead Star, Slug Gun, Elephant Gun, Gibbet Turret, Plague Arrow, Rust Canister.
- Three new weapons: Acid Spitter, Acid Flask and Crucible, with their own icons and models; every renamed weapon gets its own panel and HUD icon.
- Models: every renamed weapon has its own held and/or projectile model (37 mesh banks), and the Airstrike and Super Airstrike helicopters are replaced by a black and a bone-white gunship. 19 banks are static meshes built from scratch; 18 are clones of vanilla skinned meshes that keep the game’s rig, skin weights, animation clips and UV layout (see “What is derived from the game” in the README). Seen in play so far: the Nail Bat, Acid Flask and Crucible in hand.
- Acid that clings to a worm’s skin, bubbles and smokes; acid puddles; melee impact sparks and hit-flash; new sounds.
- Content mod: every player in an online match needs the same version.