Complex CDOMObject Proposals

From PCGen Wiki
Jump to: navigation, search

CHOOSE Proposals for CDOMObjects with complex Primitives or Qualifiers

CHOOSE:SKILL

SUBTOKEN: CSKILLS (deprecated)
SUBTOKEN: NONCLASSSKILLLIST (deprecated)
SUBTOKEN: SKILLSNAMED (deprecated)
SUBTOKEN: SKILLSNAMEDTOCSKILL (deprecated)
SUBTOKEN: SKILLSNAMEDTOCCSKILL (deprecated)
SUBTOKEN: SKILLS (deprecated)
SUBTOKEN: SKILL (new)

Syntax

CHOOSE:SKILL|x|y|y[z]|y[z,z]|x,y,y[z],y[z,z]


x is a Skill PRIMITIVE

A PRIMITIVE is an identifier of objects, and may include any number of specifications. In the case of Skill objects, there are are the four global PRIMITIVES:

x = an Skill (specified by key)
x = TYPE=w (w is a TYPE identifier for a Skill )
x = !TYPE=w (w is a TYPE identifier for a Skill that would be prohibited)
x = ALL (allow the choice of any Skill)

There are also Skill specific PRIMITIVES:

x% = a pattern match for a Skill (specified for skill keys)

y is a QUALIFIER

A QUALIFIER is a special keyword that identifies a subset of objects that should be returned. Valid qualifiers for Skill objects include any of the Global Qualifiers.

There are also many Skill specific QUALIFIERS:

CLASS Displays all class skills for the PC
!CLASS Displays all skills that are NOT class skills for the PC
CROSSCLASS Displays all crossclass skills for the PC
!CROSSCLASS Displays all skills that are NOT crossclass skills for the PC
EXCLUSIVE Displays all exclusive skills for the PC
!EXCLUSIVE Displays all skills that are not exclusive skills for the PC
NORANK Displays all skills in which the PC has no rank
RANK=n Displays all skills in which the PC has n or more ranks


A comma represents "AND", meaning multiple items are evaluated independently and then any item that appears in ALL of the items is added to the list.

CHOOSE:SKILL|Search,Spot

will result in NO choices because no Skill is both Search and Spot.

CHOOSE:SKILL|TYPE=Foo,PC
would test for any Skill that has the Foo type (as defined in the Skill LST file) which is ALSO already selected by the PlayerCharacter

This could also be written (probably more clearly):
CHOOSE:SKILL|PC[TYPE=Foo]


A pipe represents "OR", meaning multiple items are evaluated independently and then any item that appears in any of the items is added to the list:

CHOOSE:SKILL|Search|Spot

will result in a choice between Deities Search and Spot.

All commas (ANDs) are evaluated before pipes (ORs), so something like:

CHOOSE:SKILL|Search|TYPE=Foo,PC
would include Search unconditionally, in addition to any Skill that has the Foo type (as defined in the Skill LST file) which is ALSO already selected by the PlayerCharacter

Special Case

CHOOSE:NONCLASSSKILLLIST had an argument LIST which queried for CROSSCLASS skills on the PC, thus LIST is equivalent to CROSSCLASS in the new syntax

Note that the SKILLSNAMED, SKILLSNAMEDTOCSKILL, and SKILLSNAMEDTOCCSKILL subtokens have syntax that does not change (even relative to the complex behavior available in those tokens)

Conversion

CHOOSE:CSKILLS becomes CHOOSE:SKILL|CLASS

CHOOSE:SKILLS becomes CHOOSE:SKILL|PC

CHOOSE:SKILLSNAMED|... becomes CHOOSE:SKILL|...

CHOOSE:SKILLSNAMEDTOCSKILL|... becomes CHOOSE:SKILL|... CSKILL:LIST

CHOOSE:SKILLSNAMEDTOCCSKILL|... becomes CHOOSE:SKILL|... CCSKILL:LIST

CHOOSE:NONCLASSSKILLLIST|LIST becomes CHOOSE:SKILL|CROSSCLASS

CHOOSE:NONCLASSSKILLLIST|LIST|Spot,Search becomes CHOOSE:SKILL|CROSSCLASS|Spot|Search

