Primeval review

New units

New unit models, staged and waiting for your look. Newest first.

Orc Shield Warrior

2026-11-10 · 4 pictures

Second pass (v2)
Heavier gear on the same Grunt body: a thick-hafted axe with a big broad sickle claw, a bigger shield (about 0.96 m with its bone rim, three large claws), a two-layer ragged hide mantle with eight bone spikes, necklace, bone bracers, shin wraps. 10,480 triangles (Grunt +27%), still one texture. Shield and axe now clear his body on every frame.
What changed
A new Orc tank built on our Grunt: his body, face, skin, skeleton and six clips untouched; new round hide shield on a ring of bones, a raptor-claw axe in his cleaver grip, a spiked hide mantle, red sash and hide kilt. Only the gear was taken from the ChatGPT sheet, not its face.
State
Model only, staged. The second pass (v2) is here and waits for your yes; v1 is kept.
Not checked
Not imported into Unity or seen in the game; the game-camera rows are a reconstruction; ragdoll, selection circle and hit flash not tried.

Clips check

2026-11-10 · picture · tap to open full size

His six clips (idle, walk, run, attack, work, death) checked with the new gear.

Clips check

Clips check v2

2026-11-10 · picture · tap to open full size

Second pass: his clips checked with the heavier gear.

Clips check v2

Shield warrior sheet

2026-11-10 · picture · tap to open full size

Orc Shield Warrior: our Grunt (our own orc face) with a raptor-claw axe, a round hide shield, mantle and sash.

Shield warrior sheet

Shield warrior sheet v2

2026-11-10 · picture · tap to open full size

Second pass: V1 | V2 | the concept, close-ups, line-up and game camera. Say yes, or what to change.

Shield warrior sheet v2
Full notes (2 files)
NOTES_v2.txt 2026-11-10 13:22
ORC SHIELD WARRIOR - SECOND PASS (V2) ON THE GEAR - 2026-11-10
Sheets: shield_warrior_sheet_v2.jpg (V1 | V2 | concept, close-ups, line-up, game camera), clips_check_v2.jpg.
Both are also in local file: orc_shield_warrior. Staged only; nothing is in the game.
V1 is kept untouched in staged_v1 (and work_v1). V2 is in staged.

UNCHANGED FROM V1 (as asked)
 The grunt's body, face, skin (Regional colour v2), 71-bone skeleton, skin weights and all clips; one 1024 atlas and
 one material; team colour only on the red sash and the shield's red raptor-track paint.

WHAT CHANGED IN V2
 - AXE: heavy weapon now. Thick wooden haft (5 cm thick outside the fist), a bone knuckle at both ends, a square bone
   block where claw meets haft, a big broad sickle claw (17 cm wide at the root, about 50 cm along the curve, dark
   brown root to ivory tip), two rope wraps and a rope X lashed over the block. Same fist and grip as the grunt's
   cleaver, turned 15 degrees about the haft and tipped 7 + 10 degrees so it clears his calf; the claw hangs down.
 - SHIELD: 0.84 m across plus a thick rim of five long lashed bones (about 0.96 m overall; V1 0.72 m), dished
   dinosaur-hide face, a rope lashing at every joint, three LARGE curved claws hanging from the bottom (about 33 cm),
   two leather arm straps on the back round the forearm. Turned more to the front and tipped up so the game camera
   sees the round face. Red raptor-track paint kept (team colour).
 - MANTLE: two layers of ragged dinosaur hide: a cape over shoulders, upper chest and back, plus a second ragged flap
   on each shoulder; both have a turned hem so the hide shows thickness. Eight big bone spikes (up to about 36 cm)
   rise from the shoulder flaps. The cape now sits 6 cm off the body.
 - Also added from the concept: tooth-and-claw necklace (3 teeth, 2 claws), bone-plate bracers lashed with rope on
   both forearms (plates kept off the side under the shield), hide shin wraps over the boots with two bone splints and
   a rope each, ragged hide flaps over both hips, five claws hanging from the belt, sash tails at the front AND back.
 - How the hides stay out of the body: each hide piece follows the body under it; then every vertex was played
   through Idle, Walk, Run, Attack and Death and pushed out wherever it would come within 8 mm of him (at most
   6-10 cm). The part of the mantle over each shoulder cap follows the upper arm like a pauldron.

