Changelog
New updates and improvements
Update 5
Bug fixes, improvements, and some new cool stuff
Core
Replaced the
[SparkInspector]attribute with aSparkMonoBehaviourbase class to eliminate conflicts with third-party inspector tools (Odin Inspector, NaughtyAttributes, etc.).Moved the nCalc library from the Combat plugin to Spark Core so it can be used by any plugin.
Improved Installation Hub detection of Asset Store download packages for users with non-default download paths.
Added copy/paste buttons to every list element header across all Spark custom editors.
New or duplicated database entries are now reliably auto-selected after creation.
Custom extension data files are now properly deep-cloned when duplicating a database entry.
Fixed oversized cursor on macOS/Retina displays.
Requirements
Fixed
NullReferenceExceptionwhen a requirement group's checks list was null.Empty requirement groups now return correct results for Or, Xor, Nand, and Threshold logic modes instead of always returning Success.
CheckRequirementsDetailed()now evaluates all groups instead of stopping at the first failure.CheckRequirementGroupDetailed()now applies the same Warn handling logic asCheckRequirementGroup(), fixing inconsistent results between the two methods.Custom
failureMessageno longer overwrites the specific failure reason from a requirement type. Both messages are now combined.Rule value requirements now support checking against the target entity instead of always checking the source.
Crafting Plugin
Added a crafting stations system with interactable world objects, per-station recipe lists, speed multipliers, and category filters.
Recipes now support a requirement list. Recipes with unmet requirements are hidden in the crafting UI.
Items Plugin
Item tooltips now show the stat difference for quick comparison.
Fixed a bug with equipping items with right click when the character sheet had multiple of the same slots.
Fixed right-clicking armors with unmet requirements.
Fixed hair disappearing after unequipping items and loading a new scene.
Fixed stat bar text not instantly updating when equipping or unequipping items.
Fixed weapon item type coordinates not drawing correctly in the inspector.
Combat Plugin
Ability effect instances now support a separate caster requirement list, allowing validation on both caster and target independently.
Ability tooltips now correctly resolve and display Caster effect mappings.
Added cost requirements to the list of ability fail events.
Fixed cooldown never starting for abilities with the Incantation activation type.
Fixed multiple Hit animation triggers queuing up when getting hit rapidly.
Duplicated
ObjectCombatEntityGameObjects no longer share trigger data with the original.Fixed targeting units through UI elements with left/right click.
Fixed TargetUI always showing when the player reference is null.
Quests
The NPC interaction UI now automatically re-opens after quest turn-in or accept if the NPC still has available quests.
Fixed quest tracker UI not initializing tracked quests after a scene load.
Currency
Added proper ICommandHandler<T> implementations for all 7 currency commands so they work with network command execution.
Update 4
Major update & new plugins
Core
Added the Quick Game Loader tool. Accessible from the Spark menu, the toolbar, or a keyboard shortcut. Lets you select a save slot and target scene, then launches Play Mode directly into that scene. You can also pick a precise position in the scene so the character spawns exactly at that location.
Added a search bar in the Spark Editor left panel to filter and search installed plugins by name.
Added a "Create New" button to the database entry selector in the Spark Editor. Opens the correct plugin tab and creates a new entry of the selected type without leaving the current context.
In Game UI now uses a new system that instantiates it at runtime, and allows you to clone the default UI, and modify it safely, so it is not overridden when you update.
Added a Display Name to Spark entities. Can be set in the Inspector or updated at runtime.
New core plugin: Requirements
The Requirements plugin has been added to Spark Core. It provides a universal condition evaluation system used across all Spark plugins to lock behavior based on the current game state.
Requirements are organized into Requirement Group entries. Each group contains one or more individual requirements and evaluates them using a configurable logic type:
And: All requirements in the group must pass.
Or: At least one requirement must pass.
Nand: Passes if at least one requirement fails, meaning not all can be true at once.
Nor: Passes only if all requirements fail.
Xor: Exactly one requirement must pass.
Threshold: A configurable minimum number of requirements must pass.
Multiple groups are then evaluated with OR logic between them, so any single passing group satisfies the overall check.
Each individual requirement also has two additional options: an Invert toggle that flips the result (the requirement must NOT be met to pass), and a Failure Handling mode that controls whether a failing requirement blocks the action entirely or simply raises a warning while still allowing it.
Custom requirement types can be created by extending RequirementTypeBase.
Currently active in: ability execution, individual ability effects, interactable objects, loot table drop groups, quest accept conditions, and NPC dialogue interactions.
Built-in Requirement Types (19 total):
Stats (Combat Plugin):
Value Stat: checks if a value stat on the source satisfies a comparison condition
Resource Stat: checks if a resource stat on the source satisfies a comparison condition
Status (Combat Plugin):
Has Status: checks if the source or target entity has a specific status effect currently active
Items (Items Plugin):
Has Item in Inventory: checks if the entity holds a specific item, optionally with a quantity comparison
Has Item Equipped: checks if a specific item is currently equipped
Has Equipment Slot Equipped: checks if a specific equipment slot has any item equipped
Has Weapon Type Equipped: checks if a specific weapon type is equipped in any slot
Has Empty Inventory Slot: checks if at least one inventory slot is unoccupied
Currency (Currency Plugin):
Currency Amount: checks if the entity's wallet balance for a currency satisfies a comparison condition
Crafting (Crafting Plugin):
Has Crafting Recipe: checks if the entity has a specific crafting recipe unlocked
Progression (Progression Plugin):
Progression Level: checks if the entity's level in a specific progression track satisfies a comparison condition
Quests (Quests Plugin):
Quest Status: checks if a quest is in a specific state (Not Started, Active, Completed)
Classes (Classes Plugin):
Has Class: checks if the player has a specific class as main or secondary
Has Secondary Class: checks if the player has a specific class as a secondary class
Main Class: checks if the player's main class is a specific class
Rules (Rules Plugin):
Rule Value: checks if a boolean Rule on the source entity matches the required value
Playables (Playables Plugin):
Distance to Coordinates: checks if the source entity is within a configurable distance of specific world coordinates
Screen Texts Plugin
Added new screen anchor positions to Screen Text Entries:
Center,Top,Bottom,Left,Right,TopLeft,TopRight,BottomLeft,BottomRight.Added X and Y pixel offset fields to Screen Text Entries for fine-tuning placement relative to the chosen anchor.
Added new Spark event types supported by Screen Text Entries.
Fixed screen text entities not following their target when animation was disabled.
Interactables Plugin
Added a highlight object field to interactable objects. The assigned object activates when the player is in range and all requirements are met, and deactivates otherwise.
Added Requirement support to interactable objects. Interactions can be locked behind requirement conditions. An optional flag controls whether the indicator still shows when requirements are not met.
Crafting Plugin
Added a trigger list to Crafting Recipe Entries. Configured triggers fire automatically when the recipe is crafted successfully.
Save Plugin
Refactored save data so each plugin owns and persists its own data independently. Previously, save data was partially embedded in template-specific files.
Items Plugin
Added Requirement support to Loot Table Entries. Drop groups can be locked behind requirement conditions.
Added separate in-combat and out-of-combat weapon position configurations to weapon data. Each weapon configuration defines an independent body part attachment point and position/rotation coordinates for both combat and non-combat states, with character-specific coordinate overrides for each.
Added a sheath and unsheath system to weapon items, with Animator integration. Weapons define separate sheathed and unsheathed states driven by animator parameters, with full in/out of combat transition support.
Fixed a bug where equipping the same item entry multiple times on the same entity caused stat calculations to produce incorrect results.
Fixed item stats being overridden by stat templates when loading a saved game.
Triggers Plugin
Added 11 new Trigger Types:
Toggle UI Panel: Shows, hides, or toggles a Spark UI panel by ID.
Add Secondary Class: Assigns or removes a secondary class on the player entity via the Classes plugin.
Add Spellbook: Grants or removes a spellbook from the player's active spellbook data via the Spellbooks plugin.
Add Profession: Adds a profession to the player entity via the Professions plugin.
Gain Experience: Awards a configurable amount of experience to the player for a specific progression track.
Gain Currency: Adds or removes a configurable amount of a specific currency from the player's wallet via the Currency plugin.
Add Quest: Adds or abandons a quest for the player via the Quests plugin.
Complete Quest Objective: Completes a specific quest objective, or all objectives, for an active quest on the player.
Learn Crafting Recipe: Unlocks a specific crafting recipe for the player via the Crafting plugin.
Unlearn Crafting Recipe: Removes a previously unlocked crafting recipe from the player via the Crafting plugin.
Roll Loot Table: Rolls a configured loot table and either adds the results directly to a target entity's inventory or drops them at a world position.
Combat Plugin
Ability Types
Added six new Ability Types:
Direct Target: Fires on the caster's current target. Supports range validation, facing angle, line-of-sight, target relationship filtering, and optional auto-attack on use.
Direct Target Projectile: Same as Direct Target but fires physical projectiles. Supports multiple projectiles per ability with independent timing, and body part spawn and impact positioning.
Direct Target AoE: Requires a selected target but applies effects to all entities within a radius of that target. Supports AoE and per-hit VFX, Y-axis filtering, and per-entity line-of-sight validation.
Self: Applies effects directly to the caster with no target required.
Aura: Periodically applies effects to all entities within a radius around the caster over a total duration. Supports tick interval, Y-axis filtering, line-of-sight checks, and a caster-attached aura VFX.
Ground: Opens a circular placement indicator before firing. The player confirms a position or cancels. Effects apply at the confirmed position instantly or after a delay.
Activation Types
Added the Activation Type system. Each Ability Entry has an Activation Type that defines how it is triggered before execution. Three built-in types are provided.
Instant: Fires immediately after validation.
Incantation: The caster must cast for a specific duration before the ability goes off. Supports movement interruption, timed muzzle VFX, and a looping ambient sound.
Channel: Fires immediately but last for a configured duration. Cooldown starts after the channel ends. Supports movement restriction, an animator bool toggled during the channel, and a looping sound.
Abilities
Added Global Cooldown support. Each Ability Entry can start a GCD on use with a configurable duration. Individual abilities can be set to ignore the GCD. Reflected visually on Ability Bar slots.
Added Requirement support to Ability Entries. Requirements are evaluated before execution and displayed in the Ability Tooltip with color-coded pass/fail status.
Added a per-effect proc chance to Ability Entries. Each effect has an independent percentage chance to apply on execution.
Added Requirement support to individual ability effects. Effects can be conditionally applied based on any requirement type.
Added conditional status modifiers to damage and healing effects. Bonus multipliers can be configured to apply only when specific status effects are active on the target, opening up new ability design possibilities.
Added audio support to damage, healing, knockback, and status application effects. Each effect can play a configurable sound on execution.
Added hot reload support for Calculation Formula Entries. Formula changes made during Play Mode are detected automatically, the formula cache is cleared, and subsequent calculations use the updated expression immediately.
Validation
Added an ability validation pipeline. Abilities return a typed result with a failure reason string. Built-in checks cover range, facing, line-of-sight, target relationship, and dead target. Custom failure states are supported and can trigger ScreenText feedback events.
Ability Bar
Support for multiple individual ability bar, each with independent slot counts. Bar states are saved and loaded per entity via the Save plugin.
Targeting
Added Tab Targeting. Cycles through hostile and neutral targets in a configurable cone and range in front of the player, prioritizing enemies. The cycle resets when the target list changes or the current target dies.
Nameplates
Made the Nameplate system fully modular. The nameplate component now accepts any prefab implementing
INameplateUI, removing the dependency on a specific nameplate type.Added a Simple Nameplate built-in nameplate type.
Player
Fixed various issues with in/out of combat state transitions.
Fixed combat state not resetting correctly on death.
Tooltip
Added an ability tooltip system. Renders modular tooltip content from keyword-driven database entries assigned on the Ability Entry. Ability requirements are displayed with color-coded pass/fail status. Custom tooltip providers can be registered at runtime.
Status Effects
Added a status list UI component. Displays active status effects as a dynamic icon list. Supports scene reference, tag search, current-target tracking, or code-based assignment.
UI Plugin
Added a generic tooltip system. Supports icon, title, and description, with optional header-only or description-only display modes. Can be shown or hidden from any script at runtime.
UI panels are now moved to the last sibling position when opened, ensuring they always render on top of other already-open panels.
Added a cursor manager system. Seamlessly swap cursor texture based on what you are hovering. Each cursor option has a configurable priority, and the highest-priority result wins. Falls back to a configurable default cursor when no provider is hit or the pointer is over UI. Cursor options can be registered and unregistered at runtime.
Fixed Escape not closing some UI panels.
Inputs Plugin
Replaced Input Action Reference fields with database input entries. Input Action References could not be serialized correctly inside prefabs, causing references to be lost. The database entry wraps the reference and resolves it at runtime.
NPCs Plugin
Note: This is still the PLACEHOLDER for the future, real NPC plugin that will have to be purchased when it is released.
Added a Threat system to NPC combat. Tracks threat generated by damage and healing from nearby entities.
Added an NPC identifier component. Assigns an NPC Entry to a GameObject, identifying it to quest tracking and other NPC systems. Automatically sets the entity display name to the NPC Entry display name on Start.
Added an NPC spawner. Spawns NPCs within a configurable area using Box, Sphere, or Circle shapes, with surface or volume-based placement. Supports a weighted NPC list, active and total spawn limits, initial burst on Start, interval spawning, and automatic respawn on death with a configurable delay. The spawn area is visualized in the Editor via gizmos.
Added a trigger list to NPC Entries that fires on death.
NPCs now regenerate to full health after exiting combat.
Added right-click loot support. NPC loot interaction can now be triggered via right-click in addition to the interact key, with a configurable maximum distance.
Full Quests integration included for kill and interact objectives.
MMO Character Controller
Added a new WoW-style MMO character controller. Movement supports independent speeds for forward running, strafing, and backpedaling. Q/E keyboard turning, right-mouse-button orbiting, and combined left+right mouse forward movement are all supported. Autorun is toggleable.
Jump height and gravity are configurable. Stationary jumps allow limited mid-air steering; running jumps maintain the launch direction.
The camera orbits with configurable sensitivity, zooms with the scroll wheel within set distance bounds, and avoids geometry clipping by pushing in instantly and pulling out smoothly. The cursor locks while orbiting and restores to its original screen position on release.
Currency Plugin
Added a Currency item type. Items of this type bypass the inventory entirely when obtained and are automatically converted into the matching currency in the entity's wallet. This allows currency rewards from loot tables, quest rewards, or any other item source to flow directly into the wallet without occupying inventory space.
NEW PLUGIN: Quests
The Quests plugin provides a fully modular quest system. Quests are defined as database entries with an assignable category, accept requirements, a list of objectives, and both guaranteed and player-selectable reward sets. The number of rewards a player can choose from the selectable list is configurable per quest.
Quest state (Not Started, Active, Completed) is tracked and persisted per entity. Quests can optionally be turned in directly from the Quest Journal without interacting with an NPC. Any active quest can be pinned for HUD tracking.
The system is designed around extension points. Objective types automatically register their event listeners on load with no manual wiring required. New objective types can be created by extending QuestObjectiveTypeBase. New reward types can be created by extending QuestRewardTypeBase. This makes the Quests plugin fully open to any game-specific objective or reward logic without modifying core code.
Built-in Quest Objective Types:
Kill NPC: tracks kills of a specific NPC entry
Interact with NPC: tracks interactions with a specific NPC
Use Ability: tracks ability usage
Craft Recipe: tracks crafting a specific recipe
Unlock Recipe: tracks unlocking a specific recipe
Gain Currency: tracks currency earned over time
Reach Currency Total: tracks reaching a total wallet balance
Loot Item: tracks looting a specific item
Equip Item: tracks equipping a specific item
Unlock Class: tracks a class unlock event
Enter Scene: tracks entering a specific scene
Built-in Quest Reward Types:
Gain Item: awards one or more items to the player
Gain Currency: awards currency directly to the wallet
Unlock Recipe: unlocks a crafting recipe
Unlock Class: unlocks a character class
Unlock Spellbook: unlocks a spellbook
Trigger: fires any configured trigger on reward
Extension: NPC Interactions integrates quests directly into NPC dialogue, enabling quest offer and turn-in from interaction nodes.
Requirement Type: Quest Status (checks if a quest is Not Started, Active, or Completed)
Trigger Types: Add Quest, Complete Quest Objective
NEW PLUGIN: Classes
The Classes plugin provides a character class system with support for a primary class and any number of secondary classes. Classes are defined as database entries and all state is persisted in save data.
Classes open up a wide range of design possibilities: abilities locked to specific classes, class-restricted quests, class-locked loot, and class-dependent NPC dialogue are all achievable through the built-in requirement types and cross-plugin extensions without any custom code.
Requirement Types: Has Class, Has Secondary Class, Main Class
Quest Objective: Unlock Class
Quest Reward: Unlock Class
Trigger Type: Add Secondary Class
NEW PLUGIN: Races
The Races plugin provides race definitions for character creation. Each Race Entry defines a list of character variants, each linked to a Character Entry that specifies the prefab, avatar, and starting configuration. Races are managed through the Spark Editor and fully integrated with the Database system.
NEW PLUGIN: Spellbooks
The Spellbooks plugin groups abilities into named, manageable collections. Each Spellbook Entry holds a list of abilities. Each ability in the list can be configured to automatically add itself to the player's ability bar on game start if all of its requirements are met at that time.
Spellbooks provide a clean, reusable way to define the ability sets associated with classes, races, factions, quest rewards, or any other unlock condition in the game.
Quest Reward: Unlock Spellbook
NEW PLUGIN: Progression
The Progression plugin provides a flexible experience and leveling system. Multiple independent progression tracks can be active on a single entity simultaneously, each defined by its own Leveling Entry. Tracks are entirely independent, making it straightforward to have separate progression for character level, crafting skill, a combat rating, or any custom axis without any interference between them.
Each Leveling Entry supports Finite progression (with a level cap) or Infinite progression (no cap, with a configurable soft cap level and post-cap XP multiplier). XP curves are configurable per track as Linear, Exponential, or Logarithmic. A full manual XP table is also supported with an auto-generate button in the Spark Editor that populates it from the curve settings, which can then be manually adjusted per level.
Level and experience state are persisted per entity and loaded from save data. Events are published on level up for any listener to react to.
Requirement Type: Progression Level
Trigger Type: Gain Experience
NEW PLUGIN: Professions
The Professions plugin provides a lightweight profession system for tracking which professions a player has learned. Professions are defined as database entries and persisted in save data. The plugin is designed as a foundation for crafting specialization paths, unlock flows, and profession-restricted content.
Trigger Types: Learn Profession, Add Profession
Update 3
Various bug fixes
New
Added the "Apply Effect" Trigger type
Added the "Load Scene" Trigger type
Added the "Trigger" Effect Type
Interactable Objects now have support for Unity Events
Abilities can now have "Caster Effects" which are effects that will be applied to whoever used the ability
Added prefix/suffix for Stats. Showing in the UI
Added a new demo scene and teleport shrines to show how to easily go from one scene to another in game
Added define symbols to spark core and all plugins
Fixed
Fixed a bug that caused percentage stats to not be calculated properly
Domain/Scene realod can now be turned off and won't cause issues with Spark
Fixed a bug that happened when the game was paused during a dodge roll
Fixed an issue that caused Interaction detection to be inconsistent in some cases
Update 2
Various bug fixes
New
Added a new tool under Spark>Tools>Save Files Manager. It displays all currently existing save files and their versions. You can easily delete individual ones or all of them.
Now possible to delete Save Files and Save Versions in game directly in the Main Menu UI
Added an option to hide specific Stats in the UI
Update 1
Various bug fixes
Fixed
Fixed a bug that caused the cursor to remain enabled if the interact key was pressed while in the Loot window
Fixed a bug that caused the InteractableObjectEntity editor to not be drawn correctly
Fixed all default save paths for all plugins
Added better handling for save paths
Removed a duplicate component on the Orc NPC Prefab
Re-baked demo scene navmesh with better settings
Last updated
Was this helpful?
