Skip to content

Feature Reference

Relevant source files

This page catalogs all user-facing features in Taj’s Mod, organized by functional category. Each feature entry includes its configuration key(s), implementation location, and user-accessible settings.

For detailed implementation of individual feature managers, see Utility Manager Components. For command palette-specific features, see Command Palette System. For visual customization technical details, see Visual Enhancements.


Taj’s Mod features are organized into four main categories, each accessible through dedicated tabs in the Settings UI:

flowchart TD

General["General Tab<br>Core QoL Features"]
Visuals["Visuals Tab<br>Appearance Customization"]
Cheats["Cheats Tab<br>Gameplay Modifiers"]
Debug["Debug Tab<br>Developer Tools"]
WireDrop["Wire Drop Menu"]
SixInput["6-Input Containers"]
CommandPalette["Command Palette"]
WireClear["Right-click Wire Clear"]
SelectAll["Ctrl+A Select All"]
GotoGroup["Go To Group Button"]
BuyMax["Buy Max Button"]
ZOrder["Group Z-Order Fix"]
SliderScroll["Disable Slider Scroll"]
NotifLog["Toast History Panel"]
DisconnectedHL["Highlight Disconnected Nodes"]
Screenshot["Screenshot System"]
FocusMute["Mute on Focus Loss"]
Controller["Disable Controller Input"]
WireColors["Custom Wire Colors"]
ExtraGlow["Extra Glow"]
UIOpacity["UI Opacity"]
GroupColors["17 Group Colors"]
GroupPatterns["11 Pattern Types"]
NodeLimit["Node Limit Control"]
UpgradeMultiplier["Upgrade Multiplier"]
CheatPanel["Cheat Panel"]
ResetSettings["Reset All Settings"]
BootScreen["Custom Boot Screen"]
DebugMode["Debug Logging"]
DebugInfo["Log Debug Info"]

General --> WireDrop
General --> SixInput
General --> CommandPalette
General --> WireClear
General --> SelectAll
General --> GotoGroup
General --> BuyMax
General --> ZOrder
General --> SliderScroll
General --> NotifLog
General --> DisconnectedHL
General --> Screenshot
General --> FocusMute
General --> Controller
Visuals --> WireColors
Visuals --> ExtraGlow
Visuals --> UIOpacity
Visuals --> GroupColors
Visuals --> GroupPatterns
Cheats --> NodeLimit
Cheats --> UpgradeMultiplier
Cheats --> CheatPanel
Debug --> ResetSettings
Debug --> BootScreen
Debug --> DebugMode
Debug --> DebugInfo

subgraph subGraph4 ["Debug Features"]
    ResetSettings
    BootScreen
    DebugMode
    DebugInfo
end

subgraph subGraph3 ["Gameplay Features"]
    NodeLimit
    UpgradeMultiplier
    CheatPanel
end

subgraph subGraph2 ["Visual Features"]
    WireColors
    ExtraGlow
    UIOpacity
    GroupColors
    GroupPatterns
end

subgraph subGraph1 ["General Features"]
    WireDrop
    SixInput
    CommandPalette
    WireClear
    SelectAll
    GotoGroup
    BuyMax
    ZOrder
    SliderScroll
    NotifLog
    DisconnectedHL
    Screenshot
    FocusMute
    Controller
end

subgraph subGraph0 ["Feature Categories"]
    General
    Visuals
    Cheats
    Debug
end

Sources: mod_main.gd L462-L688


The following table maps all features to their configuration keys, implementation classes, and default states:

Feature NameConfig Key(s)DefaultManager/ImplementationRestart Required
Wire Drop Node Menuwire_drop_menu_enabledtruePaletteControllerNo
6-Input Containerssix_input_containersfalseScript extension: window_inventory.gdYes
Command Palettecommand_palette_enabledtruePaletteControllerNo
Right-click Wire Clearright_click_clear_enabledtrueWireClearHandlerNo
Ctrl+A Select Allselect_all_enabledtrueGlobals.select_all_enabledNo
Go To Group Buttongoto_group_enabledtrueGotoGroupManager + GotoGroupPanelNo
Buy Max Buttonbuy_max_enabledtrueBuyMaxManagerNo
Upgrade Multiplierupgrade_multiplier10Globals.custom_upgrade_multiplierNo
Group Z-Order Fixz_order_fix_enabledtrueNodeGroupZOrderFixNo
Disable Slider Scrolldisable_slider_scrollfalseInput blocking in mod_main._input()No
Toast History Panelnotification_log_enabledtrueNotificationLogPanelNo
Highlight Disconnectedhighlight_disconnected_enabledtrueDisconnectedNodeHighlighterNo
Disconnected Stylehighlight_disconnected_style"pulse"DisconnectedNodeHighlighterNo
Disconnected Intensityhighlight_disconnected_intensity0.5DisconnectedNodeHighlighterNo
Screenshot Qualityscreenshot_quality2 (High)ScreenshotManagerNo
Screenshot Folderscreenshot_folder"user://screenshots"ScreenshotManagerNo
Screenshot Watermarkscreenshot_watermarktrueScreenshotManagerNo
Screenshot Delayscreenshot_capture_delay0.1ScreenshotManagerNo
Mute on Focus Lossmute_on_focus_lossfalseFocusHandlerNo
Background Volumebackground_volume20 (%)FocusHandlerNo
Disable Controller Inputdisable_controller_inputfalseInput blocking in mod_main._input()No
Custom Wire Colorscustom_wire_colorstrueWireColorOverridesNo
Wire Color: [type]wire_color_[type]variesWireColorOverridesNo
Extra Glowextra_glowfalseEnvironment modificationNo
Glow Intensityglow_intensity0.8Environment.glow_intensityNo
Glow Strengthglow_strength1.0Environment.glow_strengthNo
Glow Bloomglow_bloom0.0Environment.glow_bloomNo
Glow Sensitivityglow_sensitivity0.5Environment.glow_hdr_thresholdNo
UI Opacityui_opacity100 (%)HUD modulationNo
Node Limitnode_limit400Globals.custom_node_limitNo
Custom Boot Screencustom_boot_screentruePatcher.patch_boot_screen()Yes
Debug Modedebug_modefalseLogging verbosityNo

Sources: mod_main.gd L88-L95

mod_main.gd L462-L688


The following diagram shows how features are initialized and when they become available:

sequenceDiagram
  participant _init()
  participant _ready()
  participant _setup_for_main()
  participant ConfigManager
  participant Utility Managers
  participant SettingsUI

  _init()->>ConfigManager: "Create ConfigManager"
  _init()->>Utility Managers: "Create early managers
  _ready()->>ConfigManager: (Screenshot, Palette, WireClear, Focus)"
  _ready()->>_ready(): "Load user config from disk"
  _ready()->>_ready(): "Apply node_limit to Globals"
  _ready()->>_ready(): "Apply wire color overrides"
  _setup_for_main()->>Utility Managers: "Inject THE BIN patch"
  _setup_for_main()->>SettingsUI: "Create DisconnectedNodeHighlighter"
  _setup_for_main()->>SettingsUI: "Create SettingsUI"
  _setup_for_main()->>Utility Managers: "_build_settings_menu()"
  _setup_for_main()->>ConfigManager: "Initialize remaining managers
  note over _setup_for_main(),ConfigManager: "Features now available to user"

Sources: mod_main.gd L72-L114

mod_main.gd L115-L163

mod_main.gd L278-L340


flowchart TD