TRIANGLES AND TEXTURE
 - 10,480 triangles = grunt 8,241 + 27.2 % (allowed +30 %). Body 7,338; shield 854 + straps 96; axe 428; mantle and
   spikes 512; necklace 166; sash 232; hip flaps 72; belt claws 190; bracers 348; shin wraps 164; splints 80.
 - Still ONE 1024 atlas and ONE material: no second texture was needed. Gear is in the props strip at 174 texels/m
   (body 236; V1 216). The mantle, shoulder flaps, hip flaps and shin wraps are at 75-80 % of that. Repeats share
   texels (rim bones, claws, spikes, ropes, mirrored left/right halves). So the install is the same as V1.
 - Team-colour brightness for levels.txt: 0.123 (V1 0.128).

CLIP CHECK, EVERY FRAME (true inside test, 4 mm tolerance). Work clip NOT checked: a soldier never plays it.
                 Idle(61)  Walk(29)  Run(21)  Attack(25)  Death(37)
  SHIELD          0         0         0        0           0          (V1: Run 9 frames, 13 mm)
  AXE             0         0         0        0           0          (V1: Attack frame 11, 9.5 mm)
  MANTLE          0         0         0        3 (16 mm)   0          (V1: Attack up to 75 mm)
  hip flaps       0        17 (7 mm) 19 (11 mm) 1 (4 mm)  20 (7 mm)
  sash + tails    0         0         7 (8 mm) 0          26 (4 mm)
  belt claws      0         0         0        0           0
 - MANTLE is NOT quite 0: Attack frames 6, 7, 8 (the wind-up), the front of the right shoulder still meets the hide
   by 8, 16 and 15 mm. Everything else on the mantle is 0 on every frame. Pushing it further made the hide balloon,
   so I stopped there.
 - Left out on purpose (inside by design, fixed, not caused by the clips): the axe grip in his fist (14 mm), the
   shield straps round his thick leather bracer (36 mm), the mantle collar tucked behind his beard (the beard covers
   it; up to 26 mm in Death), ropes, cord and bone splints pressed into his leather (6-17 mm).
 - Legs: the shin wraps and splints meet the back of the thigh when the knee folds deeply (Run up to 30 mm,
   Death up to 34 mm / splints 51 mm while he lies on the ground).

WHAT LOOKS WEAK
 - Next to the concept it is closer but still lighter: the concept's hide mantle is a big layered cape over the whole
   torso; ours is a collar-and-flaps cape on the shoulders. The concept's shield is held up in front; ours hangs on
   the hanging arm, because the grunt's clips are kept.
 - The front and back views show the shield edge-on (it faces out to the side and forward); it reads as a round disc
   from the game camera and three-quarter views.
 - The right side of the mantle was pushed out up to 10 cm to clear the raised arm, so up close it sits a little
   proud of the right shoulder. The hide pattern reads as cracked tiles up close. Sash looks a bit thick.

NOT CHECKED
 - Not imported into Unity; the game shader, lighting and an in-game look were not checked. The game camera is my
   reconstruction (34 m, 54 degrees, 45 degree view, 1920 x 1080). Team colours in the pictures are the TeamLit
   formula applied by me.
 - The staged FBX was re-imported and compared with the live grunt: same 71 bones, rest pose, parents, six takes
   with the same frame counts, every bone on every frame equal (within 0.00002), one material, one UV map, the same
   two blend shapes, every vertex weighted. Some vertices keep up to 10 influences, as in the grunt; Unity keeps 4.
 - Ragdoll, hit flash and wound overlay on the new gear, the unit icon: not tried.

