Skeleton File Changes V3.1
Context: HL Kit … Kit Reference … Skeleton Data File Revision History
File: "definition.def"
Line 24: Eliminate the "manualroot" attribute so that the manual location uses the default.
Line 46: Replace the "required" attribute with "3.1" instead of "3.0".
File: "tags.1st"
Line 52: Insert the new tag shown below.
<value id="NoAutoName"/>
Line 65: Insert the new tag shown below.
<value id="Dead"/>
Line 79: Rename the "Column1" tag to "Traits".
Line 90: Insert the new tag shown below.
<value id="StartEquip" name="Gear starts out equipped"/>
Line 245: Insert the new tag group definition shown below.
<group id="DomainTerm" dynamic="yes"> <value id="Domain"/> </group>
Line 254: Insert the new tag shown below.
<value id="CenterName"/>
Line 256: Insert the new tag group definitions shown below.
<group id="ChooseSrc1" visible="no"> <value id="Thing" name="All Things"/> <value id="Container" name="All Picks on Container"/> <value id="Hero" name="All Picks on Hero"/> </group> <group id="ChooseSrc2" visible="no"> <value id="Thing" name="All Things"/> <value id="Container" name="All Picks on Container"/> <value id="Hero" name="All Picks on Hero"/> </group>
File: "advancement.core"
Line 19: Added the "Notation" tag shown below.
<value id="Notation"/>
Line 160: Insert new logic to handle notation advancements at the start of the Eval script, as shown below.
~if this advancement has an annotation, there is no user-selection, so build ~the name from our pieces and we're done if (tagis[Advance.Notation] <> 0) then perform gizmo.child[advDetails].setfocus field[livename].text = field[name].text & ": " & focus.field[advUser].text done endif
File: "components.core"
Line 273: Change the reference to the "component.Ability" tag to "component.shortname".
Line 278: Change the reference to the "component.Ability" tag to "component.shortname".
Line 283: Insert the code below to use the standard name if no short name is defined.
~if we don't have a short name, just use the regular name if (empty(short) <> 0) then short = name endif
Line 337: Insert the new "UserSelect" component definition that is provided below.
<component id="UserSelect" name="User Selection"> <!-- Text to display with the checkbox NOTE! If this field is empty, it means NO checkbox is shown for the pick. --> <field id="usrChkText" name="Checkbox Text" type="derived" maxlength="100"> </field> <!-- Indicates whether the checkbox is selected is not --> <field id="usrIsCheck" name="Checked?" type="user" minvalue="0" maxvalue="1"> </field> <!-- Label associated with the first thing-based menu --> <field id="usrLabel1" name="Thing Menu Label #1" type="static" maxlength="50"> </field> <!-- Tracks the first selection made when a menu choice is required --> <field id="usrChosen1" name="Chosen Thing / Pick #1" type="user" style="menu"> </field> <!-- Candidate tagexpr used to determine which picks/things are shown in menu #1 NOTE! If this field is empty, it means NO first menu is shown for the pick. --> <field id="usrCandid1" name="Candidate TagExpr for Menu #1" type="derived" maxlength="1000" defvalue=""> </field> <!-- Source to pull choices from within menu #1 --> <field id="usrSource1" name="Source for Menu #1 Choices" type="derived"> <!-- Determine the source to choose from based on the tag, defaulting to "Hero" --> <calculate phase="Render" priority="10000"><![CDATA[ if (tagis[ChooseSrc1.Thing] <> 0) then @value = 0 elseif (tagis[ChooseSrc1.Container] <> 0) then @value = 1 elseif (tagis[ChooseSrc1.Hero] <> 0) then @value = 2 else @value = 2 endif ]]></calculate> </field> <!-- Label associated with the second thing-based menu --> <field id="usrLabel2" name="Thing Menu Label #2" type="static" maxlength="50"> </field> <!-- Tracks the second selection made when a menu choice is required --> <field id="usrChosen2" name="Chosen Thing / Pick #2" type="user" style="menu"> </field> <!-- Candidate tagexpr used to determine which picks/things are shown in menu #2 NOTE! If this field is empty, it means NO second menu is shown for the pick. --> <field id="usrCandid2" name="Candidate TagExpr for Menu #2" type="derived" maxlength="1000" defvalue=""> </field> <!-- Source to pull choices from within menu #2 --> <field id="usrSource2" name="Source for Menu #2 Choices" type="derived"> <!-- Determine the source to choose from based on the tag, defaulting to "Hero" --> <calculate phase="Render" priority="10000"><![CDATA[ if (tagis[ChooseSrc2.Thing] <> 0) then @value = 0 elseif (tagis[ChooseSrc2.Container] <> 0) then @value = 1 elseif (tagis[ChooseSrc2.Hero] <> 0) then @value = 2 else @value = 2 endif ]]></calculate> </field> <!-- Label associated with the array-based menu --> <field id="usrLabelAr" name="Array Menu Label" type="static" maxlength="50"> </field> <!-- Array of text items user can select from NOTE! If the 0th element is empty, it means NO menu is shown for the pick. --> <field id="usrArray" name="Array of Items to Choose" type="derived" style="array" arrayrows="10" maxlength="30"> </field> <!-- Item selected from the array --> <field id="usrSelect" name="Selected Item in Array" type="user" maxlength="30"> </field> <!-- Initialize the current array-based selection from the array if not defined --> <creation><![CDATA[ if (empty(field[usrArray].arraytext[0]) = 0) then if (field[usrSelect].isempty <> 0) then field[usrSelect].text = field[usrArray].arraytext[0] endif endif ]]></creation> <!-- Integrate the various user selections into the name of the pick NOTE! Must be scheduled after the "shortname" field is synthesized at Render/100. --> <eval index="1" phase="Render" priority="500"><![CDATA[ ~if we're not supposed to auto-amend the name for this pick, we're done if (tagis[User.NoAutoName] <> 0) then done endif ~if we have thing-based menus, determine the text to append to the name var choices as string if (field[usrCandid1].isempty = 0) then if (field[usrChosen1].ischosen <> 0) then choices = field[usrChosen1].chosen.field[name].text else choices = "-Choose-" endif if (field[usrChosen2].ischosen <> 0) then choices &= ", " & field[usrChosen2].chosen.field[name].text endif ~if we have an array-based menu, determine the text to append elseif (empty(field[usrArray].arraytext[0]) = 0) then choices = field[usrSelect].text ~if we have a selected checkbox, determine the text to append elseif (field[usrChkText].isempty = 0) then if (field[usrIsCheck].value <> 0) then choices = field[usrChkText].text endif endif ~if we have no text to append, we're done if (empty(choices) <> 0) then done endif ~add the selection to both the livename and shortname (if present) fields field[livename].text = field[name].text & ": " & choices if (tagis[component.shortname] <> 0) then field[shortname].text &= " (" & choices & ")" endif ]]></eval> <!-- Report a validation error if no selection has been made for a menu selection --> <evalrule phase="Validate" priority="10000" message="You must choose an option" summary="Choose!"><![CDATA[ ~determine the number of menus that NEED selection ~Note: Remember that a non-empty tagexpr field indicates menu selection is used. var needed as number needed = !field[usrCandid1].isempty + !field[usrCandid2].isempty needed += !empty(field[usrArray].arraytext[0]) ~determine the number of menus that HAVE selections var actual as number if (field[usrCandid1].isempty = 0) then actual += field[usrChosen1].ischosen endif if (field[usrCandid2].isempty = 0) then actual += field[usrChosen2].ischosen endif if (field[usrSelect].isempty = 0) then actual += 1 endif ~if the user has chosen something whenever required, we're valid if (actual >= needed) then @valid = 1 done endif ~mark any associated tab as invalid if (ispanel <> 0) then linkvalid = 0 endif ]]></evalrule> </component>
Line 400: Add the new Eval script below to the "Domain" component.
<eval index="1" phase="Render" priority="500"><![CDATA[ ~if we don't need a domain, there's nothing to do if (tagis[User.NeedDomain] = 0) then done endif ~if we're not supposed to auto-amend the name for this pick, we're done if (tagis[User.NoAutoName] <> 0) then done endif ~if we don't have a domain, use a placeholder for it var domain as string if (field[domDomain].isempty = 0) then domain = field[domDomain].text else domain = "????" endif ~add the domain to both the livename and shortname (if present) fields field[livename].text = field[name].text & ": " & domain if (tagis[component.shortname] <> 0) then field[shortname].text &= " (" & domain & ")" endif ]]></eval>
Line 401: Replace the original Eval script with the new one shown below.
<evalrule index="1" phase="Validate" priority="9000" message="????"><![CDATA[ ~if no domain is needed or the domain is specified, we're valid if (tagis[User.NeedDomain] = 0) then @valid = 1 elseif (field[domDomain].isempty = 0) then @valid = 1 endif ~if we're valid, get out of here if (@valid <> 0) then done endif ~if we have a linked panel, flag it as invalid if (ispanel <> 0) then linkvalid = 0 endif ~synthesize an appropriate message using the correct domain term var term as string term = tagnames[DomainTerm.?] if (empty(term) <> 0) then term = "Domain" endif @message = term & " must be specified" ]]></evalrule>
File: "actor.str"
Line 163: Change the reference to the "trtLeft" field to "trtUser".
Line 221: Replace the Eval script with the revised script below.
<eval index="1" phase="Final" priority="1000"><![CDATA[ ~if no damage has been incurred, assign a tag to indicate that state if (field[acHPNow].value >= field[acHPMax].value) then perform hero.assign[Hero.NoDamage] ~if the hero is dead or otherwise out of combat, indicate that state elseif (field[acHPNow].value = 0) then perform hero.assign[Hero.Dead] endif ]]></eval>
File: "equipment.str"
Line 27: Increase the "maxfinal" value from "50" to "100".
Line 219: Insert the Creation script shown below.
<creation><![CDATA[ ~if this is natural equipment, initialize the equipped state if (tagis[Equipment.Natural] <> 0) then field[grIsEquip].value = 1 endif ~if this equipment is supposed to start out as equipped, initialize the state if (tagis[Equipment.StartEquip] <> 0) then field[grIsEquip].value = 1 endif ]]></creation>
Line 229: Change the Eval script priority from "1000" to "4000".
Line 584: Change the field type from "static" to "derived".
File: "miscellaneous.str"
Line 103: Insert the new lines of code below into the Finalize script.
@text = "{text ff0000}" elseif (unspent > 0) then
File: "traits.str"
Line 50: Change the timing of the Bound script, assign it a name, and establish a "before" dependency, as shown below.
<bound phase="Traits" priority="1000" name="Bound trtUser"> <before name="Calc trtFinal"/><![CDATA[ @minimum = field[trtMinimum].value @maximum = field[trtMaximum].value ]]></bound>
Line 97: Change the timing of the Eval script from "9999999" to "5000".
Line 130: Change the timing of the Eval script and setup "before" and "after" dependencies, as shown below.
<eval index="2" phase="Traits" priority="10000"> <before name="Calc resLeft"/> <after name="Bound trtUser"/><![CDATA[ hero.child[resCP].field[resSpent].value += (field[trtUser].value - 1) * 7 ]]></eval>
Line 175: Change the timing of the Eval script and setup "before" and "after" dependencies, as shown below.
<eval index="2" phase="Traits" priority="10000"> <before name="Calc resLeft"/> <after name="Bound trtUser"/><![CDATA[
Line 253: Change the test from keying on the usage pool to the actual mode, as shown below.
~if the mode is creation, we're valid if (state.iscreate <> 0) then @valid = 1 done endif
File: "styles_output.aug"
Line 217: Insert the new style shown below.
<style id="outDots"> <style_output textcolor="202020" font="ofntnormal" alignment="left"> </style_output> </style>
File: "styles_ui.aug"
Line 236: Insert the new resource definition shown below.
<resource id="fntmenusm"> <font face="Arial" size="30" style="bold"> </font> </resource>
Line 268: Insert the new color resource definitions shown below.
<!-- color used for normal text throughout the ui --> <resource id="clrnormal"> <color color="f0f0f0"> </color> </resource> <!-- color used for text on the static panel - not quite as bright --> <resource id="clrstatic"> <color color="d2d2d2"> </color> </resource> <!-- color used for text in title labels --> <resource id="clrtitle"> <color color="c0c0c0"> </color> </resource> <!-- color used for names of automatically added picks --> <resource id="clrauto"> <color color="99efed"> </color> </resource> <!-- color used for disabled text --> <resource id="clrdisable"> <color color="808080"> </color> </resource> <!-- color used for summary text that should be a little dimmer than normal --> <resource id="clrsummary"> <color color="a0a0a0"> </color> </resource> <!-- color used for bright text --> <resource id="clrbright"> <color color="ffff88"> </color> </resource> <!-- color used for warning text --> <resource id="clrwarning"> <color color="ff0000"> </color> </resource> <!-- color used for prompt text inviting the user to change something --> <resource id="clrprompt"> <color color="ffff00"> </color> </resource> <!-- color used for the 'buy for free' checkbox on buy / sell panels --> <resource id="clrchkfree"> <color color="a8a800"> </color> </resource> <!-- color used for text on summary panels - a little dimmer than normal --> <resource id="clrsummtxt"> <color color="d0d0d0"> </color> </resource> <!-- color used for labels when choosing advancements --> <resource id="clradvance"> <color color="ffffff"> </color> </resource> <!-- color used for text on action buttons --> <resource id="clraction"> <color color="000088"> </color> </resource> <!-- colors used in edit controls --> <resource id="clredittxt"> <color color="d2d2d2"> </color> </resource> <resource id="clreditbck"> <color color="000000"> </color> </resource> <!-- colors used in menu and chooser controls --> <resource id="clrmenutxt"> <color color="84c8f7"> </color> </resource> <resource id="clrmenuslt"> <color color="1414f7"> </color> </resource> <resource id="clrmenubck"> <color color="2a2c47"> </color> </resource>
Numerous Places: Change the style to reference a named color instead of a literal color, switching from a "textcolor" attribute to a "textcolorid" attribute. The list of changes is given below.
- Line 282 - "clrtitle"
- Line 293 - "clrstatic"
- Line 303 - "clrnormal"
- Line 313 - "clrnormal"
- Line 323 - "clrnormal"
- Line 335 - "clrauto"
- Line 347 - "clrdisable"
- Line 359 - "clrbright"
- Line 371 - "clrwarning"
- Line 384 - "clrprompt"
- Line 394 - "clrnormal"
- Line 404 - "clrdisable"
- Line 414 - "clrprompt"
- Line 424 - "clrwarning"
- Line 434 - "clrnormal"
- Line 444 - "clrdisable"
- Line 454 - "clrwarning"
- Line 464 - "clrnormal"
- Line 474 - "clrdisable"
- Line 484 - "clrsummary"
- Line 494 - "clrnormal"
- Line 504 - "clrnormal"
- Line 514 - "clrsummtxt"
- Line 524 - "clrdisable"
- Line 534 - "clrsummary"
- Line 545 - "clrsummary"
- Line 556 - "clradvance"
- Line 568 - "clradvance"
- Line 582 - "clrnormal"
- Line 596 - "clredittxt"
- Line 597 - "clreditbck"
- Line 607 - "clredittxt"
- Line 608 - "clreditbck"
- Line 618 - "clredittxt"
- Line 619 - "clreditbck"
- Line 624 - "clrdisable"
- Line 635 - "clrnormal"
- Line 652 - "clrnormal"
- Line 669 - "clrnormal"
- Line 732 - "clrnormal"
- Line 805 - "clraction"
- Line 836 - "clraction"
- Line 867 - "clrnormal"
- Line 901 - "clraction"
- Line 937 - "clraction"
- Line 971 - "clraction"
- Line 981 - "clraction"
- Line 991 - "clraction"
- Line 1025 - "clraction"
- Line 1059 - "clraction"
- Line 1085 - "clrnormal"
- Line 1119 - "clrnormal"
- Line 1145 - "clrnormal"
- Line 1171 - "clrnormal"
- Line 1205 - "clrnormal"
- Line 1231 - "clrnormal"
- Line 1265 - "clrnormal"
- Line 1299 - "clrnormal"
- Line 1333 - "clrnormal"
- Line 1359 - "clrnormal"
- Line 1385 - "clrnormal"
- Line 1411 - "clrnormal"
- Line 1445 - "clrnormal"
- Line 1471 - "clraction"
- Line 1497 - "clraction"
- Line 1531 - "clraction"
- Line 1557 - "clraction"
- Line 1583 - "clraction"
- Line 1609 - "clraction"
- Line 1643 - "clraction"
- Line 1677 - "clraction"
- Line 1711 - "clraction"
- Line 1745 - "clraction"
- Line 1779 - "clraction"
- Line 1813 - "clraction"
- Line 1847 - "clraction"
- Line 1881 - "clraction"
- Line 1915 - "clraction"
- Line 1949 - "clraction"
- Line 1983 - "clraction"
- Line 2017 - "clrnormal"
- Line 2051 - "clrnormal"
- Line 2085 - "clrnormal"
- Line 2119 - "clrnormal"
- Line 2153 - "clrnormal"
- Line 2206 - "clrdisable"
- Line 2232 - "clrnormal"
- Line 2241 - "clrwarning"
- Line 2252 - "clrdisable"
- Line 2261 - "clrchkfree"
- Line 2270 - "clrnormal"
- Line 2311 - "clrnormal"
- Line 2358 - "clrmenutxt"
- Line 2359 - "clrmenubck"
- Line 2360 - "clrmenuslt"
- Line 2361 - "clrnormal"
- Line 2371 - "clrmenutxt"
- Line 2372 - "clrmenubck"
- Line 2373 - "clrmenuslt"
- Line 2374 - "clrnormal"
- Line 2375 - "clrwarning"
- Line 2386 - "clrmenutxt"
- Line 2387 - "clrmenubck"
- Line 2397 - "clrwarning"
- Line 2398 - "clrmenubck"
Line 470: Insert the new style definition shown below.
<!-- slightly smaller label that is left-aligned --> <style id="lblSmlLeft"> <style_label textcolorid="clrnormal" font="fntsmall" alignment="left"> </style_label> </style>
Line 1467: Insert the new style definition shown below.
<!-- Style used on the master button --> <style id="actMaster"> <style_action textcolorid="clrnormal" font="fntactsml" up="actmastup" down="actmastdn" off="actmastup"> </style_action> <resource id="actmastup" isbuiltin="yes"> <bitmap bitmap="master_up.bmp" istransparent="yes"> </bitmap> </resource> <resource id="actmastdn" isbuiltin="yes"> <bitmap bitmap="master_down.bmp" istransparent="yes"> </bitmap> </resource> </style>
Line 2380: Insert the the new style definitions shown below.
<!-- small menu portal --> <style id="menuSmall" border="sunken"> <style_menu textcolorid="clrmenutxt" backcolorid="clrmenubck" selecttextid="clrmenuslt" selectbackid="clrnormal" font="fntmenusm" droplist="menuarrsm" droplistoff="menuoffsm"> </style_menu> <resource id="menuarrsm" isbuiltin="yes"> <bitmap bitmap="menu_small_arrow.bmp"> </bitmap> </resource> <resource id="menuoffsm" isbuiltin="yes"> <bitmap bitmap="menu_small_arrow_off.bmp"> </bitmap> </resource> </style> <!-- small menu portal with coloring to indicate contents are in error --> <style id="menuErrSm" border="sunken"> <style_menu textcolorid="clrmenutxt" backcolorid="clrmenubck" selecttextid="clrmenuslt" selectbackid="clrnormal" activetextid="clrwarning" font="fntmenusm" droplist="menuarrsm" droplistoff="menuoffsm"> </style_menu> </style>
File: "form_advance.dat"
Line 28: Change the field reference from "name" to "thingname".
Line 123: Change the field reference from "name" to "thingname".
Line 222: Replace the code for shrinking the size to the new code shown below.
perform portal[name].sizetofit[36] perform portal[name].centervert
Line 238: Replace the "label" element with the new behavior shown below.
<label> <labeltext><![CDATA[ ~use any domain term specified, else default to "domain" @text = parent.tagnames[DomainTerm.?] if (empty(@text) <> 0) then @text = "Domain" endif @text &= ":" ]]></labeltext> </label>
Line 271: Insert the new template definition shown below.
<template id="advNotate" name="Notation Specification" compset="AdvDetails"> <portal id="lblnotate" style="lblStatic"> <label text="Notation:"> </label> </portal> <portal id="notation" style="editNormal"> <edit field="advUser" maxlength="50"> </edit> </portal> <position><![CDATA[ ~set up our width and height height = portal[notation].height if (issizing <> 0) then done endif ~center everything vertically perform portal[lblnotate].centervert perform portal[notation].centervert ~position the label on the left with the edit portal next to it portal[lblnotate].left = 0 perform portal[notation].alignrel[ltor,lblnotate,7] portal[notation].width = width - portal[notation].left ]]></position> </template>
Line 309: Replace the script code for setting the line height to the code shown below.
portal[notes].lineheight = 4
Line 320: Insert the template reference shown below.
<templateref template="advNotate" thing="advDetails" taborder="20"/>
Line 345: Insert the code below to position the notation template
~position the notation template in the same place template[advNotate].left = portal[advNew].left template[advNotate].top = portal[advNew].top template[advNotate].width = portal[advNew].width
Line 347: Insert the code below to set the notation template to non-visible.
template[advNotate].visible = 0
Line 356: Insert the code below to show the notation template when appropriate.
elseif (container.parent.tagis[Advance.Notation] <> 0) then template[advNotate].visible = 1
File: "form_dashboard.dat"
Line 121: Replace the Label script code with the new code shown below.
@text = "{size 30}PP: {size 36}" & hero.child[trkPower].field[trkUser].text
Line 189: Added the "isbuiltin" attribute to the element with a value of "yes".
File: "form_static.dat"
Line 59: Insert the new portal definition below.
<portal id="master" style="actMaster" tiptext="Click this button to activate this ally's Master."> <action action="master"> </action> </portal>
Line 76 and 87: Put the contents of the Position script into a "<![CDATA[...]]>" block.
Line 77: Insert the code below at the start of the Position script.
~only show the master button if the actor is a minion portal[master].visible = hero.isminion if (portal[master].visible <> 0) then perform portal[label].alignrel[ltor,master,8] endif