Skip to content

Equipment

All · 15 min read

The equipment screen: slots, the character preview and the stat panel.

The equipment screen: slots, the character preview and the stat panel.

What the player sees: each character wears gear in six slots (Weapon, Head, Chest, Arms, Legs and Feet), chosen on the Equipment screen from the party's shared bag. A weapon shows on the character's back, moves to the hand when a battle starts, and goes back when it ends. Each piece adds its numbers to the character sheet, and weapons and some armour carry gems in sockets.

Equipping does not move an item out of the bag (see Items and inventory); a slot only points at it. Every number an item adds is a setting on the item itself, so a new item is pure data: no effect asset or graph of its own.

What you can change

  • A new weapon: Add a weapon.
  • New armour: Add armour.
  • A gem: Add a gem.
  • A new stat on equipment (for example a speed bonus): Add an equipment stat.
  • What a character starts wearing and which weapon types it may wield: its equipment component (see Settings).
  • How a weapon looks drawn and sheathed: its weapon type and weapon instance; see Animation.

How it fits together

Piece Class / sample asset Job
Equipment component The equipment component (class XenoCoreEquipmentComponent), in the Components panel of each character Blueprint Six named slots; starting gear; equip, unequip and swap; the capped gem effect
Item definition Weapons/GreatSword/ID_XenoCore_JunkSword, Inventory/Armour/ID_XenoCore_* Slots allowed, stats, which equipment definition to use
Equipment definition (weapon) Weapons/ED_XenoCore_Sword_Base › GreatSword/ED_XenoCore_JunkSword, BlueSword/ED_XenoCore_BlueSword and one per sword Weapon actor to spawn, instance class, ability sets to grant
Weapon actor Weapons/B_XenoCore_Sword_Base › B_GreatSword, B_BlueSword… The mesh you see
Weapon type Weapons/Types/DA_XenoCore_WeaponType_Greatsword The kind of weapon: its name in menus, its drawn and sheathed stances, draw and sheathe montages, auto-attack swings and reach. An item names its type; a character lists the types it may wield
Equipment definition (armour) Inventory/Armour/ED_XenoCore_Armour Shared by every armour piece. Spawns nothing
Weapon ability sets Weapons/AbilitySet_XenoCore_SwordCommon (granted by the sword base), plus a Talent set such as GreatSword/AbilitySet_XenoCore_JunkSword Common: GA_XenoCore_EquipmentStats and GA_XenoCore_WeaponDrawSync. Talent set: the sword's Talent Art, for example GA_XenoCore_TurnStrike
Armour ability set Inventory/AbilitySet_XenoCore_EquipmentStats GA_XenoCore_EquipmentStats only
Stats ability Inventory/GA_XenoCore_EquipmentStats Applies the stats effect when the item is equipped. Names no stat of its own
Stats effect Inventory/GE_XenoCore_EquipmentStats Infinite effect; SetByCaller modifiers onto the character's stats
Weapon instance Weapons/B_WeaponInstance_Base → GreatSword/B_WeaponInstance_GreatSword Drawn and stowed sockets, SetDrawn, animation layers
Draw sync Weapons/GA_XenoCore_WeaponDrawSync Draws or sheathes the weapon when battle starts or ends
Arming Battle/GA_XenoCore_Arm_v2, AM_GreatSword_Unsheathe / _Sheathe Plays the draw or sheathe montage
Screens UserInterface/W_XenoCore_EquipmentScreen, W_XenoCore_ItemSwapList, W_XenoCore_EquipConfirm Loadout, candidate list, "take from another character" confirm

The sample swords (Junk, Blue, Green, Red, Amber, Gold, Ivory and Violet, one folder each under Weapons/) are all children of the two sword bases, share B_WeaponInstance_GreatSword and the Greatsword type, and differ only in their item, mesh or material, and the Talent Art their ability set grants. Junk, Blue, Green, Red and Gold share AbilitySet_XenoCore_JunkSword (Turn Strike); Amber, Ivory and Violet grant their own. Weapons/IronBlade holds only a mesh and material. See Add a weapon.

Each character wields one weapon type. An item's type is Weapon Type on its XenoCoreFragment_EquipSlots fragment; a character's allowed types are its equipment component's Allowed Weapon Types. A weapon of the wrong type is refused (Wrong Weapon Type) and is hidden from that character's swap list. An empty value at either end allows anything. Every sample party member is a Greatsword user today.

Lifecycle

Starting gear. When a character's ability system is ready, its equipment component first adds its Starting Inventory to the party bag, then equips each Starting Equipment entry (adding the item to the bag first). A character that has been benched and redeployed comes back in what the player last put on it, picking its own items back up from the bag rather than adding copies.

Equipping. Equip Item To Slot checks the item first. Get Equip Blocker returns why it would fail:

Blocker Meaning
None It would equip
No Item Nothing passed
Not Equippable No InventoryFragment_EquippableItem, or one with no equipment definition
Wrong Slot The item's Allowed Slots does not include this slot
Worn In Another Slot This character already wears it elsewhere
Worn By Another Another character wears it. Pass Take From Other Character to strip it from them (the screen asks first)
Wrong Weapon Type The weapon's type is not in this character's Allowed Weapon Types

If allowed, whatever was in the slot is unequipped, the weapon actor (if any) spawns, and the equipment definition's ability sets are granted. One of those, GA_XenoCore_EquipmentStats, copies the item's stat numbers (its InventoryFragment_SetStats values) onto the character at once, so the character sheet is right the moment the item goes on. Which stats it copies is the list of Modifiers on Inventory/GE_XenoCore_EquipmentStats: one row per stat. An item stat with no row there is ignored, with a warning in the Output Log (LogXenoCoreEquipmentStats). Screens hear about the change through the XenoCore.Equipment.Message.SlotChanged message.

Which body holds it. A VRoid member's own mesh is an invisible Mannequin, so its weapon goes to the visible VRoid body instead, whenever that body's skeleton has the socket being used (XC_WeaponGrip_R in the hand, XC_WeaponStow_Back on the back). Move those sockets in the VRoid skeleton's editor to fit the weapon to each character. A body without them keeps the weapon on the Mannequin's own sockets.

What a weapon type changes. A weapon's type (a data asset such as Weapons/Types/DA_XenoCore_WeaponType_Greatsword, picked on the item's Equip Slots fragment) decides who may wield it, and can also bring its own stance, draw and sheathe montages, auto-attack swings and reach. Any of those left empty on the type falls back to the greatsword's. A weapon's Type row in the menus shows its type's Display Name (armour shows Light, Medium or Heavy there instead).

Unequipping. Unequip Slot takes the item's stats off the character, despawns the weapon actor and removes the granted abilities. The item stays in the bag.

Leaving the field. When a character's pawn is destroyed (benched, or killed and cleared), every slot is unequipped, so its gear sits loose in the shared bag.

Drawing the weapon. When a battle starts or ends, GA_XenoCore_Arm_v2 plays the draw or sheathe montage, and GA_XenoCore_WeaponDrawSync moves the weapon between its back and hand sockets as the montage plays and swaps the character's stance animations (see Animation); the character cannot move while drawing, and neither direction can be interrupted by a flinch.

Gems

A weapon or armour piece can carry gems in its sockets, XC1-style. A gem is an ordinary item (Inventory/Gems/ID_XenoCore_Gem_<Type>_<Rank>: Strength Up, Ether Up, Agility Up, Ether Def Up, Muscle Up and Critical Up, ranks I to III), and its exact strength is rolled when the gem is created, within its rank's range.

  • Sockets travel with the item. Socketing writes the gem onto the host item, so a weapon handed to another character keeps its gems. A gem not listed in Inventory/Gems/DA_XenoCore_GemRegistry is refused.
  • How many sockets. A weapon has its weapon type's Default Gem Slots (2 on the Greatsword); tick Override Gem Slots on the item's Equip Slots fragment to give one weapon a different count. Armour uses that fragment's Gem Slots: 0 on the Colony starter pieces, 1 on the rest.
  • Caps are per character. The gems a character wears are summed across every piece and capped per gem type (Strength Up at 150, as in XC1), then added to the character's stats, refreshed on every equip, unequip and socket change. An item's own stats, and the comparison in the swap list, never include its gems.
  • On screen. The equipment screen shows each piece's sockets as coloured icons and names them on a line under the piece; the gem popup sockets and removes gems, and previews the change on the character sheet as you highlight a gem.

Gems come from quests and the shop, never chests; Kael starts a new game with one. See Add a gem.

Settings

Setting Where it lives What it does
Starting Equipment Character Blueprint › Components › equipment component › Details › XenoCore › Equipment Slot and item definition pairs worn at start
Starting Inventory Same Loose items (and Count) the party starts with
Allowed Weapon Types Same Weapon types this character may wield. Empty allows any
Allowed Slots, Equip Type Item › XenoCoreFragment_EquipSlots Which slots; Light / Medium / Heavy label
Stat numbers Item › InventoryFragment_SetStats XenoCore.Stat.* tags and values
Equipment Definition Item › InventoryFragment_EquippableItem Which equipment definition equips it
Actors To Spawn, Instance Type, Ability Sets To Grant Equipment definition (Lyra) What equipping spawns and grants
Draw and stow sockets, animation layer sets Weapon instance Blueprint See Animation

