• Please note: In an effort to ensure that all of our users feel welcome on our forums, we’ve updated our forum rules. You can review the updated rules here: http://forums.wolflair.com/showthread.php?t=5528.

    If a fellow Community member is not following the forum rules, please report the post by clicking the Report button (the red yield sign on the left) located on every post. This will notify the moderators directly. If you have any questions about these new rules, please contact support@wolflair.com.

    - The Lone Wolf Development Team

Adding regions for a Forgotten Realms campaign

All right, this bit seems really complicated, so I'd appreciate whatever advice/guidance I can get.

I'm prepping HL files for a Forgotten Realms campaign, but they've introduced the concept of character regions. Essentially, the region your character comes from is almost as important as his race. It determines one of the character's bonus languages, the availability of some feats (specific regions are prereqs for some FR feats), and affects some Knowledge skills.

So, how do I build in a new widget so the player can choose from a predefined set of regions? Or, do I need to somehow incorporate this into the races?
 
Ravencloak wrote:
>
>
> All right, this bit seems really complicated, so I'd appreciate whatever
> advice/guidance I can get.
>
> I'm prepping HL files for a Forgotten Realms campaign, but they've
> introduced the concept of character regions. Essentially, the region
> your character comes from is almost as important as his race. It
> determines one of the character's bonus languages, the availability of
> some feats (specific regions are prereqs for some FR feats), and affects
> some Knowledge skills.
>
> So, how do I build in a new widget so the player can choose from a
> predefined set of regions? Or, do I need to somehow incorporate this
> into the races?


The easiest way to do this is probably to add a new template (with a +0
level adjustment) for each region. The template can then automatically
add the appropriate language, and be a pre-requisite for appropriate
feats and knowledge skills.


Hope this helps,


--
Colen McAlister (colen@wolflair.com)
Chief Engineer, Lone Wolf Development
http://www.wolflair.com/
 
Thanks, Colen, you've definitely pointed me in the right direction and I see how I can easily bootstrap in automatic languages. However, it's a bit more complicated than that...isn't it always.

They also use these regions to determine which additional bonus languages (beyond those assigned by race) are available to a character. Evidently, in the Forgotten Realms not all languages are available as bonus languages for humans, instead the character's home region determines which languages are available as bonus languages.

So, unless I miss my mark, it looks like I need to learn more about scripting and portals. I think that I need to figure out the name of the portal responsible for allowing bonus language picks and then "enable" the appropriate bonus languages by setting their values to 1.

I'm certain I'll run into more problems along the way :) but for now I haven't got a clue as to how I identify the name of the portal. While I'd greatly appreciate just getting the name of this specific portal, I'd be even happier if you could tell me in general how to go about "finding" the names of portals.

Brian
 
Ravencloak wrote:
>
>
> Thanks, Colen, you've definitely pointed me in the right direction and I
> see how I can easily bootstrap in automatic languages. However, it's a
> bit more complicated than that...isn't it always.
>
> They also use these regions to determine which additional bonus
> languages (beyond those assigned by race) are available to a character.
> Evidently, in the Forgotten Realms not all languages are available as
> bonus languages for humans, instead the character's home region
> determines which languages are available as bonus languages.
>
> So, unless I miss my mark, it looks like I need to learn more about
> scripting and portals. I think that I need to figure out the name of the
> portal responsible for allowing bonus language picks and then "enable"
> the appropriate bonus languages by setting their values to 1.
>
> I'm certain I'll run into more problems along the way Smile but for now
> I haven't got a clue as to how I identify the name of the portal. While
> I'd greatly appreciate just getting the name of this specific portal,
> I'd be even happier if you could tell me in general how to go about
> "finding" the names of portals.


I don't think you need to worry about portals for this stuff. Here's
what you'll need to do:

1) Create these 'regional' languages in the editor, and mark them as
"Secret Languages". This will ensure that humans, half-elves, and other
races that can choose "Any" language won't be able to pick them by default.

2) Now, create a script that runs at an early priority, that assigns the
"Language" tags for those languages to the hero.


For example, let's say that "Gnothic" is a regional language that you
want to add. First, you add it as a language with the unique id
"lGnothic", and mark it as a secret language.

Now, on the "Gnothic Native" template, add a script with phase "First"
and priority 10000 that does this:


~ Add the Gnothic language as a possible bonus language
var result as number
result = hero.assign[Language.lGnothic]


This should make the Gnothic language available when that template is
taken - otherwise it will be greyed out.

Hope this helps,

--
Colen McAlister (colen@wolflair.com)
Chief Engineer, Lone Wolf Development
http://www.wolflair.com/
 
Thanks again, Colen. As usual, I was trying to make things more difficult for myself than necessary. ;)

Your solution works beautifully. One more question. Is there a way to combine multiple "bonus languages" into a single script statement? What you suggested above works just fine, I simply need to enter multiple scripts and increment the index value so they aren't seen as redundant. However, it seems like there ought to be a more elegant way to handle assigning multiple bonus languages in one script. Then again, I've been wrong before.

