Template:HeroSpecializationDef
From Heroes of Might and Magic: Olden Era Official Wiki
One row per hero specialization (126 in the 2026-05-03 corpus: 108 faction + 9 campaign + 5 tutorial + 4 test). Each spec is the unique passive that distinguishes one hero mechanically — every Hero record carries specialization_id pointing at one of these.
The specialization carries identity (name, desc, icon) plus a list of structured bonuses[] effects that compose the spec's mechanical impact. Bonuses are emitted as inline
{{HeroSpecializationBonus}} rows on the same wiki page.
Page layout
Data:HeroSpecialization/<id> carries:
{{HeroSpecializationDef | id=… | icon=… | name_sid=… | desc_sid=… | …}}- N ×
{{TranslationDef | type=hero_specialization | target_id=<id> | language=… | …}}— one row per language - N ×
{{HeroSpecializationBonus | spec_id=<id> | ordinal=N | …}}(1367 total bonus rows across all 126 specs)
Schema
This template defines the table "HeroSpecialization". View table.
{{HeroSpecializationDef
| id = String
| icon = String
<!-- Localization references — display text lives in the Translation table, type='hero_specialization' -->
| name_sid = String
| desc_sid = String
| source_path = String
}}
Field notes
idis the source JSON id (e.g.human_hero_1_specialization,campaign_hero_4_specialization). The_specializationsuffix is preserved.name_sid/desc_sidpoint at the L10n entries (e.g.human_hero_1_spec_name/human_hero_1_spec_description), surfaced for traceability. Description text is heavy with{0}/{1}placeholders for stat values; the resolver substitutes via the standard pipeline before storing the translation.- Display name / description for every language (English included) live in the Translation table,
type='hero_specialization'. - No
hero_idback-reference. The Hero → HeroSpecialization direction is sufficient (forward join viaHero.specialization_id = HeroSpecialization.id). Reverse queries — "which hero has this spec" — work via the same join.
Related tables
- Hero — joined on
id = Hero.specialization_id(1:1 in practice; the schema permits N:1 in case a future patch shares specs across heroes). - HeroSpecializationBonus — joined on
id = spec_id(1:N). - Translation — display text in every language (English included), joined on
id = Translation.target_id WHERE Translation.type='hero_specialization' AND Translation.language='en'(1:N, one row per language).