CHOOSE:WEAPONPROFICIENCY

SUBTOKEN: PROFICIENCY (deprecated) SUBTOKEN: WEAPONPROF (deprecated) SUBTOKEN: WEAPONPROFS (deprecated) SUBTOKEN: WEAPONPROFICIENCY (new)


Syntax

CHOOSE:WEAPONPROFICIENCY|x|y|y[z]|y[z,z]|x,y,y[z],y[z,z]

x is a WeaponProf PRIMITIVE

A PRIMITIVE is an identifier of objects, and may include any number of specifications. In the case of WeaponProf objects, there are are the three global PRIMITIVES:

x = an WeaponProf (specified by key)
x = TYPE=w (w is a TYPE identifier for a WeaponProf )
x = !TYPE=w (w is a TYPE identifier for a WeaponProf that would be prohibited)
x = ALL (allow the choice of any WeaponProf)

There are also WeaponProf specific PRIMITIVES:

DEITYWEAPON (gets the weapon listed in the deities list file, for the Deity selected by the PlayerCharacter)

FEAT=w (Feat name) (Feat name must be any feat that uses CHOOSE:WEAPONPROF)

ABILITY=w (Ability name) (Ability name must be any ability that uses CHOOSE:WEAPONPROF)

  • NOTE: This should be universally applied to accept any CHOOSE: referenced in the ABILITY. Not just used for Weapon Prof CHOOSE

WIELD=w (Wield category) (Wield Category can be "Light", "OneHanded" or "TwoHanded", as set by the WIELD token in the Equipment LST file)


y is a QUALIFIER

A QUALIFIER is a special keyword that identifies a subset of objects that should be returned. Valid qualifiers for WeaponProf objects include any of the Global Qualifiers.

The following WeaponProf specific QUALIFIER is also available:

SIZE=z  : limits the items in the brackets to appearing only if the PlayerChracter is the size given by z


A comma represents "AND", meaning multiple items are evaluated independently and then any item that appears in ALL of the items is added to the list.

CHOOSE:WEAPONPROFICIENCY|Longsword,Flail

will result in NO choices because no WeaponProf is both Longsword and Flail.

CHOOSE:WEAPONPROFICIENCY|TYPE=Foo,PC
would test for any WeaponProf that has the Foo type (as defined in the WeaponProf LST file) which is ALSO already selected by the PlayerCharacter

This could also be written (probably more clearly):
CHOOSE:WEAPONPROFICIENCY|PC[TYPE=Foo]


A pipe represents "OR", meaning multiple items are evaluated independently and then any item that appears in any of the items is added to the list:

CHOOSE:WEAPONPROFICIENCY|Longsword|Flail

will result in a choice between Weapon Proficiencies Longsword and Flail.

All commas (ANDs) are evaluated before pipes (ORs), so something like:

CHOOSE:WEAPONPROFICIENCY|Longsword|TYPE=Foo,PC
would include Longsword unconditionally, in addition to any WeaponProf that has the Foo type (as defined in the WeaponProf LST file) which is ALSO already selected by the PlayerCharacter

Special Cases

CHOOSE:PROFICIENCY|WEAPON uses UNIQUE which is now properly composed as: !PC

CHOOSE:WEAPONPROFS has an argument LIST that is equivalent to the PC qualifier in CHOOSE:WEAPONPROFICIENCY

CHOOSE:WEAPONPROFS has a magical argument TYPE.Light which can mean EITHER TYPE=Light or "This weapon is Light for the PC". This will require special conversion

CHOOSE:WEAPONPROFS has special Syntax SIZE.Z<name> where Z is a Size abbreviation and <name> is a weapon proficiency. It is conditionally added if the PC is the given size.

CHOOSE:WEAPONPROFS WSIZE.z.w.w.w does some strange processing. Z is a wield category and w are equipment types. However, this violates determinism in that if an equipment doesn't match a WeaponProf name, then the first equipment to match is used - thus creating different results in different cases. We should review the rules that caused the creation of this (if we can find them) to see if and how this is handled.

CHOOSE:WEAPONPROF has the ability to restrict (remove) types and this impacts backwards in the token.