WHAT A UNITY INSTALL NEEDS: the same as V1 (see NOTES.txt). Files in staged: orc_shield_warrior.fbx,
 orc_shield_warrior_basecolor.png, orc_shield_warrior_normal.png, orc_shield_warrior_teammask.png,
 local file: orc_shield_warrior.png, orc_shield_warrior.json.draft; add "orc_shield_warrior 0.123" to
 local file: levels.txt; new .mat / .controller / prefab copied from the grunt's; unit code and data.
 No second material, so no code change for that.

WORK FILES: local file: build_v2.py + local file: gear_v2.py (params in local file: params.json), local file: shield_warrior.blend,
 local file: measure_final.json (every frame), local file: measure_final_v2.txt, local file: sheet_v2, local file: clips_v2.
NOTES.txt 2026-11-10 12:29
ORC SHIELD WARRIOR - new Orc unit, model only, STAGED - 2026-11-10
Sheets: shield_warrior_sheet.jpg, clips_check.jpg (both also in local file: orc_shield_warrior).
Nothing is in the game. No game file was written. No Unity, no game exe. Blender headless only.

BASE CHOSEN: THE GRUNT (local file: grunt.fbx, read only)
 - Why the grunt: he is our standard orc foot soldier (our face, beard, tusks, green "Regional colour v2" skin, which
   is already in his live texture). His one-hand weapon in the right hand and free left arm suit an axe-and-shield unit.
 - Why not the brute: his yellow, hunched body IS the brute's identity; a shield on him would read as "brute with a shield".
 - Why not the warchief: he is the hero, and his top-knot and big tooth necklace are close to the concept's
   Warcraft-looking head that the owner rejected.
 - Not just a re-coloured grunt: the hide mantle with six bone spikes, the big round shield, the claw axe, the red sash,
   the hide kilt and the bone-and-rope wraps change his outline from every side (see the line-up and game rows).
 - From the concept sheet I took ONLY the gear. Its face, hair knot and braids were not used.

WHAT WAS DONE
 Kept from the grunt, untouched: body mesh, face, skin texture, skeleton (71 bones), all skin weights, all six clips
 (Idle 61, Walk 29, Run 21, Attack 25, Work 31, Death 37 frames), the "V_None" blend shape, the one material.
 Removed from the grunt: his cleaver (348 tris), his left shoulder pad (393), the belt buckle (68) and the chest-strap
 buckle (94) - all hidden or replaced by the new gear.
 New gear (all modelled and painted by script in Blender, our own shapes):
  - SHIELD: round, 0.72 m across, dished dinosaur hide on a rim of six lashed bones, three big claws along the bottom,
    red raptor-track paint (three toes) on the face, two leather straps round the forearm. 100% on the left forearm
    (CC_Base_L_ForearmTwist02; the twist bones never turn in these clips, so it is rigid to the forearm). Designed in
    the Idle pose: it hangs on the outside of the left forearm, turned about 40 degrees to the front and tipped up, so
    the game camera sees its face.
  - AXE: raptor sickle claw lashed with rope to a bone-knuckle head on a wooden haft, hide-wrapped grip, bone pommel.
    100% on the right hand, in exactly the grunt's cleaver grip (carry KEPT: same fist, same angle). The haft points
    forward from the fist, the claw HANGS DOWN with its inner (cutting) curve facing down and back, like the cleaver's
    blade. Turned 15 degrees about the haft so the claw clears his calf.
  - HIDE MANTLE over shoulders, upper chest and upper back, ragged hem, six bone spikes (three per shoulder, up and
    out). The part over each shoulder cap follows the upper arm like a pauldron; the rest follows the chest.
  - TOOTH NECKLACE (cord + five teeth), RED SASH over the belt with a knot and two tails on the left hip, three claw
    pendants on the kilt front, rope rings and bone splints on both forearms and both shins.
  - The grunt's grey loincloth is REPAINTED as brown dinosaur hide (same folds and light), so the kilt reads as hide.

