feat: racial natural weapons + specialty icons (v1.4.0)

Weapons added (4 new, total 36):
- Shaktar Claws: melee, DMG 2, AP 1, ROF 2, Engaged
- Stormer Teeth: melee, DMG 3, AP 1, ROF 1, Engaged
- Stormer Claws: melee, DMG 3, AP 1, ROF 2, Engaged
- Vevaphon Claws: melee, DMG 2, AP 1, ROF 2, Engaged

Icons added:
- 4 new weapon SVG icons (weapon-shaktar-claws, stormer-teeth, stormer-claws, vevaphon-claws)
- 16 specialty SVG icons replacing broken Foundry defaults (icons/svg/ paths no longer exist in v14)
  Fixes: Hard Hitter, Sniper, Fast Reflexes, True Grit, all others now have custom icons

Packs rebuilt: sla-weapons (36), sla-specialties (16)
This commit is contained in:
2026-06-02 21:20:45 +01:00
parent e155a2dd1b
commit 304e47f507
44 changed files with 833 additions and 467 deletions
@@ -0,0 +1,11 @@
<svg viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<!-- Code of Honor: sword pointing upward within a circle -->
<circle cx="32" cy="32" r="28" fill="none" stroke="#1a1a1a" stroke-width="4"/>
<!-- Blade -->
<path d="M32,8 L29,42 L32,46 L35,42 Z" fill="#1a1a1a"/>
<path d="M32,8 L30,8 L29,42 L32,46 L31,42 Z" fill="white" opacity="0.35"/>
<!-- Guard -->
<rect x="22" y="42" width="20" height="4" rx="2" fill="#1a1a1a"/>
<!-- Grip -->
<rect x="29" y="46" width="6" height="10" rx="2" fill="#1a1a1a"/>
</svg>

After

Width:  |  Height:  |  Size: 534 B

@@ -0,0 +1,17 @@
<svg viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<!-- Cold Adapted: snowflake -->
<!-- Center -->
<circle cx="32" cy="32" r="4" fill="#1a1a1a"/>
<!-- 6 main arms -->
<line x1="32" y1="32" x2="32" y2="6" stroke="#1a1a1a" stroke-width="3.5" stroke-linecap="round"/>
<line x1="32" y1="32" x2="32" y2="58" stroke="#1a1a1a" stroke-width="3.5" stroke-linecap="round"/>
<line x1="32" y1="32" x2="9" y2="19" stroke="#1a1a1a" stroke-width="3.5" stroke-linecap="round"/>
<line x1="32" y1="32" x2="55" y2="45" stroke="#1a1a1a" stroke-width="3.5" stroke-linecap="round"/>
<line x1="32" y1="32" x2="9" y2="45" stroke="#1a1a1a" stroke-width="3.5" stroke-linecap="round"/>
<line x1="32" y1="32" x2="55" y2="19" stroke="#1a1a1a" stroke-width="3.5" stroke-linecap="round"/>
<!-- Branch ticks on vertical arm -->
<line x1="26" y1="14" x2="32" y2="20" stroke="#1a1a1a" stroke-width="2.5" stroke-linecap="round"/>
<line x1="38" y1="14" x2="32" y2="20" stroke="#1a1a1a" stroke-width="2.5" stroke-linecap="round"/>
<line x1="26" y1="50" x2="32" y2="44" stroke="#1a1a1a" stroke-width="2.5" stroke-linecap="round"/>
<line x1="38" y1="50" x2="32" y2="44" stroke="#1a1a1a" stroke-width="2.5" stroke-linecap="round"/>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

@@ -0,0 +1,16 @@
<svg viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<!-- Combat Drug User: syringe -->
<!-- Barrel -->
<rect x="10" y="28" width="34" height="10" rx="3" fill="#1a1a1a"/>
<!-- Plunger -->
<rect x="6" y="30" width="6" height="6" rx="1" fill="#1a1a1a"/>
<rect x="4" y="28" width="2" height="10" rx="1" fill="#1a1a1a"/>
<!-- Needle -->
<path d="M44,31 L58,33 L44,35 Z" fill="#1a1a1a"/>
<!-- Contents highlight -->
<rect x="14" y="30" width="14" height="6" rx="2" fill="white" opacity="0.3"/>
<!-- Tick marks on barrel -->
<line x1="20" y1="27" x2="20" y2="24" stroke="#1a1a1a" stroke-width="1.5"/>
<line x1="27" y1="27" x2="27" y2="24" stroke="#1a1a1a" stroke-width="1.5"/>
<line x1="34" y1="27" x2="34" y2="24" stroke="#1a1a1a" stroke-width="1.5"/>
</svg>

After

Width:  |  Height:  |  Size: 790 B

@@ -0,0 +1,5 @@
<svg viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<!-- Compassion: heart -->
<path d="M32,52 Q10,38 10,24 Q10,14 20,12 Q26,11 32,18 Q38,11 44,12 Q54,14 54,24 Q54,38 32,52Z" fill="#1a1a1a"/>
<path d="M32,52 Q11,38 11,24 Q11,15 20,13 Q12,15 12,24 Q12,38 32,50 Z" fill="white" opacity="0.2"/>
</svg>

After

Width:  |  Height:  |  Size: 314 B