Stats the shared effect carries: Strength, Ether, Agility, PhysicalDefence, EtherDefence, BlockRate, CriticalRate, WeaponAttackMin, WeaponAttackMax and Weight, each fed by the matching XenoCore.Stat.* tag.

Weight. Armour carries XenoCore.Stat.Weight. It is subtracted from Agility whenever Agility is used for a hit roll: the wearer is easier to hit and misses more. The character sheet still shows Agility and Weight as separate rows; the subtraction happens only in the roll.

On the stats ability (GA_XenoCore_EquipmentStats, Class Defaults, XenoCore › Equipment):

Setting Shipped What it does
Equipment Stats Effect GE_XenoCore_EquipmentStats The effect applied while worn. Its Set By Caller modifiers decide which stats reach which attributes
Percent Stat Tags empty Extra stats authored as whole percent (15) and applied as a fraction (0.15). Critical Rate and Block Rate are already percent in the stat list, so they need no entry

Unequip rules. On the loadout, the unequip prompt appears only for a filled slot that is not the Weapon slot. Can Unequip Slot returns false for Weapon: every party member must carry a weapon. An empty slot's row shows the slot's name.

Fails silently: armour with no stats ability

GA_XenoCore_EquipmentStats is granted only through an ability set on the equipment definition. Armour that points at an equipment definition without AbilitySet_XenoCore_EquipmentStats equips, fills its slot, shows its name, and adds zero stats with nothing logged. Point every armour piece at ED_XenoCore_Armour.

Fails silently: the armour ability set must not draw

AbilitySet_XenoCore_EquipmentStats must not include GA_XenoCore_WeaponDrawSync, or armour tries to draw itself. The weapon's set carries both.

Fails silently: a new item created blank

A new item definition has no equipment definition, so Get Equip Blocker returns Not Equippable: the row shows, the click does nothing, nothing is logged. Duplicate a working item.

Fails silently: removing Ability Sets To Grant from a weapon

The weapon's ability set grants the draw sync as well as the stats. It is granted with the equipment instance as its source, which is the only way the draw ability finds its weapon. Removing it breaks drawing and sheathing without an error.

Fails silently: listing an item in both Starting lists

Starting Equipment adds its own copy of each item. Listing the same item in Starting Inventory as well gives the party two: one worn, one loose.

Extending it

  • A new weapon: duplicate a sword's item, equipment definition and actor Blueprint into your own folder. See Add a weapon.
  • New armour: duplicate an ID_XenoCore_* armour item and keep Equipment Definition at ED_XenoCore_Armour. See Add armour.
  • A new equipment stat: one modifier row on GE_XenoCore_EquipmentStats plus a XenoCore.Stat.* tag. No graph edit. Two parts need a programmer: a brand-new attribute, and making the menus draw the stat at all (the list of stats the menus show is in C++). See Add an equipment stat.
  • A new slot needs a programmer, plus a change to every screen that lays out six slots.
  • Do not add a separate stats effect per item: the one shared effect is filled from each item's own numbers, so an item is pure data.
For programmers: classes and extension points

The component is UXenoCoreEquipmentComponent, a subclass of ULyraEquipmentManagerComponent. The stats ability's C++ parent is UXenoCoreGameplayAbility_EquipmentStats: it calls Get Item For Equipment, then fills every Set By Caller tag named by the effect's own modifiers from the item instance's stat tags (0 where absent, percent stats divided by 100). Weapon attachment to a VRoid body goes through Get Weapon Attach Parent; the weapon instance's SetDrawn asks it on every draw and sheathe. Weapon types are UXenoCoreWeaponTypeDefinition; the arm ability asks Get Weapon Arm Montage and SetDrawn asks Resolve Weapon Anim Layer. The stats the menus draw are UXenoCoreInventoryStatics::GetStatDefinitions (XenoCoreInventoryStatics.cpp); slots are EXenoCoreEquipSlot (XenoCoreEquipmentComponent.h).

Why it's built this way

For programmers
  • Subclass, not a sibling component. Lyra's own code finds the equipment manager with FindComponentByClass<ULyraEquipmentManagerComponent>, which finds ours. A second component beside Lyra's would have left those lookups finding the wrong one.
  • On the pawn. Equipment spawns the meshes animation depends on, so it stays with the body. Inventory is data, so it lives on the controller.
  • One SetByCaller effect. One effect asset per item would be two hand-made assets per item, and would make the comparison screen price an item by equipping it. The stats come from the item's own InventoryFragment_SetStats, which Lyra already writes onto the instance.
  • Get Item For Equipment. Lyra's EquipItem spawns the instance and grants its abilities in one call, so the stats ability runs before the slot is recorded. The component remembers the item for the length of that call, so the ability can find it immediately rather than a frame later, which once showed a new weapon's name with zero attack.
  • Weight in the roll only, so the sheet and the item that caused it never disagree.