ConfigMgr["ConfigManager<br>get_value() / set_value()"]
ConfigFile["user://tajs_mod_config.json"]
SettingsUI["SettingsUI<br>4 tabs with toggles/sliders"]
CommandPalette["PaletteController<br>60+ commands"]
WireColors["WireColorOverrides<br>50+ wire types"]
ExtraGlow["Environment.glow_*<br>4 parameters"]
UIOpacity["HUD.modulate"]
GroupVisuals["17 colors + 11 patterns<br>window_group.gd extension"]
WireDrop["Wire Drop Menu<br>palette_controller"]
WireClear["WireClearHandler<br>right-click detection"]
SelectAll["Globals.select_all_enabled<br>schematic_container.gd"]
Screenshot["ScreenshotManager<br>tiled capture"]
FocusMute["FocusHandler<br>AudioServer.set_bus_volume_db()"]
GotoGroup["GotoGroupManager + Panel<br>navigation popup"]
BuyMax["BuyMaxManager<br>4 purchase strategies"]
NotifLog["NotificationLogPanel<br>toast history"]
DisconnectedHL["DisconnectedNodeHighlighter<br>2 visual styles"]
StickyNotes["StickyNoteManager<br>editable text nodes"]
ZOrder["NodeGroupZOrderFix<br>z_index management"]
NodeLimit["Globals.custom_node_limit<br>-1 = unlimited"]
UpgradeMult["Globals.custom_upgrade_multiplier<br>Ctrl modifier"]
Cheats["CheatManager<br>currency manipulation"]

ConfigMgr --> SettingsUI
ConfigMgr --> CommandPalette
ConfigMgr --> WireColors
ConfigMgr --> ExtraGlow
ConfigMgr --> UIOpacity
ConfigMgr --> GroupVisuals
ConfigMgr --> WireDrop
ConfigMgr --> WireClear
ConfigMgr --> SelectAll
ConfigMgr --> Screenshot
ConfigMgr --> FocusMute
ConfigMgr --> GotoGroup
ConfigMgr --> BuyMax
ConfigMgr --> NotifLog
ConfigMgr --> DisconnectedHL
ConfigMgr --> StickyNotes
ConfigMgr --> ZOrder
ConfigMgr --> NodeLimit
ConfigMgr --> UpgradeMult
SettingsUI --> WireColors
SettingsUI --> ExtraGlow
SettingsUI --> Screenshot
SettingsUI --> FocusMute
CommandPalette --> WireDrop
CommandPalette --> Screenshot
CommandPalette --> NodeLimit
CommandPalette --> ExtraGlow

subgraph subGraph5 ["Gameplay Features"]
    NodeLimit
    UpgradeMult
    Cheats
end

subgraph subGraph4 ["UI Enhancements"]
    GotoGroup
    BuyMax
    NotifLog
    DisconnectedHL
    StickyNotes
    ZOrder
end

subgraph subGraph3 ["QoL Features"]
    WireDrop
    WireClear
    SelectAll
    Screenshot
    FocusMute
end

subgraph subGraph2 ["Visual Features"]
    WireColors
    ExtraGlow
    UIOpacity
    GroupVisuals
end

subgraph subGraph1 ["UI Layer"]
    SettingsUI
    CommandPalette
end

subgraph subGraph0 ["Configuration Layer"]
    ConfigMgr
    ConfigFile
    ConfigFile --> ConfigMgr
end

Sources: mod_main.gd L33-L48

mod_main.gd L278-L340


Purpose: Opens a searchable menu when dropping a wire onto empty canvas, showing only nodes compatible with the wire’s resource type.

Configuration:

  • Key: wire_drop_menu_enabled
  • Default: true
  • UI Toggle: “Wire Drop Node Menu”

Implementation:

  • Managed by: PaletteController
  • Mode trigger: Detecting wire drop events in palette_overlay.gd
  • Filtering: Uses palette_controller.get_compatible_schematic_ids(resource_type)

Sources: mod_main.gd L467-L470

extensions/scripts/palette/palette_controller.gd


Purpose: Increases input slot count on Container windows from 5 to 6.

Configuration:

  • Key: six_input_containers
  • Default: false
  • UI Toggle: “6-Input Containers ⟳”
  • Restart Required: Yes

