Developer Guide - Historical Change Guide
Overview
This section was created in order to document ongoing changes to the Fantasy Grounds API and CoreRPG base ruleset layer development that should be applied to rulesets going forward for the best compatibility with CoreRPG, standard themes, and new features.
We typically try to keep some backward compatibility for functions and features for at least 6 months (longer in some cases), in order to minimize disruption to ruleset and extension developers. However, we want to try to continuously raise the bar for what users can expect when they use Fantasy Grounds, as well as reduce overall code maintenance by retiring old code.
The SmiteWorks team will usually provide notification to rulesets that are included with the standard installation or in the SmiteWorks store; but does not attempt to provide proactive code analysis of extensions or any community/forge projects.
The notes will be provided by the month and year that the developer notes were provided to developers.
If you have any questions, please reach out to the SmiteWorks development team via the Workshop forum on the web site.
December, 2024
NOTE: This ruleset update is part of a larger push to standardize UI frames, fields and menus for consistency for users, as well as making theming for ruleset creation and extensions much easier long term.
Overview
Review all subsections below.
Note specific ruleset changes identified and called out in following three sections.
All themes should pay special attention to the Top Level Windows section in the guidelines linked below.
Frame Usage Guidance (Continuing)
Guidelines to be used when migrating
Updates To Be Made (General)
Frame Migration: charsheet, charsheethelper
Migrate windows to use top-level window usage guidelines for these frames.
If these frames are used for windows not related to character sheets, migrate those windows to the correct top-level frame based on the guidelines.
Search for any windows using those frames; and specify the new top-level templates and rebuild using the new layout templates.
See specific implementation below for Character Sheet (and Mini Character Sheet)
Frame Layout Templates
Use CoreRPG definitions as starting point
Add or update the following templates (only if charsheet frame overriden)
windowmenubar_charsheet, anchor_content_charsheet_top, anchor_content_charsheet_tabbed_top, anchor_content_charsheet_bottom,
Add or update the following templates (only if charsheethelper frame overriden)
windowtitlebar_charsheethelper, windowmenubar_charsheethelper, anchor_content_charsheethelper_top, anchor_content_charsheethelper_bottom,
Remove old templates (see below)
Misc Cleanup
Remove assets no longer used. (see below)
Remove direct “power_action_editor” references; use button_poweractioneditor. [Shadowdark]
Remove direct color setting for errors/overages: [RMC, Shadowdark, ]
Ex: setColor("FF0000"), setColor("#FF0000")
Use setColor(ColorManager.getUIColor("field_error")), setColor(nil)
Character Sheet Specific
Redefined “charsheet” window class, using copy=”charsheet_base” and define tabs/scripts.
<windowclass name="charsheet" copy="charsheet_base"> <tab> <name>main</name> <resource>tab_main</resource> <class>charsheet_main</class> </tab> <tab merge="add"> <name>abilities</name> <resource>tab_abilities</resource> <class>charsheet_abilities</class> </tab> <tab merge="add"> <name>inventory</name> <resource>tab_inventory</resource> <class>charsheet_inventory</class> </tab> <tab merge="add"> <name>notes</name> <resource>tab_notes</resource> <class>charsheet_notes</class> </tab> </windowclass> <windowclass name="charsheet_overview" copy="charsheet_overview_base" />
If onInit override in window class script, then add super.onInit; or WindowTabManager.populate(self).
Fix internal sub-sheets (Ex: charsheet_main, charsheet_notes, etc.) to remove extra space required from previous layouts that is now automatically handled.
Mini Character Sheet Specific
Add following script call to a global script, such as CharManager or GameSystem.
WindowMenuManager.initCharMinisheetSupport();
Define “charsheetmini” window class, and use copy=”charsheet_base” and define tabs/scripts
<windowclass name="charsheetmini" copy="charsheet_base"> <sizelimits> <minimum width="450" height="495" /> </sizelimits> <tab> <name>main</name> <resource>tab_main</resource> <class>charsheetmini_main</class> </tab> <tab merge="add"> <name>abilities</name> <resource>tab_abilities</resource> <class>charsheetmini_abilities</class> </tab> <tab merge="add"> <name>inventory</name> <resource>tab_inventory</resource> <class>charsheetmini_inventory</class> </tab> <tab merge="add"> <name>actions</name> <resource>tab_actions</resource> <class>charsheetmini_actions</class> </tab> <minisheet /> <script file="campaign/scripts/char.lua" /> <sheetdata> <sub_content_top name="overview"> <class>charsheetmini_overview</class> </sub_content_top> </sheetdata> </windowclass> <windowclass name="charsheetmini_overview" copy="charsheet_overview_base" />
If onInit override in window class script, then add super.onInit; or WindowTabManager.populate(self).
Fix internal sub-sheets (Ex: charsheet_main, charsheet_notes, etc.) to remove extra space required from previous layouts that is now automatically handled.
Assets Removed
Templates
button_charactivate, sub_charsheet, sub_charsheet_overview,
close_charsheet, close_charsheethelper, anchor_title_charsheethelper,
button_charmini, button_charfull,
Strings
char_label_minisheet, char_label_fullsheet,
August, 2024
NOTE: This ruleset update is part of a larger push to standardize UI frames, fields and menus for consistency for users, as well as making theming for ruleset creation and extensions much easier long term.
Overview
Review all subsections below.
Note specific ruleset changes identified and called out in following three sections.
All themes should pay special attention to the Top Level Windows section in the guidelines linked below.
Frame Usage Guidance (Continuing)
Guidelines to be used when migrating
Updates To Be Made (General)
Add support for NPC dice
If Type support desired, then register types and type resolution function.
Register system-level name rules, if any.
Migrate windows to use top-level window usage guidelines for these frames: ctbox
If these frames are used for other window types, migrate those windows to the correct top-level frame based on the guidelines.
Search for any windows using those frames; and specify the new top-level templates and rebuild using the new layout templates.
Review any overrides to the following scripts:
LibraryData, ItemManager
Remove unidentified field in body of record (Moved to header) (Items, NPCs, Vehicles)
See CoreRPG for example (i.e. nonid_name field)
Add pictures tab to records that support pictures (Items, NPCs, Vehicles)
See CoreRPG for example
Migrate master index overrides to use latest templates
See CoreRPG for example
Review usage of “mini_name” frame
Will be primarily used for character names on desktop/tokens now
Any usage for widgets or in other places should consider using “tempmodmini” or “fieldlight” frames instead.
Misc asset cleanup
Remove assets no longer used
Updates To Be Made (Specific) [SotDL]
Combat tracker migration
Migration to new top-level templates: [SotDL]
Remove nonid_name field in record body
Add record pictures tab
[SotDL (Item), ]
Migrate master index overrides to use latest templates
Misc asset cleanup
Frames: calendarmonthentry, calendarselectentry, charselectentry, moduleselectentry, partysheetentry
[SotDL, ]
Assets Updated
Templates
string_clientct_name, string_ct_entry_name, token_ctentry_base,
Assets Removed
Icons
button_menu, button_menu_down, ct_reach, ct_space, power_use, window_resize_filled,
Frames
referencepage,
Templates
frame_record_content, frame_record_content_tabbed
masterindexitem_access, masterindexitem_anchor_right, masterindexitem_category, masterindexitem_idelete, masterindexitem_link, masterindexitem_link_id, masterindexitem_modified, masterindexitem_name, masterindexitem_owner,
anchor_ct_client_label_right, anchor_ct_host_label_right, anchor_ct_label_right, anchor_ctbox_client_header, anchor_ctbox_host_header, anchor_title_ctbox, button_ct_endturn, button_ct_faction_friend, button_ct_faction_foe, button_ct_faction_neutral, button_ct_friendfoe, button_ct_menu, button_ct_nextactor, button_ct_nextround, button_ct_nextround_base, button_ct_nextturn_base, button_ct_setactive, button_ctbox_host_header_visibility, close_ctbox, frame_ct, frame_ctbox_host_header_visibility, help_ctbox, helper_ct, label_ct, label_ct_client_rounds, label_ct_header_init, label_ct_header_name, label_ct_host_rounds, label_ct_right, list_ctbox_client, list_ctbox_host, number_ct_client_rounds, number_ct_host_rounds, spacer_ct_client_header_buttons, spacer_ct_host_header_buttons,
March, 2024
NOTE: This ruleset update is part of a larger push to standardize UI frames, fields and menus for consistency for users, as well as making theming for ruleset creation and extensions much easier long term.
Overview
Review all subsections below.
Note specific ruleset changes identified and called out in following three sections.
All themes should pay special attention to the Top Level Windows section in the guidelines linked below.
Frame Usage Guidance (Continuing)
Guidelines to be used when migrating
Updates To Be Made (General)
Migrate windows to use top-level window usage guidelines for these frames: recordsheet, imagebox, storybox,
If frames used for other window types, migrate those windows to the correct top-level frame based on the guidelines.
Search for any windows using those frames; and specify the new top-level templates and rebuild using the new layout templates.
Search for any windows using “record_window*” or “record_header*” copied window classes, and make sure overrides work correctly.
Add icon for window menu link (window_toolbar_link)
Image toolbar has been completely reworked.
See imagewindow_toolbar window class and ImageManager script for new button registrations and templates.
Updates To Be Made (Specific) [SDL]
SDL - Remove
Frames
frame_story_content, referencepage,
Templates
close_recordsheet, close_storybox,
SDL - Review
General
Review all window classes using recordsheet/storybox frame (See CoreRPG implementations)
Review all window classes inheriting from record_window* or record_header* (See CoreRPG implementations)
Add button_toolbar_link icon
Window Classes
ct_entry (link token3Dflat or call base link function), item, npc
Assets Removed
Fonts
npcsheet_header
Frames
campaigncontrolframe, imagebox_header, whitecontrolarea, windowhandle,
Icons
button_collapse, button_collapse_w, button_expand, button_expand_w, button_scrollerpan, button_scrollerpan_down, button_sizedown, button_sizedown_down, button_sizedown_hover, button_sizeup, button_sizeup_down, button_sizeup_hover, button_zoomer, button_zoomer_down, button_zoomin, button_zoomin_down, button_zoomout, button_zoomout_down, tool_down_30, tool_left_30, tool_lock_closed, tool_lock_open, tool_minus_30, tool_plus_30, tool_right_30, tool_up_30,
Script Functions
GameSystem.getCharSelectDetailLocal
Templates
anchor_ctentry_right, area_parcel_content, button_ctentry_activateactive, button_ctentry_activateattributes, button_ctentry_activatedefensive, button_ctentry_activateeffects, button_ctentry_activatespacing, button_ctentry_activatetargeting, button_ctentry_idelete, button_ctentry_isidentified, button_ctentry_tokenvis, button_ctsection_effect_iadd, button_record_isidentified_image, button_record_toolbar, button_window_sizedown, button_window_sizedown_base, button_window_sizeup, button_window_sizeup_base, frame_ctsection_effect, frame_ctsection_spacing, frame_ctsection_targeting, frame_ctsub, frame_parcel, frame_record_lower, frame_refmanualpage_content, handle_record, handle_record_tabbed, helper_imagepanel, icon_clientctsection_effect, icon_ctsection, icon_ctsection_effect, icon_ctsection_spacing, icon_ctsection_targeting, image_toolbar_anchor, image_toolbar_button_deathmarkerclear, image_toolbar_draw, image_toolbar_mode_select, image_toolbar_mode_targetselect, image_toolbar_mode_unmask, image_toolbar_button_zoomtofit, image_toolbar_targeting, image_toolbar_toggle_grid, image_toolbar_toggle_lock, image_toolbar_toggle_preview, image_toolbar_toggle_shortcut, image_toolbar_toggle_tokenlock, imagepanel_record, imagepaneldata_record, label_ctentry_reach, label_ctentry_space, link_ctentry, link_story, list_ctsection_effect, number_ctentry_reach, number_ctentry_space, spacer_clientctsection_effect, story_page_top, story_page_prev, story_page_next, string_ctentry_effects, string_ctname, string_ctname_nonid, string_record_name_ref, sub_ctsection_targeting, sub_note_header, toolbar_button_color_base,
Window Classes
ref_text_header,
Assets Removed (Previously Deprecated with Warnings)
Templates
anchor_ctentry_right, button_ctentry_activateactive, button_ctentry_activatedefensive, button_ctentry_activateeffects, button_ctentry_activatespacing, button_ctentry_activatetargeting, button_ctentry_idelete, button_ctentry_isidentified, button_ctentry_tokenvis, button_ctsection_effect_iadd, frame_ctsection_effect, frame_ctsection_spacing, frame_ctsection_targeting, frame_ctsub, icon_clientctsection_effect, icon_ctsection, icon_ctsection_effect, icon_ctsection_spacing, icon_ctsection_targeting, label_ctentry_reach, label_ctentry_space, link_ctentry, list_ctsection_effect, number_ctentry_reach, number_ctentry_space, spacer_clientctsection_effect, string_ctentry_effects, string_ctname, string_ctname_nonid, sub_ctsection_targeting,
Window Classes
ct_targets,
Assets Deprecated
Templates
button_imagebackpanel_sizedown, button_imagebackpanel_sizeup, button_imagefullpanel_sizedown, button_imagewindow_sizeup, close_imagebox, close_imagepanel, close_recordsheet, close_storybox, frame_record, frame_story_content, help_imagebox, help_imagepanel, icon_record_locked, label_recordtype, link_record_header, spacer_recordtype, string_record_name_id, sub_record_header,
Assets (Review Usage)
Templates
string_record_name, string_record_name_image, string_record_name_story,
Window Classes
power_stats (-> power_main), quest_stats (-> quest_main),
December, 2023
Overview
Review all subsections below.
Note specific ruleset changes identified and called out in following three sections.
All themes should pay special attention to the Top Level Windows section in the guidelines linked below.
Frame Usage Guidance (Continuing)
Guidelines to be used when migrating
Updates To Be Made (General)
Migrate windows to use top-level window usage guidelines for these frames: utilitybox, tokenbag, referencelist, charselect, partysheet,
If frames used for other window types, migrate those windows to the correct top-level frame based on the guidelines.
Migrate Previously Migrated Top-Level Windows to use new windowtitlebar and windowmenubar templates
windowtitlebar_utilitybox, windowtitlebar_tokenbag, windowtitlebar_referencelist, windowtitlebar_charselect
windowmenubar_utilitybox, windowmenubar_tokenbag, windowmenubar_referencelist, windowmenubar_charselect
Remove old close and help button templates/controls
Rebuild Top-Level Windows with partysheet frames
partysheet - Use/define new anchoring templates for any windows defined using this frame
Character Sheet Changes
If charsheet_overview window class used, either merge with existing window class OR add leftanchor and migrate portrait_char → picture_charsheet. (See CoreRPG)
If not using charsheet_overview and using portrait_char; consider migrating to using charsheet_overview subwindow and window class if possible; or set up leftanchor/rightanchor layout similar to charsheet_overview window class so that picture_charsheet can be used instead of portrait_char.
Window Menu Bar Support
Define windowmenubar_button/windowmenubar_button_down frames
Ask for PSD template if desired
Add ColorManager.setWindowMenuIconColor
Adjust button_link graphic assets to be centered without drop shadow, instead of offset
Misc Theming Support
Add ColorManager.setButtonContentColor(sColor) to define both button_icon and button_text coloring (if defined, then button-white font does not need to be redefined)
Updates To Be Made (Specific)
Update utilitybox windows to use new templates
Update partysheet windows to use new templates
[SDL, ]
Remove/adjust partysheet_host/partysheet_client overrides
Script changes (See 5E / 3.5E)
ps/scripts/ps_client.lua
Control changes
anchor_title_partysheet -> anchor_content_partysheet_top/anchor_content_partysheet_bottom
sub_ps -> sub_content_hidden
[SotDL, ]
Remove/adjust ps_main overrides
Script changes (See 5E / 3.5E)
ps/scripts/ps_main.lua, ps/scripts/ps_list.lua
Misc
Remove PSMN option as well (built into Core)
Remove/adjust ps_xp overrides
Script changes (See 5E / 3.5E)
ps/scripts/ps_xp_*.lua
Misc
Remove PSMN option as well (built into Core)
Remove/adjust ps_skills overrides
Add control/script adjustments (see 3.5E)
Review/adjust PartyManager2 script
Remove XP management code from PartyManager2 script
Update character sheet to use new combined portrait control
Use sub_charsheet_overview with merge to customize
(which also requires using sub_charsheet for standard theming support)
OR set up left/right anchors and change portrait_char → portrait_charsheet
[SotDL, ]
Remove old utilitybox window usage (only for tool windows)
Assets To Be Added For Theming
Templates
windowmenubar_utilitybox, windowmenubar_tokenbag, windowmenubar_referencelist, windowmenubar_charselect
Assets Migrated to CoreRPG
Strings
dash, xp
ps_label_award, ps_label_encounters, ps_label_name, ps_label_party, ps_label_partyentryxp, ps_label_quests, ps_label_xp, ps_label_xpawarded, ps_label_xpname, ps_menu_awardxp, ps_tooltip_showrollon, ps_tooltip_showrolloff, ps_tooltip_xpawarded
Assets To Be Deprecated (and Replacements)
Fonts
list-empty-ps, sheetlabel_ps
Templates
close_charselect, help_charselect,
close_referencelist, help_referencelist,
close_tokenbag, help_tokenbag,
close_utilitybox, help_utilitybox,
close_partysheet, help_partysheet, helper_ps
anchor_title_partysheet, frame_ps, label_ps, sub_ps
anchor_partysheet_main_header, anchor_partysheet_main_footer, list_psmain, list_psmain_helper
anchor_partysheet_xp_header, list_psxp_party, list_psxp_encounters, list_psxp_quests
anchor_title_charsheet
August, 2023
Overview
Review all subsections below.
Note specific ruleset changes identified and called out in following three sections.
All themes should pay special attention to the Top Level Windows section in the guidelines linked below.
Frame Usage Guidance (Continuing)
Guidelines to be used when migrating
Updates To Be Made (General)
Migrate windows to use top-level window usage guidelines for these frames: utilitybox, tokenbag, referencelist, charselect
If frames used for other window types, migrate those windows to the correct top-level frame based on the guidelines.
Rebuild Top-Level Windows with chatbox/charselect/referencelist frames
chatbox - Use/define new anchoring templates for any windows defined using chatbox frame
Remove “basicchat*” template overrides; and use standard top/bottom anchors to adjust placement [SDL, ]
charselect - Use/define new anchoring templates for any windows defined using charselect frame
referencelist - Use/define new anchoring templates for any windows defined using referencelist frame
Review Specific/Auxiliary Asset Definitions (Per Frame) section in the Top Level Windows guidelines to implement all the primary and auxiliary requisite assets to go with any frames redefined in the ruleset or theme.
chatbox, utilitybox, tokenbag, referencelist, charselect, recordsheet, charsheet, imagebox, npcsheet, storybox, charsheethelper, ctbox, partysheet
Update dice tower coding
Migrate dice tower assets to use icons, instead of frames (dicetower_normal, dicetower_drop)
Remove dicetower roll specifications (now dynamically pulls from ActionsManager)
Updates To Be Made (Specific Rulesets)
[SDL]
Implement Top-Level Window Templates Noted in Guidelines for Specific Asset Definitions (Per Frame)
Ex: Font: button-white -> (Copy to ruleset from Classic theme; or from CoreRPG and set color to FFFFFF)
Assets To Be Deprecated (and Replacements)
Fonts
reference-groupsubdesc -> (Remove; Handled by header_content_groupdesc template)
Frames
referencepage -> recordsheet
Templates
sub_ref_header -> sub_record_header
close_referencepage -> close_recordsheet (and use recordsheet frame)
frame_ref_content -> frame_record_content
sub_refmanualpage_content -> subwindow_record (and activate tag)
sub_ref_content -> subwindow_record (and activate tag)
scrollbar_ref_content -> scrollbar_content
anchor_reftitle -> anchor_content_referencelist_top/anchor_content_referencelist_bottom
button_reftable_collapse -> button_content_grouped_collapse
button_reftable_expand -> button_content_grouped_expand
filter_reftable -> filter_content_grouped_bottom
frame_groupdesc -> header_content_groupdesc
ft_reftablefooter -> (Remove usage; handled by ref_listgroup.lua script)
header_reftablegroup -> anchor_list_content_label_left/anchor_list_content_label_right
label_reftable -> label_list_content_number_right/label_list_content_string_noframe_right/label_list_content_noframe
list_ref -> list_content_framed_groupbox_alternating_filtered
list_reftablegroup -> list_content_framed_groupbox/list_content_noscroll_alternating_top
list_reftablegroupitems -> list_content_noscroll_alternating_top
number_ref_weightwithsuffix -> stringc_listitem_left_noframe_static (and custom window onInit)
number_reftable -> number_text_listitem_left_noframe_static
filter_ref -> filter_content_bottom
resize_referencepage -> resize_recordsheet (and use recordsheet frame)
scrollbar_reftablegroup -> scrollbar_content_grouplist
string_groupdesc -> header_content_groupdesc
string_groupsubdesc -> (Remove; Handled by header_content_groupdesc template)
string_reftable -> string_listitem_left_noframe_static/string_listitem_left_noframe_static_linked
button_iadd_campaign -> button_iadd_list_content_controls
button_iedit_campaign -> button_iedit_list_content_controls
Assets Removed
Fonts
button-white-large
Frames
durationadjustment
fielddice
storybox2
Icons
button_collapse_down
button_expand_down
char_defenses
image_loading
image_locked
minimized_charability
minimized_charattacks
minimized_charequipment
minimized_charnotes
minimized_charpowers
Strings
masterindex_button_category_editon
masterindex_button_category_editoff
Templates
anchor_charselect_button
anchor_refgroupedlist_bottom
anchor_refgroupedlist_label
anchor_refgroupedlistgroupitem_left
anchor_reflist_paging
button_backcharwindow
button_importcharfile
button_importcharwindow
filter_charselect
filter_refgroupedlist
filter_reflist
frame_groupedlist_group
ft_refgroupedlist_notes
label_item_reftype
label_reftype
label_source
link_refgroupedlistgroupitem
list_refgroupedlist
link_reflistitem
list_reflist
masterindex_anchor_bottom
masterindex_anchor_paging
masterindex_category_scroll
scrollbar_refgroupedlist_notes
scrollbar_reflist_notes
string_reflistitem
sub_refgroupedlist_notes
sub_reflist_notes
June, 2023
Frame Usage Guidance (Update to UI Standards)
UI Standards - Rulesets and Extensions | Content UI and Layout
Migrate utilitybox2/utilitybox3 to utilitybox
Remove calendar/utilitybox2/utilitybox3 frame definitions and graphics;
as well as help_*/close_*/resize_* templatesUse new anchoring templates for any windows defined using utilitybox frame
(see link above, and see examples in CoreRPG)Update anchor templates as needed for utilitybox/tokenbag
(if frames or windowtitle position updated by ruleset/extension)
(i.e. anchor_content_utilitybox_top/anchor_content_utilitybox_bottom)
(i.e. anchor_content_tokenbag_top/anchor_content_tokenbag_bottom)Already defined in all official themes
Remove deprecated templates (or copy to ruleset locally)
template: anchor_campaign
template: anchor_campaign2
template: filter_campaign
template: filter_utility
template: anchor_title_utilitybox (Migrate to anchor_content_utilitybox_top)
template: anchor_title_utilitybox3 (Migrate to anchor_content_utilitybox_top)
template: anchor_bottom_utilitybox3 (Migrate to anchor_content_utilitybox_bottom)
template: close_utilitybox3 (Migrate to close_utilitybox)
template: resize_utilitybox3 (Migrate to resize_utilitybox)
template: helper_effects (Migrate to help_utilitybox; Add window.helplinkres)
Remove Debug code from release
Remove print calls (use ChatManager.SystemMessage)
Remove printstack and Debug.printstack calls (not for release code)
Remove debugging output from release code (Debug.chat, Debug.console)
Use ChatManager.SystemMessage or remove
Investigate sound trigger support
All sound triggers are based on Lua pattern matching
Ruleset sound triggers also pre-baked expressions to match for specific action types
See CoreRPG:SoundSetManager global script, lines 40-115, for examples
Several official rulesets we are supporting directly already handled here (5E, 4E, 3.5E, ...)
Investigate chat record sharing support
RecordShareManager global script added to support simple chat text output of records
(see 5E for examples of records using button_ichat template in headers, as well as RecordShareManager5E script)
Common Code
Use new "button_text_toggle" template when defining toggle-able buttons using buttonup/buttondown frames
"helper_<topic>" templates being replaced with "help_<frame>" templates and window.helplinkres tag
DesktopManager.setSidebar* -> ColorManager.setSidebar* long term migration
February, 2023
General
Use getChildList instead of getChildren for DB/databasenode calls when you don't need the node key name. Uses numerical keys instead, which is faster and can use ipairs to iterate.
databasenode -> DB API calls migration. See post below.
Convert multiple concatenated strings into single string.format call
Portraits
Update standard portrait size to 100x100 pixels
charlist_base -> (increased to 100x100)
charlist_mask -> (increased to 100x100)
Remove mini portraits
miniportrait_base -> (removed)
miniportrait_mask -> (removed)
Combat Tracker
Use subwindowing to improve performance (toggles, sections, …)
(See examples in 5E/4E/3.5E using CoreRPG base objects and inheritance.)
Update ct_entry.lua:delete to use CombatManager.deleteCombatant (or just inherit)
Use CombatManager.deleteFaction/deleteNonFaction in ct_menu.lua
Character Sheets
Review template:list_charinv and script:char_invlist.lua usage for simplification
(Move char sheet updates to CharManager, in case character sheet not open during PS distribution)
Actions tab generalization and optimization
Use subwindowing to improve performance
(See examples in 5E/4E/3.5E using CoreRPG base objects.)
Dice Skins
Add dice skin customization for critical/precision dice (D&D clones)
Death Markers
Investigate adding death marker support to each ruleset
Token Height Support
Update any TokenManager overrides to use new code that supports token height natively.
Theming Support
Token Decorations
font: token_name, token_ordinal, token_height, token_height_negative
frame: token_name, token_ordinal, token_height
functions: TokenManager
setTokenFrameName(sFrame, sFrameOffset)
setTokenFontName(sFont)
setTokenFrameOrdinal(sFrame, sFrameOffset)
setTokenFontOrdinal(sFont)
setTokenFrameHeight(sFrame, sFrameOffset)
setTokenFontsHeight(sPositiveFont, sNegativeFont)
Migrated frame: tokennumber -> token_ordinal
Other Theming Changes
Icon: spell_cast -> roll_cast
Icon: spell_damage -> roll_damage
Icon: spell_heal -> roll_heal
Icon: spell_effect -> roll_effect
Icon: usepower -> power_use
Cleanup
Icon: footer_narrow (remove)
Template: button_toggledetail (remove; moved to CoreRPG)
Font: reference-subtitle (remove)
template: windowtitlebar_char -> windowtitlebar_charsheethelper
template: anchor_title_charsheethelper (remove)
frame: charsheethelper (remove)
Common Code
Consolidate updateControl -> WindowManager.callSafeControlUpdate(self, sControl, bReadOnly, bForceHide)
Rework of iedit/idelete buttons to support alternate use requiring less update code
button_iedit -> edittarget tag(s) (or no target tag) calls onEditModeChanged for all children of edittarget(s) (or window parent)
button_idelete -> editmode tag checks for numerical control value == 1 (on window parent object and up)
Added spacer_header_idelete template -> uses editmode tag to check for numerical control value == 1 (on window parent object and up)
August, 2022
Cleanup
Remove definitions for common resources moved to CoreRPG that do not need to be overriden.
(base, dash, lvl, level, hp, hitpoints, ac, armorclass, cr_label_hptemp, ct_label_nonlethal, ct_label_wounds, ct_label_status, ct_tooltip_hptemp, ct_tooltip_nonlethal, ct_tooltip_wounds, ct_tooltip_size, ct_tooltip_reach)
Combat Tracker
Review new combat tracker templates and logic in CoreRPG/5E to see if you should use. Subwindows improves performance and reduces control overhead when not needed.
February, 2022
Currencies/Encumbrance
Update GameSystem.currencies to provide name, value, weight for each
Ex: { name = "GP", weight = 0.02, value = 1 }
Enable new system (CharEncumbranceManager.addStandardCalc() or addCustomCalc(fnCustomCalc))
Ex: See 3.5E ruleset for typical example
Ex: See SFRPG ruleset for custom example with partial replace and extra functionality
Note: Requires coin list updates (see below)
Note: Can use custom func that calls back into default functions for partial customization or additional functionality
Update charsheet_inventory
Remove old coinname and coinamount fields
Add standard templated currency list
If "coinother" support, then use:
sub_charcurrency, scrollbar_sub_charcurrency, button_iadd_sub_charcurrency, button_iedit_sub_charcurrencyIf no other field needed, then use:
list_charcurrency, scrollbar_currencylist, button_iadd_currencylist, button_iedit_currencylistEx: See 3.5E ruleset for standard case with "coinother"
Ex: Ask for example of standard case without "coinother". (CoC/WOIN)
Update main window and inventory list scripts if override
Remove handlers for "count", "weight" and child delete in list
Remove onEncumbranceChanged calls
Update CharManager script overrides (updateEncumbrance)
Update global scripts that use old coins.slot# (Ex: Overrides of PSLootManager/ItemManager)
Implement custom overrides
setEncumbranceField("encumbrance.load");
setCustomItemLists({ "inventorylist" });
setCustomItemFields({ "carried", "count", "weight" });
setCustomCurrencyLists({ "coins" });
setCustomCurrencyFields({ "amount", "name" });
Remove other monitoring
Remove any other monitoring of item carried/count/weight fields that update encumbrance
Remove any other monitoring of coin amount/name fields that update encumbrance
Sidebar
Add any custom buttons to sidebar
DesktopManager.registerSidebarToolButton(tButton, nIndex)
tButton = { sIcon = "<IconAsset>", tooltipres = "<StringAsset>", class = "<WindowAsset>", path = "<DBPathOrEmptyString>" }
Ex: See SFRPG ruleset for custom sidebar button example (DesktopSFRPG script)
Remove old sidebar tool button graphics references/files (button_ct, button_color, etc.)
D66 support
Add global script to register D66 handling
<script name="D66Support">function onInit() DiceManager.addDefaultD66Handling(); end</script>
Add "d60" and "d66" dice assets
<customdie name="d66"><model>d6</model><menuicon>d66icon</menuicon></customdie>
<customdie name="d60"><model>d6</model><script>function onValue(result) return DiceManager.onD60ResultValue(result); end</script></customdie>
Remove custom TableManager overrides (if any)
New house rule support
Once currency/encumbrance tied to built-in system, remove any coin weight options and encumbrance calculations.
Remove any diagonal distance measurement option, since it's built into CoreRPG layer now.