Primeval review

Trophies and icons

Hero trophy models and new research icons. Newest first.

War Charge icons and the Raptor Claw rework

2026-11-10 · 2 pictures

What changed
Three research icons (Spear Rush, Blood Rush, Grave Leap) composed from the game's own painted icon art; the Raptor Claw trophy now lies on its side so it no longer reads as a feather bundle.
Still wrong
The Spear Rush spearhead is the same art as Flint Spearheads, told apart only by angle and the teal trail (prompt A1 asks for a new one).
Not checked
Staged only: not seen on the real command card or in the game.

War charge icons

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

New War Charge icons (Spear Rush, Blood Rush, Grave Leap) beside their neighbours at 48 and 32 px.

War charge icons

Raptor claw (before vs after)

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

Raptor Claw trophy rework: the claw lies on its side so it no longer reads as a feather bundle.

Raptor claw (before vs after)
Full notes (1 file)
NOTES.txt 2026-11-10 11:01
WAR CHARGE ICONS + RAPTOR CLAW TROPHY FIX - 2026-11-10 (staged only; nothing written to the mirror, E:, F:)

JOB 1 - WAR CHARGE RESEARCH ICONS (three)
What the game has now: Spear Rush borrows research_flint, Blood Rush research_berserker_rage, Grave Leap
research_ghoul_frenzy (war_charge REPORT "ICONS OWED"; DisplayCatalog.Tribe/Orc/Undead.cs, 5th Info argument).
How the neighbours are made: 256x256 opaque PNG, no border/frame, painted (image-generator look), one object on a
near-black backdrop (RGB ~15-20), usually on a small rock ledge; tiers shown by gold nuggets / purple diamonds.
How these were made: composed in Blender's Python (numpy) from the game's OWN painted icon pixels, so the brushwork
matches exactly: the faction weapon from its neighbour icon, turned to drive forward/up-right, with a motion smear,
speed streaks and a faint glow in the faction colour, dust kicked off the ground ledge. No image service used.
  local file: research_spear_rush.png   Tribe   flint spear (from research_flint), teal trail
  local file: research_blood_rush.png   Orc     iron axe (from research_orcish_steel), blood-red trail
  local file: research_grave_leap.png   Undead  crystal talons (from research_ghoul_frenzy), violet trail
  256x256, RGBA (opaque), same as research_flint.png.
"Tiers": these are three single-level researches (one per faction), not tiers of one upgrade, so they are told apart
by weapon silhouette and trail colour; no nugget/diamond tier marks were added.
Checked at 48 px and 32 px (war_charge_icons.jpg, beside six neighbours): weapon + coloured streak still read.
Weak point: the Spear Rush spearhead is the same art as Flint Spearheads (turned flat and streaked), and both can
show on the Tribe player's screen; it is distinguishable by angle and teal trail, not by a new object.

INSTALL (needs a small code change, three lines, plus Primeval > Build UI Art so UiArt.asset lists the new keys):
  local file: research_spear_rush.png -> local file: research_spear_rush.png
  local file: research_blood_rush.png -> local file: research_blood_rush.png
  local file: research_grave_leap.png -> local file: research_grave_leap.png
  local file: DisplayCatalog.Tribe.cs  line 79  (Spear Rush)  "research_flint"          -> "research_spear_rush"
  local file: DisplayCatalog.Orc.cs    line 125 (Blood Rush)  "research_berserker_rage" -> "research_blood_rush"
  local file: DisplayCatalog.Undead.cs line 115 (Grave Leap)  "research_ghoul_frenzy"   -> "research_grave_leap"
  (Change only those three lines; line 89 Flint Spearheads and the Berserker Rage / Ghoul Frenzy lines keep theirs.)
  Then run Primeval > Build UI Art (UiArtBuilder sets the importer settings and registers the keys). The .meta files
  will be created by Unity on import.