Implementation:

  • Script extension: extensions/scenes/windows/window_inventory.gd
  • Modifies: _ready() to check Globals.six_input_containers_enabled
  • Changes container initialization to allow 6 inputs

Sources: mod_main.gd L473-L477

extensions/scenes/windows/window_inventory.gd


Purpose: Provides keyboard-driven access to 60+ commands via Middle Mouse Button or Spacebar.

Configuration:

  • Key: command_palette_enabled
  • Default: true
  • UI Toggle: “Command Palette (MMB)”

Implementation:

  • Controller: PaletteController
  • Overlay UI: palette_overlay.gd (fuzzy search, mode handling)
  • Command registry: default_commands.gd
  • See Command Palette System for complete documentation

Sources: mod_main.gd L480-L484


Purpose: Right-clicking an output connector disconnects all wires from that connector.

Configuration:

  • Key: right_click_clear_enabled
  • Default: true
  • UI Toggle: “Right-click Wire Clear”

Implementation:

  • Manager: WireClearHandler
  • Monitors: _input() events for MOUSE_BUTTON_RIGHT on nodes in connector_button group
  • Action: Removes all connectors attached to the clicked output

Sources: mod_main.gd L487-L491

extensions/scripts/wire_drop/wire_clear_handler.gd


Purpose: Enables Ctrl+A keyboard shortcut to select all nodes on the schematic board.

Configuration:

  • Key: select_all_enabled
  • Default: true
  • UI Toggle: “Ctrl+A Select All”

Implementation:

  • Global flag: Globals.select_all_enabled
  • Extension point: schematic_container.gd._unhandled_key_input()
  • Action: Calls select_all_windows() when KEY_A pressed with KEY_MASK_CTRL

Sources: mod_main.gd L494-L497

extensions/scripts/schematic_container.gd


Purpose: Bottom-left button that opens a popup to quickly navigate the camera to any Node Group on the board.

Configuration:

  • Key: goto_group_enabled
  • Default: true
  • UI Toggle: “Go To Group Button”

Implementation:

  • Manager: GotoGroupManager (retrieves list of groups)
  • Panel: GotoGroupPanel (displays searchable list, handles clicks)
  • Location: HUD Overlay at bottom-left, positioned above the bottom toolbar

Sources: mod_main.gd L499-L503

mod_main.gd L342-L386

extensions/scripts/utilities/goto_group_manager.gd

extensions/scripts/utilities/goto_group_panel.gd


Purpose: Adds a button to upgrade tabs that purchases the maximum affordable upgrade levels using one of four strategies.

Configuration:

  • Key: buy_max_enabled
  • Default: true
  • UI Toggle: “Buy Max Button”

Implementation:

  • Manager: BuyMaxManager
  • Injection: Finds upgrade tabs and adds button dynamically
  • Strategies: Round Robin, Cheapest First, Expensive First, Top to Bottom
  • See Buy Max Manager for detailed strategy documentation

Sources: mod_main.gd L505-L509

mod_main.gd L404-L420

extensions/scripts/utilities/buy_max_manager.gd


Purpose: Holding Ctrl while clicking upgrade buttons purchases multiple levels at once.

Configuration:

  • Key: upgrade_multiplier
  • Default: 10
  • UI Control: Slider (2-100)
  • Range: 2 to 100 levels

Implementation:

  • Global variable: Globals.custom_upgrade_multiplier
  • Manager: UpgradeManager (detects Ctrl key state, modifies buy amount)
  • Extension point: Hooks into upgrade button click handlers

Sources: mod_main.gd L512-L517


Purpose: Ensures that Node Groups fully contained within other Node Groups always render on top.

Configuration:

  • Key: z_order_fix_enabled
  • Default: true
  • UI Toggle: “Group Z-Order Fix”

Implementation:

  • Manager: NodeGroupZOrderFix
  • Detection: Monitors node_added signal to detect group containment
  • Action: Adjusts z_index property to maintain proper layering

Sources: mod_main.gd L520-L524

