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.

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)

  • 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

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)

  • 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

NOTE: This ruleset update is part of a larger push to standardize UI frames and fields 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: 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)

    • Migrate utilitybox2/utilitybox3 to utilitybox

    • Remove calendar/utilitybox2/utilitybox3 frame definitions and graphics;
      as well as help_*/close_*/resize_* templates

    • Use 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_charcurrency

        • If no other field needed, then use:
          list_charcurrency, scrollbar_currencylist, button_iadd_currencylist, button_iedit_currencylist

        • Ex: 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.