Generating ten kinds of weapon from one table in Blender
A kit that lofts swords, axes, bows and a handgonne along a line through a fist, with ornament as geometry, themes as data and a clip check in three hands.
One kit now makes every weapon a fist holds in Blobber from a flat table of numbers. It has ten kinds, one for each weapon skill in the game: sword, axe, dagger, mace, spear, staff, bow, crossbow, firearm and thrown. 24 models were built as a study on 10 October, and none is installed in the game yet. The work is done by AI coding agents that I direct.
Building every weapon on a line through a fist
The kit is one Python file, weapon_kit.py, and a second weapon of a kind is another spec. A second kind is another row of a table, never another script.

On 9 October I looked at the 12 installed weapons beside the new orc. They were crude. They’re fine to keep for now as test devices, but I wanted a weapon generator, with one kind for each skill type, in high fantasy first.
The skeleton of a weapon is a line, +Y, through a fist. From the bottom it has a butt (a pommel, a ferrule or a spike), the haft, a guard or none, bare haft above (none on a sword), and the working end. The haft is the one part inside the fist. Everything is placed by where a standard fist ends on the haft, so the game can scale the weapon to any hand. A spec’s lengths are metres at that standard fist. In the new orc’s hand they come out 0.67 as long: the sword is 0.91 m and the spear 1.95 m.
A kind is a row of numbers laid over the default spec, plus one of a few builders of the working end:
- a blade: the sword, the dagger, a spear’s point, a dart’s point
- wings about the haft: an axe’s bit, a mace’s flanges, a dart’s vanes
- a claw and its orb: the staff
- limbs and a string: the bow, a crossbow’s prod
- a barrel: the firearm
The haft, grip, guard, butt, collars and gem are the same code for every kind.
Every part is lofted from rings of numbers in plain Python (loft, rod, lathe, tube, wing), with no Blender primitive. Each part is closed and sunk into its neighbour, so a gap check can tell what holds what. The kit imports no Blender until a build is asked for, so the model workbench can read its schema and its members as plain Python. It lists weapons as its sixth generator.
The origin is at the grip, +Y along the haft and +Z toward the knuckles. Export is .glb with one baked material and one lit one, and a 128 px texture set a weapon.
Carrying a section along a blade
A blade is a section carried along its length. There are four sections: flat with bevels, a ridge (a diamond), a ridge with a fuller (eight points, the fuller fading out), and one edge with a thick back. The width follows a profile of heel, belly, taper and a point drawn as an ogive. The thickness thins to the point. A blade may also curve, twist or be ragged.
A blade made as a field snapped to its edges was argued out and not built. A loft gives every edge exactly in 40 to 130 triangles. A field needs 288 before the snap.
Pieces are built with as few rings and sides as a detail level gives. Then the faces no eye can reach are removed. A collapse runs only if the model is over the class’s target of 300 triangles, with a cap of 600.
Why is ornament geometry and not paint?
Ornament is one number: 0 plain, 1 dressed, 2 ornate. A table says what each level turns on: a fuller, a shaped guard, collars, a gem, finials, inlay, a second gem.

Ornament is geometry in another material, never a painted stripe. A 128 px picture can’t hold a line that is seen at 5 m. Painting the grip’s wrap and putting nicks in the normal map were argued out for the same reason and not built: they come to a pixel or two at 2 m.
The gem is a lit piece. It is the one contrast of surface still seen at 12 m.
Each comparison in the study was built as an alternative with one thing changed, and rendered in a fist at 2, 5 and 12 m. The things compared were the blade’s section, the size of the working end, guard and pommel, the grip’s wrap, the gem, wear by state, the three levels of ornament, mesh detail and texture size. That came to 28 alternatives on 20 sheets.
I went with dressed as the default level, and ornate is kept for unique items. The working end stays as drawn. The lit pieces on the fantasy weapons look great.
Re-dressing one sword for five themes
A theme re-dresses the same skeleton from data: what each part is made of, and a few numbers multiplied, added or set. A meat blade swells and is ragged. An eldritch one twists. No theme is a branch in the code. A living state changes surface and light only.

One shared picture for all of a theme’s weapons was the fourth comparison not built, because the shared bake can’t do it yet.
Checking a weapon in three fists
The kit refuses anything but the haft inside the fist’s span. Each weapon is then put in the fist of three bodies: the new orc, a goblin with a 0.073 m fist and a large orc with a 0.140 m fist. It is run through the body’s five clips, looking for anything that passes through the hand. By the building agent’s own run that was 42 weapons in 3 bodies through 68 poses, with 0 clips. Each model is also built twice and must come out the same bytes, and 24 of 24 did.
Every model in the project goes through a 19-step pipeline with a record. Step 14 compares a new model with the one it takes over from. The 12 swords that have an installed blade of their theme were compared with it. The other 12, the nine new kinds and the steampunk sword, take over from nothing, and only I can declare that. The declaration lives in three places that a test holds together: the generator, the pipeline document’s table and the test’s own list of answers. After the merge one test failed until the table had its row.
What is still wrong with them?

Ranged and two-handed kinds have no pose of their own, so a bow is carried like a club. A body has one weapon socket and one attack clip, a sword’s swing. A second grip, a held pose a kind and an attack clip a kind are all still to do.
The other faults I’ve seen and not mended:
- The mace, staff and firearm are over 300 triangles and are collapsed to the target, so flanges and prongs lose points.
- The crossbow’s steel prod reads as a blade from the front.
- The eldritch blade is black on black at 5 m.
- A haft is 2 cm thick in the orc’s hand and the fingers don’t close on it.
- Both spear rows show a huge blade across the orc at 2 m.
The firearm is a handgonne and the thrown weapon is a war dart. I’m going with those for now.
The ten kinds are right. The 12 older weapons are still what monsters hold.