Skip to main content

Skilltree Wolfgang

Based on game build 722832 | Last updated: 2026-04-28

Overview

skilltree_wolfgang.lua is a data configuration file that defines Wolfgang's skill tree structure. The BuildSkillsData() function returns a table containing all skill nodes organized into four groups: might, training, planardamage, and allegiance. Each skill node specifies position, connections, tags, and optional activation/deactivation callbacks that modify entity components (mightiness, damagetypebonus, damagetyperesist). The file is consumed by the skill tree UI system to render Wolfgang's progression tree.

Usage example

-- Require and build the skill tree data:
local BuildSkillsData = require("prefabs/skilltree_wolfgang")
local SkillTreeFns = require("screens/skilltreefunctions") -- hypothetical dependency

local data = BuildSkillsData(SkillTreeFns)

-- Access skill definitions:
local skills = data.SKILLS
local wolfgang_critwork_1 = skills.wolfgang_critwork_1

-- Access category order/positioning:
local orders = data.ORDERS

Dependencies & tags

External dependencies:

  • STRINGS.SKILLTREE.WOLFGANG -- localization strings for skill titles and descriptions
  • TUNING.SKILLS -- numeric values for skill bonuses (overbuff caps, damage resist, damage bonus)
  • TheGenericKV -- key-value storage for tracking boss kills (fuelweaver, celestial champion)
  • SkillTreeFns -- passed as parameter; provides CountTags() for lock conditions

Components used:

  • mightiness -- modified via SetOverMax() in overbuff skills
  • damagetypebonus -- modified via AddBonus()/RemoveBonus() in allegiance skills
  • damagetyperesist -- modified via AddResist()/RemoveResist() in allegiance skills

Tags:

  • might -- group tag for might skill tree branch
  • training -- group tag for training skill tree branch
  • planardamage -- group tag for planar damage skill tree branch
  • allegiance -- group tag for allegiance skill tree branch
  • shadow_favor / lunar_favor -- allegiance faction tags
  • wolfgang_coach -- added by coach skill activation
  • wolfgang_overbuff_1 through wolfgang_overbuff_5 -- overbuff tier tags
  • player_shadow_aligned / player_lunar_aligned -- allegiance alignment tags

Properties

PropertyTypeDefault ValueDescription
GAPconstant (local)38Vertical spacing between skill nodes in the same column (pixels).
BIGGAPconstant (local)54Larger vertical gap used for special spacing (defined but unused in visible code).
CATGAPconstant (local)87Horizontal spacing between skill tree columns/categories.
Xconstant (local)-212Base X coordinate for the first column (might group).
Yconstant (local)170Base Y coordinate for the top row of skill nodes.
TITLE_Y_OFFSETconstant (local)30Vertical offset applied to category titles in ORDERS.
ORDERStable{...}Array of category definitions with name and position: {"might", {x, y}}, {"training", ...}, {"planardamage", ...}, {"allegiance", ...}.
SKILLStable{...}Returned by BuildSkillsData(); contains all skill node definitions keyed by skill ID.

Main functions

RecalculatePlanarDamage(inst, fromload) (local)

  • Description: Callback function assigned to onactivate and ondeactivate for all planar damage skills. Calls inst:RecalculatePlanarDamage() to refresh planar damage modifiers when the skill is toggled.
  • Parameters:
    • inst -- entity instance (player) owning the skill tree
    • fromload -- boolean indicating if activation is from save load (unused in this callback)
  • Returns: None
  • Error states: Errors if inst does not have a RecalculatePlanarDamage method (typically a player entity method).

BuildSkillsData(SkillTreeFns)

  • Description: Constructs and returns the complete skill tree data structure for Wolfgang. Defines all skill nodes with their properties (position, connections, callbacks, locks). The SkillTreeFns parameter provides utility functions for evaluating lock conditions.
  • Parameters:
    • SkillTreeFns -- table containing skill tree helper functions; must provide CountTags(prefabname, tag, activatedskills) for lock evaluation
  • Returns: Table with structure { SKILLS = {...}, ORDERS = {...} } where SKILLS contains all skill node definitions and ORDERS contains category layout data.
  • Error states: Errors if SkillTreeFns is nil or missing CountTags method when allegiance lock skills are evaluated.

Skill Node Properties

The SKILLS table contains skill node definitions. Each node may have the following properties:

PropertyTypeDefault ValueDescription
titlestring---Localization key for skill title (e.g., STRINGS.SKILLTREE.WOLFGANG.WOLFGANG_CRITWORK_1_TITLE).
descstring---Localization key for skill description.
iconstring---Asset name for the skill icon (e.g., "wolfgang_critwork_1").
postable---{x, y} screen coordinates for node placement.
groupstring---Category group name: "might", "training", "planardamage", or "allegiance".
tagstable---Array of tags applied when skill is activated.
rootbooleanfalseIf true, this skill has no prerequisites and is a tree root.
connectstable---Array of skill IDs that this node connects to (children).
lockstable---Array of lock skill IDs that must be satisfied to unlock this node.
lock_openfunctionnilCustom lock evaluation function; returns true if unlocked, false/nil if locked.
onactivatefunctionnilCallback fired when skill is activated. Signature: fn(inst, fromload).
ondeactivatefunctionnilCallback fired when skill is deactivated. Signature: fn(inst, fromload).
defaultfocusbooleanfalseIf true, this skill is the default focused node when the tree opens.

Allegiance Lock Conditions

Four lock nodes control access to allegiance skills based on boss kills and faction choices:

Lock NodeUnlock Condition
wolfgang_allegiance_lock_1Requires fuelweaver_killed KV == "1" (Shadow boss defeated).
wolfgang_allegiance_lock_2Requires celestialchampion_killed KV == "1" (Lunar boss defeated).
wolfgang_allegiance_lock_3Unlocked if player has 0 lunar_favor tags; locks if lunar favor exists.
wolfgang_allegiance_lock_4Unlocked if player has 0 shadow_favor tags; locks if shadow favor exists.

Code note: Lock functions return nil (not false) when locked — this is intentional per the source comment "Important to return nil and not false."

Skill Activation Effects

Skills modify entity state through onactivate/ondeactivate callbacks:

Skill GroupComponent ModifiedEffect
training (coach)Entity tagsAdds/removes "wolfgang_coach" tag.
training (speed)mightinessCalls RecalculateMightySpeed() on toggle.
training (overbuff 1-5)mightinessSets overmaxmax to TUNING.SKILLS.WOLFGANG_OVERBUFF_X if current value is lower. Adds "wolfgang_overbuff_X" tag.
planardamage (1-5)Entity methodCalls RecalculatePlanarDamage() on toggle.
allegiance_shadowdamagetyperesist, damagetypebonus, tagsAdds "player_shadow_aligned" tag, shadow resist vs shadow damage, bonus damage vs lunar-aligned targets.
allegiance_lunardamagetyperesist, damagetypebonus, tagsAdds "player_lunar_aligned" tag, lunar resist vs lunar damage, bonus damage vs shadow-aligned targets.

Events & listeners

Not applicable — this is a data configuration file with no event registration.