mod_main.gd L389-L401

extensions/scripts/utilities/node_group_z_order_fix.gd


Purpose: Prevents mouse wheel from accidentally changing slider values when scrolling.

Configuration:

  • Key: disable_slider_scroll
  • Default: false
  • UI Toggle: “Disable Slider Scroll”

Implementation:

  • Input handler: mod_main._input()
  • Detection: Checks if mouse is over any HSlider or VSlider using _get_hovered_slider()
  • Action: Calls get_viewport().set_input_as_handled() to consume scroll events

Sources: mod_main.gd L527-L529

mod_main.gd L199-L207

mod_main.gd L229-L258


Purpose: Bell icon button in HUD that displays a scrollable log of all notification toasts.

Configuration:

  • Key: notification_log_enabled
  • Default: true
  • UI Toggle: “Toast History Panel”

Implementation:

  • Panel: NotificationLogPanel
  • Hook: Connects to Signals.notify to capture all toast messages
  • Display: Shows timestamp, icon, and message text for each notification

Sources: mod_main.gd L532-L535

extensions/scripts/ui/notification_log_panel.gd


Purpose: Visually highlights nodes that are not connected to the main graph for their connection type (power, data, etc.).

Configuration:

  • Keys: * highlight_disconnected_enabled (default: true) * highlight_disconnected_style (default: "pulse", options: "pulse" or "outline") * highlight_disconnected_intensity (default: 0.5, range: 0.0-1.0)
  • UI Toggle: “Highlight Disconnected Nodes” with sub-settings

Implementation:

  • Manager: DisconnectedNodeHighlighter
  • Detection: Performs graph traversal from source nodes to identify disconnected components
  • Styles: * Pulse Tint: Animates self_modulate with a pulsing color overlay * Outline Tint: Adds a colored outline shader effect
  • Performance: Recomputes on node add/remove or connection change

Sources: mod_main.gd L691-L753

mod_main.gd L425-L438

extensions/scripts/utilities/disconnected_node_highlighter.gd


Purpose: Captures high-quality screenshots with configurable resolution, watermark, and tiled rendering for large images.

Configuration:

  • Keys: * screenshot_quality (default: 2, options: 0=Low, 1=Medium, 2=High, 3=Original) * screenshot_folder (default: "user://screenshots") * screenshot_watermark (default: true) * screenshot_capture_delay (default: 0.1 seconds)
  • UI Section: Multiple buttons and sliders in General tab

Implementation:

  • Manager: ScreenshotManager
  • Method: capture_screenshot_with_tiles(quality_preset) for large boards
  • Tiling: Divides visible area into tiles, captures each, stitches together
  • Watermark: Adds mod version text to bottom-right corner
  • See Screenshot Manager for complete technical details

Sources: mod_main.gd L92-L96

mod_main.gd L554

extensions/scripts/utilities/screenshot_manager.gd


Purpose: Automatically reduces audio volume when the game window loses focus.

Configuration:

  • Keys: * mute_on_focus_loss (default: false) * background_volume (default: 20 percent)
  • UI Controls: Toggle + slider in General tab

Implementation:

  • Manager: FocusHandler
  • Detection: Listens to get_viewport().focus_exited and focus_entered signals
  • Action: Calls AudioServer.set_bus_volume_db("Master", db_value) to adjust volume
  • Restoration: Returns to 0 dB when focus regained

Sources: mod_main.gd L557-L563

extensions/scripts/utilities/focus_handler.gd


Purpose: Completely blocks all controller/joypad input events, useful when a controller is connected but intended for another application.

Configuration:

  • Key: disable_controller_input
  • Default: false
  • UI Toggle: “Disable Controller Input”

Implementation:

  • Input handler: mod_main._input()
  • Detection: Checks if event is InputEventJoypadMotion or InputEventJoypadButton
  • Action: Calls get_viewport().set_input_as_handled() to consume events before game processes them

Sources: mod_main.gd L566-L568

mod_main.gd L193-L197


