<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://hlkitwiki.wolflair.com//index.php?action=history&amp;feed=atom&amp;title=More_on_Arcane_Backgrounds_%28Savage%29</id>
	<title>More on Arcane Backgrounds (Savage) - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://hlkitwiki.wolflair.com//index.php?action=history&amp;feed=atom&amp;title=More_on_Arcane_Backgrounds_%28Savage%29"/>
	<link rel="alternate" type="text/html" href="https://hlkitwiki.wolflair.com//index.php?title=More_on_Arcane_Backgrounds_(Savage)&amp;action=history"/>
	<updated>2026-05-05T18:23:29Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://hlkitwiki.wolflair.com//index.php?title=More_on_Arcane_Backgrounds_(Savage)&amp;diff=2369&amp;oldid=prev</id>
		<title>Rob: /* Hiding Arcane Skills */</title>
		<link rel="alternate" type="text/html" href="https://hlkitwiki.wolflair.com//index.php?title=More_on_Arcane_Backgrounds_(Savage)&amp;diff=2369&amp;oldid=prev"/>
		<updated>2009-01-28T02:19:25Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Hiding Arcane Skills&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 02:19, 28 January 2009&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l42&quot;&gt;Line 42:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 42:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   isunique=&amp;quot;yes&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   isunique=&amp;quot;yes&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   description=&amp;quot;Description goes here&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   description=&amp;quot;Description goes here&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;  &amp;lt;fieldval field=&quot;trtAbbrev&quot; value=&quot;Spl&quot;/&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &amp;lt;tag group=&amp;quot;Arcane&amp;quot; tag=&amp;quot;Magic&amp;quot;/&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &amp;lt;tag group=&amp;quot;Arcane&amp;quot; tag=&amp;quot;Magic&amp;quot;/&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &amp;lt;containerreq phase=&amp;quot;Initialize&amp;quot; priority=&amp;quot;2000&amp;quot;&amp;gt;Arcane.Magic&amp;lt;/containerreq&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &amp;lt;containerreq phase=&amp;quot;Initialize&amp;quot; priority=&amp;quot;2000&amp;quot;&amp;gt;Arcane.Magic&amp;lt;/containerreq&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l58&quot;&gt;Line 58:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 59:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Everything should now work. Until the arcane background edge is selected, the corresponding skill never appears. Once the edge is added, the skill appears and can be added. If the user deletes the edge, the skill turns red and a validation error is reported until we delete it (or re-add the edge).  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Everything should now work. Until the arcane background edge is selected, the corresponding skill never appears. Once the edge is added, the skill appears and can be added. If the user deletes the edge, the skill turns red and a validation error is reported until we delete it (or re-add the edge).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===Arcane Power Mechanics===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===Arcane Power Mechanics===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Rob</name></author>
	</entry>
	<entry>
		<id>https://hlkitwiki.wolflair.com//index.php?title=More_on_Arcane_Backgrounds_(Savage)&amp;diff=1894&amp;oldid=prev</id>
		<title>Rob: More on Arcane Backgrounds (Skeleton) moved to More on Arcane Backgrounds (Savage)</title>
		<link rel="alternate" type="text/html" href="https://hlkitwiki.wolflair.com//index.php?title=More_on_Arcane_Backgrounds_(Savage)&amp;diff=1894&amp;oldid=prev"/>
		<updated>2008-12-18T04:10:07Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=More_on_Arcane_Backgrounds_(Skeleton)&quot; class=&quot;mw-redirect&quot; title=&quot;More on Arcane Backgrounds (Skeleton)&quot;&gt;More on Arcane Backgrounds (Skeleton)&lt;/a&gt; moved to &lt;a href=&quot;/index.php?title=More_on_Arcane_Backgrounds_(Savage)&quot; title=&quot;More on Arcane Backgrounds (Savage)&quot;&gt;More on Arcane Backgrounds (Savage)&lt;/a&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 04:10, 18 December 2008&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Rob</name></author>
	</entry>
	<entry>
		<id>https://hlkitwiki.wolflair.com//index.php?title=More_on_Arcane_Backgrounds_(Savage)&amp;diff=1893&amp;oldid=prev</id>
		<title>Rob at 04:09, 18 December 2008</title>
		<link rel="alternate" type="text/html" href="https://hlkitwiki.wolflair.com//index.php?title=More_on_Arcane_Backgrounds_(Savage)&amp;diff=1893&amp;oldid=prev"/>
		<updated>2008-12-18T04:09:18Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 04:09, 18 December 2008&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l124&quot;&gt;Line 124:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 124:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Powers have a minimum required rank that behaves exactly the same as for edges. That leaves us with two options. First, we could copy the logic over and adapt it for powers. Second, we could look for a way to carve out the minimum rank logic into a separate component that could be easily re-used. Since the minimum rank logic is identical for edges and powers, and since proper handling of the minimum rank entails testing the pre-requisites, it makes much more sense to carve out the logic for re-use.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Powers have a minimum required rank that behaves exactly the same as for edges. That leaves us with two options. First, we could copy the logic over and adapt it for powers. Second, we could look for a way to carve out the minimum rank logic into a separate component that could be easily re-used. Since the minimum rank logic is identical for edges and powers, and since proper handling of the minimum rank entails testing the pre-requisites, it makes much more sense to carve out the logic for re-use.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Extracting the logic entails creating a new component that we&#039;ll call &quot;MinRank&quot;. This new component needs to possess a single field for tracking the minimum rank and the pre-&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;requisiste &lt;/del&gt;logic. So we move the &quot;edgMinRank&quot; field to the new component and change its name to &quot;rnkMinRank&quot;. Then we move the pre-requisite test to the new component. This results in a component that looks like the following.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Extracting the logic entails creating a new component that we&#039;ll call &quot;MinRank&quot;. This new component needs to possess a single field for tracking the minimum rank and the pre-&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;requisite &lt;/ins&gt;logic. So we move the &quot;edgMinRank&quot; field to the new component and change its name to &quot;rnkMinRank&quot;. Then we move the pre-requisite test to the new component. This results in a component that looks like the following.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l136&quot;&gt;Line 136:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 136:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     type=&amp;quot;static&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     type=&amp;quot;static&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     &amp;lt;/field&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     &amp;lt;/field&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &amp;lt;prereq iserror=&amp;quot;yes&amp;quot; message=&amp;quot;Veteran Rank required.&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &amp;lt;prereq iserror=&amp;quot;yes&amp;quot; message=&amp;quot;Veteran Rank required.&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     &amp;lt;valid&amp;gt;&amp;lt;![CDATA[&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     &amp;lt;valid&amp;gt;&amp;lt;![CDATA[&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l141&quot;&gt;Line 141:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 142:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     var rank as number&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     var rank as number&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     rank = altthing.field[rnkMinRank].value&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     rank = altthing.field[rnkMinRank].value&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     ~if the minimum rank is satisfied, we&amp;#039;re good to go&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     ~if the minimum rank is satisfied, we&amp;#039;re good to go&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     if (herofield[acRank].value &amp;gt;= rank) then&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     if (herofield[acRank].value &amp;gt;= rank) then&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l146&quot;&gt;Line 146:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 148:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;       done&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;       done&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;       endif&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;       endif&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     ~mark the panel as invalid&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     ~mark the panel as invalid&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     altthing.linkvalid = 0&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     altthing.linkvalid = 0&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     ~synthesize an appropriate validation error message&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     ~synthesize an appropriate validation error message&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     if (rank = 1) then&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     if (rank = 1) then&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l164&quot;&gt;Line 164:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 168:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Unfortunately, we can&#039;t put the new component in the file &quot;traits.&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;pri&lt;/del&gt;&quot;. We need to use this component in the component set for edges (in &quot;traits.&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;pri&lt;/del&gt;&quot;) and the component set for powers (in &quot;miscellaneous.&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;pri&lt;/del&gt;&quot;). Since the compiler processes files with the same file extension (e.g. &quot;.&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;dat&lt;/del&gt;&quot;) in whatever order that Windows gives them to &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Hero Lab&lt;/del&gt;, and since that order is not consistent across versions of Windows, we can&#039;t safely put the component in one file or the other. Instead, it needs to be placed in a file that is guaranteed to be compiled prior to both files. Such a file already exists as the file &quot;components.core&quot;, which already contains a few components that are shared by different component sets. So we add our new component to the file &quot;components.core&quot;, and everything should work smoothly.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Unfortunately, we can&#039;t put the new component in the file &quot;traits.&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;str&lt;/ins&gt;&quot;. We need to use this component in the component set for edges (in &quot;traits.&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;str&lt;/ins&gt;&quot;) and the component set for powers (in &quot;miscellaneous.&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;str&lt;/ins&gt;&quot;). Since the compiler processes files with the same file extension (e.g. &quot;.&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;str&lt;/ins&gt;&quot;) in whatever order that Windows gives them to &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;HL&lt;/ins&gt;, and since that order is not consistent across versions of Windows, we can&#039;t safely put the component in one file or the other. Instead, it needs to be placed in a file that is guaranteed to be compiled prior to both files. Such a file already exists as the file &quot;components.core&quot;, which already contains a few components that are shared by different component sets. So we add our new component to the file &quot;components.core&quot;, and everything should work smoothly.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Once the component is defined, we need to add it to the two component sets. This is easily achieved by adding the line below to both component sets.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Once the component is defined, we need to add it to the two component sets. This is easily achieved by adding the line below to both component sets.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l172&quot;&gt;Line 172:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 176:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The last thing we need to do is deal with the fact that we&#039;ve renamed the field for use within a different component. That means that all of our existing edges must have the field properly renamed. Open the file &quot;thing_edges.dat&quot; and perform a search-and-replace operation that changes all instances of &quot;edgMinRank&quot; to &quot;rnkMinRank&quot;. After that, the logic has been factored out and is now being re-used in multiple places.  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The last thing we need to do is deal with the fact that we&#039;ve renamed the field for use within a different component. That means that all of our existing edges must have the field properly renamed. Open the file &quot;thing_edges.dat&quot; and perform a search-and-replace operation that changes all instances of &quot;edgMinRank&quot; to &quot;rnkMinRank&quot;. After that, the logic has been factored out and is now being &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;cleanly &lt;/ins&gt;re-used in multiple places.  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===Adding Arcane Powers===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===Adding Arcane Powers===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Rob</name></author>
	</entry>
	<entry>
		<id>https://hlkitwiki.wolflair.com//index.php?title=More_on_Arcane_Backgrounds_(Savage)&amp;diff=1892&amp;oldid=prev</id>
		<title>Rob at 04:05, 18 December 2008</title>
		<link rel="alternate" type="text/html" href="https://hlkitwiki.wolflair.com//index.php?title=More_on_Arcane_Backgrounds_(Savage)&amp;diff=1892&amp;oldid=prev"/>
		<updated>2008-12-18T04:05:18Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 04:05, 18 December 2008&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l33&quot;&gt;Line 33:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 33:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;When a ContainerReq test is defined for a thing, Hero Lab must be told when to perform the test within the overall evaluation cycle. The ContainerReq test must be the very first task performed for the thing, so it must be scheduled rather early in the overall cycle. However, it&amp;#039;s quite possible that other tasks need to be processed first within the evaluation cycle. In our case, that&amp;#039;s important, since our ContainerReq test needs to check against the presence of the &amp;quot;Arcane&amp;quot; tag on the character, but a script is needed to forward the tag from the arcane background up to the character. Consequently, we need to forward the tag from the arcane background before the ContainerReq test is performed.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;When a ContainerReq test is defined for a thing, Hero Lab must be told when to perform the test within the overall evaluation cycle. The ContainerReq test must be the very first task performed for the thing, so it must be scheduled rather early in the overall cycle. However, it&amp;#039;s quite possible that other tasks need to be processed first within the evaluation cycle. In our case, that&amp;#039;s important, since our ContainerReq test needs to check against the presence of the &amp;quot;Arcane&amp;quot; tag on the character, but a script is needed to forward the tag from the arcane background up to the character. Consequently, we need to forward the tag from the arcane background before the ContainerReq test is performed.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;If we want to find out the latest point in the evaluation cycle that we can schedule our ContainerReq test, we can add a ContainerReq test that is scheduled to occur at an extremely late timing (e.g. Render/10000). By re-compiling, HL will report an error, telling us when the earliest task on the thing is scheduled. Doing that yields an error that states we need to schedule our ContainerReq test at a timing of Initialize/3000 or earlier. We&#039;ll use Initialize/2000, which is specified via the &quot;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;condphase&lt;/del&gt;&quot; and &quot;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;condprior&lt;/del&gt;&quot; attributes. This results in a revised &quot;Spellcasting&quot; thing that looks like the following.  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;If we want to find out the latest point in the evaluation cycle that we can schedule our ContainerReq test, we can add a ContainerReq test that is scheduled to occur at an extremely late timing (e.g. Render/10000). By re-compiling, HL will report an error, telling us when the earliest task on the thing is scheduled. Doing that yields an error that states we need to schedule our ContainerReq test at a timing of Initialize/3000 or earlier. We&#039;ll use Initialize/2000, which is specified via the &quot;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;phase&lt;/ins&gt;&quot; and &quot;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;priority&lt;/ins&gt;&quot; attributes. This results in a revised &quot;Spellcasting&quot; thing that looks like the following.  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l41&quot;&gt;Line 41:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 41:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   compset=&amp;quot;Skill&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   compset=&amp;quot;Skill&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   isunique=&amp;quot;yes&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   isunique=&amp;quot;yes&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;  condphase=&quot;Initialize&quot;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;  condprior=&quot;2000&quot;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   description=&amp;quot;Description goes here&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   description=&amp;quot;Description goes here&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &amp;lt;tag group=&amp;quot;Arcane&amp;quot; tag=&amp;quot;Magic&amp;quot;/&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &amp;lt;tag group=&amp;quot;Arcane&amp;quot; tag=&amp;quot;Magic&amp;quot;/&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &amp;lt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;condition&lt;/del&gt;&amp;gt;Arcane.Magic&amp;lt;/&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;condition&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &amp;lt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;containerreq phase=&quot;Initialize&quot; priority=&quot;2000&quot;&lt;/ins&gt;&amp;gt;Arcane.Magic&amp;lt;/&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;containerreq&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &amp;lt;link linkage=&amp;quot;attribute&amp;quot; thing=&amp;quot;attrSma&amp;quot;/&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &amp;lt;link linkage=&amp;quot;attribute&amp;quot; thing=&amp;quot;attrSma&amp;quot;/&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &amp;lt;/thing&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &amp;lt;/thing&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{note}}The above definition might seem a bit odd at first, since it defines the tag &quot;Arcane.Magic&quot; and has a &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Condition &lt;/del&gt;test on the same tag. The important distinction is that the tag assignment assigns the tag to the thing, while the &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Condition &lt;/del&gt;test checks for the tag on the container of the thing/pick. Since skills are always added directly to the character, the container is the character. This means that the tag is added to the thing but the test is on the character.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{note}}The above definition might seem a bit odd at first, since it defines the tag &quot;Arcane.Magic&quot; and has a &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ContainerReq &lt;/ins&gt;test on the same tag. The important distinction is that the tag assignment assigns the tag to the thing, while the &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ContainerReq &lt;/ins&gt;test checks for the tag on the container of the thing/pick. Since skills are always added directly to the character, the container is the character. This means that the tag is added to the thing but the test is &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;performed &lt;/ins&gt;on the character.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;We have a problem, though. If we re-load the data files and check the table of skills, the &quot;Spellcasting&quot; skill will never appear, even if we properly select the &quot;Arcane Background: Magic&quot; edge. The problem is our timing, since the &quot;Arcane&quot; tag is still being forwarded by the &quot;Arcane&quot; component at the timing we previously assigned (Initialize/3000). We need to revise the timing of this script so that it occurs before the &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Condition &lt;/del&gt;test. We&#039;ll use Initialize/1000, which yields a revised script of the following.  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;We have a problem, though. If we re-load the data files and check the table of skills, the &quot;Spellcasting&quot; skill will never appear, even if we properly select the &quot;Arcane Background: Magic&quot; edge. The problem is our timing, since the &quot;Arcane&quot; tag is still being forwarded by the &quot;Arcane&quot; component at the timing we previously assigned (Initialize/3000). We need to revise the timing of this script so that it occurs &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&#039;&#039;&#039;&lt;/ins&gt;before&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&#039;&#039;&#039; &lt;/ins&gt;the &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ContainerReq &lt;/ins&gt;test. We&#039;ll use Initialize/1000, which yields a revised script of the following.  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;eval &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;value&lt;/del&gt;=&quot;1&quot; phase=&quot;Initialize&quot; priority=&quot;1000&quot;&amp;gt;&amp;lt;![CDATA[&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;eval &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;index&lt;/ins&gt;=&quot;1&quot; phase=&quot;Initialize&quot; priority=&quot;1000&quot;&amp;gt;&amp;lt;![CDATA[&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   perform forward[Arcane.?]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   perform forward[Arcane.?]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   ]]&amp;gt;&amp;lt;/eval&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   ]]&amp;gt;&amp;lt;/eval&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l64&quot;&gt;Line 64:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 62:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===Arcane Power Mechanics===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===Arcane Power Mechanics===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The mechanics for arcane backgrounds are already in place, but we still need to add the mechanics for arcane powers. This entails adding a new component and a new component set. Arcane powers have an assortment of characteristics that need to be tracked. We&#039;ll manage them all via fields for simplicity. All of these fields can be customized in some way beyond just tracking a number, except for the minimum rank required, so they need to treated as text-based fields. Putting it all together yields the following component and component set, which can both be added to the file &quot;miscellaneous.&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;pri&lt;/del&gt;&quot;.  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The mechanics for arcane backgrounds are already in place, but we still need to add the mechanics for arcane powers. This entails adding a new component and a new component set. Arcane powers have an assortment of characteristics that need to be tracked. We&#039;ll manage them all via fields for simplicity. All of these fields can be customized in some way beyond just tracking a number, except for the minimum rank required, so they need to &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;be &lt;/ins&gt;treated as text-based fields. Putting it all together yields the following component and component set, which can both be added to the file &quot;miscellaneous.&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;str&lt;/ins&gt;&quot;.  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l110&quot;&gt;Line 110:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 108:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;compset&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;compset&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   id=&amp;quot;Power&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   id=&amp;quot;Power&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &amp;lt;compref component=&quot;Power&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&quot; primary=&quot;yes&lt;/del&gt;&quot;/&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &amp;lt;compref component=&quot;Power&quot;/&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &amp;lt;/compset&amp;gt;  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &amp;lt;/compset&amp;gt;  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;There is one thing missing from the above component, though. Each component needs to properly consume one instance from the resource that tracks the number of available powers. This ensures that the number of powers left decreases as new powers are added to the character, and it can be accomplished with a simple component script like the one shown below.  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;There is one thing missing from the above component, though. Each component needs to properly consume one instance from the resource that tracks the number of available powers. This ensures that the number of powers left decreases as new powers are added to the character, and it can be accomplished with a simple component&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;-based Eval &lt;/ins&gt;script like the one shown below.  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;eval &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;value&lt;/del&gt;=&quot;1&quot; phase=&quot;Setup&quot; priority=&quot;5000&quot;&amp;gt;&amp;lt;![CDATA[&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;eval &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;index&lt;/ins&gt;=&quot;1&quot; phase=&quot;Setup&quot; priority=&quot;5000&quot;&amp;gt;&amp;lt;![CDATA[&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   #resspent[resPowers] += 1&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   #resspent[resPowers] += 1&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   ]]&amp;gt;&amp;lt;/eval&amp;gt;  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   ]]&amp;gt;&amp;lt;/eval&amp;gt;  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Rob</name></author>
	</entry>
	<entry>
		<id>https://hlkitwiki.wolflair.com//index.php?title=More_on_Arcane_Backgrounds_(Savage)&amp;diff=1891&amp;oldid=prev</id>
		<title>Rob at 03:58, 18 December 2008</title>
		<link rel="alternate" type="text/html" href="https://hlkitwiki.wolflair.com//index.php?title=More_on_Arcane_Backgrounds_(Savage)&amp;diff=1891&amp;oldid=prev"/>
		<updated>2008-12-18T03:58:24Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 03:58, 18 December 2008&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l9&quot;&gt;Line 9:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 9:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The Savage Worlds rules utilize the same basic mechanics for all types of arcane backgrounds, with the only difference being the trappings associated with the powers. As such, there is no practical benefit for a character to choose more than one arcane background, so we make the assumption that characters cannot choose multiple arcane backgrounds. This will make things much simpler for us to manage in the data files.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The Savage Worlds rules utilize the same basic mechanics for all types of arcane backgrounds, with the only difference being the trappings associated with the powers. As such, there is no practical benefit for a character to choose more than one arcane background, so we make the assumption that characters cannot choose multiple arcane backgrounds. This will make things much simpler for us to manage in the data files.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Imposing mutual exclusion on the various arcane backgrounds requires a little bit of work. Since arcane backgrounds can only be added via the various edges, we need to control the exclusion on the edges. One way of solving this would be to use a &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Condition &lt;/del&gt;tag expression on each arcane background edge. This approach is optimal when a pick must be effectively ignored when the user makes an independent change to the character, but it is otherwise a more complex solution. In our case, all the logic for selecting arcane backgrounds is managed through the edges, so we simply need to ensure that only a single edge is ever added to the character at one time. If the user adds an arcane background and wants to change it to something else, he must delete the first one and can then add the new one back in.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Imposing mutual exclusion on the various arcane backgrounds requires a little bit of work. Since arcane backgrounds can only be added via the various edges, we need to control the exclusion on the edges. One way of solving this would be to use a &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ContainerReq &lt;/ins&gt;tag expression on each arcane background edge. This approach is optimal when a pick must be effectively ignored when the user makes an independent change to the character, but it is otherwise a more complex solution. In our case, all the logic for selecting arcane backgrounds is managed through the edges, so we simply need to ensure that only a single edge is ever added to the character at one time. If the user adds an arcane background and wants to change it to something else, he must delete the first one and can then add the new one back in.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Controlling this is achieved through the Candidate tag expression on the table portal, which governs the list of things that the user can choose from. The table of edges doesn&amp;#039;t currently have a Candidate tag expression, so we&amp;#039;ll need to add one. Candidate tag expressions can either be designed to include a subset of things that satisfy certain criteria or to exclude a subset that meet the criteria. Since we want to include all arcane backgrounds by default, our Candidate test needs to be designed to exclude things only when certain conditions exist.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Controlling this is achieved through the Candidate tag expression on the table portal, which governs the list of things that the user can choose from. The table of edges doesn&amp;#039;t currently have a Candidate tag expression, so we&amp;#039;ll need to add one. Candidate tag expressions can either be designed to include a subset of things that satisfy certain criteria or to exclude a subset that meet the criteria. Since we want to include all arcane backgrounds by default, our Candidate test needs to be designed to exclude things only when certain conditions exist.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l17&quot;&gt;Line 17:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 17:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;If the user has already selected an arcane background for the character, we want to hide all others from selection. So we now need to figure out how to determine whether the user has selected an arcane background already. Fortunately, this is easy. Any time an arcane background is added, the &amp;quot;Arcane.?&amp;quot; tag is automatically forwarded to the character. This means we can check the character for one of the tags and instantly determine whether an arcane background has already been added.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;If the user has already selected an arcane background for the character, we want to hide all others from selection. So we now need to figure out how to determine whether the user has selected an arcane background already. Fortunately, this is easy. Any time an arcane background is added, the &amp;quot;Arcane.?&amp;quot; tag is automatically forwarded to the character. This means we can check the character for one of the tags and instantly determine whether an arcane background has already been added.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Both halves of the problem have been solved. All that&#039;s left is for us to piece the tag expression together properly. The first half is to exempt from our tests any edges that lack an arcane background tag, so that translates to &quot;!Arcane.?&quot;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;, which &lt;/del&gt;limits our focus in the rest of the tag expression to edges that are arcane backgrounds. The second half is to allow any arcane background if none has yet been added, and that translates to &quot;!Arcane.?&quot;. But wait a minute. That&#039;s the same test, isn&#039;t it? Yes and no. It&#039;s the same test, but this time it needs to be applied to the character directly. By default, the Candidate tag expression is applying the tests to the thing that will potentially be shown to the user for selection. For the second half of our tag expression, we need to explicitly perform the test on the character instead of the thing. This is accomplished by prefixing the tag template with &quot;hero#&quot;. Putting it all together yields the final Candidate tag expression below.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Both halves of the problem have been solved. All that&#039;s left is for us to piece the tag expression together properly. The first half is to exempt from our tests any edges that lack an arcane background tag, so that translates to &quot;!Arcane.?&quot;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;. This &lt;/ins&gt;limits our focus in the rest of the tag expression to edges that are arcane backgrounds. The second half is to allow any arcane background if none has yet been added, and that translates to &quot;!Arcane.?&quot;. But wait a minute. That&#039;s the same test, isn&#039;t it? Yes and no. It&#039;s the same test, but this time it needs to be applied to the character directly. By default, the Candidate tag expression is applying the tests to the thing that will potentially be shown to the user for selection. For the second half of our tag expression, we need to explicitly perform the test on the character instead of the thing. This is accomplished by prefixing the tag template with &quot;hero#&quot;. Putting it all together yields the final Candidate tag expression below.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l27&quot;&gt;Line 27:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 27:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===Hiding Arcane Skills===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===Hiding Arcane Skills===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;There is one glaring problem with the solution we&#039;ve put into place regarding arcane skills. All of the various arcane skills are always visible for user selection, regardless of whether the character possesses the corresponding arcane background. It would be vastly better to only show the proper arcane skill for selection on the &quot;Skills&quot; tab if the character actually has the arcane background. One way of doing this would be to revise the Candidate tag expression on the table of skills to only let the user select the skill if the background is present. The drawback of this approach, though, is that a user can add an arcane background, add the skill, then delete the background, and the skill will continue to exist without any warning to the user. &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;There is one glaring problem with the solution we&#039;ve put into place regarding arcane skills. All of the various arcane skills are always visible for user selection, regardless of whether the character possesses the corresponding arcane background. It would be vastly better to only show the proper arcane skill for selection on the &quot;Skills&quot; tab if the character actually has the &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;proper &lt;/ins&gt;arcane background. One way of doing this would be to revise the Candidate tag expression on the table of skills to only let the user select the skill if the background is present. The drawback of this approach, though, is that a user can add an arcane background, add the skill, then delete the background, and the skill will continue to exist without any warning to the user. &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;We&#039;re going to employ an even better solution by leveraging a &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Condition &lt;/del&gt;tag expression. The &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Condition &lt;/del&gt;test is applied to the prospective container when things are being selected by the user. It is also applied to the actual container when picks have been added to the character. If the &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Condition &lt;/del&gt;test fails when showing a thing for user selection, the thing is treated as if it doesn&#039;t exist, so it is physically omitted from the list of things presented to the user. If a thing is added and then its &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Condition &lt;/del&gt;test fails due to other changes to the character, the pick is disabled by &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Hero Lab&lt;/del&gt;, the pick can be easily highlighted as invalid, and a suitable validation error is automatically reported. The pick still remains visible to the user, but that&#039;s basically just so that the user can respond to the error by deleting the pick.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;We&#039;re going to employ an even better solution by leveraging a &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ContainerReq &lt;/ins&gt;tag expression. The &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ContainerReq &lt;/ins&gt;test is applied to the prospective container when things are being selected by the user. It is also applied to the actual container when picks have been added to the character. If the &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ContainerReq &lt;/ins&gt;test fails when showing a thing for user selection, the thing is treated as if it doesn&#039;t exist, so it is physically omitted from the list of things presented to the user. If a thing is added and then its &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ContainerReq &lt;/ins&gt;test fails due to other changes to the character, the pick is disabled by &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;HL&lt;/ins&gt;, the pick can be easily highlighted as invalid, and a suitable validation error is automatically reported. The pick still remains visible to the user, but that&#039;s basically just so that the user can respond to the error by deleting the pick.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;When a &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Condition &lt;/del&gt;test is defined for a thing, Hero Lab must be told when to perform the test within the overall evaluation cycle. The &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Condition &lt;/del&gt;test must be the very first task performed for the thing, so it must be scheduled rather early in the overall cycle. However, it&#039;s quite possible that other tasks need to be processed first within the evaluation cycle. In our case, that&#039;s important, since our &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Condition &lt;/del&gt;test needs to check against the presence of the &quot;Arcane&quot; tag on the character, but a script is needed to forward the tag from the arcane background up to the character. Consequently, we need to forward the tag from the arcane background before the &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Condition &lt;/del&gt;test is performed.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;When a &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ContainerReq &lt;/ins&gt;test is defined for a thing, Hero Lab must be told when to perform the test within the overall evaluation cycle. The &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ContainerReq &lt;/ins&gt;test must be the very first task performed for the thing, so it must be scheduled rather early in the overall cycle. However, it&#039;s quite possible that other tasks need to be processed first within the evaluation cycle. In our case, that&#039;s important, since our &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ContainerReq &lt;/ins&gt;test needs to check against the presence of the &quot;Arcane&quot; tag on the character, but a script is needed to forward the tag from the arcane background up to the character. Consequently, we need to forward the tag from the arcane background before the &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ContainerReq &lt;/ins&gt;test is performed.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;If we want to find out the latest point in the evaluation cycle that we can schedule our &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Condition &lt;/del&gt;test, we can add a &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Condition &lt;/del&gt;test that is scheduled to occur at an extremely late timing (e.g. Render/10000). By re-compiling, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Hero Lab &lt;/del&gt;will report an error, telling us when the earliest task on the thing is scheduled. Doing that yields an error that states we need to schedule our &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Condition &lt;/del&gt;test at a timing of Initialize/3000 or earlier. We&#039;ll use Initialize/2000, which is specified via the &quot;condphase&quot; and &quot;condprior&quot; attributes. This results in a revised &quot;Spellcasting&quot; thing that looks like the following.  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;If we want to find out the latest point in the evaluation cycle that we can schedule our &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ContainerReq &lt;/ins&gt;test, we can add a &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ContainerReq &lt;/ins&gt;test that is scheduled to occur at an extremely late timing (e.g. Render/10000). By re-compiling, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;HL &lt;/ins&gt;will report an error, telling us when the earliest task on the thing is scheduled. Doing that yields an error that states we need to schedule our &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ContainerReq &lt;/ins&gt;test at a timing of Initialize/3000 or earlier. We&#039;ll use Initialize/2000, which is specified via the &quot;condphase&quot; and &quot;condprior&quot; attributes. This results in a revised &quot;Spellcasting&quot; thing that looks like the following.  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Rob</name></author>
	</entry>
	<entry>
		<id>https://hlkitwiki.wolflair.com//index.php?title=More_on_Arcane_Backgrounds_(Savage)&amp;diff=1822&amp;oldid=prev</id>
		<title>Rob: New page: {{context|Authoring Examples|Savage Worlds Walk-Through}}  ===Overview===  It&#039;s time to switch our focus back to arcane backgrounds so we can continue fleshing out their behavior.   ===Mut...</title>
		<link rel="alternate" type="text/html" href="https://hlkitwiki.wolflair.com//index.php?title=More_on_Arcane_Backgrounds_(Savage)&amp;diff=1822&amp;oldid=prev"/>
		<updated>2008-12-17T07:14:08Z</updated>

		<summary type="html">&lt;p&gt;New page: {{context|Authoring Examples|Savage Worlds Walk-Through}}  ===Overview===  It&amp;#039;s time to switch our focus back to arcane backgrounds so we can continue fleshing out their behavior.   ===Mut...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{context|Authoring Examples|Savage Worlds Walk-Through}}&lt;br /&gt;