Thanks again, Colen.

Brian
 
Ravencloak wrote:
>
>
> Thanks again, Colen. As usual, I was trying to make things more
> difficult for myself than necessary. Wink
>
> Your solution works beautifully. One more question. Is there a way to
> combine multiple "bonus languages" into a single script statement? What
> you suggested above works just fine, I simply need to enter multiple
> scripts and increment the index value so they aren't seen as redundant.
> However, it seems like there ought to be a more elegant way to handle
> assigning multiple bonus languages in one script. Then again, I've been
> wrong before.

You can absolutely do multiple languages in the same script. For
example, if you wanted to add Lang1, Lang2 and Lang3:

var result as number
result = hero.assign[Language.lLang1]
result = hero.assign[Language.lLang2]
result = hero.assign[Language.lLang3]

With the unique ids of the languages changed appropriately.

--
Colen McAlister (colen@wolflair.com)
Chief Engineer, Lone Wolf Development
http://www.wolflair.com/
 
At 09:01 AM 8/31/2007, you wrote:
Your solution works beautifully. One more question. Is there a way to combine multiple "bonus languages" into a single script statement? What you suggested above works just fine, I simply need to enter multiple scripts and increment the index value so they aren't seen as redundant. However, it seems like there ought to be a more elegant way to handle assigning multiple bonus languages in one script. Then again, I've been wrong before.
You can assign any number of tags in the same script, so assigning access to three optional languages for a given region in a single script would look like the following:

var result as number
result = hero.assign[Language.lGnothic]
result = hero.assign[Language.lLang2]
result = hero.assign[Language.lLang3]

.....continue as necessary

-Rob
 
Lets say you wanted to set up a selection of languages based on race.

I have the code working and it gives no errors (except an editor error) an but it seems to work regardless of the if statements.

Secondary tagexpr for pick 'trAglaReg' is scheduled after primary condition test is scheduled
(This pick was added from the editor - reloading the game system my fix this problem)

Levels/10000
Code:
var result as number
if (tagis[Race.Human] <> 0) then
  result = hero.assign[Language.lChessenta]
  result = hero.assign[Language.lDamaran]
  result = hero.assign[Language.lDraconic]
elseif (tagis[Race.HalfElf] <> 0) then
  result = hero.assign[Language.lChessenta]
  result = hero.assign[Language.lDamaran]
  result = hero.assign[Language.lDraconic]
endif
 
Last edited:
Lets say you wanted to set up a selection of languages based on race.

I have the code working and it gives no errors (except an editor error) an but it seems to work regardless of the if statements.

Secondary tagexpr for pick 'trAglaReg' is scheduled after primary condition test is scheduled
(This pick was added from the editor - reloading the game system my fix this problem)

Levels/10000
Code:
var result as number
if (tagis[Race.Human] <> 0) then
  result = hero.assign[Language.lChessenta]
  result = hero.assign[Language.lDamaran]
  result = hero.assign[Language.lDraconic]
elseif (tagis[Race.HalfElf] <> 0) then
  result = hero.assign[Language.lChessenta]
  result = hero.assign[Language.lDamaran]
  result = hero.assign[Language.lDraconic]
endif

You can remove the variable "result" and replace "result =" with perform.
 
The code still gives

Code:
Secondary tagexpr for pick 'trAglaReg' is scheduled after primary condition test is scheduled
(This pick was added from the editor - reloading the game system my fix this problem)

And works no matter what happens, regardless of what race I choose. Human, Half-Elf, Orc, Goliath, etc...
 
The code still gives

Code:
Secondary tagexpr for pick 'trAglaReg' is scheduled after primary condition test is scheduled
(This pick was added from the editor - reloading the game system my fix this problem)

And works no matter what happens, regardless of what race I choose. Human, Half-Elf, Orc, Goliath, etc...

Does reloading the game system resolve this issue? If not, then you may have a timing issue. You could try moving your script to a later time to see if it goes away.
 
I have tried all of the timings and three or four different numbers in each timing, and there is no change at all.

I have been trying to get this to work for about a week and a half. Getting slightly frustrating. Even more so since this is holding up my work on the faerun feats because most of them are attached to regions and I don't want to work on them until I have their prereqs down.

Attaching File for further review, I have added comments as much as I can for clarity.
 

Attachments

I have tried all of the timings and three or four different numbers in each timing, and there is no change at all.

I have been trying to get this to work for about a week and a half. Getting slightly frustrating. Even more so since this is holding up my work on the faerun feats because most of them are attached to regions and I don't want to work on them until I have their prereqs down.

Attaching File for further review, I have added comments as much as I can for clarity.

Ok. I'll take a look at this as soon as I can. I'm currently waiting on delivery for a new tablet that I will be putting HL on. It's due here tomorrow, but I live in New England, and we're having a massive storm so we'll see. Sorry its been so frustrating.
 