Purpose: Real-time label in General tab showing current node count vs. node limit with visual warning.

Configuration:

  • Not toggleable (always visible when settings panel open)
  • Display format: "Nodes: X / Y" or "Nodes: X / ∞"

Implementation:

  • Label: _node_info_label in General tab
  • Update method: _update_node_label() called in _process()
  • Source: Reads Globals.node_groups.size() and Globals.custom_node_limit
  • Warning: Changes color when near limit

Sources: mod_main.gd L541-L548

mod_main.gd L1076-L1083


Purpose: Adjustable limit for maximum nodes on the board, from 50 to 2000+, or unlimited (∞).

Configuration:

  • Key: node_limit
  • Default: 400
  • Range: 50 to 2050 (2050 represents ∞, stored as -1)
  • UI Control: Slider with label showing current value

Implementation:

  • Global variable: Globals.custom_node_limit
  • Slider: _node_limit_slider with value mapping (2050 → -1)
  • Enforcement: Game code checks Globals.custom_node_limit before spawning nodes
  • Public method: set_node_limit(value) for command palette access

Sources: mod_main.gd L985-L1030

mod_main.gd L1033-L1039

mod_main.gd L153-L155


Purpose: Override default wire colors for all 50+ resource types with custom RGB values.

Configuration:

  • Master key: custom_wire_colors (default: true)
  • Individual keys: wire_color_[resource_id] (hex color strings)
  • UI: Collapsible category sections with color pickers and reset buttons

Implementation:

  • Manager: WireColorOverrides
  • Method: apply_overrides() modifies Data.connectors[resource_id].color
  • Refresh: _refresh_all_connectors() updates all visible wires and connector buttons
  • Categories: 8 groups (Speeds, Resources, Hacking, Data Types, AI/Neural, Boosts, Other)
  • See Visual Enhancements for complete color list

Sources: mod_main.gd L756-L810

mod_main.gd L813-L846

mod_main.gd L849-L910

mod_main.gd L913-L950

extensions/scripts/utilities/wire_color_overrides.gd


Purpose: Enhanced bloom/glow effects on the game board with four adjustable parameters.

Configuration:

  • Keys: * extra_glow (default: false, master toggle) * glow_intensity (default: 0.8, range: 0.0-5.0) * glow_strength (default: 1.0, range: 0.5-2.0) * glow_bloom (default: 0.0, range: 0.0-0.5) * glow_sensitivity (default: 0.5, range: 0.0-1.0)
  • UI: Toggle with collapsible sub-settings (4 sliders)

Implementation:

  • Target: Main/WorldEnvironment node’s Environment resource
  • Properties modified: * environment.glow_enabled * environment.glow_intensity * environment.glow_strength * environment.glow_bloom * environment.glow_hdr_threshold (sensitivity)
  • Method: _apply_extra_glow(enabled) finds WorldEnvironment and modifies properties

Sources: mod_main.gd L594-L618

mod_main.gd L1050-L1067


Purpose: Adjusts transparency of HUD elements for reduced visual clutter.

Configuration:

  • Key: ui_opacity
  • Default: 100 (percent)
  • Range: 50% to 100%
  • UI Control: Slider

Implementation:

  • Target: Main/HUD node’s modulate property
  • Method: _apply_ui_opacity(value) sets hud.modulate.a = value / 100.0
  • Scope: Affects all HUD elements including menus, panels, and overlays

Sources: mod_main.gd L620-L623

mod_main.gd L1069-L1074


Purpose: Extensive visual customization for Node Group windows.

Configuration:

  • Colors: 17 options including dark tones and vibrant highlights
  • Patterns: 11 types (solid, stripes, grid, diagonal, crosshatch, dots, waves, etc.)
  • Persistence: Saved per-group in game’s save data

Implementation:

  • Extension: extensions/scenes/windows/window_group.gd
  • UI: Pattern picker panel and color picker panel
  • Storage: Utilizes window_data.pattern_id and window_data.color_index
  • Rendering: Pattern shaders applied to group background