@@ -0,0 +1,14 @@
<svg viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<!-- Ebb Fury: exploding Ebb energy burst -->
<circle cx="32" cy="32" r="10" fill="#1a1a1a"/>
<!-- Energy spikes -->
<path d="M32,22 L28,4 L32,14 L36,4 Z" fill="#1a1a1a"/>
<path d="M32,42 L28,60 L32,50 L36,60 Z" fill="#1a1a1a"/>
<path d="M22,32 L4,28 L14,32 L4,36 Z" fill="#1a1a1a"/>
<path d="M42,32 L60,28 L50,32 L60,36 Z" fill="#1a1a1a"/>
<path d="M25,25 L10,10 L20,22 L10,16 Z" fill="#1a1a1a"/>
<path d="M39,25 L54,10 L44,22 L54,16 Z" fill="#1a1a1a"/>
<path d="M25,39 L10,54 L20,42 L10,48 Z" fill="#1a1a1a"/>
<path d="M39,39 L54,54 L44,42 L54,48 Z" fill="#1a1a1a"/>
<circle cx="32" cy="32" r="7" fill="white" opacity="0.3"/>
</svg>

After

Width:  |  Height:  |  Size: 720 B

@@ -0,0 +1,10 @@
<svg viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<!-- Ebb Sensitive: glowing eye with Ebb energy waves -->
<ellipse cx="32" cy="32" rx="26" ry="16" fill="#1a1a1a"/>
<circle cx="32" cy="32" r="10" fill="white" opacity="0.9"/>
<circle cx="32" cy="32" r="7" fill="#1a1a1a"/>
<circle cx="29" cy="29" r="2" fill="white" opacity="0.7"/>
<!-- Energy arcs -->
<path d="M8,20 Q16,12 32,14 Q48,12 56,20" fill="none" stroke="#1a1a1a" stroke-width="2.5" stroke-linecap="round"/>
<path d="M8,44 Q16,52 32,50 Q48,52 56,44" fill="none" stroke="#1a1a1a" stroke-width="2.5" stroke-linecap="round"/>
</svg>

After

Width:  |  Height:  |  Size: 617 B

@@ -0,0 +1,5 @@
<svg viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<!-- Fast Reflexes: lightning bolt / speed lines -->
<path d="M36,4 L22,34 L30,34 L28,60 L46,26 L36,26 Z" fill="#1a1a1a"/>
<path d="M36,4 L34,4 L20,34 L28,34 L26,60 L28,60 L30,34 L22,34 Z" fill="white" opacity="0.35"/>
</svg>

After

Width:  |  Height:  |  Size: 293 B

@@ -0,0 +1,7 @@
<svg viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<!-- Field Surgeon: medical cross -->
<rect x="22" y="8" width="20" height="48" rx="4" fill="#1a1a1a"/>
<rect x="8" y="22" width="48" height="20" rx="4" fill="#1a1a1a"/>
<rect x="24" y="10" width="6" height="44" rx="2" fill="white" opacity="0.2"/>
<rect x="10" y="24" width="44" height="6" rx="2" fill="white" opacity="0.2"/>
</svg>

After

Width:  |  Height:  |  Size: 404 B

@@ -0,0 +1,8 @@
<svg viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<!-- Gut Feeling: eye with insight rays -->
<ellipse cx="32" cy="32" rx="24" ry="14" fill="#1a1a1a"/>
<ellipse cx="32" cy="32" rx="24" ry="14" fill="none" stroke="white" stroke-width="1" opacity="0.3"/>
<circle cx="32" cy="32" r="8" fill="white" opacity="0.9"/>
<circle cx="32" cy="32" r="5" fill="#1a1a1a"/>
<circle cx="30" cy="30" r="1.5" fill="white" opacity="0.6"/>
</svg>

After

Width:  |  Height:  |  Size: 450 B

@@ -0,0 +1,27 @@
<svg viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<!-- Hard Hitter: heavy fist with impact lines -->
<!-- Impact lines radiating from fist -->
<line x1="32" y1="8" x2="32" y2="2" stroke="white" stroke-width="2.5" stroke-linecap="round" opacity="0.7"/>
<line x1="48" y1="14" x2="53" y2="9" stroke="white" stroke-width="2.5" stroke-linecap="round" opacity="0.7"/>
<line x1="54" y1="30" x2="61" y2="30" stroke="white" stroke-width="2.5" stroke-linecap="round" opacity="0.7"/>
<line x1="16" y1="14" x2="11" y2="9" stroke="white" stroke-width="2.5" stroke-linecap="round" opacity="0.7"/>
<line x1="10" y1="30" x2="3" y2="30" stroke="white" stroke-width="2.5" stroke-linecap="round" opacity="0.7"/>
<!-- Fist — 4 fingers curled -->
<rect x="18" y="26" width="28" height="18" rx="5" fill="#1a1a1a"/>
<!-- Finger knuckles row -->
<rect x="19" y="20" width="6" height="10" rx="3" fill="#1a1a1a"/>
<rect x="27" y="18" width="6" height="12" rx="3" fill="#1a1a1a"/>
<rect x="35" y="18" width="6" height="12" rx="3" fill="#1a1a1a"/>
<rect x="43" y="20" width="6" height="10" rx="3" fill="#1a1a1a"/>
<!-- Thumb -->
<rect x="12" y="30" width="9" height="8" rx="4" fill="#1a1a1a"/>
<!-- Knuckle highlights -->
<rect x="20" y="22" width="4" height="4" rx="2" fill="white" opacity="0.5"/>
<rect x="28" y="20" width="4" height="4" rx="2" fill="white" opacity="0.5"/>
<rect x="36" y="20" width="4" height="4" rx="2" fill="white" opacity="0.5"/>
<rect x="44" y="22" width="4" height="4" rx="2" fill="white" opacity="0.5"/>
<!-- Fist face highlight -->
<rect x="20" y="28" width="24" height="5" rx="2" fill="white" opacity="0.2"/>
<!-- Wrist -->
<rect x="20" y="44" width="24" height="8" rx="3" fill="#1a1a1a"/>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

