Loading ...
Sorry, an error occurred while loading the content.

Possible solution to class/crossclass skills and max_ranks

Expand Messages
  • Frugal
    Thinking it through last night I might have come up with a way of handling class/cross class skills and the max ranks for a skill. It hinges on the assumption
    Message 1 of 7 , Apr 8, 2004
    • 0 Attachment
      Thinking it through last night I might have come up with a way of handling
      class/cross class skills and the max ranks for a skill.

      It hinges on the assumption that we can ask different
      entities/progressions for a piece of information (including the
      character).

      So in each class we create a variable for the class skills:

      <progression id="class.rogue">
      <variable key="class_skill.bluff"/>
      <function key="class_skill.bluff" calc="1" />
      <ranks>
      <rank level="all">
      <function key="var.character_level" calc="1" stacks="true"/>
      </rank>
      </ranks>
      </progression>

      <progression id="class.sorceror">
      <variable key="class_skill.spellcraft"/>
      <function key="class_skill.spellcraft" calc="1" />
      <ranks>
      <rank level="all">
      <function key="var.character_level" calc="1" stacks="true"/>
      </rank>
      </ranks>
      </progression>


      So when the character takes a level of rogue they will have a variable
      "class_skill.bluff" with a value of '1'. The rogue class does not have a
      variable called "class_skill.spellcraft" so the default value of '0' will
      be returned if we ask for it.

      A character entity with 1 rank of 'class.rogue' and 1 rank of
      'class.sorceror' and a variable 'var.character_level' of 2.

      <entity id="character">
      <add-rank key="character_level">
      <add-rank key="class.rogue"/>
      </add-rank>
      <add-rank key="character_level">
      <add-rank key="class.sorceror"/>
      </add-rank>
      </entity>

      So if we ask the classes for the value of 'class_skill.bluff' class.rogue
      will return '1' because it is a class skill and 'class.sorceror' will
      return '0' because it is not.

      If we ask the character for the value of 'class_skill.bluff' it will
      examine all sub entities return '1' and likewise for 'class_skill.bluff'.
      Even if both classes gave the same skill as a class skill we would only
      return '1' rather than '2' because the <fuction>s do not have the
      'stacks="true"' attribute.

      If we ask the character for the value of 'class_skill.bluff' at
      character_level rank 1 we would return '1'. If we ask for the value of
      'class_skill.bluff' at character_level rank '2' it would return '0'.

      As we know the var.character_level and the classness of each skill we can
      do something like this:

      <progression id="skill.bluff">
      <variable key="skill.bluff.maxranks"/>
      <function key="skill.bluff.maxranks"
      calc="(var.character_level+3)/(2-class_skill.bluff)"/>
      </progression>

      So for our example character the value of skill.bluff.maxranks is:

      (var.character_level+3)/(2-class_skill.bluff)
      => (2+3)/(2-1)
      => 5/1
      => 5






      Now for the case were we have another entitiy that makes Spellcraft a
      class skill for that character.

      <entity id="item.mage_amulet" >
      <function key="class_skill.spellcraft" calc="1"/>
      </entity>

      And assign that item to the character:

      <entity id="character">
      <add-entity key="item.mage_amulet"/>
      <add-rank key="character_level">
      <add-rank key="class.rogue"/>
      </add-rank>
      <add-rank key="character_level">
      <add-rank key="class.sorceror"/>
      </add-rank>
      </entity>

      Now when we ask the character for the value of 'class_skill.spellcraft' at
      character_level rank '1' we get a response of '1' because the value at
      character level 1 is the value of the effects at level 1 plus the effects
      that apply outside the levels (i.e. the amulet):
      <function key="class_skill.spellcraft" calc="1"/> <!-- From Item -->

      When we ask the character for the value of 'class_skill.spellcraft' at
      character_level rank '2' we get a response of '1' because both the class
      and the item return functions that evaluate to '1':
      <variable key="class_skill.spellcraft"/> <!-- From Class -->
      <function key="class_skill.spellcraft" calc="1" /> <!-- From Class -->
      <function key="class_skill.spellcraft" calc="1"/> <!-- From Item -->




      Now for the case where we have an entity that makes a skill cross class:

      <entity id="item.mage_killer_amulet" >
      <function key="class_skill.spellcraft" calc="0" replaces="true"/>
      </entity>

      And assign that item to the character:

      <entity id="character">
      <add-entity key="item.mage_killer_amulet"/>
      <add-rank key="character_level">
      <add-rank key="class.rogue"/>
      </add-rank>
      <add-rank key="character_level">
      <add-rank key="class.sorceror"/>
      </add-rank>
      </entity>

      Now when we ask the character for the value of 'class_skill.spellcraft' at
      character_level rank '1' we get a response of '0' because the value at
      character level 1 is the value of the effects at level 1 plus the effects
      that apply outside the levels (i.e. the amulet):
      <function key="class_skill.spellcraft" calc="0" replaces="true"/> <!--
      From Item -->

      When we ask the character for the value of 'class_skill.spellcraft' at
      character_level rank '2' we get a response of '0' because the item
      overrides the class because of the 'replace="true"' flag:
      <variable key="class_skill.spellcraft"/> <!-- From Class -->
      <function key="class_skill.spellcraft" calc="1" /> <!-- From Class -->
      <function key="class_skill.spellcraft" calc="0" replaces="true"/> <!--
      From Item -->



      Does that appear to cover enerything ?


      --
      regards,
      Frugal
      -OS Chimp


      --
      regards,
      Frugal
      -OS Chimp
    • Frugal
      I tried sending this earlier this morning, but it seems to haev appeared in teh mesage archive with no body and no subject. I am trying again. I apologies in
      Message 2 of 7 , Apr 8, 2004
      • 0 Attachment
        I tried sending this earlier this morning, but it seems to haev appeared
        in teh mesage archive with no body and no subject. I am trying again. I
        apologies in advance for duplicates.



        Thinking it through last night I might have come up with a way of handling
        class/cross class skills and the max ranks for a skill.

        It hinges on the assumption that we can ask different
        entities/progressions for a piece of information (including the
        character).

        So in each class we create a variable for the class skills:

        <progression id="class.rogue">
        <variable key="class_skill.bluff"/>
        <function key="class_skill.bluff" calc="1" />
        <ranks>
        <rank level="all">
        <function key="var.character_level" calc="1" stacks="true"/>
        </rank>
        </ranks>
        </progression>

        <progression id="class.sorceror">
        <variable key="class_skill.spellcraft"/>
        <function key="class_skill.spellcraft" calc="1" />
        <ranks>
        <rank level="all">
        <function key="var.character_level" calc="1" stacks="true"/>
        </rank>
        </ranks>
        </progression>


        So when the character takes a level of rogue they will have a variable
        "class_skill.bluff" with a value of '1'. The rogue class does not have a
        variable called "class_skill.spellcraft" so the default value of '0' will
        be returned if we ask for it.

        A character entity with 1 rank of 'class.rogue' and 1 rank of
        'class.sorceror' and a variable 'var.character_level' of 2.

        <entity id="character">
        <add-rank key="character_level">
        <add-rank key="class.rogue"/>
        </add-rank>
        <add-rank key="character_level">
        <add-rank key="class.sorceror"/>
        </add-rank>
        </entity>

        So if we ask the classes for the value of 'class_skill.bluff' class.rogue
        will return '1' because it is a class skill and 'class.sorceror' will
        return '0' because it is not.

        If we ask the character for the value of 'class_skill.bluff' it will
        examine all sub entities return '1' and likewise for 'class_skill.bluff'.
        Even if both classes gave the same skill as a class skill we would only
        return '1' rather than '2' because the <fuction>s do not have the
        'stacks="true"' attribute.

        If we ask the character for the value of 'class_skill.bluff' at
        character_level rank 1 we would return '1'. If we ask for the value of
        'class_skill.bluff' at character_level rank '2' it would return '0'.

        As we know the var.character_level and the classness of each skill we can
        do something like this:

        <progression id="skill.bluff">
        <variable key="skill.bluff.maxranks"/>
        <function key="skill.bluff.maxranks"
        calc="(var.character_level+3)/(2-class_skill.bluff)"/>
        </progression>

        So for our example character the value of skill.bluff.maxranks is:

        (var.character_level+3)/(2-class_skill.bluff)
        => (2+3)/(2-1)
        => 5/1
        => 5






        Now for the case were we have another entitiy that makes Spellcraft a
        class skill for that character.

        <entity id="item.mage_amulet" >
        <function key="class_skill.spellcraft" calc="1"/>
        </entity>

        And assign that item to the character:

        <entity id="character">
        <add-entity key="item.mage_amulet"/>
        <add-rank key="character_level">
        <add-rank key="class.rogue"/>
        </add-rank>
        <add-rank key="character_level">
        <add-rank key="class.sorceror"/>
        </add-rank>
        </entity>

        Now when we ask the character for the value of 'class_skill.spellcraft' at
        character_level rank '1' we get a response of '1' because the value at
        character level 1 is the value of the effects at level 1 plus the effects
        that apply outside the levels (i.e. the amulet):
        <function key="class_skill.spellcraft" calc="1"/> <!-- From Item -->

        When we ask the character for the value of 'class_skill.spellcraft' at
        character_level rank '2' we get a response of '1' because both the class
        and the item return functions that evaluate to '1':
        <variable key="class_skill.spellcraft"/> <!-- From Class -->
        <function key="class_skill.spellcraft" calc="1" /> <!-- From Class -->
        <function key="class_skill.spellcraft" calc="1"/> <!-- From Item -->




        Now for the case where we have an entity that makes a skill cross class:

        <entity id="item.mage_killer_amulet" >
        <function key="class_skill.spellcraft" calc="0" replaces="true"/>
        </entity>

        And assign that item to the character:

        <entity id="character">
        <add-entity key="item.mage_killer_amulet"/>
        <add-rank key="character_level">
        <add-rank key="class.rogue"/>
        </add-rank>
        <add-rank key="character_level">
        <add-rank key="class.sorceror"/>
        </add-rank>
        </entity>

        Now when we ask the character for the value of 'class_skill.spellcraft' at
        character_level rank '1' we get a response of '0' because the value at
        character level 1 is the value of the effects at level 1 plus the effects
        that apply outside the levels (i.e. the amulet):
        <function key="class_skill.spellcraft" calc="0" replaces="true"/> <!--
        >From Item -->

        When we ask the character for the value of 'class_skill.spellcraft' at
        character_level rank '2' we get a response of '0' because the item
        overrides the class because of the 'replace="true"' flag:
        <variable key="class_skill.spellcraft"/> <!-- From Class -->
        <function key="class_skill.spellcraft" calc="1" /> <!-- From Class -->
        <function key="class_skill.spellcraft" calc="0" replaces="true"/> <!--
        >From Item -->



        Does that appear to cover enerything ?


        --
        regards,
        Frugal
        -OS Chimp


        --
        regards,
        Frugal
        -OS Chimp



        --
        regards,
        Frugal
        -OS Chimp
      • Jenni A. Merrifield
        ... [...SNIP...] ... How would this work for exclusive class skills, where max ranks are based only on the number of class levels associated with the class
        Message 3 of 7 , Apr 10, 2004
        • 0 Attachment
          > Date: Thu, 8 Apr 2004 09:48:21 +0100 (BST)
          > From: "Frugal" <frugal@...>
          >
          >
          > Thinking it through last night I might have come up with a way of handling
          > class/cross class skills and the max ranks for a skill.
          >
          > It hinges on the assumption that we can ask different
          > entities/progressions for a piece of information (including the
          > character).
          >

          [...SNIP...]

          > If we ask the character for the value of 'class_skill.bluff' at
          > character_level rank 1 we would return '1'. If we ask for the value of
          > 'class_skill.bluff' at character_level rank '2' it would return '0'.
          >
          > As we know the var.character_level and the classness of each skill we can
          > do something like this:
          >
          > <progression id="skill.bluff">
          > <variable key="skill.bluff.maxranks"/>
          > <function key="skill.bluff.maxranks"
          > calc="(var.character_level+3)/(2-class_skill.bluff)"/>
          > </progression>
          >
          > So for our example character the value of skill.bluff.maxranks is:
          >
          > (var.character_level+3)/(2-class_skill.bluff)
          > => (2+3)/(2-1)
          > => 5/1
          > => 5

          How would this work for exclusive class skills, where max ranks are based
          only on the number of class levels associated with the class that gives
          access to the exclusive skill rather than the character's total class levels.


          --
          Jenni A. M. Merrifield (strawberry @ jamm . com)
          Software User Experience Professional
          Designing to Requirements and walking on Water is EASY. . .
          . . . So long as both are Frozen.
          --
        • Frugal
          ... Where are you getting this rule from? I have looked in both the 3.0 and 3.5 SRD and I can find no mention of the max
          Message 4 of 7 , Apr 14, 2004
          • 0 Attachment
            <quote who="Jenni A. Merrifield">
            > How would this work for exclusive class skills, where max ranks are
            > based
            > only on the number of class levels associated with the class that gives
            > access to the exclusive skill rather than the character's total class
            > levels.

            Where are you getting this rule from? I have looked in both the 3.0 and
            3.5 SRD and I can find no mention of the max ranks of exclusive skills
            being limited to the number of class levels associated with that skill.

            Can you cite the document and section that details this rule for me please.

            There is nothing in the current PCGen that copes with this rule.

            --
            regards,
            Frugal
            -OS Chimp
          • Brass Tilde
            ... Then it sounds like there might be an assumption built into the code somewhere based on the exclusive status of the skill. That should probably be rooted
            Message 5 of 7 , Apr 14, 2004
            • 0 Attachment
              > > The only thing I can find is in the system\gamemode\dnd\level.lst file,
              > > which lists CSKILLMAX and CCSKILLMAX values.
              >
              > Mea Culpa. After doing a bit more rigorous digging it does indeed work
              > fine in PCGen.

              Then it sounds like there might be an assumption built into the code
              somewhere based on the exclusive status of the skill. That should probably
              be rooted out and moved to the data.
            • Jenni A. Merrifield
              Message 6 of 7 , Apr 14, 2004
              • 0 Attachment
                <quote who="Frugal" when="Wed, 14 Apr 2004 12:41:42 +0100 (BST)"
                > <quote who="Jenni A. Merrifield">
                > > How would this work for exclusive class skills, where max ranks are
                > > based
                > > only on the number of class levels associated with the class that gives
                > > access to the exclusive skill rather than the character's total class
                > > levels.
                >
                > Where are you getting this rule from? I have looked in both the 3.0 and
                > 3.5 SRD and I can find no mention of the max ranks of exclusive skills
                > being limited to the number of class levels associated with that skill.

                Heh. I'm not surprised. I remember being surprised when one of the people
                I play with regularly pointed it out to me in the first place.

                >
                > Can you cite the document and section that details this rule for me please.

                Yes, yes I can.

                It doesn't exist in 3.5 of course, since there are no "Exclusive" skills in
                3.5 but it is in 3.0 - see the "Multiclass Characters" topic in "Chapter 3:
                Classes" of the 3.0 PHB - under "Class And Level Features" > "Skills" (top
                left of page 56 in my edition), second paragraph:

                "If a skill is unavailable to a class (that is, if it's an exclusive skill
                that a multiclass character's other class doesn't have access to), then
                levels in that class don't increase the multiclass character's maximum ranks.
                For instance, the 7th-level rogue/4th-level wizard would have a maximum rank
                of 10 in Use Magic Device. Likewise, the same character could have a maximum
                of 7 ranks in Scry, an exclusive skill for wizards."

                I suppose this probably appears in a similar location in the 3.0 srd, and
                although I have the files on hand I don't have time to look it up (have to
                head off to work).

                >
                > There is nothing in the current PCGen that copes with this rule.

                Really? I guess I never noticed since I never tried to exceed exclusive
                class limits in 3.0. Sounds like a bug and/or missing feature then. ;-)

                Jenni

                --
                Jenni A. M. Merrifield (strawberry @ jamm . com)
                Software User Experience Professional
                Designing to Requirements and walking on Water is EASY. . .
                . . . So long as both are Frozen.
                --
              • Frugal
                ... hmmmm... the only mention of skills for multiclass characters appears to be in srdbasiccharacterclassesii.rtf under the
                Message 7 of 7 , Apr 14, 2004
                • 0 Attachment
                  <quote who="Jenni A. Merrifield">
                  > It doesn't exist in 3.5 of course, since there are no "Exclusive" skills
                  > in
                  > 3.5 but it is in 3.0 - see the "Multiclass Characters" topic in "Chapter
                  > 3:
                  > Classes" of the 3.0 PHB - under "Class And Level Features" > "Skills" (top
                  > left of page 56 in my edition), second paragraph:

                  hmmmm... the only mention of skills for multiclass characters appears to
                  be in srdbasiccharacterclassesii.rtf under the heading "Multiclass
                  Characters":

                  "Skills: The character retains and can access skills from all his or her
                  classes. For the purposes of determining the “Max Ranks” of a skill, use
                  the character’s character level rather than individual class levels. When
                  adding a new class level, the costs for new ranks in skills are calculated
                  using the costs for that class. Skills available to another of the
                  character’s classes which are normally not allowed by the class being
                  added or increased are treated as cross-class skills for the purpose of
                  determining the cost of skill ranks."

                  Which implies that "Skills available to another of the character’s classes
                  which are normally not allowed by the class being added or increased" are
                  exclusive skills of another class, and are thus treated as cross class, so
                  (TL+3)/2.

                  --
                  regards,
                  Frugal
                  -OS Chimp
                Your message has been successfully submitted and would be delivered to recipients shortly.