Available Colors:

0: Gray, 1: Red, 2: Orange, 3: Yellow, 4: Green, 5: Cyan,
6: Blue, 7: Purple, 8: Pink, 9: Dark Red, 10: Dark Green,
11: Dark Blue, 12: Dark Purple, 13: Bright Red, 14: Bright Green,
15: Bright Blue, 16: Bright Purple

Available Patterns:

0: Solid, 1: Stripes, 2: Grid, 3: Diagonal, 4: Crosshatch,
5: Dots, 6: Waves, 7: Checkerboard, 8: Hexagons, 9: Triangles,
10: Circles

Sources: extensions/scenes/windows/window_group.gd


Purpose: Buttons to directly modify currency values (Money, Research, Tokens).

Configuration:

  • No config keys (cheats are not persistent)
  • UI: Dedicated “Cheats” tab with multiple buttons

Implementation:

  • Manager: CheatManager
  • Method: build_cheats_tab(parent_container) adds buttons
  • Actions: Modifies Globals.currencies dictionary directly
  • Increments/decrements: ±10% of current value, or ±1000/±100 for small values

Available Cheats:

  • Add/Remove Money
  • Add/Remove Research
  • Add/Remove Tokens
  • Additional cheats added in v0.0.19 (see CHANGELOG)

Sources: mod_main.gd L626-L628

extensions/scripts/utilities/cheat_manager.gd


Purpose: Button that deletes user config and reloads all defaults.

Configuration:

  • Not a persistent setting (one-time action)
  • UI: Button in Debug tab

Implementation:

  • Method: config.reset_to_defaults()
  • Action: Deletes user://tajs_mod_config.json and recreates with DEFAULT_CONFIG
  • Side effects: Immediately applies default values to all systems
  • Notification: Shows toast “Settings reset!”

Sources: mod_main.gd L633-L645


Purpose: Replaces default boot screen with custom version showing mod information.

Configuration:

  • Key: custom_boot_screen
  • Default: true
  • UI Toggle: “Custom Boot Screen ⟳”
  • Restart Required: Yes

Implementation:

  • Patcher: Patcher.patch_boot_screen(boot_node, version, icon_path)
  • Called in: mod_main._process() when Boot node exists
  • Modification: Changes boot screen logo and version text

Sources: mod_main.gd L648-L652

mod_main.gd L187-L190

extensions/scripts/utilities/patcher.gd


Purpose: Enables verbose logging to console and in-UI debug log panel.

Configuration:

  • Key: debug_mode
  • Default: false
  • UI Toggle: “Enable Debug Logging”

Implementation:

  • Flag: _debug_mode in mod_main
  • Propagation: Passed to managers that support debug output (e.g., StickyNoteManager)
  • Log panel: _debug_log_label shows last 20 log entries with timestamps
  • Method: _add_debug_log(message, force) handles log routing

Sources: mod_main.gd L655-L667

mod_main.gd L968-L982


Purpose: Button that logs current game state values to debug panel.

Configuration:

  • Not a persistent setting (one-time action)
  • UI: Button in Debug tab

Implementation:

  • Method: Calls _add_debug_log() multiple times
  • Logged values: * Globals.currencies.money * Globals.currencies.research * Globals.currencies.token * Globals.custom_node_limit * Globals.max_money * Globals.max_research

Sources: mod_main.gd L670-L678


flowchart TD

DefaultConfig["DEFAULT_CONFIG<br>Factory defaults"]
UserConfig["user://tajs_mod_config.json<br>User overrides"]
ConfigManager["ConfigManager<br>config dictionary"]
GlobalsVars["Globals variables<br>select_all_enabled<br>custom_node_limit<br>custom_upgrade_multiplier"]
ManagerState["Manager instances<br>enabled flags"]
ToggleButtons["CheckButton widgets<br>_settings_toggles dict"]
Sliders["HSlider widgets<br>value_changed signals"]
OptionButtons["OptionButton widgets<br>item_selected signals"]
FeatureManagers["Feature Managers<br>set_enabled()<br>apply_settings()"]
ScriptExtensions["Script Extensions<br>Globals.* checks"]

