<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.hoodedhorse.com/Heroes_of_Might_and_Magic_Olden_Era/index.php?action=history&amp;feed=atom&amp;title=Template%3ASkillRollTableDef</id>
	<title>Template:SkillRollTableDef - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.hoodedhorse.com/Heroes_of_Might_and_Magic_Olden_Era/index.php?action=history&amp;feed=atom&amp;title=Template%3ASkillRollTableDef"/>
	<link rel="alternate" type="text/html" href="https://wiki.hoodedhorse.com/Heroes_of_Might_and_Magic_Olden_Era/index.php?title=Template:SkillRollTableDef&amp;action=history"/>
	<updated>2026-10-10T11:18:52Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.44.5</generator>
	<entry>
		<id>https://wiki.hoodedhorse.com/Heroes_of_Might_and_Magic_Olden_Era/index.php?title=Template:SkillRollTableDef&amp;diff=18180&amp;oldid=prev</id>
		<title>76561198026315966: obelisk-bot: Adding new tables for hero skill rolls</title>
		<link rel="alternate" type="text/html" href="https://wiki.hoodedhorse.com/Heroes_of_Might_and_Magic_Olden_Era/index.php?title=Template:SkillRollTableDef&amp;diff=18180&amp;oldid=prev"/>
		<updated>2026-05-19T01:14:10Z</updated>

		<summary type="html">&lt;p&gt;obelisk-bot: Adding new tables for hero skill rolls&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