@@ -0,0 +1,15 @@
<svg viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<!-- Healer: hand with healing light emanating from palm -->
<!-- Fingers -->
<rect x="16" y="10" width="7" height="22" rx="3" fill="#1a1a1a"/>
<rect x="25" y="6" width="7" height="26" rx="3" fill="#1a1a1a"/>
<rect x="34" y="6" width="7" height="26" rx="3" fill="#1a1a1a"/>
<rect x="43" y="10" width="7" height="22" rx="3" fill="#1a1a1a"/>
<!-- Palm -->
<rect x="14" y="28" width="38" height="22" rx="6" fill="#1a1a1a"/>
<!-- Thumb -->
<rect x="8" y="30" width="10" height="14" rx="5" fill="#1a1a1a"/>
<!-- Palm cross glow -->
<rect x="29" y="32" width="8" height="2" rx="1" fill="white" opacity="0.5"/>
<rect x="32" y="29" width="2" height="8" rx="1" fill="white" opacity="0.5"/>
</svg>

After

Width:  |  Height:  |  Size: 775 B

@@ -0,0 +1,8 @@
<svg viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<!-- Inquisitive: magnifying glass -->
<circle cx="26" cy="26" r="14" fill="none" stroke="#1a1a1a" stroke-width="5"/>
<circle cx="26" cy="26" r="14" fill="none" stroke="white" stroke-width="1.5" opacity="0.3"/>
<line x1="36" y1="36" x2="52" y2="52" stroke="#1a1a1a" stroke-width="6" stroke-linecap="round"/>
<line x1="37" y1="36" x2="52" y2="51" stroke="white" stroke-width="1.5" opacity="0.25" stroke-linecap="round"/>
<circle cx="22" cy="22" r="5" fill="white" opacity="0.15"/>
</svg>

After

Width:  |  Height:  |  Size: 560 B

@@ -0,0 +1,14 @@
<svg viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<!-- Menacing: skull silhouette -->
<ellipse cx="32" cy="28" rx="18" ry="20" fill="#1a1a1a"/>
<rect x="20" y="44" width="24" height="10" rx="3" fill="#1a1a1a"/>
<!-- Eye sockets -->
<ellipse cx="24" cy="26" rx="5" ry="5" fill="white" opacity="0.85"/>
<ellipse cx="40" cy="26" rx="5" ry="5" fill="white" opacity="0.85"/>
<!-- Nose -->
<path d="M30,34 L32,30 L34,34 Z" fill="white" opacity="0.6"/>
<!-- Teeth -->
<rect x="22" y="46" width="5" height="6" rx="1" fill="white" opacity="0.7"/>
<rect x="29" y="46" width="6" height="6" rx="1" fill="white" opacity="0.7"/>
<rect x="37" y="46" width="5" height="6" rx="1" fill="white" opacity="0.7"/>
</svg>

After

Width:  |  Height:  |  Size: 734 B

@@ -0,0 +1,9 @@
<svg viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<!-- Regeneration: circular arrows suggesting renewal -->
<path d="M32,8 A24,24 0 1,1 10,44" fill="none" stroke="#1a1a1a" stroke-width="5" stroke-linecap="round"/>
<!-- Arrow head -->
<polygon points="6,36 14,36 10,46" fill="#1a1a1a"/>
<!-- Inner partial circle (healing pulse) -->
<path d="M32,16 A16,16 0 1,1 18,42" fill="none" stroke="#1a1a1a" stroke-width="3" stroke-linecap="round" opacity="0.4"/>
<circle cx="32" cy="32" r="4" fill="#1a1a1a"/>
</svg>

After

Width:  |  Height:  |  Size: 532 B

@@ -0,0 +1,13 @@
<svg viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<!-- Sniper: crosshair scope reticle -->
<circle cx="32" cy="32" r="22" fill="none" stroke="#1a1a1a" stroke-width="4"/>
<circle cx="32" cy="32" r="14" fill="none" stroke="#1a1a1a" stroke-width="2.5"/>
<circle cx="32" cy="32" r="3" fill="#1a1a1a"/>
<!-- Cross hairs -->
<line x1="10" y1="32" x2="20" y2="32" stroke="#1a1a1a" stroke-width="3" stroke-linecap="round"/>
<line x1="44" y1="32" x2="54" y2="32" stroke="#1a1a1a" stroke-width="3" stroke-linecap="round"/>
<line x1="32" y1="10" x2="32" y2="20" stroke="#1a1a1a" stroke-width="3" stroke-linecap="round"/>
<line x1="32" y1="44" x2="32" y2="54" stroke="#1a1a1a" stroke-width="3" stroke-linecap="round"/>
<!-- Highlight ring -->
<circle cx="32" cy="32" r="22" fill="none" stroke="white" stroke-width="1" opacity="0.4"/>
</svg>