DefaultConfig --> ConfigManager
UserConfig --> ConfigManager
ConfigManager --> ToggleButtons
ConfigManager --> Sliders
ConfigManager --> OptionButtons
ToggleButtons --> ConfigManager
Sliders --> ConfigManager
OptionButtons --> ConfigManager
GlobalsVars --> ScriptExtensions
ManagerState --> FeatureManagers

subgraph subGraph3 ["Feature Instances"]
    FeatureManagers
    ScriptExtensions
end

subgraph subGraph2 ["UI Controls"]
    ToggleButtons
    Sliders
    OptionButtons
end

subgraph subGraph1 ["State Storage"]
    ConfigManager
    GlobalsVars
    ManagerState
    ConfigManager --> GlobalsVars
    ConfigManager --> ManagerState
end

subgraph subGraph0 ["State Sources"]
    DefaultConfig
    UserConfig
end

Sources: mod_main.gd L61-L62

mod_main.gd L462-L688

extensions/scripts/utilities/config_manager.gd


Two settings require a game restart to take effect due to their initialization timing:

SettingConfig KeyReason
6-Input Containerssix_input_containersContainer input count is set during WindowInventory._ready(), which only runs once per window instance. Existing windows cannot be modified after creation.
Custom Boot Screencustom_boot_screenBoot screen is shown during game startup before mod’s _ready(). The setting controls whether Patcher.patch_boot_screen() is called, which must happen during the Boot node’s lifecycle.

Detection:

  • Tracked in: _restart_original_values dictionary
  • Check method: _check_restart_required() compares current vs. original values
  • Banner: ui.show_restart_banner() displays notification when mismatch detected

Sources: mod_main.gd L62

mod_main.gd L473-L477

mod_main.gd L648-L652

mod_main.gd L1111-L1121


Features can be toggled from three sources:

  1. Settings UI: Direct toggle/slider interaction
  2. Command Palette: Commands like "Toggle Extra Glow", "Set Node Limit: 500"
  3. Config File Edit: Manual JSON modification (advanced)

All three paths converge through ConfigManager.set_value(), ensuring consistency:

flowchart TD

User["User Action"]
UIToggle["Settings UI Toggle<br>CheckButton.toggled signal"]
UISlider["Settings UI Slider<br>HSlider.value_changed signal"]
Command["Command Palette<br>command.execute()"]
FileEdit["Manual Config Edit<br>config.json modified"]
ConfigSet["ConfigManager.set_value()<br>Write-through to disk"]
ConfigGet["ConfigManager.get_value()<br>Read from memory"]
ApplyManager["Manager.set_enabled()<br>Manager.apply_settings()"]
ApplyGlobals["Globals.variable = value"]
ApplyUI["UI.update_toggle_state()"]
ApplyVisual["_apply_extra_glow()<br>_apply_ui_opacity()"]

User --> UIToggle
User --> UISlider
User --> Command
User --> FileEdit
UIToggle --> ConfigSet
UISlider --> ConfigSet
Command --> ConfigSet
FileEdit --> ConfigGet
ConfigSet --> ApplyManager
ConfigSet --> ApplyGlobals
ConfigSet --> ApplyUI
ConfigSet --> ApplyVisual

subgraph subGraph2 ["State Application"]
    ApplyManager
    ApplyGlobals
    ApplyUI
    ApplyVisual
end

subgraph subGraph1 ["Synchronization Layer"]
    ConfigSet
    ConfigGet
end

subgraph subGraph0 ["Input Paths"]
    UIToggle
    UISlider
    Command
    FileEdit
end

Sources: mod_main.gd L462-L688

extensions/scripts/utilities/config_manager.gd

extensions/scripts/palette/default_commands.gd