One row per skill-roll table — &amp;#039;&amp;#039;&amp;#039;24 rows&amp;#039;&amp;#039;&amp;#039; total: the 12 standard (one per (faction, class_type)) plus 12 arena counterparts.&lt;br /&gt;
&lt;br /&gt;
This is the &amp;#039;&amp;#039;&amp;#039;header row&amp;#039;&amp;#039;&amp;#039; for a roll table. The actual weights live in&lt;br /&gt;
&amp;lt;code&amp;gt;SkillRollWeightDef&amp;lt;/code&amp;gt; rows on the same page, joined via &amp;lt;code&amp;gt;table_id&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Heroes point at a row here via the existing &amp;lt;code&amp;gt;HeroClassDef.skills_roll_variant&amp;lt;/code&amp;gt; column (matches &amp;lt;code&amp;gt;SkillRollTable.id&amp;lt;/code&amp;gt;). The redundant &amp;lt;code&amp;gt;class_id&amp;lt;/code&amp;gt; column lets display templates also join in the other direction (&amp;lt;code&amp;gt;HeroClass.id = SkillRollTable.class_id&amp;lt;/code&amp;gt;) without going through the variant name.&lt;br /&gt;
&lt;br /&gt;
A roll table is &amp;quot;the weighted urn.&amp;quot; The engine&amp;#039;s slot-assignment logic (slot 1 = guaranteed upgrade of an existing non-Expert skill if any; slots 2-3 = weighted picks from this urn; pseudo-skill fallback when the urn can&amp;#039;t supply 3 valid offerings) is &amp;#039;&amp;#039;&amp;#039;not&amp;#039;&amp;#039;&amp;#039; encoded in this data — it lives in game code we don&amp;#039;t see. See &amp;lt;code&amp;gt;SkillRollWeightDef&amp;lt;/code&amp;gt; for the per-skill weights and &amp;lt;code&amp;gt;SkillRollBandDef&amp;lt;/code&amp;gt; for the level-grid metadata.&lt;br /&gt;
&lt;br /&gt;
== Schema ==&lt;br /&gt;
{{#cargo_declare:_table=SkillRollTable&lt;br /&gt;
| id = String&lt;br /&gt;
| class_id = String&lt;br /&gt;
| faction = String (allowed values=human,undead,dungeon,nature,demon,unfrozen)&lt;br /&gt;
| class_type = String (allowed values=might,magic)&lt;br /&gt;
| mode = String (allowed values=standard,arena)&lt;br /&gt;
| source_path = String&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
{{SkillRollTableDef&lt;br /&gt;
| id = String                  &amp;lt;!-- e.g. humans_might_skills_table --&amp;gt;&lt;br /&gt;
| class_id = String            &amp;lt;!-- e.g. might_human, matches HeroClass.id --&amp;gt;&lt;br /&gt;
| faction = String (allowed values=human,undead,dungeon,nature,demon,unfrozen)&lt;br /&gt;
| class_type = String (allowed values=might,magic)&lt;br /&gt;
| mode = String (allowed values=standard,arena)&lt;br /&gt;
| source_path = String         &amp;lt;!-- e.g. Core/DB/heroes_skills/skills_by_level_tables/humans_might_skills_table.json --&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Field notes ==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; is the source-JSON&amp;#039;s &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; field, matching the file basename. Standard tables: &amp;lt;code&amp;gt;&amp;lt;faction_folder&amp;gt;_&amp;lt;class_type&amp;gt;_skills_table&amp;lt;/code&amp;gt; (e.g. &amp;lt;code&amp;gt;humans_might_skills_table&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;necros_magic_skills_table&amp;lt;/code&amp;gt;). Arena tables: &amp;lt;code&amp;gt;arenaGame_&amp;lt;faction_folder&amp;gt;_&amp;lt;class_type&amp;gt;_skills_table&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;class_id&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; is the canonical HeroClass id (&amp;lt;code&amp;gt;&amp;lt;class_type&amp;gt;_&amp;lt;faction&amp;gt;&amp;lt;/code&amp;gt;, e.g. &amp;lt;code&amp;gt;might_human&amp;lt;/code&amp;gt;), &amp;#039;&amp;#039;&amp;#039;not&amp;#039;&amp;#039;&amp;#039; the source folder spelling. Note the faction normalization: source folders use &amp;lt;code&amp;gt;humans/demons/necros&amp;lt;/code&amp;gt; (plural / archaic), but the &amp;lt;code&amp;gt;fraction&amp;lt;/code&amp;gt; field — and therefore &amp;lt;code&amp;gt;class_id&amp;lt;/code&amp;gt; — uses the singular &amp;lt;code&amp;gt;human/demon/undead&amp;lt;/code&amp;gt; form. Both &amp;lt;code&amp;gt;standard&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;arena&amp;lt;/code&amp;gt; tables for the same class share the same &amp;lt;code&amp;gt;class_id&amp;lt;/code&amp;gt;; query by &amp;lt;code&amp;gt;mode&amp;lt;/code&amp;gt; to disambiguate.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;mode&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; separates the 12 standard tables (used in main-game level-ups) from the 12 arena tables (used in arena game modes; reference different SIDs under the &amp;lt;code&amp;gt;arena_skill_*&amp;lt;/code&amp;gt; namespace). The arena table content is a deliberate transform of the standard — combat and magic-mastery skills get ~1.5× weight, adventure-map skills (logistics, scouting, economy, diplomacy, enlightenment, trainer, siege) are dropped entirely.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;source_path&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; is the relative path of the source JSON under the patch root, kept for traceability and to make the audit&amp;#039;s &amp;quot;this table changed&amp;quot; report easy to follow.&lt;br /&gt;
&lt;br /&gt;
== Universal pool composition ==&lt;br /&gt;
Every standard table holds exactly &amp;#039;&amp;#039;&amp;#039;24 skills&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
* 22 &amp;#039;&amp;#039;&amp;#039;universal&amp;#039;&amp;#039;&amp;#039; non-faction skills (every class can roll these — including all four magic-element schools &amp;lt;code&amp;gt;day/night/space/primal&amp;lt;/code&amp;gt; and all four magic-mastery skills &amp;lt;code&amp;gt;sorcery/mastery/summoner/battlemage&amp;lt;/code&amp;gt;)&lt;br /&gt;
* 1 &amp;#039;&amp;#039;&amp;#039;class-signature&amp;#039;&amp;#039;&amp;#039; skill: &amp;lt;code&amp;gt;skill_battle_artistry&amp;lt;/code&amp;gt; in might tables, &amp;lt;code&amp;gt;skill_wisdom&amp;lt;/code&amp;gt; in magic tables. Mutually exclusive at the data level — no engine-side filtering needed.&lt;br /&gt;
* 1 &amp;#039;&amp;#039;&amp;#039;own-faction&amp;#039;&amp;#039;&amp;#039; skill (e.g. &amp;lt;code&amp;gt;skill_faction_humans&amp;lt;/code&amp;gt; in humans tables).&lt;br /&gt;
&lt;br /&gt;
Class identity is encoded entirely in the weight differences plus the signature swap. The magic-element block (&amp;lt;code&amp;gt;day=80, night=20, space=60, primal=40&amp;lt;/code&amp;gt;) is &amp;#039;&amp;#039;&amp;#039;class-invariant&amp;#039;&amp;#039;&amp;#039; — a might hero has the same per-school magic-roll weights as a magic hero. Faction-thematic magic preference (if any) lives in specializations / faction laws / hero start kits, not here.&lt;br /&gt;
&lt;br /&gt;
== Related tables ==&lt;br /&gt;
* [[Template:SkillRollWeightDef|SkillRollWeight]] — the per-skill weight rows (1:N, ~36 per table for standard).&lt;br /&gt;
* [[Template:SkillRollBandDef|SkillRollBand]] — small shared reference table listing the levels each band covers.&lt;br /&gt;
* [[Template:HeroClassDef|HeroClass]] — joined on &amp;lt;code&amp;gt;HeroClass.id = SkillRollTable.class_id&amp;lt;/code&amp;gt; (1:N — each class has both a standard and an arena roll table). Also reachable via &amp;lt;code&amp;gt;HeroClass.skills_roll_variant = SkillRollTable.id&amp;lt;/code&amp;gt; (1:1, picks one mode).&lt;br /&gt;
* [[Template:SkillRollReplacementDef|SkillRollReplacement]] — per-hero arena overrides; applies on top of an arena table&amp;#039;s weights, not over a standard table.&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
* The 50-level grid embedded in source &amp;lt;code&amp;gt;skills_by_level_tables&amp;lt;/code&amp;gt; is design-space padding. The current shipping mechanics cap effective skill progression at ~24 level-ups (8 skill slots × 3 ranks); every band entry above that level is unreachable under current rules.&lt;br /&gt;
* Campaign / custom-map / tutorial roll-table variants under &amp;lt;code&amp;gt;skills_by_level_tables/campaign/&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;.../custom_maps/&amp;lt;/code&amp;gt; are &amp;#039;&amp;#039;&amp;#039;not&amp;#039;&amp;#039;&amp;#039; currently extracted — see deferral note in &amp;lt;code&amp;gt;decisions.md&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Category:Cargo Definitions]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;{{#cargo_store:_table=SkillRollTable&lt;br /&gt;
| id = {{{id|}}}&lt;br /&gt;
| class_id = {{{class_id|}}}&lt;br /&gt;
| faction = {{{faction|}}}&lt;br /&gt;
| class_type = {{{class_type|}}}&lt;br /&gt;
| mode = {{{mode|}}}&lt;br /&gt;
| source_path = {{{source_path|}}}&lt;br /&gt;
}}&lt;br /&gt;
Created &amp;lt;code&amp;gt;SkillRollTable&amp;lt;/code&amp;gt; entry: &amp;lt;code&amp;gt;{{{id|}}}&amp;lt;/code&amp;gt;&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>76561198026315966</name></author>
	</entry>
</feed>