Thus, something like: CHOOSE:WEAPONPROF|!TYPE=Foo|TYPE=Bar means the !TYPE has no effect, while CHOOSE:WEAPONPROF|TYPE=Foo|!TYPE=Bar is equivalent to our new syntax: CHOOSE:WEAPONPROFICIENCY|TYPE=Foo,!TYPE=Bar (since the !TYPE previously was treated as an AND)

This means more complicated cases can also be resolved: CHOOSE:WEAPONPROF|TYPE=Foo|!TYPE=Bar|Type=Goo is equivalent to our new syntax: CHOOSE:WEAPONPROFICIENCY|TYPE=Foo,!TYPE=Bar|TYPE=Goo (note how TYPE=Goo appears after the !TYPE=Bar in WEAPONPROF, thus not ANDed with !TYPE=Bar in WEAPONPROFICIENCY

Conversion

CHOOSE:PROFICIENCY|WEAPON|UNIQUE|TYPE=Exotic
becomes
CHOOSE:WEAPONPROFICIENCY|!PC[TYPE=Exotic]

CHOOSE:WEAPONPROF|1|Dagger|Club
becomes
CHOOSE:WEAPONPROFICIENCY|Dagger|Club

CHOOSE:WEAPONPROF|3|DEITYWEAPON
becomes
CHOOSE:WEAPONPROFICIENCY|DEITYWEAPON
SELECT:3

CHOOSE:WEAPONPROF|1|WIELD.OneHanded|WIELD.Light
becomes
CHOOSE:WEAPONPROFICIENCY|WIELD=OneHanded|WIELD=Light

CHOOSE:WEAPONPROF|1|WIELD.OneHanded|!TYPE.Exotic
becomes
CHOOSE:WEAPONPROFICIENCY|WIELD=OneHanded,!TYPE=Exotic

CHOOSE:WEAPONPROFS|LIST
becomes
CHOOSE:WEAPONPROFICIENCY|PC

CHOOSE:WEAPONPROFS|Size.LGreatsword|Size.LClub|Size.SSling|Size.SDagger
becomes
CHOOSE:WEAPONPROFICIENCY|SIZE=L[Greatsword|Club]|SIZE=S[Sling|Dagger]

CHOOSE:WEAPONPROFS|Spellcaster.Longsword|Spellcaster.Longbow Displays a list of Longsword and Longbow if the character is a spellcaster.

CHOOSE:WEAPONPROFS|WSize.Light.Wood Displays a list of all the character's weapon profs for light weapons if there is a wood weapon of that type.

      • TODO Per above this is an interesting challenge - what is meant here, as this description of the function is not accurate to the code See _exp 12594




CHOOSE:SPELLLEVEL

SUBTOKEN: SPELLLEVEL

Syntax

CHOOSE:SPELLLEVEL|x|y|z|x|y|z

x is a PCClass PRIMITIVE

A PRIMITIVE is an identifier of objects, and may include any number of specifications. In the case of PCClass objects, there are are the four global PRIMITIVES:

x = an PCClass (specified by key)
x = TYPE=w (w is a TYPE identifier for a PCClass )
x = !TYPE=w (w is a TYPE identifier for a PCClass that would be prohibited)
x = ALL (allow the choice of any PCClass )

There is also (at least) one specific PCClass Primitive:

SPELLTYPE=x

y is an integer (minimum level of the selection)

z is a formula (maximum level of the selection)

Note: Use of the embedded # of choices is deprecated (and how the old and new syntax are distinguished!). Use SELECT:x

Conversion

CHOOSE:SPELLLEVEL|2|TYPE.Arcane|4|MAXLEVEL+30[BONUS:SPELLCAST|CLASS=%;LEVEL=%|1] becomes: SELECT:2 CHOOSE:SPELLLEVEL|SPELLTYPE=Arcane|4|MAXLEVEL+30 BONUS:SPELLCAST|%LIST|1

New Features

This requires a number of new features:

  • SPELLTYPE= primitive for PCClass
  • MAXLEVEL term for (spellcasting) Classes
  • Conversion of old SPELLLEVEL syntax