&lt;br /&gt;
===Overview===&lt;br /&gt;
&lt;br /&gt;
It&amp;#039;s time to switch our focus back to arcane backgrounds so we can continue fleshing out their behavior. &lt;br /&gt;
&lt;br /&gt;
===Mutual Exclusion===&lt;br /&gt;
&lt;br /&gt;
The Savage Worlds rules utilize the same basic mechanics for all types of arcane backgrounds, with the only difference being the trappings associated with the powers. As such, there is no practical benefit for a character to choose more than one arcane background, so we make the assumption that characters cannot choose multiple arcane backgrounds. This will make things much simpler for us to manage in the data files.&lt;br /&gt;
&lt;br /&gt;
Imposing mutual exclusion on the various arcane backgrounds requires a little bit of work. Since arcane backgrounds can only be added via the various edges, we need to control the exclusion on the edges. One way of solving this would be to use a Condition tag expression on each arcane background edge. This approach is optimal when a pick must be effectively ignored when the user makes an independent change to the character, but it is otherwise a more complex solution. In our case, all the logic for selecting arcane backgrounds is managed through the edges, so we simply need to ensure that only a single edge is ever added to the character at one time. If the user adds an arcane background and wants to change it to something else, he must delete the first one and can then add the new one back in.&lt;br /&gt;
&lt;br /&gt;
Controlling this is achieved through the Candidate tag expression on the table portal, which governs the list of things that the user can choose from. The table of edges doesn&amp;#039;t currently have a Candidate tag expression, so we&amp;#039;ll need to add one. Candidate tag expressions can either be designed to include a subset of things that satisfy certain criteria or to exclude a subset that meet the criteria. Since we want to include all arcane backgrounds by default, our Candidate test needs to be designed to exclude things only when certain conditions exist.&lt;br /&gt;
&lt;br /&gt;
We now need to figure out what tags we&amp;#039;ll be filtering on. We need to limit our exclusion logic to arcane background edges. Looking at the various arcane background edges, there is nothing that identifies them clearly as arcane backgrounds. We need some way to do this, so we might as well assign the appropriate &amp;quot;Arcane&amp;quot; tag to each one. We can then focus our exclusion test only on edges that possess an &amp;quot;Arcane.?&amp;quot; tag. Or, by reversing the logic, we can exempt all edges lacking the tag from our exclusion test. Half of our test is now figured out. Just be sure to open the file &amp;quot;thing_edges.dat&amp;quot; and assign the appropriate tag to each arcane background edge.&lt;br /&gt;
&lt;br /&gt;
If the user has already selected an arcane background for the character, we want to hide all others from selection. So we now need to figure out how to determine whether the user has selected an arcane background already. Fortunately, this is easy. Any time an arcane background is added, the &amp;quot;Arcane.?&amp;quot; tag is automatically forwarded to the character. This means we can check the character for one of the tags and instantly determine whether an arcane background has already been added.&lt;br /&gt;
&lt;br /&gt;
Both halves of the problem have been solved. All that&amp;#039;s left is for us to piece the tag expression together properly. The first half is to exempt from our tests any edges that lack an arcane background tag, so that translates to &amp;quot;!Arcane.?&amp;quot;, which limits our focus in the rest of the tag expression to edges that are arcane backgrounds. The second half is to allow any arcane background if none has yet been added, and that translates to &amp;quot;!Arcane.?&amp;quot;. But wait a minute. That&amp;#039;s the same test, isn&amp;#039;t it? Yes and no. It&amp;#039;s the same test, but this time it needs to be applied to the character directly. By default, the Candidate tag expression is applying the tests to the thing that will potentially be shown to the user for selection. For the second half of our tag expression, we need to explicitly perform the test on the character instead of the thing. This is accomplished by prefixing the tag template with &amp;quot;hero#&amp;quot;. Putting it all together yields the final Candidate tag expression below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;candidate&amp;gt;!Arcane.? | !hero#Arcane.?&amp;lt;/candidate&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Re-load the data files and go to the &amp;quot;Edges&amp;quot; tab. Click the option to add a new edge, and you should see all five arcane backgrounds listed properly. Add one to the character and the remaining arcane backgrounds all disappear. Exit the chooser form and delete the arcane background you just added. Now go back in and they are all visible again for selection. Our mutual exclusion logic is working. &lt;br /&gt;
&lt;br /&gt;
===Hiding Arcane Skills===&lt;br /&gt;
&lt;br /&gt;
There is one glaring problem with the solution we&amp;#039;ve put into place regarding arcane skills. All of the various arcane skills are always visible for user selection, regardless of whether the character possesses the corresponding arcane background. It would be vastly better to only show the proper arcane skill for selection on the &amp;quot;Skills&amp;quot; tab if the character actually has the arcane background. One way of doing this would be to revise the Candidate tag expression on the table of skills to only let the user select the skill if the background is present. The drawback of this approach, though, is that a user can add an arcane background, add the skill, then delete the background, and the skill will continue to exist without any warning to the user. &lt;br /&gt;
&lt;br /&gt;
We&amp;#039;re going to employ an even better solution by leveraging a Condition tag expression. The Condition test is applied to the prospective container when things are being selected by the user. It is also applied to the actual container when picks have been added to the character. If the Condition test fails when showing a thing for user selection, the thing is treated as if it doesn&amp;#039;t exist, so it is physically omitted from the list of things presented to the user. If a thing is added and then its Condition test fails due to other changes to the character, the pick is disabled by Hero Lab, the pick can be easily highlighted as invalid, and a suitable validation error is automatically reported. The pick still remains visible to the user, but that&amp;#039;s basically just so that the user can respond to the error by deleting the pick.&lt;br /&gt;
&lt;br /&gt;
When a Condition test is defined for a thing, Hero Lab must be told when to perform the test within the overall evaluation cycle. The Condition test must be the very first task performed for the thing, so it must be scheduled rather early in the overall cycle. However, it&amp;#039;s quite possible that other tasks need to be processed first within the evaluation cycle. In our case, that&amp;#039;s important, since our Condition test needs to check against the presence of the &amp;quot;Arcane&amp;quot; tag on the character, but a script is needed to forward the tag from the arcane background up to the character. Consequently, we need to forward the tag from the arcane background before the Condition test is performed.&lt;br /&gt;
&lt;br /&gt;
If we want to find out the latest point in the evaluation cycle that we can schedule our Condition test, we can add a Condition test that is scheduled to occur at an extremely late timing (e.g. Render/10000). By re-compiling, Hero Lab will report an error, telling us when the earliest task on the thing is scheduled. Doing that yields an error that states we need to schedule our Condition test at a timing of Initialize/3000 or earlier. We&amp;#039;ll use Initialize/2000, which is specified via the &amp;quot;condphase&amp;quot; and &amp;quot;condprior&amp;quot; attributes. This results in a revised &amp;quot;Spellcasting&amp;quot; thing that looks like the following. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;thing&lt;br /&gt;
  id=&amp;quot;skSpellcst&amp;quot;&lt;br /&gt;
  name=&amp;quot;Spellcasting&amp;quot;&lt;br /&gt;
  compset=&amp;quot;Skill&amp;quot;&lt;br /&gt;
  isunique=&amp;quot;yes&amp;quot;&lt;br /&gt;
  condphase=&amp;quot;Initialize&amp;quot;&lt;br /&gt;
  condprior=&amp;quot;2000&amp;quot;&lt;br /&gt;
  description=&amp;quot;Description goes here&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tag group=&amp;quot;Arcane&amp;quot; tag=&amp;quot;Magic&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;condition&amp;gt;Arcane.Magic&amp;lt;/condition&amp;gt;&lt;br /&gt;
  &amp;lt;link linkage=&amp;quot;attribute&amp;quot; thing=&amp;quot;attrSma&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/thing&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{note}}The above definition might seem a bit odd at first, since it defines the tag &amp;quot;Arcane.Magic&amp;quot; and has a Condition test on the same tag. The important distinction is that the tag assignment assigns the tag to the thing, while the Condition test checks for the tag on the container of the thing/pick. Since skills are always added directly to the character, the container is the character. This means that the tag is added to the thing but the test is on the character.&lt;br /&gt;