TRIANGLES AND TEXTURES
 - Grunt 8,241 tris. Shield warrior 9,420 = 7,338 body + 2,082 gear (shield 538, straps 128, axe 332, mantle+spikes
   308, necklace 118, sash 136, kilt claws 66, rope rings 336, splints 120). +14.3 % on the grunt: inside the 15 %.
 - One 1024 x 1024 atlas and ONE material, exactly like the grunt (no extra draw). The gear is painted into the
   atlas's right-hand props strip (x 895-1022), where the grunt's cleaver was painted; nothing else used that strip.
   Gear texel density 216 texels per metre, body 236 (92 %); the mantle is at 80 % of the gear density so it fits.
   Ropes share one rope patch, the six rim bones share one, the claws share one, mirrored halves share.
 - Body texels: identical to the grunt's texture except 52,948 loincloth texels (the hide repaint).
 - Normal map: the grunt's normal map unchanged (the props strip is flat there already). Gear has no baked normals;
   its light, edge wear and shading are painted in, as on the berserker's axes.

TEAM COLOUR
 - Team colour = the red sash (band, knot, tails) and the red raptor-track paint on the shield. Nothing else.
 - The grunt's team mask marked his grey loincloth and a few grey scraps; the shield warrior's body has NO team colour
   (his loincloth is now hide). 29,380 texels are team colour, all in the props strip.
 - Brightness reference for Resources/TeamCloth/levels.txt: 0.128 (mean linear brightness of those texels).
 - The blue / red pictures on the sheet are the TeamLit recolour formula applied by me in Blender, not the game shader.

DO THE SHIELD AND AXE PASS THROUGH HIM?  (every frame of every clip; true inside test with 4 mm tolerance)
 SHIELD: Idle 0 of 61 frames, Walk 0/29, Attack 0/25, Death 0/37 (closest 17-18 mm).
         Run: 9 of 21 frames (frames 10-18), at most 13 mm, where the bent elbow meets the shield's top edge.
         Work (a builder clip the grunt has; probably not needed by a fighter): the shield reaches his head on 15 of
         31 frames, up to 57 mm. The two arm straps sit 25 mm into his thick leather bracer on every frame (fixed,
         by design: they are strapped tight; they do not move against him).
 AXE:    0 frames in every clip except Attack frame 11, where the claw tip grazes his right calf by 9.5 mm at the end of
         the chop. The grip sits inside his fist by design (left out of the count).
 OTHER GEAR (not asked, reported so nothing is hidden):
  - MANTLE: Attack frames 4-9: his raised right shoulder and upper back come up through the hide by up to 75 mm (the
    hide over the trapezius disappears for those frames, visible from behind). Death up to 40 mm, Run up to 31 mm on
    a few frames (chest, under the collar), Idle 20 mm and Walk 9 mm at the front collar under the beard. Behind the
    beard the collar is inside the beard on purpose (the beard hangs over it).
  - Rope rings, splints, necklace cord, sash: they are cords pressed into the leather, 10-16 mm "in" on every frame
    including the bind pose - fixed seating, not clipping caused by the clips (a few mm more on knee or elbow bends).
 No new animation was made, as asked.

WHAT LOOKS WEAK
 - The mantle's Attack problem above. Fixes later: a shorter mantle on the axe shoulder, or a calmer shoulder in a
   new Attack clip for this unit.
 - Close up, the mantle reads as a separate shell; its hem is a single sheet (no thickness).
 - Shield rim, lashings and straps are simple low-poly shapes; the hide pattern is a little "cracked tiles".
 - The axe haft is held level like the cleaver (claw hanging down). If the owner wants the whole axe hanging
   head-down along the leg, the grip has to change, which means a new hand pose / clip.
 - Same body as the grunt and berserker: from the game camera his difference is the gear (shield disc, spikes, red
   sash, pale claw), not his size. If he should look bigger, the game could give him a larger scale.