JOB 2 - RAPTOR CLAW TROPHY
Problem: the big claw curved UP (rolled ~62 deg), so from the steep game camera it showed as thin strands fanned
from a binding, with a long thong and feather: a "feather bundle".
Rework (built on the staged model's own builder, trophies_build.py, loaded read-only; same Builder, same cells):
  - the sickle claw now lies on its side: its whole curve is in the ground plane, 150 deg arc, ~1.0 m along the
    curve, 0.15 m wide at the root (was 0.09), flattened top-to-bottom; the atlas claw cell gives the ivory root to
    near-black point (UV run stops at 0.9 so the pale worn point does not grey the tip).
  - the two toe claws kept but small (0.22 / 0.25 m), sticking out of the binding.
  - binding smaller; long leather thong removed; teal bead kept beside the binding; one rust feather 18 cm (was 30).
  - the small rock removed (budget went to the claw).
Numbers: 396 triangles (before 408; siblings 244-440). Footprint 0.87 x 0.93 m, height 0.19 m (before 0.98 x 0.72,
0.29 m). Pivot unchanged in kind: origin on the ground (lowest point z -0.008 m), bounds centre within ~0.1 m of the
old one. Texture: the same trophies_atlas.png (512, 4x4 cells), NOT changed and not re-delivered; UVs only use the
claw, cord, teal-bead and rust-feather cells. One material slot (M_Trophies), node "Body", same FBX export settings
as the siblings (axis -Z forward / Y up, bake space transform, FBX_SCALE_ALL, x1.5 SCALE). Re-import check: 396 tris,
same bounds. The staged original rebuilt by its own script matched the staged FBX exactly (408 tris, same bounds).

INSTALL
  local file: trophy_raptor_claw.fbx -> local file: trophy_raptor_claw.fbx (replace;
  keep the existing .meta so the GUID stays) and, for the staged set, the same file can replace
  local file: trophy_raptor_claw.fbx (move the old one aside first).
  Then run Primeval > Build hero trophy models (TrophyModelsBuilder.Build) to re-bake Art/Trophies/trophy_raptor_claw.asset.
  Atlas, material, rig.json: unchanged.

FILES
  local file: *.png, local file: trophy_raptor_claw.fbx, war_charge_icons.jpg, raptor_claw_before_after.jpg
  scripts (compose_icons.py, imgio.py, icon_sheet.ps1, raptor_claw_v2.py, claw_sheet.ps1), work (renders, stats)
  Copies of the two jpgs in local file: hero_trophies

NOT CHECKED
  - Nothing opened in Unity or the game: icons not seen on the real command card, the FBX not imported by Unity,
    TrophyModelsBuilder not run, HeroTrophyModelsTests (which check "the NOTES size") not run - the new size differs
    from the old NOTES numbers, so that test's expected size for Raptor Claw may need updating.
  - The glow disc centre: if TrophyRenderer computes it from mesh bounds it follows; not read in detail.
  - Game-camera views are a Blender stand-in (sun, noise grass, flat snow tint, no glow disc, no grass tufts), not an
    in-game capture; the snow stand-in is brighter than Rimeheart may be. 1920x1080 assumed.
  - The UiArtCoverage test with the new keys; the icons at the HUD's real button size (48/32 assumed).

Hero trophies in the game

2026-11-10 · 1 picture

What changed
Each of the six trophies is now its model lying on the ground (no float or spin) over a soft lavender disc that breathes and twinkles, faster in its last 30 s. Hovering shows its name and effect.
Numbers
Lavender was chosen because it is at least 38.8 colour units from every player colour (the artist's violet was 23 from Blue).
Still wrong
The glow is faint on snow at 55 m and a bit strong on grass; Raptor Claw read as a feather bundle (reworked above).
Not checked
Not seen in a real match.

Trophies in game (before vs after)

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

In the test build: the old gold shapes vs the new models on a lavender glow.

Trophies in game (before vs after)
Full notes (1 file)
REPORT.txt 2026-11-10 08:35
HERO TROPHIES INSTALLED (presentation only) - 2026-11-10, local file: PrimevalMirror, nothing committed. RulesRevision stays 121; no net,
save or sim change. Trophy rules (drops, 4 min on the ground, effects) untouched.

WHAT A PLAYER SEES
- Each of the six hero trophies (Rex Tooth, Horn Plate, Raptor Claw, Frill Charm, Spirit Bone, Storm Feather) is now its
  approved model lying still on the ground where it fell (no float, no bob, no spin), each turned its own fixed way.
- Under it a soft lavender disc with a brighter rim, breathing slowly (1.00-1.08 over 2.5 s); a small white-lavender twinkle
  every 3 s, each trophy on its own beat. In its last 30 s on the ground the disc breathes faster (0.8 s), is a little
  stronger, and twinkles every second.
- Cursor over a trophy (within the existing 1.6 m pickup reach, in sight): a one-line label above it on the HUD glass panel,
  name in pale lavender, effect in the tooltip cream, e.g. "Frill Charm  +20% hero maximum health." (DisplayCatalog text).
  Works with or without a selection. Right-click pickup with a hero is the same code as before (IssueSmartCommand untouched).
- Fog of war: drawn only where the old trophies were (same IsVisible test); the label uses the same test.
- Creep loot, ruin loot piles, chests, T-Rex eggs and nests, shrines: exactly as before (their code is unchanged; a kind
  without a model, or -trophyModels classic, takes the old gold primitive path line for line).

HOW THE MODELS ARE LOADED (Build Rigs NOT run; no RigBuilder, ProjectSetup or DetailedUnitBuilder)
- Copied the six FBX + trophies_atlas.png from local file: Trophies to a NEW folder
  Assets/_Primeval/Art/Trophies/ (not Art/Rigs, so a later Build Rigs never sees them; the .rig.json files were not copied).
- New editor step Primeval > Build hero trophy models (TrophyModelsBuilder.Build, run in batch with -executeMethod) bakes one
  mesh per trophy (FBX nodes combined, kept on the ground as modelled) into Art/Trophies/*.asset, makes ONE new URP Lit
  material Art/Trophies/M_HeroTrophies.mat on the atlas (white, smoothness 0.15, instanced), and writes
  Resources/TrophyModels.asset (TrophyModelLibrary). TrophyRenderer loads it with Resources.Load. It touches no existing asset.
- Import check (log b02_import): tris 374/244/408/368/440/296; sizes match NOTES.txt; Spirit Bone's foot 8 cm under ground
  under its cairn as the art worker made it; cairn stones bedded 1-2 cm.

GLOW COLOUR: lavender (0.72, 0.58, 1.0) additive, over a deeper lavender (0.55, 0.40, 0.95) alpha-blended disc.
- The art worker's violet (0.62, 0.45, 1.0) is only 23 CIELAB units from player Blue and 24 from Purple (the palette's own
  "distinct" bar is 24). Lavender is at least 38.8 from every player colour (classic 15 and colour-blind 8) and far from gold
  ore, food red, wood brown and iron grey (local file: glow_colour.ps1).
- First pass was additive only: on the snow map it vanished (white + lavender = white). The alpha-blended under-disc fixes
  that: it tints bright ground and only softens on grass. The deeper under-disc colour alone is nearer Purple, but it is a
  half-transparent ground tint under the additive light, not a flat patch.

TINT CHECK: the trophy material is never passed to BiomeLook or TeamPalette (they only touch materials handed to them; no
global tint reaches URP Lit). Test proves: plain URP Lit, _BaseColor white, no foliage tag, no frost map, and the renderer
draws the library's own material instance. In game: grass (Riverbend) and snow (Rimeheart, the biome BiomeLook tints most)
close-ups show identical model colours.

FILES CHANGED (changes.diff)
 Presentation/TrophyRenderer.cs        models, glow, twinkle, ModelsEnabled switch; old path kept as fallback
 Presentation/EffectPools.cs           new EffectKind.TrophyGlint (appended last)
 Presentation/TrophyModelLibrary.cs    NEW ScriptableObject
 Editor/TrophyModelsBuilder.cs         NEW import step (only Art/Trophies + Resources/TrophyModels.asset)
 Client/Hud/TrophyLabel.cs             NEW one-line label (cached strings/contents/sizes, no per-frame allocation)
 Client/SelectionController.cs         hover lookup 20x/s + draw call in OnGUI; ShowcaseHoverTrophyId (showcase only)
 Bootstrap/GameBootstrap.cs            -trophyModels classic, -trophyHover N
 Bootstrap/ShowcaseDirector.cs         two hook lines
 Bootstrap/ShowcaseDirector.Trophies.cs NEW showcase target "trophies" (showcase only): six in two rows + one creep gold loot
 Tests/EditMode/HeroTrophyModelsTests.cs NEW, 6 tests
 Assets: Art/Trophies/ (6 fbx, atlas, 6 mesh .asset, M_HeroTrophies.mat, metas), Resources/TrophyModels.asset.
 CatapultInstallTemp.cs left in place. Settings/material hash check after all editor runs: only the new M_HeroTrophies.mat
 differs from the start (no ProjectSettings, Quality, Graphics or unit .mat noise). git status was not used (the mirror is a
 worktree whose git dir is on local file: .git and its LFS filter writes there).

TESTS
 Run with the batch runner local file: unity.ps1 (local file: *.log, *.xml), EditMode, named groups only.
 t01 (11 groups: HeroTrophyModels, Trophy, GoldOreV3, ResourceProps, PlayerColourPalette, PlayerColourMarker,
     ClassicPresentationLifetime, ReplayPresentationReset, HeroSlot, UiArtCoverage, ArtPass): 75/75 passed.
 t02 (10 groups: CreepCamp, RexNest, BugHunt4, ClientLifetimeQuery, ConiferFamily, TropicalTree, EliteCreature, TeamCloth,
     BuildingDamageLook, SurvivalMode): 65/66. FAIL BugHunt4Tests.TheApplyScriptTakesOnlyTheModelTheEditWasMadeOn ("source
     identity": the villager model's FBX sha256 differs from the one its edit was made on). Villager art, not touched here;
     I believe it is the known villager re-review drift, but it is not on the brief's known list, so flagged.
 t03 after the snow fix: 1 failure in my own new test (exact Color compare off by float rounding) - fixed to a tolerance.
 t04 final code (HeroTrophyModels, Trophy, ClassicPresentationLifetime, ReplayPresentationReset, GoldOreV3): 43/43 passed.
 HeroTrophyModelsTests (6): every kind resolves its model, on the ground, at the NOTES size; missing model / no material /
 no library / -trophyModels classic fall back to the primitive, eggs and loot never take a model; label = catalog name +
 "  " + effect (cached); material plain URP Lit white, no foliage tag/frost, renderer uses the library instance; glow
 lavender, own copies of SpellGlow / SpellGround (originals stay white); fixed varied yaw. They fail on the old code (no
 library). Not run this time: the brief's known-failing sets (re-review guards, SavedCombatFixture, PersonHit, BlowsTaken,
 Wariness/Migration/FreezeScan) - not in the groups I ran.

FILMED (test player local file: CatapultTest via CatapultInstallTemp.Build, owner-game gate before every window, own PIDs only)
 New showcase target "trophies" (+ showcase-only args -trophyHover N and -trophyModels classic for the before shots).
 Riverbend (grass) and Rimeheart (snow): each trophy close (2.8 m, pitch 42) and the group at the game camera 55 m, before
 (classic) | after; grass also at the game's start zoom 34 m; hover label at 34 m and 55 m.
 local file: trophies_in_game_before_after.jpg (copied to local file: hero_trophies), local file: *_close_*.jpg, *_game55_full.jpg,
 grass_game34_after.jpg, hover_label_34m.jpg, hover_label_55m.jpg; raw frames in local file: showcase_NN.png.

WHAT I SAW / WHAT FALLS SHORT
- Close up every trophy reads as its object; colours identical on grass and snow (no tint). Nothing sunk or floating.
  Raptor Claw is the weakest read (it looks like a feather bundle), as the art worker said.
- Grass, 55 m: the models are ~15-25 px and do not read on their own; the discs find them clearly. With the under-disc the
  grass glow is a fairly saturated purple-lavender: findable without shouting, but stronger than "subtle"; easy to tone
  down (TintAlpha 0.5 in TrophyRenderer) if the owner thinks it is too much.
- Snow, 55 m: the weak case. The glow is only a faint pink-lavender halo and pale bone on white snow is low contrast;
  findable when you look, easy to miss. Additive-only (first pass) was invisible there; not solved further.
- The game's grass tufts cover parts of the low models at close zoom (as they cover everything low).
- The label sits on the trophy's spot and can overlap the neighbours when trophies lie close together (only in the staged
  group; drops are normally apart). The "hero selected nearby shows the label" idea from the mock-up was not done: hover only.
- Not verified: a real T-Rex drop in a played match (staged entries only), fog edge behaviour on screen (same test as before,
  not filmed), the last-30-s hurry (coded, not filmed), the twinkle in motion (seen once in a still), colour-blind palette
  in game (checked by numbers only), desert maps, performance (a handful of DrawMesh calls; no profiling done).
- Trophy spawn 1 m out from the carcass (art worker's suggestion) not done: that is a sim change.

Hero trophy models (preview)

2026-11-10 · 2 pictures

What changed
Six models replacing the floating gold placeholder shapes: Rex Tooth (+15% hero damage), Horn Plate (+2 armour), Raptor Claw (+12% attack speed), Frill Charm (+20% health), Spirit Bone (+1 health every 2 s), Storm Feather (+1 m aura, -10% cooldowns).
State
You said "Yes, build them"; built (see above).

Hero trophies sheet

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

The six trophy models: Rex Tooth, Horn Plate, Raptor Claw, Frill Charm, Spirit Bone, Storm Feather.

Hero trophies sheet

Hero trophies pickup mockup

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

Mock-up: a trophy on the ground with its glow and name label.

Hero trophies pickup mockup
Full notes (1 file)
NOTES.txt 2026-11-10 06:09
HERO TROPHIES - new models, preview only (2026-11-10). Nothing installed, no game files touched.

WHAT THEY ARE
When certain WILD animals die (not creep-camp guards, not elites unless a Survival boss), TrophySystem.RollDrop may
drop a hero trophy at the death point. It lies there 4 minutes (GroundLifetimeSeconds). A hero picks it up (max 3).
Trophy shrines also spawn one every 6 minutes (65% Storm Feather, 35% Spirit Bone).

Name           Effect (DisplayCatalog text)                     Drops from (chance per kill)
Rex Tooth      +15% hero damage.                                T-Rex 50%, Spinosaurus 50%, Allosaurus 14%; boss Thunderjaw 100%
Horn Plate     +2 hero armour.                                  Triceratops 30%, Stegosaurus 55%, Ankylosaurus 49%, Brachiosaurus 40%
Raptor Claw    +12% hero attack speed.                          Raptor 10%, Allosaurus 21%; boss Razorback 100%
Frill Charm    +20% hero maximum health.                        Triceratops 30%, Parasaurolophus 25%, Protoceratops 25%, Pachycephalosaurus 25%
Spirit Bone    +1 hero health every 2 seconds. Mythic.          T-Rex 50%, Spinosaurus 50%, Brachiosaurus 60%, Ankylosaurus 16%, Quetzalcoatlus 12%; shrines 35%
Storm Feather  +1 m aura radius and -10% active cooldowns.      Pteranodon 20%, Quetzalcoatlus 28%; shrines 65%
(Chances worked out from RollDrop's nested rolls, e.g. Triceratops: 60% drop x 50% each kind = 30%.)

TODAY: TrophyRenderer.Shape draws one primitive in M_Debug_GoldOre gold (0.95,0.75,0.2), floating with a bob at
0.22-0.38 m, over a 0.8 m white additive SpellGlow disc. Rex Tooth = upside-down cone (its point goes 0.35 m under the
ground), Frill Charm = a 6-sided disc standing on edge, Spirit Bone = egg-shaped ball, Storm Feather = thin tilted box.

NEW MODELS (1.5x life size, origin on the ground at the centre, Z/Y up handled by export)
Rex Tooth      huge curved serrated tooth, root bound in red leather, resting on a 3-stone cairn, red necklace cord + bead.
               1.04 x 0.42 m, 0.20 m high, 374 tris.
Horn Plate     cracked bony plate with a brow horn rising out of it, two leather armour straps.
               0.88 x 0.51 m, 0.51 m high, 244 tris.
Raptor Claw    three sickle claws (ivory base, black points) fanned from a cord binding; leather thong to a red feather.
               0.98 x 0.72 m, 0.29 m high, 408 tris.
Frill Charm    knobbed piece of horned frill bone (red-ochre painted edge, teal tribe chevron) with a notch; braided cord
               through the notch, a teal bead, a rust and a cream feather. Frill 0.8 m; with cord 1.42 x 0.85 m, 0.17 m high, 368 tris.
Spirit Bone    great limb bone painted with pale-blue spirit spirals, planted slanting in a 6-stone cairn, cord wrap,
               hanging bead and feather. 0.93 x 0.44 m, 0.88 m high, 440 tris (base sinks 8 cm into the cairn, on purpose).
Storm Feather  storm-torn slate-blue plume with a white lightning zig-zag and rust tip, a cream feather beside it,
               quills bound in red cord with a bead, resting on a small stone. 1.31 x 0.45 m, 0.18 m high, 296 tris.
All six share one 512x512 hand-painted atlas (16 cells: bone, plate bone, tooth, horn, claw, leather, cord, red cord,
3 feathers, 2 beads, stone, spirit glyph bone, frill). No photo textures.
Gold/wood/food/iron/chest loot already use Blender models (Art/Rigs/loot_*.fbx); not redone.

READABILITY (what the sheet shows)
- 15 m (closest zoom): each reads as its object; Frill Charm, Rex Tooth, Spirit Bone and Storm Feather clearest;
  Raptor Claw is the weakest (dark points read, the fan less so).
- 55 m (default zoom): every model is only ~15-25 px and does NOT read on its own. The violet glow is what
  finds it there. So the glow is needed, not optional.

FILES
local file: Trophies  trophy_<name>.fbx + .rig.json (one "Body" part, like loot_gold) + trophies_atlas.png
local file: trophies_build.py (Blender, builds everything) + compose.ps1 (sheets)
local file: hero_trophies_work.blend, renders, stats.json

GAME SIDE (later job; short)
1. Copy local file: Trophies to Assets/_Primeval/Art/Rigs/Trophies/ and run Primeval > Build Rigs. RigBuilder gives a
   folder with exactly one *_atlas.png one shared URP Lit material (SharedAtlasMaterial). FBX export settings match
   primeval_models.py (-Z forward, Y up, baked transform).
2. TrophyRenderer.cs: like LootKeys, look up rigs "trophy_rex_tooth" ... "trophy_storm_feather" (the same keys as the
   icons in DisplayCatalog.Trophy). When a rig is found, draw it at (x, 0, z), yaw = Id*37 deg, scale 1, no bob,
   instead of Shape(); keep Shape() as the fallback.
3. Glow: replace the white 0.8 m disc with a flat violet disc (about (0.62,0.45,1.0), additive, soft edge, brighter rim),
   radius about 0.6 x the model's longest side (0.55-0.95 m), breathing 1.00-1.08 over 2.5 s. Sparkle: EffectPools burst
   every 3 s (small, white-violet). Blink faster in the last 30 s.
4. Hover label: one line, "<Name>  <Effect>" from DisplayCatalog.Trophy (list in the mock-up), shown on hover or when a
   hero is selected nearby. SelectionController.TryFindTrophy already finds the trophy under the cursor (1.6 m).
5. Suggest: spawn the trophy ~1 m out from the death point, so it is not hidden under the carcass.

UNSURE
- SharedAtlasMaterial marks the right three quarters of an atlas as "foliage" for BiomeLook recolouring. If BiomeLook
  touches every atlas material, trophies could get tinted per biome; check, or give them a TexturedMaterial instead
  (rename the atlas to <key>_albedo.png per model).
- Violet may clash with a violet/purple player colour among the 15 team colours. The glow is on the ground, team colours
  are on units, but worth a look.
- Spirit Bone's ends look a bit like a trumpet/mushroom from close up; a two-knob end would read more like a bone.
- 1.5x life size is my choice; the Frill Charm's cord and feathers make it 1.4 m long. Shrink the cord if too big.
- Spirit glyphs are only painted; a small emission mask would make "Mythic" glow (not made).
- Not seen in Unity: shading, import, scale and the glow are only checked in Blender renders.