&lt;br /&gt;
We have a problem, though. If we re-load the data files and check the table of skills, the &amp;quot;Spellcasting&amp;quot; skill will never appear, even if we properly select the &amp;quot;Arcane Background: Magic&amp;quot; edge. The problem is our timing, since the &amp;quot;Arcane&amp;quot; tag is still being forwarded by the &amp;quot;Arcane&amp;quot; component at the timing we previously assigned (Initialize/3000). We need to revise the timing of this script so that it occurs before the Condition test. We&amp;#039;ll use Initialize/1000, which yields a revised script of the following. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;eval value=&amp;quot;1&amp;quot; phase=&amp;quot;Initialize&amp;quot; priority=&amp;quot;1000&amp;quot;&amp;gt;&amp;lt;![CDATA[&lt;br /&gt;
  perform forward[Arcane.?]&lt;br /&gt;
  ]]&amp;gt;&amp;lt;/eval&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Everything should now work. Until the arcane background edge is selected, the corresponding skill never appears. Once the edge is added, the skill appears and can be added. If the user deletes the edge, the skill turns red and a validation error is reported until we delete it (or re-add the edge). &lt;br /&gt;
&lt;br /&gt;
===Arcane Power Mechanics===&lt;br /&gt;
&lt;br /&gt;
The mechanics for arcane backgrounds are already in place, but we still need to add the mechanics for arcane powers. This entails adding a new component and a new component set. Arcane powers have an assortment of characteristics that need to be tracked. We&amp;#039;ll manage them all via fields for simplicity. All of these fields can be customized in some way beyond just tracking a number, except for the minimum rank required, so they need to treated as text-based fields. Putting it all together yields the following component and component set, which can both be added to the file &amp;quot;miscellaneous.pri&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;component&lt;br /&gt;
  id=&amp;quot;Power&amp;quot;&lt;br /&gt;
  name=&amp;quot;Arcane Power&amp;quot;&lt;br /&gt;
  autocompset=&amp;quot;no&amp;quot;&amp;gt; &lt;br /&gt;
  &amp;lt;field&lt;br /&gt;
    id=&amp;quot;powMinRank&amp;quot;&lt;br /&gt;
    name=&amp;quot;Minimum Rank&amp;quot;&lt;br /&gt;
    type=&amp;quot;static&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/field&amp;gt; &lt;br /&gt;
  &amp;lt;field&lt;br /&gt;
    id=&amp;quot;powPoints&amp;quot;&lt;br /&gt;
    name=&amp;quot;Power Point Cost&amp;quot;&lt;br /&gt;
    type=&amp;quot;static&amp;quot;&lt;br /&gt;
    maxlength=&amp;quot;25&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/field&amp;gt; &lt;br /&gt;
  &amp;lt;field&lt;br /&gt;
    id=&amp;quot;powRange&amp;quot;&lt;br /&gt;
    name=&amp;quot;Range&amp;quot;&lt;br /&gt;
    type=&amp;quot;static&amp;quot;&lt;br /&gt;
    maxlength=&amp;quot;25&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/field&amp;gt; &lt;br /&gt;
  &amp;lt;field&lt;br /&gt;
    id=&amp;quot;powLength&amp;quot;&lt;br /&gt;
    name=&amp;quot;Duration&amp;quot;&lt;br /&gt;
    type=&amp;quot;static&amp;quot;&lt;br /&gt;
    maxlength=&amp;quot;25&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/field&amp;gt; &lt;br /&gt;
  &amp;lt;field&lt;br /&gt;
    id=&amp;quot;powMaint&amp;quot;&lt;br /&gt;
    name=&amp;quot;Maintenance&amp;quot;&lt;br /&gt;
    type=&amp;quot;static&amp;quot;&lt;br /&gt;
    maxlength=&amp;quot;25&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/field&amp;gt; &lt;br /&gt;
  &amp;lt;field&lt;br /&gt;
    id=&amp;quot;powTraps&amp;quot;&lt;br /&gt;
    name=&amp;quot;Trappings&amp;quot;&lt;br /&gt;
    type=&amp;quot;user&amp;quot;&lt;br /&gt;
    maxlength=&amp;quot;100&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/field&amp;gt;&lt;br /&gt;
  &amp;lt;/component&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;compset&lt;br /&gt;
  id=&amp;quot;Power&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;compref component=&amp;quot;Power&amp;quot; primary=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/compset&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There is one thing missing from the above component, though. Each component needs to properly consume one instance from the resource that tracks the number of available powers. This ensures that the number of powers left decreases as new powers are added to the character, and it can be accomplished with a simple component script like the one shown below. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;eval value=&amp;quot;1&amp;quot; phase=&amp;quot;Setup&amp;quot; priority=&amp;quot;5000&amp;quot;&amp;gt;&amp;lt;![CDATA[&lt;br /&gt;
  #resspent[resPowers] += 1&lt;br /&gt;
  ]]&amp;gt;&amp;lt;/eval&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Re-Use of Minimum Rank===&lt;br /&gt;
