Skip to main content
Frosty Toolsuite’s plugin system provides a flexible architecture for extending functionality without modifying core code. Plugins can add support for new asset types, custom editors, menu items, and more.

Plugin Architecture

Plugins are .NET assemblies loaded dynamically at runtime. Plugin Discovery:
From PluginManager.cs:122.

Plugin Lifecycle

Plugins are loaded in two phases:
1

Startup Phase

Loaded before game profile selection:
  • Profile definitions
  • Global type editors
  • Type overrides
  • Startup actions
2

Initialize Phase

Loaded after profile is selected:
  • Asset definitions (game-specific)
  • Custom handlers
  • Menu extensions
  • Tab extensions
  • Options pages
Loading Process:
From PluginManager.cs:151.

Plugin Attributes

Plugins use assembly-level attributes to declare functionality:

Core Attributes

These attributes provide plugin information in the UI.

Extension Types

Asset Definitions

Define how asset types are displayed and edited:
From PluginManager.cs:452.
Asset definitions registered for a base type automatically apply to all derived types via the TypeLibrary.

Custom Handlers

Provide specialized editing for specific asset types:
Add custom menu items to the editor:
From PluginManager.cs:485.

Tab Extensions

Add custom tabs to the main editor window:
From PluginManager.cs:524.

Data Explorer Context Menu

Add right-click menu items in the asset browser:
From PluginManager.cs:530.

Startup Actions

Execute code during application startup:
From PluginManager.cs:445.

Execution Actions (Mod Manager)

Execute during mod application:
From PluginManager.cs:536.

Type System Integration

Global Type Editors

Custom editors for specific field types:
From PluginManager.cs:441.

Type Overrides

Replace type handling entirely:
From PluginManager.cs:437.

Shader Registration

Register custom shaders for rendering:
Shader bytecode must be embedded as manifest resources.

Custom Asset Managers

Handle non-standard asset storage:
From PluginManager.cs:576 and AssetManager.cs:430.

Profile Registration

Add support for new games:
From PluginManager.cs:433.

Plugin Example: Texture Plugin

Complete example of a texture handling plugin:

Plugin Best Practices

Recommendations:
  1. Use appropriate load phases - Startup for core functionality, Initialize for game-specific
  2. Validate profile compatibility - Use PluginValidForProfile attributes
  3. Handle errors gracefully - Catch exceptions and log to ILogger
  4. Mark dependencies - Use RegisterThirdPartyDll for libraries
  5. Follow naming conventions - Clear, descriptive class and attribute names
  6. Document public APIs - Add XML comments for plugin developers
  7. Test across games - Verify behavior with different profiles
  8. Version appropriately - Use semantic versioning

Plugin Development Workflow

1

Create Project

Create a .NET Framework 4.6.1+ class library project
2

Reference Frosty

Add references to FrostySdk.dll and FrostyCore.dll
3

Implement Extensions

Add classes with appropriate attributes
4

Build Plugin

Compile to DLL
5

Deploy

Copy DLL to Plugins folder in Frosty installation
6

Test

Launch Frosty Editor/Mod Manager and verify plugin loads

Plugin Debugging

Attach Visual Studio debugger to Frosty process:
Set breakpoints and use Debug → Attach to Process → FrostyEditor.exe

Common Plugin Patterns

Next Steps

Architecture

Understand the overall system architecture

Asset System

Learn about EBX, RES, and chunk asset management