Skeleton File Changes V3.1: Difference between revisions
| Line 1,657: | Line 1,657: | ||
<fieldval field="trtAbbrev" value="Sht"/> | <fieldval field="trtAbbrev" value="Sht"/> | ||
</pre> | </pre> | ||
===File: "thing_traits.dat"=== | |||
Line 38: Insert the following field value assignment. | |||
<pre> | |||
<fieldval field="trtAbbrev" value="Hlth"/> | |||
</pre> | |||
Line 60: Change the "Column1" tag reference to "Traits". | |||
Line 77: Insert the following field value assignment. | |||
<pre> | |||
<fieldval field="trtAbbrev" value="Def"/> | |||
</pre> | |||
Line 96: Insert the following field value assignment. | |||
<pre> | |||
<fieldval field="trtAbbrev" value="Powr"/> | |||
</pre> | |||
Line 117: Change the "Column1" tag reference to "Traits". | |||
Line 147: Change the "Column1" tag reference to "Traits". | |||
===Next=== | ===Next=== | ||
Revision as of 10:41, 19 February 2009
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
File: "form_taccon.dat"
Line 179: Insert the "isbuiltin" attribute with a value of "yes".
Line 189: Insert the "isbuiltin" attribute with a value of "yes".
Line 199: Insert the "isbuiltin" attribute with a value of "yes".
Line 203: Insert the new portal definition shown below.
<portal
id="dead"
style="imgNormal"
tiptext="This character is dead or otherwise out of combat.">
<image_literal
image="tactical_dead.bmp"
isbuiltin="yes"
istransparent="yes">
</image_literal>
</portal>
Line 216: Change the style assigned to the portal to "lblSmlLeft".
Line 225: Eliminate the left-alignment logic from the Label script as shown below.
~squeeze inter-line spacing a bit
@text = "{leading -2}" & @text
Line 254: Replace the "damage" and "status" portals with the new portal definitions shown below.
<portal
id="status1"
style="lblSmlLeft">
<label
ismultiline="yes">
<labeltext><![CDATA[
~start with the power points status
@text = "{size 30}PP: {size 36}" & #traituser[trPowerPts] & " / " & #trait[trPowerPts]
~add the defense rating
@text &= "{horz 12}{size 30}Def: {size 36}" & #trait[trDefense]
]]></labeltext>
</label>
</portal>
<portal
id="status2"
style="lblSmlLeft">
<label
ismultiline="yes">
<labeltext><![CDATA[
@text = "{size 30}HP: {size 36}" & field[acHPSumm].text
]]></labeltext>
</label>
</portal>
Line 451: Renamed the portal from "column1" to "traits".
Line 461: Change the "foreach" statement to reference the "DashTacCon.Traits" tag expression.
Line 517: Append "sortas _NameSeq_" to the end of the "foreach" statement.
Line 544: Replace the "foreach" statement with the new statement shown below.
foreach pick in hero where "(Adjustment.? | Helper.Activated) & !InPlay.Permanent" sortas _NameSeq_
if (ismore <> 0) then
@text &= "; "
endif
if (eachpick.tagis[component.Adjustment] <> 0) then
@text &= eachpick.field[adjShort].text
elseif (eachpick.tagis[component.shortname] <> 0) then
@text &= eachpick.field[shortname].text
else
@text &= eachpick.field[name].text
endif
ismore = 1
nexteach
Line 669-681: Replace the script code that controls visibility and positioning with the new logic shown below.
~position the "dead" indicator in the same location
portal[dead].left = leftedge
perform portal[dead].centervert
~hide all of the indicators and we'll pick one to show below (or none)
portal[dead].visible = 0
portal[acted].visible = 0
portal[noncombat].visible = 0
portal[never].visible = 0
~if we're in combat, handle things appropriately
if (state.iscombat <> 0) then
~determine which of the above four indicators is actually visible
if (hero.tagis[Hero.Dead] <> 0) then
portal[dead].visible = 1
else
portal[never].visible = hero.tagis[combat.never]
portal[acted].visible = hero.tagis[combat.acted]
portal[noncombat].visible = hero.tagis[combat.noncombat]
endif
~adjust our left edge rightward past the indicators
leftedge += portal[never].width + 4
endif
Line 759-778: Replace the script code that references the renamed "damage" and "status" portals with the new code shown below.
~position the second status portal at the bottom of the region
perform portal[status2].alignedge[bottom,-margin - 2]
portal[status2].left = portal[name].left + 3
~position the first status portal in the region above the second status portal
perform portal[status1].alignrel[btot,status2,-1]
portal[status1].left = portal[status2].left
~if the status now overlaps the name, shift the status portals downward a
~little bit to make additional space
if (portal[status2].top < portal[name].bottom) then
var adjust as number
adjust = portal[name].bottom - portal[status2].top
portal[status2].top += adjust
adjust -= 1
if (adjust > 1) then
adjust -= 1
endif
portal[status1].top += adjust
endif
Line 851: Replace the code manipulating the "column1" portal with the following.
~position the column of reminder traits portal[traits].top = margin + 1 portal[traits].left = leftedge portal[traits].lineheight = 3
Line 860: Replace the reference to the "column1" portal with the "traits" portal.
Line 868: Insert the new code below to size the summary appropriately.
perform portal[summary].sizetofit[28]
Line 870-871: Replace the references to the "column1" portal with the "traits" portal.
File: "procedures.dat"
Line 780: Replace the "foreach" statement with the new logic shown below.
foreach pick in hero where "(Adjustment.? | Helper.Activated) & !InPlay.Permanent"
final &= "{br}"
if (eachpick.tagis[Adjustment.?] <> 0) then
final &= eachpick.field[adjName].text
else
final &= eachpick.field[name].text
endif
nexteach
File: "sheet_standard1.dat"
Line 485: Replace the "dots" portal with the new definition below.
<portal
id="dots"
style="outDots">
<output_dots>
</output_dots>
</portal>
Line 627: Insert the new logic below into the Position script.
~limit our portal height to a single line of output portal[details].lineheight = 1
Line 661: Replace the "dots" portal with the new definition below.
<portal
id="dots"
style="outDots">
<output_dots>
</output_dots>
</portal>
Line 670: Replace the entire Position script with the new logic shown below.
~our height is the height of the tallest portal height = portal[name].height if (issizing <> 0) then done endif ~position the value at the right edge perform portal[value].alignedge[right,0] ~size the name to fit the available space portal[name].width = portal[value].left - 10 perform portal[name].sizetofit[40] perform portal[name].autoheight ~the dots should span the region between the name and the value perform portal[dots].alignrel[ltor,name,5] portal[dots].width = portal[value].left - 5 - portal[dots].left ~center all portals vertically perform portal[name].centervert perform portal[value].centervert perform portal[dots].centervert
Line 711: Replace the entire Label script with the new logic shown below.
if (stackable = 0) then @text = "" elseif (field[stackQty].value = 1) then @text = "" else @text = field[stackQty].text & "x" endif
Line 731: Replace the entire Position script with the new logic shown below.
~our height is the height of the tallest portal height = portal[name].height if (issizing <> 0) then done endif ~assign a fixed width to the value and position the name to the right portal[value].width = 100 perform portal[name].alignrel[ltor,value,20] ~size the name to fit the available space portal[name].width = width - portal[name].left perform portal[name].sizetofit[36] perform portal[name].autoheight ~center all portals vertically perform portal[value].centervert perform portal[name].centervert
Lines 811-826: Replace the block of script code with the new logic shown below.
~align everything horizontally perform portal[badstr].alignrel[ltor,equipped,5] perform portal[name].alignrel[ltor,badstr,5] ~size the name to fit the available space portal[name].width = width - portal[name].left perform portal[name].sizetofit[36] perform portal[name].autoheight ~center all portals vertically perform portal[badstr].centervert perform portal[equipped].centervert perform portal[name].centervert ~shift the "equipped" bitmap downward a little bit; this is because it is a ~lone bitmap drawn via encoded text, and bitmaps are never drawn within the ~descender portion of the text, which causes it to appear higher than we want it portal[equipped].top += 4
Line 867: Replace the "name" portal with the new element shown below.
<portal
id="name"
style="outNameMed">
<output_label
field="shortname">
</output_label>
</portal>
Line 912: Insert the new portal shown below.
<portal
id="dots"
style="outDots">
<output_dots>
</output_dots>
</portal>
Lines 946-989: Replace the entire Position script with the new logic shown below.
~our height is based on the tallest portal within height = portal[name].height if (issizing <> 0) then done endif ~if the weapon satisfies the minimum strength requirement, hide the bitmap if (tagis[Helper.BadStrReq] = 0) then portal[badstr].visible = 0 endif ~center all portals vertically perform portal[badstr].centervert perform portal[name].centervert perform portal[attack].centervert perform portal[damage].centervert perform portal[dots].centervert ~position the range with the same baseline as the rest of the text; since it ~uses a smaller font, it will have a smaller height, so centering it will have ~it appear to float up relative to the other text perform portal[range].alignrel[btob,name,0] ~establish suitable fixed widths for the various columns of data portal[damage].width = 120 portal[attack].width = 70 portal[range].width = 260 ~position everything horizontally, leaving a margin on both sides appropriately portal[badstr].left = 5 perform portal[damage].alignedge[right,-5] perform portal[name].alignrel[ltor,badstr,5] perform portal[attack].alignrel[rtol,damage,-10] perform portal[range].alignrel[rtol,attack,-10] ~if this is a ranged weapon, limit the name to the space up to the range details; ~otherwise, let the name extend over to the attack value var limit as number if (tagis[component.WeapRange] <> 0) then limit = portal[range].left else limit = portal[attack].left endif ~limit the name to the extent determined above if (portal[name].right > limit - 5) then portal[name].width = limit - portal[name].left - 5 endif ~size the name to fit the available space perform portal[name].sizetofit[36] perform portal[name].autoheight perform portal[name].centervert ~extend the dots from the right of the name across to the value on the right if (portal[name].right > limit - 10) then portal[dots].visible = 0 else perform portal[dots].alignrel[ltor,name,5] portal[dots].width = limit - 5 - portal[dots].left endif
Line 1039: Replace the entire Position script with the new logic shown below.
~our height is the vertical extent of our portals height = portal[name].height if (issizing <> 0) then done endif ~size the name to fit the available space portal[name].width = width perform portal[name].sizetofit[36] perform portal[name].autoheight perform portal[name].centervert
Line 1173: Replace the code for calculating the validation report height with the new logic below.
perform portal[validate].autoheight if (portal[validate].height > portal[validate].fontheight * maxlines) then portal[validate].lineheight = maxlines endif
Numerous Places: Changes references to the "global" target reference over to "scenevalue". The list of locations is given below.
- Line 1208
- Line 1229
- Line 1315
- Line 1349
- Line 1442
- Line 1446
- Line 1464
- Line 1479
- Line 1480
- Line 1490
File: "sheet_standard2.dat"
Line 70: Changes reference to the "global" target reference over to "scenevalue".
File: "summ_armory.dat"
Line 76: Replace the "name" portal with the new element shown below.
<portal
id="name"
style="lblSummary">
<label>
<labeltext><![CDATA[
if (field[grIsEquip].value <> 0) then
@text = "{b}{i}"
endif
@text &= field[name].text
]]></labeltext>
</label>
<mouseinfo/>
</portal>
Line 118: Replace the "name" portal with the new element shown below.
<portal
id="name"
style="lblSummary">
<label>
<labeltext><![CDATA[
if (field[grIsEquip].value <> 0) then
@text = "{b}{i}"
endif
@text &= field[name].text
]]></labeltext>
</label>
<mouseinfo/>
</portal>
File: "tab_armory.dat"
Line 86: Change the component referenced from "WeapRange" to "Gear".
Line 265: Insert the "isbuiltin" attribute with a value of "yes".
Line 277: Insert the "isbuiltin" attribute with a value of "yes".
Line 319: Insert the "isbuiltin" attribute with a value of "yes".
Line 519: Insert the "isbuiltin" attribute with a value of "yes".
Line 531: Insert the "isbuiltin" attribute with a value of "yes".
File: "tab_gear.dat"
Line 122: Change the style from "lblNormal" to "lblLeft".
Line 143: Insert the "isbuiltin" attribute with a value of "yes".
Line 155: Insert the "isbuiltin" attribute with a value of "yes".
Line 198: Replace the entire Position script with the new logic shown below.
~set up our height based on our tallest portal height = portal[info].height ~if this is a "sizing" calculation, we're done if (issizing <> 0) then done endif ~determine whether the container and heldby indicators should be visible portal[container].visible = tagis[thing.holder?] portal[heldby].visible = isgearheld ~center the portals vertically perform portal[info].centervert perform portal[name].centervert perform portal[username].centervert perform portal[gearmanage].centervert perform portal[delete].centervert perform portal[container].centervert perform portal[heldby].centervert ~position the delete portal on the far right perform portal[delete].alignedge[right,0] ~position the info portal to the left of the delete button perform portal[info].alignrel[rtol,delete,-8] ~position the gear portal to the left of the info button perform portal[gearmanage].alignrel[rtol,info,-8] ~calculate the space to reserve for the various indicators var reserve as number if (portal[heldby].visible <> 0) then reserve += portal[heldby].width + 2 endif if (portal[container].visible <> 0) then reserve += portal[container].width + 2 endif if (portal[heldby].visible + portal[container].visible <> 0) then reserve += 3 endif ~position the name on the left and let it use all available space var limit as number limit = portal[gearmanage].left - 8 - reserve portal[name].left = 0 portal[name].width = minimum(portal[name].width,limit) ~if this is a "custom" gear pick, show an edit portal instead of the name var nextleft as number if (tagis[Equipment.CustomGear] <> 0) then portal[name].visible = 0 portal[username].left = portal[name].left portal[username].width = minimum(200,limit) nextleft = portal[username].right else portal[username].visible = 0 nextleft = portal[name].right endif nextleft += 5 ~show the 'container' icon to the right of the name (if visible) if (portal[container].visible <> 0) then portal[container].left = nextleft nextleft = portal[container].right + 2 endif ~show the 'held by' icon to the right of the container icon (if visible) if (portal[heldby].visible <> 0) then portal[heldby].left = nextleft endif ~if the gear can't be deleted (i.e. it's been auto-added instead of user-added, ~set the style to indicate that behavior to the user if (candelete = 0) then perform portal[name].setstyle[lblAuto] endif
File: "tab_journal.dat"
Line 98: Replace the line of code that references the usage pool to the new line shown below.
@text &= "{horz 40} Total XP: " & #resmax[resXP]
File: "thing_abilities.dat"
Line 23: Insert the following material within the "abSample" ability.
<!-- If checkbox selection is needed, make sure the compset includes "UserSelect"
component and define this field appropriately.
<fieldval field="usrChkText" value="Menu1"/>
-->
<!-- If thing-based menu selection is needed, make sure the compset includes
"UserSelect" component and define these fields and tags as appropriate.
<fieldval field="usrLabel1" value="Menu1"/>
<fieldval field="usrCandid1" value="component.Attribute"/>
<fieldval field="usrLabel2" value="Menu2"/>
<fieldval field="usrCandid2" value="component.Skill"/>
<tag group="ChooseSrc1" tag="Hero"/>
<tag group="ChooseSrc2" tag="Thing"/>
-->
<!-- If array-based menu selection is needed, make sure the compset includes
"UserSelect" component and define these fields as appropriate.
<fieldval field="usrLabelAr" value="Menu1"/>
<arrayval field="usrArray" index="0" value="Choice #1"/>
<arrayval field="usrArray" index="1" value="Choice #2"/>
<arrayval field="usrArray" index="2" value="Choice #3"/>
-->
File: "thing_armory.dat"
Line 18: Insert the following thing definition.
<!-- Natural armor is automatically equipped --> <thing id="armNatural" name="Natural Armor" compset="Armor" description="Description goes here" isunique="yes" holdable="no"> <fieldval field="defDefense" value="1"/> <tag group="Equipment" tag="Natural"/> <tag group="Equipment" tag="AutoEquip"/> </thing>
File: "thing_attributes.dat"
Line 18: Insert the following field value assignment.
<fieldval field="trtAbbrev" value="Sam"/>
Line 31: Insert the following field value assignment.
<fieldval field="trtAbbrev" value="Str"/>
File: "thing_skills.dat"
Line 18: Insert the following field value assignment.
<fieldval field="trtAbbrev" value="Sam"/>
Line 37: Insert the following field value assignment.
<fieldval field="trtAbbrev" value="Mel"/>
Line 50: Insert the following field value assignment.
<fieldval field="trtAbbrev" value="Sht"/>
File: "thing_traits.dat"
Line 38: Insert the following field value assignment.
<fieldval field="trtAbbrev" value="Hlth"/>
Line 60: Change the "Column1" tag reference to "Traits".
Line 77: Insert the following field value assignment.
<fieldval field="trtAbbrev" value="Def"/>
Line 96: Insert the following field value assignment.
<fieldval field="trtAbbrev" value="Powr"/>
Line 117: Change the "Column1" tag reference to "Traits".
Line 147: Change the "Column1" tag reference to "Traits".