More trouble, same as the previous code, it works unpredictably. Its really stumping me and I don't think I can continue. I've tried to examine the Authoring Wiki, but it just makes my head spin, without examples and 'non-technical' explanations.

Post-Levels (Users)/5000
Code:
      ~ Calculate our total level - our Kundula level plus any 'extra levels'
      ~ assigned to us
      var level as number
      level = field[xTotalLev].value

      ~ Assign the Number of times the alternate form is active.
      var dice as string
      if (level > 10) then
        dice = "Alternate Form (1/day)"
      elseif (level > 15) then
        dice = "Alternate Form (3/day)"
      elseif (level > 20) then
        dice = "Alternate Form at Will"
        endif
      field[livename].text = "" & dice & ""
 
Last edited:
Taking a look at this right now. Sorry for the extensive delay.

Update: There's nothing wrong with your code, though I think you would do better to use bootstraps to add languages rather than a script. In any case, from what I can tell, there's something about your file that has gotten corrupted. I saw a note where you had to delete all the old languages and make new ones. I wonder if something happened there. I am going to try to reconstruct this file myself and see if that makes these problems go away.
 
Last edited:
"...though I think you would do better to use bootstraps to add languages rather than a script."


Each region has multiple race options, to use bootstraps I'd need to create one trait for EACH race/region combination. Which I would rather not do if I could avoid it.

"...I saw a note where you had to delete all the old languages and make new ones."

Yes, I found a source for all of the languages which turned out to be some bogus homebrew creation. So I had to delete all of the languages which leaves me with nearly three dozen orphaned tags. I've tried to delete them but I cant seem to find a way to do so.
 
Each region has multiple race options, to use bootstraps I'd need to create one trait for EACH race/region combination. Which I would rather not do if I could avoid it.

Not true. Based on your script, you want to assign the character the following languages if they are Human or Half-Elf:

lChessenta
lDamaran
lDraconic

To do this with a bootstrap, you can use the following condition:

Code:
hero#Race.Human | hero#Race.HalfElf

I've already done this on my end and tested it. It works just fine, so assuming that my interpretation of your intentions is correct, you can do this for all of your traits for whatever languages they are supposed to add.

Also, on your pre-req for Aglarond, you can reduce all that code to:

Code:
validif (tagis[Race.Human] + tagis[Race.HalfElf] + tagis[HasTrait.trPFAdopte] <> 0)

Yes, I found a source for all of the languages which turned out to be some bogus homebrew creation. So I had to delete all of the languages which leaves me with nearly three dozen orphaned tags. I've tried to delete them but I cant seem to find a way to do so.

I don't get those errors, so in your portfolios, I would recommend deleting the old languages, and then re-adding them. Alternatively, you may try the "Strip Missing Sources" option under "Portfolio" in the menu if it is available.

OK, so I tried to re-create the use file, and I couldn't get rid of the error. So, then I started over, and created a trait called "test". As soon as I add this trait to the portfolio, I get the error. There are no scripts, tags or anything else on this trait. Therefore, I can only conclude that this error is a bug in HL. As frustrating as it is, I think you should just ignore it. The good news is that as a user, you probably won't see it. If you do, it would only be the first time you select it.
 
More trouble, same as the previous code, it works unpredictably. Its really stumping me and I don't think I can continue. I've tried to examine the Authoring Wiki, but it just makes my head spin, without examples and 'non-technical' explanations.

Post-Levels (Users)/5000
Code:
      ~ Calculate our total level - our Kundula level plus any 'extra levels'
      ~ assigned to us
      var level as number
      level = field[xTotalLev].value

      ~ Assign the Number of times the alternate form is active.
      var dice as string
      if (level > 10) then
        dice = "Alternate Form (1/day)"
      elseif (level > 15) then
        dice = "Alternate Form (3/day)"
      elseif (level > 20) then
        dice = "Alternate Form at Will"
        endif
      field[livename].text = "" & dice & ""

As for this, my guess is you could be doing this too soon. When you want to change the name of something, I find it easiest to run these in the Final Phase. A couple of other things to note is that I think you intend to use ">=" instead of just ">", and I got an error on the field. The line:

Code:
level = field[xTotalLev].value

sets "level" equal to the value of xTotalLev on the thing the script is on. That may be your intention, but I wasn't sure, so I changed it on the version I wrote. I also changed who you are modifying the name. I find using variables as a string to have very inconsistent success, so I removed that. Here's what I have:

Final Phase/5000
Code:
 ~ Calculate our total level - our Kundula level plus any 'extra levels'
      ~ assigned to us
      var level as number
      level = herofield[tTotLevel].value

      ~ Assign the Number of times the alternate form is active.
      if (level >= 10) then
        field[livename].text = field[name].text & " (1/day)"
      elseif (level >= 15) then
        field[livename].text = field[name].text & " (3/day)"
      elseif (level >= 20) then
        field[livename].text = field[name].text & " (at Will)"
      endif

See if that does what you are looking for.
 
Back
Top