After

Width:  |  Height:  |  Size: 862 B

@@ -0,0 +1,7 @@
<svg viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<!-- True Grit: shield with crack showing resilience -->
<path d="M32,6 L54,16 L54,36 Q54,52 32,60 Q10,52 10,36 L10,16 Z" fill="#1a1a1a"/>
<path d="M32,6 L52,15 L52,36 Q52,50 32,58 Q12,50 12,36 L12,15 Z" fill="none" stroke="white" stroke-width="1" opacity="0.2"/>
<!-- Crack lines — showing toughness under damage -->
<path d="M32,18 L28,28 L34,30 L30,44" stroke="white" stroke-width="2" fill="none" stroke-linecap="round" opacity="0.6"/>
</svg>

After

Width:  |  Height:  |  Size: 519 B

@@ -0,0 +1,17 @@
<svg viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<!-- Shaktar Claws: three elegant curved precision talons with a scaled base -->
<!-- Scaled wrist band -->
<rect x="18" y="50" width="28" height="8" rx="3" fill="#1a1a1a"/>
<rect x="20" y="51" width="6" height="6" rx="1" fill="white" opacity="0.15"/>
<rect x="29" y="51" width="6" height="6" rx="1" fill="white" opacity="0.15"/>
<rect x="38" y="51" width="6" height="6" rx="1" fill="white" opacity="0.15"/>
<!-- Left claw — curved inward -->
<path d="M21,50 Q14,38 16,20 Q17,12 20,8 Q22,6 23,9 Q22,18 22,34 Q22,44 24,50Z" fill="#1a1a1a"/>
<path d="M20,8 Q21.5,6 23,9 Q22,20 22,36 L22,50 L21,50 Q19,42 19,28 Q18,16 20,8Z" fill="white"/>
<!-- Centre claw — straight tall -->
<path d="M29,50 Q27,36 28,16 Q29,6 32,4 Q35,6 36,16 Q37,36 35,50Z" fill="#1a1a1a"/>
<path d="M32,4 Q34,5 36,16 Q37,32 35,48 L33,50 Q31,42 30,28 Q29,14 32,4Z" fill="white"/>
<!-- Right claw — curved inward (mirror of left) -->
<path d="M43,50 Q50,38 48,20 Q47,12 44,8 Q42,6 41,9 Q42,18 42,34 Q42,44 40,50Z" fill="#1a1a1a"/>
<path d="M44,8 Q42.5,6 41,9 Q42,20 42,36 L42,50 L43,50 Q45,42 45,28 Q46,16 44,8Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

@@ -0,0 +1,17 @@
<svg viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<!-- Stormer Claws: three massive heavy claws with thick base (brutal, wide) -->
<!-- Heavy knuckle base -->
<rect x="10" y="44" width="44" height="14" rx="4" fill="#1a1a1a"/>
<rect x="14" y="46" width="12" height="10" rx="2" fill="white" opacity="0.1"/>
<rect x="28" y="46" width="8" height="10" rx="2" fill="white" opacity="0.1"/>
<rect x="38" y="46" width="12" height="10" rx="2" fill="white" opacity="0.1"/>
<!-- Left claw — wide and heavy -->
<path d="M14,44 Q6,32 8,14 Q10,6 14,8 Q17,6 18,10 Q16,26 18,42Z" fill="#1a1a1a"/>
<path d="M8,14 Q10,6 14,8 Q16,7 18,10 Q16,26 18,42 L16,44 Q14,34 12,22 Q9,14 8,14Z" fill="white" opacity="0.3"/>
<!-- Centre claw — tallest -->
<path d="M26,44 Q22,30 24,10 Q26,2 32,2 Q38,2 40,10 Q42,30 38,44Z" fill="#1a1a1a"/>
<path d="M32,2 Q36,2 40,10 Q42,28 38,44 L36,44 Q38,28 38,14 Q36,4 32,4 Q28,4 26,14 Q26,28 28,44 L26,44Z" fill="white" opacity="0.3"/>
<!-- Right claw — wide and heavy -->
<path d="M50,44 Q58,32 56,14 Q54,6 50,8 Q47,6 46,10 Q48,26 46,42Z" fill="#1a1a1a"/>
<path d="M56,14 Q54,6 50,8 Q48,7 46,10 Q48,26 46,42 L48,44 Q50,34 52,22 Q55,14 56,14Z" fill="white" opacity="0.3"/>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