&lt;br /&gt;
Powers have a minimum required rank that behaves exactly the same as for edges. That leaves us with two options. First, we could copy the logic over and adapt it for powers. Second, we could look for a way to carve out the minimum rank logic into a separate component that could be easily re-used. Since the minimum rank logic is identical for edges and powers, and since proper handling of the minimum rank entails testing the pre-requisites, it makes much more sense to carve out the logic for re-use.&lt;br /&gt;
&lt;br /&gt;
Extracting the logic entails creating a new component that we&amp;#039;ll call &amp;quot;MinRank&amp;quot;. This new component needs to possess a single field for tracking the minimum rank and the pre-requisiste logic. So we move the &amp;quot;edgMinRank&amp;quot; field to the new component and change its name to &amp;quot;rnkMinRank&amp;quot;. Then we move the pre-requisite test to the new component. This results in a component that looks like the following.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;component&lt;br /&gt;
  id=&amp;quot;MinRank&amp;quot;&lt;br /&gt;
  name=&amp;quot;Minimum Rank&amp;quot;&lt;br /&gt;
  autocompset=&amp;quot;no&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;field&lt;br /&gt;
    id=&amp;quot;rnkMinRank&amp;quot;&lt;br /&gt;
    name=&amp;quot;Minimum Rank&amp;quot;&lt;br /&gt;
    type=&amp;quot;static&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/field&amp;gt;&lt;br /&gt;
  &amp;lt;prereq iserror=&amp;quot;yes&amp;quot; message=&amp;quot;Veteran Rank required.&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;valid&amp;gt;&amp;lt;![CDATA[&lt;br /&gt;
    ~get the minimum rank required for the thing to be valid&lt;br /&gt;
    var rank as number&lt;br /&gt;
    rank = altthing.field[rnkMinRank].value&lt;br /&gt;
    ~if the minimum rank is satisfied, we&amp;#039;re good to go&lt;br /&gt;
    if (herofield[acRank].value &amp;gt;= rank) then&lt;br /&gt;
      @valid = 1&lt;br /&gt;
      done&lt;br /&gt;
      endif&lt;br /&gt;
    ~mark the panel as invalid&lt;br /&gt;
    altthing.linkvalid = 0&lt;br /&gt;
    ~synthesize an appropriate validation error message&lt;br /&gt;
    if (rank = 1) then&lt;br /&gt;
      @message = &amp;quot;Seasoned&amp;quot;&lt;br /&gt;
    elseif (rank = 2) then&lt;br /&gt;
      @message = &amp;quot;Veteran&amp;quot;&lt;br /&gt;
    elseif (rank = 3) then&lt;br /&gt;
      @message = &amp;quot;Heroic&amp;quot;&lt;br /&gt;
    elseif (rank = 4) then&lt;br /&gt;
      @message = &amp;quot;Legendary&amp;quot;&lt;br /&gt;
      endif&lt;br /&gt;
    @message &amp;amp;= &amp;quot; rank required.&amp;quot;&lt;br /&gt;
    ]]&amp;gt;&amp;lt;/valid&amp;gt;&lt;br /&gt;
    &amp;lt;/prereq&amp;gt;&lt;br /&gt;
  &amp;lt;/component&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unfortunately, we can&amp;#039;t put the new component in the file &amp;quot;traits.pri&amp;quot;. We need to use this component in the component set for edges (in &amp;quot;traits.pri&amp;quot;) and the component set for powers (in &amp;quot;miscellaneous.pri&amp;quot;). Since the compiler processes files with the same file extension (e.g. &amp;quot;.dat&amp;quot;) in whatever order that Windows gives them to Hero Lab, and since that order is not consistent across versions of Windows, we can&amp;#039;t safely put the component in one file or the other. Instead, it needs to be placed in a file that is guaranteed to be compiled prior to both files. Such a file already exists as the file &amp;quot;components.core&amp;quot;, which already contains a few components that are shared by different component sets. So we add our new component to the file &amp;quot;components.core&amp;quot;, and everything should work smoothly.&lt;br /&gt;
