Skip to main content

1.4.0

caution

All loot table templates need to be recompiled after updating.

Versions

  • UE5.1
  • UE5.2
  • UE5.3

Features

  • Added a new struct, STFloatMask, which stores an array of floats. You can use float masks to store data for each row in a loot table.
    • Added 53 arithmetic functions for doing math with float masks (add, multiply, divide, etc.).
  • Added a new base class, STMaskGenerator, which generates float masks that are stored in loot tables. STMaskGenerator can be subclassed in C++ or blueprint to generate custom masks based on your loot tables' data.
  • Added 10 built-in mask generators:
    • Bool: Evaluates a boolean property from the source.
    • Copy Data: Copies data from a numeric property from the source.
    • Curve: Uses a source's numeric property as a key into a curve.
    • Gameplay Tag Compare: Compares a source's tag property.
    • Gameplay Tag Enumerate: Creates a mask for each unique tag stored in the source's property.
    • Loot Count: Copies the loot table's count for that row.
    • Loot Weight: Copies the loot table's weight for that row.
    • Manual: Stores manually defined data.
    • Numeric Compare: Compares numeric property(s) from the source.
    • Row Filter: Evaluates a row filter on each source.
  • Added a new ComposeLootTable function using float masks instead. This version is significantly faster than the previous version.
    • Added a new struct to STLootRegistrationComponent for composing loot tables using the new method.
  • Added a ComposeMasks function to compose a named mask from multiple loot tables or loot table templates.
  • Added a Filter to Mask function for row filters. This will evaluate a row filter against an array of object handles, then store the results into a float mask.
  • Added Masked Sample, Bulk Masked Sample (Ordered), and Bulk Masked Sample (Unordered) functions. These functions apply a temporary float mask, then sample from the distribution or loot table.
  • Added the ApplyMaskToWeights and ApplyMaskToCounts functions to loot tables and distributions.
  • Added functions for converting STFloatMask, STSumArray, and STSumTree to string.
  • Added functions for printing debug info about STLootTable, STSumArray, and STSumTree to the output log in a tabular format.
  • Added a commandlet, STCompileLootTablesCommandlet, which compiles all loot tables and optionally regenerates their float masks. We recommend running this commandlet before packaging your game.
  • STBuiltTableData now stores STObjectRefHandles instead of STTableRowHandle. As a result, all existing loot tables need to be recompiled.
  • Added a float precision slider for the build tab.
  • Added a 'Reset column widths to automatic' command for the build tab.
  • Changed asset references in the authoring and build tabs to only show the asset name (instead of the entire path).

Deprecations

  • Deprecated the STNestedBag distribution. See the upgrade guide for reasoning and suggested alternatives.
  • Deprecated all Restock functions. You can use a float mask instead.
  • Deprecated STLootTable::ModifyTable. You can use a float mask instead.
  • Deprecated STRowModifier. You can use a float mask instead.
  • Deprecated the current ComposeLootTable function. An alternative using float masks has been added instead.
  • Replaced the current loot registration struct in STLootRegistrationComponent because we deprecated the old method of loot table composition.

Bug Fixes

  • Added const to STDiscreteDistribution::GetItemWeights.
  • Fixed row editor repeatedly collapsing after property changes.
  • Fixed automatic column widths being too narrow for sort marker in authoring and build tabs.
  • Fixed cell data not aligning with header in authoring and build tabs.

Changes to the Example Map

Most instances of composition now use float masks instead. Composition still has its uses, so we added a new example for composing affix loot tables.

  • RollAffixes, RollRarity, and RollBaseItem now use float masks. See the updated ARPG Loot Generation example.
  • LT_Affixes, LT_Rarity, and LT_Armor now store data in float masks.
  • Changed the distribution type for LT_Affixes and all of the individual affix tables from STNestedBag to STUnlimitedDist.
  • Removed LT_Prefixes and LT_Suffixes. We store this info into a float mask instead.
  • Added tags for each affix group in DT_Affixes.
  • DT_Rarity has a new field: MagicFindEffectiveness, which is used in the new RollRarity function.
  • Updated the LV_Performance map to compare between composition with float masks. All composition should be significantly faster.

Changes to Documentation