@@ -0,0 +1,25 @@
<svg viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<!-- Stormer Teeth: massive jaw showing four brutal fangs -->
<!-- Upper jaw arc -->
<path d="M8,28 Q8,10 32,8 Q56,10 56,28 L52,28 Q50,14 32,12 Q14,14 12,28Z" fill="#1a1a1a"/>
<!-- Upper teeth — 4 large fangs -->
<path d="M14,28 Q13,18 16,14 Q18,12 19,14 Q18,20 18,28Z" fill="#1a1a1a"/>
<path d="M14,28 L18,28 L18,14 Q16,12 14,14Z" fill="white" opacity="0.9"/>
<path d="M23,28 Q22,14 25,10 Q27,8 28,10 Q27,18 27,28Z" fill="#1a1a1a"/>
<path d="M23,28 L27,28 L27,10 Q25,8 23,10Z" fill="white" opacity="0.9"/>
<path d="M37,28 Q37,18 36,10 Q37,8 39,10 Q42,14 41,28Z" fill="#1a1a1a"/>
<path d="M37,28 L41,28 L41,10 Q39,8 37,10Z" fill="white" opacity="0.9"/>
<path d="M46,28 Q46,20 45,14 Q46,12 48,14 Q51,18 50,28Z" fill="#1a1a1a"/>
<path d="M46,28 L50,28 L50,14 Q48,12 46,14Z" fill="white" opacity="0.9"/>
<!-- Lower jaw arc -->
<path d="M8,32 Q8,50 32,52 Q56,50 56,32 L52,32 Q50,46 32,48 Q14,46 12,32Z" fill="#1a1a1a"/>
<!-- Lower teeth — 3 fangs -->
<path d="M18,32 Q17,42 20,46 Q22,48 23,46 Q22,38 22,32Z" fill="#1a1a1a"/>
<path d="M18,32 L22,32 L22,46 Q20,48 18,46Z" fill="white" opacity="0.7"/>
<path d="M30,32 Q29,44 32,48 Q35,44 34,32Z" fill="#1a1a1a"/>
<path d="M30,32 L34,32 L34,48 Q32,50 30,48Z" fill="white" opacity="0.7"/>
<path d="M42,32 Q42,38 41,46 Q42,48 44,46 Q47,42 46,32Z" fill="#1a1a1a"/>
<path d="M42,32 L46,32 L46,46 Q44,48 42,46Z" fill="white" opacity="0.7"/>
<!-- Gap between jaws -->
<rect x="9" y="28" width="46" height="4" fill="#0a0a0a"/>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

