|
Senior Member
Volunteer Data File Contributor
Join Date: Nov 2009
Posts: 1,502
|
So, I'm working on a more flexible way to set up the skill bonuses and penalties for the various backgrounds. This is what I've wound up with so far:
thing_miscellanous.dat (The names aren't great, I know, but fRPlusSk gives the person who picked that background a set of choices from which they pick one to apply the bonus or penalty to. fRPlusSk2 applies the same bonus or penalty to a bunch of skills that fit the list) Code:
<thing id="fRPlusSk" name="Skill Bonus" compset="cmpsetSB" description="Gives a bonus to the selected skill."> <fieldval field="usrCandid1" value="component.Skill"/> <tag group="Hide" tag="Special"/> <eval index="1" phase="PreTraits" priority="4900"> <before name="Calc trtFinal"/><![CDATA[ var bonus as number var penalty as number bonus = tagvalue[Bonus.?] penalty = tagvalue[Penalty.?] if (bonus = 0) then if (penalty = 0) then bonus = 2 else bonus = penalty endif endif if (bonus > 0) then field[livename].text = "+" & bonus & " " & livename else field[livename].text = bonus & " " & livename endif ~build the candidate expression out of our Skill and Skills tags var skills as string skills = tagids[Skill.?, " | "] var skilltypes as string skilltypes = tagids[Skills.?, " | "] var combined as string if (tagis[Skills.?] <> 0) then if (tagis[Skill.?] <> 0) then combined = skills & " | " & skilltypes else combined = skilltypes endif else combined = skills endif ~ debug combined & ", " & empty(combined) if (empty(combined) = 0) then field[usrCandid1].text &= " & (" & combined & ")" endif perform field[usrChosen1].chosen.field[trtBG].modify[+,bonus,"Background"] ]]></eval> </thing> <thing id="fRPlusSk2" name="Multiple Skill Bonuses" compset="cmpsetSB" description="Gives a bonus to the selected skills."> <tag group="Hide" tag="Special"/> <eval index="1" phase="PreTraits" priority="4900"> <before name="Calc trtFinal"/><![CDATA[ var bonus as number var penalty as number bonus = tagvalue[Bonus.?] penalty = tagvalue[Penalty.?] if (bonus = 0) then if (penalty = 0) then bonus = 2 endif endif field[usrCandid1].text = "" ~build the candidate expression out of our Skill and Skills tags var skills as string skills = tagids[Skill.?, " | "] var skilltypes as string skilltypes = tagids[Skills.?, " | "] if (bonus > 0) then field[livename].text = "+" & bonus & " to Multiple" foreach pick in hero from Skill where skills perform eachpick.field[trtBG].modify[+,bonus,"Background"] nexteach foreach pick in hero from Skill where skilltypes perform eachpick.field[trtBG].modify[+,bonus,"Background"] nexteach elseif (penalty > 0) then field[livename].text = "-" & penalty & " to Multiple" foreach pick in hero from Skill where skills perform eachpick.field[trtBonus].modify[-,penalty,"Background"] nexteach foreach pick in hero from Skill where skilltypes perform eachpick.field[trtBonus].modify[-,penalty,"Background"] nexteach endif ]]></eval> </thing> Code:
<bootstrap thing="fRPlusSk2"> <autotag group="Skill" tag="skPercept"/> <autotag group="Skill" tag="skAthlete"/> <autotag group="Bonus" tag="Plus2"/> </bootstrap> <bootstrap thing="fRPlusSk2"> <autotag group="Skills" tag="Social"/> <autotag group="Penalty" tag="Minus1"/> </bootstrap> <bootstrap thing="fRPlusSk"> <autotag group="Skills" tag="Mental"/> <autotag group="Skill" tag="skCarbine"/> <autotag group="Bonus" tag="Plus3"/> </bootstrap> I'm not certain if it would make more sense to modify the text to list the items (say, "-1 Skill Penalty (Social and Carbine)" and "+2 Skill Bonus (Perception and Athletics)") or if it would be possible to make it add one for each distinct entry, so that I have 5 entries: "+2 Skill Bonus (Perception)", "+2 Skill Bonus (Athletics)", "+3 Skill Bonus [Experimental Sciences]", "-1 Skill Penalty (Social)", and "-1 Skill Penalty (Carbines)". Or, if the latter is even feasible. |
#1 |
Senior Member
Lone Wolf Staff
Join Date: May 2005
Posts: 13,213
|
I'm sorry, but something about your writing style makes your questions hard for me to follow, and I can't figure out what question you're asking here.
One thing is that you're throwing around giant blocks of code that have minimal commenting, and you're not adding information before posting each section of code to say what a person should be looking for in them. |
#2 |
Senior Member
Volunteer Data File Contributor
Join Date: Nov 2009
Posts: 1,502
|
Ah. Sorry. I am somewhat obtuse in my writing style. I blame it on reading beyond my grade level as a child, which left me with peculiar ideas of how words should hook together. I started out doing skill bonuses in Eval blocks, but I knew that eventually, I'd need to be able to allow the person creating the character to make decisions (since some of the background bonuses offer a choice, like "+2 to Athletics or History" or "+2 to any Combat skill." So I initially cribbed some code from the 4E files, doing the choice items with fRPlusSk (I think the "R" stood for Race in that case) and SkillBonus (a tag, or at least, I think it was always a tag), which offered a straight +2 to a given skill. As I got into more esoteric cases, I realized that I needed a wider range of bonuses (they range from +1 to +2, and -1 to -2, but I went from -3 to +3 to allow later users to more readily customize their own cases), and I wanted to do all of the skill bonuses in the same type of structure (so no mixing of tags and things).
Thus, I eventually wound up with fRPlusSk, which allows the user to specify a set of Skills, a set of Skill Categories, and either a Bonus or a Penalty value (the latter doesn't show up in any of the canonical backgrounds, but it was just as easy to include it). It works like I want it, creating a single thing, which corresponds to an entry in the Skill Bonuses table, with the bonus (or penalty), and dropdown list box, which lets the user pick which skill gets the bonus (or penalty). After that, I wanted a way to specify a more static set of bonuses and penalties so, that, for example the Neophant gets a +2 to Endurance and +1 to Athletics and Perception. I tried making each one its own bootstrap, but it's a bit of a pain in practice, at least the way I've got the editor set up now. You click on the button to edit the relevant bootstrap, it pops up the form that lets you add a bootstrap, then you select the (one possible) bootstrap and then fill in the value. So I tried streamlining it so that you could list a single bonus and multiple skills that received that bonus (assume that "penalty" is available there as well) and that's how I got fRPlusSk2, which takes in a bonus (or penalty) and a set of skill or skill types, and applies the bonuses (or penalties) to each. That basically covers the first code box. The second code box is a hypothetical implementation for a given Race, Command Package, or Background (actual blocks are generally not that complicated, capping out at three skills for a Race, four for a Command Package, and three for a Background). The problem I currently face is that I would like to list all of the bonuses in a nice manner in the Basics tab, but my current method has one thing with multiple skills. Is there a way to make one bootstrap create multiple things? Right now, it's creating a cmpsetSB (Skill Bonus compset), which includes a SkillBonus and a UserSelect (and this might be tying into me still being a bit confused about how to make visual elements because I notice that the table has holds SkillBonus items with the pick using UserSelect). And... I'm probably making this confusing again. Base question, if I have a single bootstrap element with multiple autotags, how do I get one item in the table for each tag that corresponds to a Skill or a SkillType? Or is it just not possible? |
#3 |
Senior Member
Lone Wolf Staff
Join Date: May 2005
Posts: 13,213
|
Add a separate bootstrap for each choice, each with the autotags that apply only to that choice. There isn't a way to have HL auto-create the right number of bootstraps.
|
#4 |
Senior Member
Volunteer Data File Contributor
Join Date: Nov 2009
Posts: 1,502
|
So, if I do this as tags, what's the easiest way to set up values? My prior code depending on Identity tags on the skills, and assuming +2, like the following:
Code:
if (tagis[SkillBon?.?] <> 0) then expr = tagids[SkillBon?.?, " | "] foreach pick in hero from Skill where expr val = tagmax[SkillBon?.?] perform eachpick.field[trtBG].modify[+,2,""] nexteach endif |
#5 |
Senior Member
Lone Wolf Staff
Join Date: May 2005
Posts: 13,213
|
At this point, it doesn't sound like tags are the best solution. Please describe the game rules you're trying to implement.
|
#6 |
Senior Member
Volunteer Data File Contributor
Join Date: Nov 2009
Posts: 1,502
|
For every Background, Command Package, or Race, there's a series of bonuses from +1 to +2 on various skills (which get counted as skill ranks bought against the maximum allowed at character creation) and -1 to -2 penalties on the skills (which only count against the final value). Adding a tag (as per my earlier implementation of SkillBonus) is easy to do via the Editor and basically allows you to select a series of skills that get a +2 via the implementation of their base component, which cycles through all tags that match the tags present, e.g. SkillBonus.skIntim, SkillBonus.skCarbines, and SkillBonus.skEcon. The races offer +1 bonuses in a variety of skills, as well as some more esoteric possibilities, like "+1 to all Combat skills".
You know what, I think the easiest thing to do is set up the boostrap as I mentioned above, and simply offer a "(Multiple)" addendum for the skill bonus where there's a variety of skills that get a particular bonus. Once I get other things working, I'll add mouse-over text to indicate what bonus is being added, and maybe from where. |
#7 |
|
|