Difference between revisions of "Architecture Changes 5.17"
Tom Parker (talk | contribs) m (→Refactoring) |
Tom Parker (talk | contribs) (→CHOOSE Rebuild) |
||
Line 56: | Line 56: | ||
# [[Type Safe Constant Proposals#CHOOSE:STRING|CHOOSE:STRING]] (syntax remains unchanged) | # [[Type Safe Constant Proposals#CHOOSE:STRING|CHOOSE:STRING]] (syntax remains unchanged) | ||
# [[Type Safe Constant Proposals#CHOOSE:SCHOOLS|CHOOSE:SCHOOLS]] | # [[Type Safe Constant Proposals#CHOOSE:SCHOOLS|CHOOSE:SCHOOLS]] | ||
− | # [[Simple_CDOMObject_Proposals#CHOOSE:PCSTAT|CHOOSE:PCSTAT]] | + | # <s>[[Simple_CDOMObject_Proposals#CHOOSE:PCSTAT|CHOOSE:PCSTAT]]</s> (DONE - SVN 10023-10024) |
− | # [[Simple_CDOMObject_Proposals#CHOOSE:CHECK|CHOOSE:CHECK]] | + | # <s>[[Simple_CDOMObject_Proposals#CHOOSE:CHECK|CHOOSE:CHECK]]</s> (DONE - SVN 10027) |
# [[Simple_CDOMObject_Proposals#CHOOSE:SIZE|CHOOSE:SIZE]] | # [[Simple_CDOMObject_Proposals#CHOOSE:SIZE|CHOOSE:SIZE]] | ||
# [[Simple_CDOMObject_Proposals#CHOOSE:ALIGNMENT|CHOOSE:ALIGNMENT]] | # [[Simple_CDOMObject_Proposals#CHOOSE:ALIGNMENT|CHOOSE:ALIGNMENT]] | ||
Line 64: | Line 64: | ||
# [[Qualified_CDOMObject_Proposals#CHOOSE:LANG|CHOOSE:LANG]] -- [https://sourceforge.net/tracker/?func=detail&aid=2703701&group_id=25576&atid=384722 FREQ 2703701] | # [[Qualified_CDOMObject_Proposals#CHOOSE:LANG|CHOOSE:LANG]] -- [https://sourceforge.net/tracker/?func=detail&aid=2703701&group_id=25576&atid=384722 FREQ 2703701] | ||
# [[Qualified_CDOMObject_Proposals#CHOOSE:EQUIPMENT|CHOOSE:EQUIPMENT]] | # [[Qualified_CDOMObject_Proposals#CHOOSE:EQUIPMENT|CHOOSE:EQUIPMENT]] | ||
− | # [[Qualified_CDOMObject_Proposals#CHOOSE:TEMPLATE|CHOOSE:TEMPLATE]] | + | # <s>[[Qualified_CDOMObject_Proposals#CHOOSE:TEMPLATE|CHOOSE:TEMPLATE]] </s> (DONE - SVN 10018-10021) |
# [[Unique_Primitive_CDOMObject_Proposals#CHOOSE:SPELLS|CHOOSE:SPELLS]] (syntax remains unchanged) | # [[Unique_Primitive_CDOMObject_Proposals#CHOOSE:SPELLS|CHOOSE:SPELLS]] (syntax remains unchanged) | ||
# [[Unique_Primitive_CDOMObject_Proposals#CHOOSE:ARMORPROFICIENCY|CHOOSE:ARMORPROFICIENCY]] | # [[Unique_Primitive_CDOMObject_Proposals#CHOOSE:ARMORPROFICIENCY|CHOOSE:ARMORPROFICIENCY]] |
Revision as of 00:44, 7 July 2009
Primary Goals - Token/Loader
Prepare for LST Editor
These items benefit the LST editor system and are required in order to allow the editor system a "clean" round-robin of the data stored in PCC/LST files
Eliminate PCClass ABB being recognized by LoadContext as source-dependentFREQ 2671886 (DONE - SVN 9734)Make .COPY in LST-files editor friendlyFREQ 2700709 (DONE - SVN 9735)Make .MOD in LST-files editor friendlyFREQ 2700750 (DONE - SVN 9778)Make .FORGET editor friendlyFREQ 2715783 (DONE - SVN 9782)- Make PCClassLevel REPEATLEVEL in LST-files editor friendly FREQ 2687293
- Rebuild/rename UDAM token to not "cross-pollute" in PCClassLevel FREQ 2671881
- Make Ability CATEGORY recognized by LoadContext as source-dependent FREQ 2671888
- Make Global KEY recognized by LoadContext as source dependent FREQ 2713303
Major Token Changes
These are major token changes that need to take place to sufficiently clean up the data syntax to avoid strange effects and requirements on the code.
- Domain's CHOOSE:WEAPONPROF can have [WEAPONPROF], should be AUTO:WEAPONPROF:%LIST FREQ 1683356
- Domain's CHOOSE:WEAPONPROF can have [FEAT=x] should get something like: AUTO:FEAT|x(%LIST) FREQ 1683356
- CHOOSE:SPELLLEVEL can have funky arguments (BONUS), should be separate and use %LIST FREQ 2713306
(also See UDAM in Editor preparation)
Continue Token/Field Cleanup
These are cleanups similar to the major work that was done in PCGen 5.16. These are generally minor refactoring and cleanup, and most are non-invasive. Few of these are critical for the 5.17 cycle and could be ignored if necessary
- ALL String based tokens (use StringKey) that support .CLEAR do so in a rather "different" way that is potentially not stable long-term. This should be reconsidered as to whether it is appropriate.
PCAlignment fields validForDeity, validForFollower can be in ObjectKeyFREQ 2713314 (DONE - SVN 9784)SizeAdjustment fields abbreviation, isDefaultSize can be in StringKey, ObjectKeyFREQ 2713314 (DONE - SVN 9785)PCStat fields abbreviation, statMod can be in StringKeyFREQ 2713314 (DONE - SVN 9786)PCStat field penaltyVar is useless - eliminateFREQ 2713314 (DONE - SVN 9786)PCStat fields maxValue, minValue can be in IntegerKeyFREQ 2713314 (DONE - SVN 9786)PCStat field rolled can be in ObjectKeyFREQ 2713314 (DONE - SVN 9786)- Kit statList can be in ListKey FREQ 2713314
- Kit tableMap can be in MapKey FREQ 2713314
- Global TEMPLATE supports .REMOVE suffix, should really be of the form REMOVE:TEMPLATE FREQ 1916482
- Campaign isLoaded and isInitted are load-based (not static) and thus should be moved into CampaignLoader vs. stored in the Campaign itself FREQ 2713309
CHOOSE Rebuild
This is the major token rebuild of CHOOSE, as proposed.
There is a significant discussion about separators for CHOOSE Separator Characters
Each of these are items that need to be built as "new" CHOOSE tokens:
- CHOOSE:NOCHOICE (syntax remains unchanged)
- CHOOSE:STRING (syntax remains unchanged)
- CHOOSE:SCHOOLS
CHOOSE:PCSTAT(DONE - SVN 10023-10024)CHOOSE:CHECK(DONE - SVN 10027)- CHOOSE:SIZE
- CHOOSE:ALIGNMENT
- CHOOSE:FEAT
- CHOOSE:ABILITY -- FREQ 2204717
- CHOOSE:LANG -- FREQ 2703701
- CHOOSE:EQUIPMENT
CHOOSE:TEMPLATE(DONE - SVN 10018-10021)- CHOOSE:SPELLS (syntax remains unchanged)
- CHOOSE:ARMORPROFICIENCY
- CHOOSE:SHIELDPROFICIENCY
- CHOOSE:DOMAIN
- CHOOSE:DEITY -- FREQ 1738608
- CHOOSE:CLASS
- CHOOSE:RACE
- CHOOSE:SKILL -- FREQ 1001527
- CHOOSE:WEAPONPROFICIENCY -- FREQ 1102455
- CHOOSE:USERINPUT
- ADD FEAT= target primitive (CHOOSE:FEAT=, CHOOSE:WEAPONFOCUS, FREQ 902288)
- CHOOSE:ARMORTYPE To be deprecated - see FREQ 2713374
- CHOOSE:SALIST to be deprecated, unless we can find a valid usage - see _exp 7364
- CHOOSE:SPELLLEVEL can be deprecated and replaced by CHOOSE:SPELLS if the BONUS issue is addressed.
The following have not been folded into the above proposals yet:
- CHOOSE:HP
- CHOOSE:SPELLLIST
Leverage GroupingState
The following tokens use error detection that could consider leveraging the GroupingState system. Note that some of these will not benefit and should probably not be changed.
- Global CCSKILL, COMPANIONLIST, CSKILL, KIT, LANGAUTO, QUALIFY
- Add ABILITY, CLASSSKILLS (both), FEAT, LANGUAGE, SKILL, SPELLCASTER, VFEAT
- Auto ARMORPROF, SHIELDPROF, WEAPONPROF
- Deity DEITYWEAP, DOMAINS
- Class LANGBONUS, SKILLLIST, SPELLLIST, WEAPONBONUS
- Race CHOOSE:LANGAUTO, FAVCLASS, LANGBONUS, MONCCSKILL, MONCSKILL, WEAPONBONUS
- Remove FEAT
- Skill CLASSES (doesn't check error right now!)
- Template CHOOSE:LANGAUTO, FAVOREDCLASS, LANGBONUS, WEAPONBONUS
Primary Goals - Core
Eliminate Cloning
Cloning takes place when a PlayerCharacter uses an object and results in extra memory and a minor performance issue. However, once clones are removed, additional type safety work can be done to vastly improve performance.
Currently, Equipment and EquipmentModifier objects have been scoped out of PCGen 5.17 in order to minimize the required changes to the core
Eliminate Cloning of PCStat objects (Ability Scores)(DONE - SVN 9690)Eliminate Cloning of Skill objects(DONE - SVN 9696)Eliminate Cloning of Race objects(DONE - SVN 9700)Eliminate Cloning of CompanionMod objects(DONE - SVN 9704)Eliminate Cloning of Template objects(DONE - SVN 9705)Eliminate Cloning of Spell objects(DONE - SVN 9707)Eliminate Cloning of Domain objects(DONE - SVN 9709)- Eliminate Cloning of PCClass objects
- Eliminate Cloning of Feat/Ability objects
Eliminate Cloning of EquipmentModifier objects(OUT OF SCOPE)Eliminate Cloning of Equipment objects(OUT OF SCOPE)
Drive Type Safety and Performance
This represents the additional type safety work around performance for these object types. These changes cannot be done at the same time as the changes above, because they are significantly invasive, and must wait for a stable PCGen 5.16.0 where multi-version patching is no longer required.
Currently, Equipment and EquipmentModifier objects have been scoped out of PCGen 5.17 in order to minimize the required changes to the core
Eliminate Key/ABB comparison of PCStat object(DONE - SVN 9884-6, 9888-90, 9893-5, 9897, 9899, 9900)Eliminate Key comparison of Skill objects(DONE - SVN 9991, 9997)Eliminate Key comparison of Race objects(DONE - SVN 9989)- Eliminate Key comparison of CompanionMod objects
Eliminate Key comparison of Template objects(DONE - SVN 9993)Eliminate Key comparison of Spell objects(DONE - SVN 10001)- Eliminate Key comparison of Domain objects
- Eliminate Key comparison of PCClass objects
Eliminate Key comparison of SizeAdjustment objects(DONE - SVN 9990)Eliminate Key comparison of PCAlignment objects(DONE - SVN 9994)Eliminate Key comparison of Language objects(DONE - SVN 9995)Eliminate Key comparison of Check (PObject) objects(DONE - SVN 10006)- Eliminate Key comparison of Feat/Ability objects
Eliminate Key comparison of WeaponProf objects(DONE - SVN 9998, 9999)Eliminate Key comparison of EquipmentModifier objects(OUT OF SCOPE)Eliminate Key comparison of Equipment objects(OUT OF SCOPE)
Player Character Subsystems
- PC Subsystem for PCStat objects
- PC Subsystem for Skill objects
- PC Subsystem for Race objects
- PC Subsystem for CompanionMod objects
- PC Subsystem for Template objects
- PC Subsystem for Spell objects
- PC Subsystem for Domain objects
- PC Subsystem for PCClass objects
- PC Subsystem for SizeAdjustment objects
- PC Subsystem for PCAlignment objects
- PC Subsystem for Language objects
- PC Subsystem for PCClass/PCClassLevel objects
- PC Subsystem for Check (PObject) objects
- PC Subsystem for Feat/Ability objects
- PC Subsystem for CompanionMod objects
- PC Subsystem for Proficiency objects
- PC Subsystem for Variables
- PC Subsystem for Bonuses
- PC Subsystem for XP
- PC Subsystem for Levels
- PC Subsystem for Pure Facts
- PC Subsystem for Movement
- PC Subsystem for AC
PC Subsystem for Equipment(OUT OF SCOPE)
Storage
- Source-based (CDOM) storage of PCStat objects
- Source-based (CDOM) storage of Skill objects
- Source-based (CDOM) storage of Race objects
- Source-based (CDOM) storage of CompanionMod objects
- Source-based (CDOM) storage of Template objects
- Source-based (CDOM) storage of Spell objects
- Source-based (CDOM) storage of Domain objects
- Source-based (CDOM) storage of PCClass objects
- Source-based (CDOM) storage of SizeAdjustment objects
- Source-based (CDOM) storage of PCAlignment objects
- Source-based (CDOM) storage of Language objects
- Source-based (CDOM) storage of PCClass objects
- Source-based (CDOM) storage of Proficiency objects
- Source-based (CDOM) storage of CompanionMod objects
- Source-based (CDOM) storage of Check (PObject) objects
- Source-based (CDOM) storage of Feat/Ability objects
Eliminate Key comparison of EquipmentModifier objects(OUT OF SCOPE)Eliminate Key comparison of Equipment objects(OUT OF SCOPE)
Refactoring
These are architecture refactoring issues that generally involve breaking tangles and other work that is helpful to cleaning up the structure of the code
CharacterDomain is a useless class - delete(DONE - SVN 10000, 10010)StatList is a useless class - delete(DONE - SVN 9996)- UnconstructedValidator should be an interface, not a class
- Qualifier (in cdom.helper) is used in .reference, thus it should be in .reference, not .helper
- CDOMObject methods addAdds, removeAdds, checkRemovals, driveChoice cause tangles, and should be in CDOMObjectUtilities not in CDOMObject
- LoadContext should be an interface, not a class
- PersistentChoiceActor decodeChoice often references the LoadContext, and should be discouraged from using Globals. This method should take the LoadContext as an argument.
- Give CDOMObject (or a utility class) a method of consolidating out all of the ListKey-based joins in pcgen.core.spell.Spell.java
- Ability.Nature should be in pcgen.cdom.enumeration
- Spell Components should be in pcgen.cdom.enumeration
- StatList getModForNumber(int, int) does a String replacement directly prior to a Formula evaluation, this should be moveable into a JEP variable for SCORE that is specific to stats. Actually, need to have the "SOURCE" field for TermEvaluatorBuilderPCVar COMPLETE_PC_SCORE be able to distinguish between STAT:Foo and BASESTAT:Foo and then this replacement would not be necessary.
Primary Goals - LST Editor
Primary Goals - UI
Other
Unresolved Architectural Issues
Variables under Cloning
Certain items, such as variables that are dependent upon an object's name, are ill defined on cloning. Should the key name be swapped out, or should it remain intact. Behavior is inconsistent across objects. This problem is also apparent if KEY or CATEGORY is used in a .MOD
Languages with matching Key
The MSRD has multiple languages (some TYPE:Spoken, some TYPE:Read.Write) that share an identical key. Eventually this will become a significant problem, and it may need to be addressed during 5.17
Spells with matching Key
Similar to the TYPE issue for Languages above, the SRD has multiple "spells" (typically one Magical and one Psionic) that have the same name. They are distinguished by TYPE (Divine vs. Psionic, for example). This should be changed to something more intelligent than type, restoring KEY as a unique identifier. (One option here is to allow a form of CATEGORY for Spells - although the sharing of Arcane and Divine Types makes this a wee bit more complicated than just using CATEGORY as we know it today in Abilities)
Retroactivity
Much of this issue is discussed in this thread: http://tech.groups.yahoo.com/group/pcgen_experimental/message/6864
Prerequisite behavior
This is surfaced starting at this message: http://tech.groups.yahoo.com/group/pcgen_experimental/message/8133