@@ -0,0 +1,17 @@
<svg viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<!-- Vevaphon Claws: morphic/asymmetric claws — different lengths suggesting shapeshifting -->
<!-- Fluid base — irregular shape hinting at morphic form -->
<path d="M12,50 Q10,56 20,58 Q32,60 44,58 Q54,56 52,50 Q40,48 32,50 Q20,52 12,50Z" fill="#1a1a1a"/>
<!-- Left claw — short stubby, morphing -->
<path d="M18,50 Q12,38 14,22 Q15,14 18,12 Q20,10 21,13 Q20,24 20,38 Q20,44 22,50Z" fill="#1a1a1a"/>
<path d="M14,22 Q15,14 18,12 Q19,10 21,13 Q20,24 20,40 L18,50 Q16,40 14,28 Q12,22 14,22Z" fill="white" opacity="0.25"/>
<!-- Centre claw — very tall, dominant -->
<path d="M28,50 Q25,36 27,10 Q28,4 32,2 Q36,4 37,10 Q39,36 36,50Z" fill="#1a1a1a"/>
<path d="M32,2 Q35,3 37,10 Q39,32 36,48 L34,50 Q36,32 36,16 Q34,4 32,4 Q30,4 28,16 Q28,32 30,50 L28,50Z" fill="white" opacity="0.25"/>
<!-- Right claw — medium, curves differently -->
<path d="M42,50 Q48,34 46,16 Q45,8 42,6 Q40,4 39,7 Q40,20 40,36 Q40,44 42,50Z" fill="#1a1a1a"/>
<path d="M42,6 Q43,4 46,16 Q48,30 46,48 L44,50 Q44,36 44,24 Q43,12 42,6Z" fill="white" opacity="0.25"/>
<!-- Morphic drips — suggesting the shifting nature -->
<circle cx="20" cy="56" r="2" fill="#1a1a1a" opacity="0.6"/>
<circle cx="44" cy="57" r="1.5" fill="#1a1a1a" opacity="0.6"/>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.
+5 -5
View File
@@ -1,5 +1,5 @@
2026/06/02-16:36:28.819207 1719d3000 Delete type=3 #1
2026/06/02-16:36:28.819707 171a5f000 Level-0 table #5: started
2026/06/02-16:36:28.820011 171a5f000 Level-0 table #5: 4241 bytes OK
2026/06/02-16:36:28.820105 171a5f000 Delete type=0 #3
2026/06/02-16:36:28.820161 171a5f000 Manual compaction at level-0 from '\x00' @ 72057594037927935 : 1 .. '\xc3\xbf' @ 0 : 0; will stop at (end)
2026/06/02-21:20:33.869169 1741eb000 Delete type=3 #1
2026/06/02-21:20:33.869541 174277000 Level-0 table #5: started
2026/06/02-21:20:33.869986 174277000 Level-0 table #5: 4187 bytes OK
2026/06/02-21:20:33.870045 174277000 Delete type=0 #3
2026/06/02-21:20:33.870095 174277000 Manual compaction at level-0 from '\x00' @ 72057594037927935 : 1 .. '\xc3\xbf' @ 0 : 0; will stop at (end)
Binary file not shown.
Binary file not shown.
+5 -5
View File
@@ -1,5 +1,5 @@
2026/06/02-16:36:28.797418 1709bb000 Delete type=3 #1
2026/06/02-16:36:28.799988 171a5f000 Level-0 table #5: started
2026/06/02-16:36:28.800486 171a5f000 Level-0 table #5: 5343 bytes OK
2026/06/02-16:36:28.800638 171a5f000 Delete type=0 #3
2026/06/02-16:36:28.800741 171a5f000 Manual compaction at level-0 from '\x00' @ 72057594037927935 : 1 .. '\xc3\xbf' @ 0 : 0; will stop at (end)
2026/06/02-21:20:33.851561 1731d3000 Delete type=3 #1
2026/06/02-21:20:33.852911 174277000 Level-0 table #5: started
2026/06/02-21:20:33.853176 174277000 Level-0 table #5: 5304 bytes OK
2026/06/02-21:20:33.853230 174277000 Delete type=0 #3
2026/06/02-21:20:33.853280 174277000 Manual compaction at level-0 from '\x00' @ 72057594037927935 : 1 .. '\xc3\xbf' @ 0 : 0; will stop at (end)
Binary file not shown.
Binary file not shown.
+5 -5
View File
@@ -1,5 +1,5 @@
2026/06/02-16:36:28.802678 1711c7000 Delete type=3 #1
2026/06/02-16:36:28.803418 171a5f000 Level-0 table #5: started
2026/06/02-16:36:28.803627 171a5f000 Level-0 table #5: 10684 bytes OK
2026/06/02-16:36:28.803686 171a5f000 Delete type=0 #3
2026/06/02-16:36:28.803730 171a5f000 Manual compaction at level-0 from '\x00' @ 72057594037927935 : 1 .. '\xc3\xbf' @ 0 : 0; will stop at (end)
2026/06/02-21:20:33.855211 1739df000 Delete type=3 #1
2026/06/02-21:20:33.855720 174277000 Level-0 table #5: started
2026/06/02-21:20:33.856032 174277000 Level-0 table #5: 10656 bytes OK
2026/06/02-21:20:33.856090 174277000 Delete type=0 #3
2026/06/02-21:20:33.856141 174277000 Manual compaction at level-0 from '\x00' @ 72057594037927935 : 1 .. '\xc3\xbf' @ 0 : 0; will stop at (end)
Binary file not shown.
Binary file not shown.
+5 -5
View File
@@ -1,5 +1,5 @@
2026/06/02-16:36:28.805981 1711c7000 Delete type=3 #1
2026/06/02-16:36:28.807171 171a5f000 Level-0 table #5: started
2026/06/02-16:36:28.807630 171a5f000 Level-0 table #5: 15502 bytes OK
2026/06/02-16:36:28.807724 171a5f000 Delete type=0 #3
2026/06/02-16:36:28.807801 171a5f000 Manual compaction at level-0 from '\x00' @ 72057594037927935 : 1 .. '\xc3\xbf' @ 0 : 0; will stop at (end)
2026/06/02-21:20:33.858027 1739df000 Delete type=3 #1
2026/06/02-21:20:33.858852 174277000 Level-0 table #5: started
2026/06/02-21:20:33.859123 174277000 Level-0 table #5: 15540 bytes OK
2026/06/02-21:20:33.859200 174277000 Delete type=0 #3
2026/06/02-21:20:33.859248 174277000 Manual compaction at level-0 from '\x00' @ 72057594037927935 : 1 .. '\xc3\xbf' @ 0 : 0; will stop at (end)
Binary file not shown.
Binary file not shown.
+5 -5
View File
@@ -1,5 +1,5 @@
2026/06/02-16:36:28.817185 1701af000 Delete type=3 #1
2026/06/02-16:36:28.817563 171a5f000 Level-0 table #5: started
2026/06/02-16:36:28.817757 171a5f000 Level-0 table #5: 6907 bytes OK
2026/06/02-16:36:28.817813 171a5f000 Delete type=0 #3
2026/06/02-16:36:28.817855 171a5f000 Manual compaction at level-0 from '\x00' @ 72057594037927935 : 1 .. '\xc3\xbf' @ 0 : 0; will stop at (end)
2026/06/02-21:20:33.867027 1729c7000 Delete type=3 #1
2026/06/02-21:20:33.867579 174277000 Level-0 table #5: started
2026/06/02-21:20:33.867906 174277000 Level-0 table #5: 7061 bytes OK
2026/06/02-21:20:33.867966 174277000 Delete type=0 #3
2026/06/02-21:20:33.868012 174277000 Manual compaction at level-0 from '\x00' @ 72057594037927935 : 1 .. '\xc3\xbf' @ 0 : 0; will stop at (end)
Binary file not shown.
Binary file not shown.
+5 -5
View File
@@ -1,5 +1,5 @@
2026/06/02-16:36:28.809895 1701af000 Delete type=3 #1
2026/06/02-16:36:28.810655 171a5f000 Level-0 table #5: started
2026/06/02-16:36:28.811045 171a5f000 Level-0 table #5: 6391 bytes OK
2026/06/02-16:36:28.811147 171a5f000 Delete type=0 #3
2026/06/02-16:36:28.811211 171a5f000 Manual compaction at level-0 from '\x00' @ 72057594037927935 : 1 .. '\xc3\xbf' @ 0 : 0; will stop at (end)
2026/06/02-21:20:33.860677 1729c7000 Delete type=3 #1
2026/06/02-21:20:33.861443 174277000 Level-0 table #5: started
2026/06/02-21:20:33.861807 174277000 Level-0 table #5: 7099 bytes OK
2026/06/02-21:20:33.861900 174277000 Delete type=0 #3
2026/06/02-21:20:33.861958 174277000 Manual compaction at level-0 from '\x00' @ 72057594037927935 : 1 .. '\xc3\xbf' @ 0 : 0; will stop at (end)
Binary file not shown.
Binary file not shown.
+5 -5
View File
@@ -1,5 +1,5 @@
2026/06/02-16:36:28.813617 1701af000 Delete type=3 #1
2026/06/02-16:36:28.814842 171a5f000 Level-0 table #5: started
2026/06/02-16:36:28.815460 171a5f000 Level-0 table #5: 13371 bytes OK
2026/06/02-16:36:28.815603 171a5f000 Delete type=0 #3
2026/06/02-16:36:28.815690 171a5f000 Manual compaction at level-0 from '\x00' @ 72057594037927935 : 1 .. '\xc3\xbf' @ 0 : 0; will stop at (end)
2026/06/02-21:20:33.863857 1729c7000 Delete type=3 #1
2026/06/02-21:20:33.864970 174277000 Level-0 table #5: started
2026/06/02-21:20:33.865381 174277000 Level-0 table #5: 14973 bytes OK
2026/06/02-21:20:33.865434 174277000 Delete type=0 #3
2026/06/02-21:20:33.865475 174277000 Manual compaction at level-0 from '\x00' @ 72057594037927935 : 1 .. '\xc3\xbf' @ 0 : 0; will stop at (end)
Binary file not shown.
+26 -26
View File
@@ -2,7 +2,7 @@
{
"name": "Sniper",
"type": "specialty",
"img": "icons/svg/combat.svg",
"img": "systems/zero-engine/assets/icons/specialties/specialty-sniper.svg",
"system": {
"description": "You are trained to wait, breathe, and kill from extreme range, using concealment and patience instead of volume of fire.",
"effects": "+2 Marksmanship (Long+ range, concealment required)",
@@ -16,7 +16,7 @@
{
"name": "Fast Reflexes",
"type": "specialty",
"img": "icons/svg/combat.svg",
"img": "systems/zero-engine/assets/icons/specialties/specialty-fast-reflexes.svg",
"system": {
"description": "Your body reacts before your brain finishes the thought; you slip out of danger and act a heartbeat before others.",
"effects": "Draw 2 initiative cards, choose the better one",
@@ -30,9 +30,9 @@
{
"name": "Inquisitive",
"type": "specialty",
"img": "icons/svg/book.svg",
"img": "systems/zero-engine/assets/icons/specialties/specialty-inquisitive.svg",
"system": {
"description": "You can’t leave a question alone; you pick at loose threads until they reveal the bigger pattern.",
"description": "You can\u2019t leave a question alone; you pick at loose threads until they reveal the bigger pattern.",
"effects": "Push WIT rolls twice per roll",
"category": "investigation",
"package": "Investigator",
@@ -44,23 +44,23 @@
{
"name": "Gut Feeling",
"type": "specialty",
"img": "icons/svg/book.svg",
"img": "systems/zero-engine/assets/icons/specialties/specialty-gut-feeling.svg",
"system": {
"description": "You have razor‑sharp instincts; your body spots danger before your conscious mind understands it.",
"description": "You have razor\u2011sharp instincts; your body spots danger before your conscious mind understands it.",
"effects": "Use EMP for Observation (threat detection only)",
"category": "investigation",
"package": "Investigator",
"prerequisites": "Investigator training package",
"isActive": true,
"effect": "Once per encounter, you may ask the GM “Is there an immediate hidden threat here?” and receive an honest yes/no answer plus a short hint if the answer is yes."
"effect": "Once per encounter, you may ask the GM \u201cIs there an immediate hidden threat here?\u201d and receive an honest yes/no answer plus a short hint if the answer is yes."
}
},
{
"name": "Hard Hitter",
"type": "specialty",
"img": "icons/svg/combat.svg",
"img": "systems/zero-engine/assets/icons/specialties/specialty-hard-hitter.svg",
"system": {
"description": "You don’t waste effort; every swing or shot is committed, brutal, and aimed to break things.",
"description": "You don\u2019t waste effort; every swing or shot is committed, brutal, and aimed to break things.",
"effects": "+1 Melee damage (sacrifice fast action)",
"category": "combat",
"package": "Frother",
@@ -72,9 +72,9 @@
{
"name": "True Grit",
"type": "specialty",
"img": "icons/svg/shield.svg",
"img": "systems/zero-engine/assets/icons/specialties/specialty-true-grit.svg",
"system": {
"description": "You simply refuse to stay down; pain and blood loss slow you, but they don’t stop you.",
"description": "You simply refuse to stay down; pain and blood loss slow you, but they don\u2019t stop you.",
"effects": "+1 maximum Health",
"category": "survival",
"package": "Frother",
@@ -86,7 +86,7 @@
{
"name": "Menacing",
"type": "specialty",
"img": "icons/svg/mystery-man.svg",
"img": "systems/zero-engine/assets/icons/specialties/specialty-menacing.svg",
"system": {
"description": "Your presence, tone, and body language radiate controlled threat; people know you mean everything you say.",
"effects": "Use STR for Persuasion (intimidation only)",
@@ -100,7 +100,7 @@
{
"name": "Compassion",
"type": "specialty",
"img": "icons/svg/mystery-man.svg",
"img": "systems/zero-engine/assets/icons/specialties/specialty-compassion.svg",
"system": {
"description": "You genuinely care, and people feel it; that makes them open up, calm down, or cling to you in crisis.",
"effects": "Push EMP rolls twice per roll",
@@ -114,21 +114,21 @@
{
"name": "Field Surgeon",
"type": "specialty",
"img": "icons/svg/heal.svg",
"img": "systems/zero-engine/assets/icons/specialties/specialty-field-surgeon.svg",
"system": {
"description": "You’re trained to work fast in filthy alleys and fire‑lit corridors, keeping people alive with whatever is at hand.",
"description": "You\u2019re trained to work fast in filthy alleys and fire\u2011lit corridors, keeping people alive with whatever is at hand.",
"effects": "+1 Healing (critical injuries only)",
"category": "medical",
"package": "Medic",
"prerequisites": "Medic/Field Surgeon training package",
"isActive": true,
"effect": "When you treat a physical Critical Injury with Healing, reduce the required healing time by one step (rounds → stretch, stretch → shift, shift → 2 shifts, etc., to a minimum of 1 stretch)."
"effect": "When you treat a physical Critical Injury with Healing, reduce the required healing time by one step (rounds \u2192 stretch, stretch \u2192 shift, shift \u2192 2 shifts, etc., to a minimum of 1 stretch)."
}
},
{
"name": "Healer",
"type": "specialty",
"img": "icons/svg/heal.svg",
"img": "systems/zero-engine/assets/icons/specialties/specialty-healer.svg",
"system": {
"description": "You focus on stabilizing and restoring others, making the most out of limited supplies and time.",
"effects": "Critical injuries heal in half the time",
@@ -142,7 +142,7 @@
{
"name": "Ebb Sensitive",
"type": "specialty",
"img": "icons/svg/explosion.svg",
"img": "systems/zero-engine/assets/icons/specialties/specialty-ebb-sensitive.svg",
"system": {
"description": "You have an innate feel for flux; the Ebb whispers in your nerves even when you are not actively using it.",
"effects": "Sense Ebons within ~10m radius",
@@ -156,7 +156,7 @@
{
"name": "Ebb Fury",
"type": "specialty",
"img": "icons/svg/explosion.svg",
"img": "systems/zero-engine/assets/icons/specialties/specialty-ebb-fury.svg",
"system": {
"description": "You channel rage into raw psychic force, driving your powers harder than is strictly safe.",
"effects": "Spend 1 EP: +2 dice to combat roll",
@@ -170,7 +170,7 @@
{
"name": "Code of Honor",
"type": "specialty",
"img": "icons/svg/statue.svg",
"img": "systems/zero-engine/assets/icons/specialties/specialty-code-of-honor.svg",
"system": {
"description": "You live by a strict personal or cultural code; breaking it would be worse than death.",
"effects": "Reroll all dice when upholding honor (once per session)",
@@ -178,15 +178,15 @@
"package": "Shaktar",
"prerequisites": "Shaktar race",
"isActive": true,
"effect": "When acting directly in line with your code (GM’s approval), you gain +1 die to a single roll once per scene; if you knowingly break your code, you immediately gain +1 Stress."
"effect": "When acting directly in line with your code (GM\u2019s approval), you gain +1 die to a single roll once per scene; if you knowingly break your code, you immediately gain +1 Stress."
}
},
{
"name": "Cold Adapted",
"type": "specialty",
"img": "icons/svg/statue.svg",
"img": "systems/zero-engine/assets/icons/specialties/specialty-cold-adapted.svg",
"system": {
"description": "Your body is made for freezing climates; Mort’s bitter winds feel like mild weather.",
"description": "Your body is made for freezing climates; Mort\u2019s bitter winds feel like mild weather.",
"effects": "Ignore cold penalties; +1 Stealth (dim/dark)",
"category": "racial",
"package": "Wraith Raider",
@@ -198,7 +198,7 @@
{
"name": "Regeneration",
"type": "specialty",
"img": "icons/svg/statue.svg",
"img": "systems/zero-engine/assets/icons/specialties/specialty-regeneration.svg",
"system": {
"description": "Your body knits flesh and bone far faster than humans; wounds close into angry scars in hours.",
"effects": "Heal 1 Health per hour (automatic)",
@@ -212,7 +212,7 @@
{
"name": "Combat Drug User",
"type": "specialty",
"img": "icons/svg/statue.svg",
"img": "systems/zero-engine/assets/icons/specialties/specialty-combat-drug-user.svg",
"system": {
"description": "You know exactly how to ride the razor edge of combat drugs without immediately burning out.",
"effects": "Rush drug: +2 combat, -2 mental (addiction risk)",
@@ -220,7 +220,7 @@
"package": "Frother",
"prerequisites": "Frother race",
"isActive": true,
"effect": "When you take a combat drug (such as Rush), you may ignore the first –1 die penalty from its side effects for the duration of that dose."
"effect": "When you take a combat drug (such as Rush), you may ignore the first \u20131 die penalty from its side effects for the duration of that dose."
}
}
]
+509 -405
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -2,7 +2,7 @@
"id": "zero-engine",
"title": "Zero Engine (SLA Industries)",
"description": "A basic game system for SLA Industries using the Zero Engine rules.",
"version": "1.3.9",
"version": "1.4.0",
"compatibility": {
"minimum": 13,
"verified": "14.359"