NOT CHECKED
 - Not imported into Unity, not seen under Primeval/Team Lit, not seen in the game. Unity's own FBX import (welding,
   tangents, smoothing) unseen. The game-camera rows are my reconstruction (34 m, 54 degrees, 45 degree view,
   1920 x 1080), not a game screenshot.
 - The FBX was re-imported in Blender and compared with the live grunt: same 71 bones (names, order, parents, rest
   pose within 0.00001), same six takes with the same frame counts, every bone on every frame equal (0.00001), one
   material, one UV map, the same two blend shapes, every vertex weighted. Some original grunt vertices use up to 10
   bones; that is as in the grunt and Unity keeps its usual 4.
 - Ragdoll on death, selection circle, hit flash and wound overlay on the new gear were not tried.
 - Unit icon / portrait not made.

WHAT A UNITY INSTALL NEEDS (none of this was done; it is a NEW unit, so nothing live is replaced)
 Staged files (local file: staged) -> local file: _Primeval...
  1. orc_shield_warrior.fbx            -> local file: orc_shield_warrior.fbx
     Objects: orc_shield_warrior_rig, orc_shield_warrior_mesh. Takes: orc_shield_warrior_rig|Idle, |Walk, |Run, |Attack,
     |Work, |Death. Import like grunt.fbx.meta: Generic rig (animationType 2), materials not imported, blend shapes on,
     weld on, clips Attack 0-24, Death 0-36, Idle 0-60 loop, Run 0-20 loop, Walk 0-28 loop, Work 0-30 loop.
  2. orc_shield_warrior_basecolor.png  -> local file: orc_shield_warrior  (sRGB, like grunt_basecolor)
  3. orc_shield_warrior_normal.png     -> local file: orc_shield_warrior  (normal map; a copy of the grunt's)
  4. orc_shield_warrior_teammask.png   -> local file: orc_shield_warrior
  5. local file: orc_shield_warrior.png  -> local file: orc_shield_warrior.png (linear, like grunt.png)
  6. Add the line "orc_shield_warrior 0.128" to local file: levels.txt.
  7. New orc_shield_warrior.mat (copy grunt.mat, point _BaseMap/_MainTex, _BumpMap and _DetailMask at the new files),
     orc_shield_warrior.controller (copy of grunt.controller with the new clips), orc_shield_warrior_detailed.prefab
     (copy of grunt_detailed.prefab on the new FBX, material slot 0 = the new .mat).
  8. orc_shield_warrior.json: staged as orc_shield_warrior.json.draft = grunt.json with the key changed (same clips,
     same ground speeds). Its "scale" 1.094 matches the grunt's height (1.97 m); raise it if he should stand bigger.
  9. Code / data (not written): the unit itself (stats, cost, build button, faction roster), and adding
     "orc_shield_warrior" to DetailedUnits.SupportsHumanoidRagdoll if he should ragdoll like the grunt.
  If you would rather not have a new prefab yet, the berserker's route also works: nothing here touches grunt files.

WORK FILES
 scripts (build.py = the whole build, params in local file: params.json; measure.py; render_*.py; compose.ps1),
 local file: shield_warrior.blend (the staged model with a per-part face tag), local file: measure_final.json (every frame),
 local file: measure_final.txt, local file: build_log.json, renders.

Tribe Clubman

2026-11-10 · 1 picture

What changed
Our Villager as the base (his attack is already a one-handed overhand blow), a club in his fist, the tunic re-tinted hide brown so he is not taken for a villager. Uses the approved new standing, walk and run.
State
Model only, staged. Today the Clubman in the game is still the old block figure.
Not checked
Not in Unity or the game; no video made; he will not sit at a campfire (those clips were not built).

Clubman sheet

2026-11-10 · picture · tap to open full size

Tribe Clubman: the Villager as the base, a club in his hand and a hide-brown repaint.

Clubman sheet
Full notes (1 file)
NOTES.txt 2026-11-10 12:22
TRIBE CLUBMAN - DETAILED MODEL (10 Nov 2026)        STAGED ONLY. NOTHING HERE IS IN THE GAME.
=====================================================================================================
Owner's instruction: "You can use our assets for the tribe units just change the weapon by making a club for him."
So no new character: an existing Tribe man, his weapon taken away, a club put in his hand.

WHAT THE GAME EXPECTS TODAY
  UnitRole.Clubman, art key "clubman" (DisplayCatalog.Tribe.cs: "Brawler with a knotted war club", weapon "War club").
  Catalog.Tribe.cs: radius 0.42 m, speed 4.0, 122 HP, 2 armour, Melee, 22 damage, range 1.6 m, cooldown 1.2 s.
  No local file: clubman folder exists, so he is drawn as the old block figure. The detailed-model builder
  (local file: DetailedUnitBuilder.cs) picks up any private file and expects the clips Idle, Walk, Run, Attack,
  Death (Work only for workers), <key>.json (frames, ground speed, impact_seconds), <key>_basecolor.png,
  <key>_normal.png, <key>_teammask.png. A mesh named Held_* is drawn with the props palette material, always shown.
  MeleeContactTable.cs lists Clubman as "not measured (no detailed model)".

BASE CHOSEN: THE VILLAGER  (and why not the others)
  Looked at the Attack clip of every candidate from the side and 3/4 (local file: *.jpg):
  - SPEAR WARRIOR: his attack is a spear THRUST (lower, draw back, jab forward). Wrong for a club. Also shield + heavy hides.
  - SPEAR THROWER: overhand throw, arm laid back level for 7 frames, release over the top; his spear rides its own bone
    that is scaled to nothing after the release. Would need a new attack.
  - SLINGER: holds the arm straight up and whirls the sling for 8 frames before the throw. Would need a new attack.
  - HEAVY GUARD: mace blow, but armoured, shield, smaller 22-bone skeleton with no fingers.
  - VILLAGER: his Attack is already a one-handed overhand melee blow: fist raised past the head, brought over and down in
    front, timed for melee (impact 0.3 s, frame 10). With a club in that fist it IS a club blow. Lightly dressed, full
    finger bones (fingers can close round a handle), approved new Idle / Walk / Run from this week.
  The villager's work tools ride a tool bone in the right fist (R_Tool, child of the hand); the club rides the same bone.

  So that he is not taken for a villager: (1) the club, always in his hand; (2) a free repaint: the villager's cream linen
  tunic and fur trims are re-tinted to tanned hide brown (only pale, low-saturation warm pixels; skin, the grey team
  cloth and the dark leathers untouched). Same mesh, same UVs, same team mask. See the line-up on the sheet.

WHAT CHANGED (against the live villager.fbx, compared bone by bone on every frame)
  - Out: Prop_Axe / Prop_Pick / Prop_Mallet and the task clips Mine, Forage, Chop, Build, and Work (the game plays Work
    only for workers at work).
  - In: Held_Club, 1098 tris (body 7591 tris unchanged; total 8689; the three tools were 180), skinned wholly to R_Tool.
    0.86 m butt to tip, handle 22 mm radius, head 18 cm across, carved faceted wood with darker streaks, six knapped
    stone studs (one bone), cord lashings over the head, pale sinew wrap from the knob to past the hand, dark knob.
    UV'd onto the game's props palette (point-filtered flat cells: wood, dark wood, stone, bone, rope, binding), the same
    material as the villager's tools and every Held_ weapon.
  - Right hand closed round the handle in every clip (the villager's own Attack fist, which work_grip.py fitted for
    a tool haft). The haft crosses the fist at 52 degrees to the fingers (the Chieftain's club setting), head over the thumb.
  - Moved bones: right upper arm, its two twist bones, forearm, its two twist bones, hand, fingers, R_Tool. EVERY OTHER BONE
    IS IDENTICAL (largest difference 0.002 mm). Death touches only the hand, fingers and R_Tool.
  - Idle: wrist turned toward the little finger 30 deg and 20 deg about the forearm, upper arm 5 deg out: club hangs
    forward and down beside the right leg, 37-42 deg below level.  Carry CHANGED (the villager carries nothing).
  - Walk: the villager's walk kept; the right arm's swing reduced (35 % toward the standing arm), wrist 20-30 deg
    toward the little finger, about the forearm 24: club 21-46 deg below level as it swings.
  - Run: the right arm's pump reduced 75 % toward the standing arm (otherwise the club came up level in front), wrist the
    same way: club 24-43 deg below level. The left arm still drives.
  - Attack: the villager's blow, re-aimed only at the right shoulder and wrist: frames 5-9 the upper arm is turned out
    up to 28 deg so the hand goes up over the RIGHT shoulder, not behind the head (it cut through his head before);
    wrist cocked back at the top, snapped forward at the contact. Frame 1 lift, 5 club up, 7 cocked behind the head, 9 over
    the top, 10 CONTACT (club level, forward, at the target's chest), 11 carried down past his right side, 13-25 back
    to the carry. Clip length 25 frames, impact 0.30 s, as before.
  - Death: the villager's fall; the wrist turns as he lands so the club ends lying 4 deg up, not sticking up 34 deg.
  - Ground speeds and frame counts kept exactly (Idle 61, Walk 29 at 1.691 m/s, Run 21 at 5.163 m/s, Attack 25, Death 37).

ATTACK VERDICT
  The base attack is an overhand blow, NOT a thrust: from the side the club goes up, back over the head, over the top and
  down onto the target, level at chest height on the contact frame. It reads as a club blow. Re-aimed (shoulder + wrist
  keys), not a new clip. Numbers on the contact frame, against the live Grunt (as MeleeContactTable's audit does):
    TOUCH 1.28 m (centre to centre with the club 5 cm into a Grunt), REACH 1.13 m, touch HEIGHT 1.39 m (upper chest).
  Weak: the villager's blow is fast and short; the club goes from level in front (frame 10) to down by his leg (frame 11)
  in one frame, and the wind-up starts with the arm lifting forward (frame 3: the club points forward for a moment
  before it goes up). There is no body turn or step into the blow (it is the villager's arm-only punch).

CLEARANCE (the staged FBX re-read in Blender; every vertex and face centre of the club, every frame; true inside test)
  Club through body, legs, head or left arm: 0 frames in Idle, Walk, Run, Attack, Death.
  Closest approaches: Idle 33 mm (hip/belt, the knob behind the fist), Walk 9 mm (hip), Run 21 mm (hip), right leg
  >= 121 mm in Idle/Walk/Run, Attack 165 mm (right leg) and 175 mm (body), Death >= 250 mm. Lowest point over the ground:
  Idle 0.43 m, Walk 0.40, Run 0.28, Attack 0.24, Death 0.08 (it does not go into the ground).
  Wrist: largest bend 40-41 deg in Idle / Walk / Run / Attack (measured hand against forearm; about 10 of that is the
  rest pose), 39 in Death.
  Earlier tries cut: the attack's handle through his head (frames 7-8, fixed by the shoulder turn), the club head into
  his right calf on frame 11 (fixed), the knob into his hip when standing (fixed by 5 deg of shoulder).

WHAT LOOKS WEAK
  - The club hangs forward-down, not straight down: a hammer grip cannot hang it vertically (the reference sheet holds it
    upside down, head below the little finger, which cannot then strike). Like the Heavy Guard's mace, it points ahead of
    him, 37-46 deg down; in the forward part of the walk / run swing only 21-24 deg down.
  - At the game camera at true size the club is a short dark stick (about 20 px); the tunic colour is the bigger
    difference from a villager. Same face, hair and build as the villager: close up he is a villager in a hide tunic.
  - The fist is the villager's attack fist, fitted to his tool hafts: the fingertips sit 1-2 cm off the handle and the
    little finger dips 2 cm into it (hidden in the mitten-like low-poly hand). Close up only.
  - The Attack still starts from the villager's OLD standing pose (hand 11 cm from the new Idle's), as the live villager's
    does; the game cross-fades 0.15 s.
  - Props palette = flat colours: the club has no painted grain, only facets and colour cells. 1098 tris is heavy for a
    prop (the villager's tools are 52-64 each); can be halved if wanted.

NOT CHECKED
  - Nothing seen in Unity or the game: no import, no prefab build, no game lighting or real team tint (the sheet tints the
    mask teal by hand), no blending between clips, no 1.25x engage sprint, no crowd.
  - Videos: none made; judged from still frames (8 per locomotion clip, every attack frame at some pass) and numbers.
  - The right forearm / hand against the body was not measured after the arm changes (only the club was); nothing seen
    in the stills.
  - Campfire clips: villager_campfire.fbx was NOT copied as clubman_campfire.fbx: its sitting / eating / drinking clips
    would move the club with an open hand round his face; not built, not checked. Without it he will not sit at a fire.
  - Ragdoll: not checked (the game's ragdoll is opt-in per key, see below).
  - The villager's foot-plant timing row (see below) on this unit.

WHAT A UNITY INSTALL WOULD NEED
  1. New folder local file: clubman with the five files from staged:
       clubman.fbx  clubman.json  clubman_basecolor.png  clubman_normal.png  clubman_teammask.png
     (normal map and team mask are the villager's own, same UVs; the base colour is the re-tinted villager map.)
  2. Unity: Primeval > Build Detailed Units (DetailedUnitBuilder makes the import settings, material, controller and
     clubman_detailed.prefab, and adds the entry to local file: DetailedUnits.asset). Held_Club gets the props material.
  3. Code (optional but expected, none done):
     - MeleeContactTable.cs (generated from local file: CONTACT_TABLE.csv): add
         new Row(UnitRole.Clubman, 1.28f, 1.13f, 1.39f), // Clubman: war club
     - FootPlant.cs: a row for "clubman" like the villager's. The tribe A notes say the villager's row does not match his
       new clips and suggest:  Person("clubman", 7, Heeled(0f, 0.1032f, 0.6071f, 0.5f, 0.6032f, 0.1071f), Biped(0f, 0.3f, 0.5f, 0.8f)),
       (copied from the villager's line; the meaning of the second number not checked).
     - DetailedUnits.cs SupportsHumanoidRagdoll: add "clubman" only after his ragdoll is looked at (same skeleton as the
       villager). Otherwise he plays his Death clip.
     - Other per-key lists that know "villager" (PersonHit.cs hit weight, HumanoidIdleVariation.cs, AnimNames.cs) do not
       list clubman; defaults apply. UnitRenderer.Missiles.cs has a comment that the Clubman has no detailed model.
  4. Nothing in local file: PrimevalMirror or local file: E: was written. The json in local file: export_* (normal_map/team_mask false) is the
     exporter's by-product; use local file: clubman.json.

FILES
  staged            the five install files
  clubman_sheet.jpg  turnaround; club and grip close-ups; line-up with the spear thrower and villager; game camera at
                     true size and x3; Idle, Walk, Run, Attack (with a Grunt at the touch distance), Death frames
                     (copy in local file: tribe_clubman)
  tools             build.py (the clubman from the villager), clubgeo.py (the club), measure.py (clearance, wrist, reach,
                     touch), cmp.py (against the live villager), recolor.py (the tunic), rclip.py / sheet_render.py /
                     compose.sh (renders), export.sh (the game's own exporter, read from local file: PrimevalMirror)
  local file: params_final.json  the final numbers; local file: club_final7.blend the source; local file: m_final7.json all the measurements
  removed           earlier staged files and render folders (nothing deleted)
  Note: a mistaken first render went to local file: renders; the files were moved here and the empty folder local file: renders is left
  (the tool would not remove it).