&lt;br /&gt;
Once the component is defined, we need to add it to the two component sets. This is easily achieved by adding the line below to both component sets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;compref component=&amp;quot;MinRank&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The last thing we need to do is deal with the fact that we&amp;#039;ve renamed the field for use within a different component. That means that all of our existing edges must have the field properly renamed. Open the file &amp;quot;thing_edges.dat&amp;quot; and perform a search-and-replace operation that changes all instances of &amp;quot;edgMinRank&amp;quot; to &amp;quot;rnkMinRank&amp;quot;. After that, the logic has been factored out and is now being re-used in multiple places. &lt;br /&gt;
&lt;br /&gt;
===Adding Arcane Powers===&lt;br /&gt;
&lt;br /&gt;
Now that all the mechanics are in place, we can add the actual arcane powers. Since we&amp;#039;re putting all arcane content in the file &amp;quot;thing_arcane.dat&amp;quot;, that&amp;#039;s where we&amp;#039;ll add the powers. No arcane powers have special behaviors that we need to handle, so we&amp;#039;ll present one as an example below. The rest can be defined following this example, or you can find them all in the completed Savage Worlds data files. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;thing&lt;br /&gt;
  id=&amp;quot;powArmor&amp;quot;&lt;br /&gt;
  name=&amp;quot;Armor&amp;quot;&lt;br /&gt;
  compset=&amp;quot;Power&amp;quot;&lt;br /&gt;
  isunique=&amp;quot;yes&amp;quot;&lt;br /&gt;
  description=&amp;quot;Description goes here&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;fieldval field=&amp;quot;rnkMinRank&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;fieldval field=&amp;quot;powPoints&amp;quot; value=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;fieldval field=&amp;quot;powRange&amp;quot; value=&amp;quot;Touch&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;fieldval field=&amp;quot;powLength&amp;quot; value=&amp;quot;3&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;fieldval field=&amp;quot;powMaint&amp;quot; value=&amp;quot;1/round&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;fieldval field=&amp;quot;powTraps&amp;quot; value=&amp;quot;A mystical glow...&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/thing&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rob</name></author>
	</entry>
</feed>