Version: 1.0.0 • Engine: Unreal Engine 5.8 • Author: Silvan Teufel
Support: teufelsilvan@gmail.com • Category: Code Plugin
A designer-friendly, data-driven weighted loot and drop-table framework: rarity tiers, conditional
drops, nested tables and pity/luck timers — all Blueprint-exposed and deterministic-seedable.
GameplayTags module (already available; no extra plugin).LootForge into your project's Plugins/ folder.ULootTable) — a UPrimaryDataAsset holding weighted entries plus roll settings.FLootEntry) — an item id (FGameplayTag) + Weight + Rarity + quantity range,Conditions (a FGameplayTagQuery) and an optional NestedTable.FLootRollResult) — a resolved drop: ItemId, Quantity, Rarity.LootForge decides what drops; your game maps each ItemId tag to an actual item and grants it.
Add → Miscellaneous → Data Asset → LootTable, then set:
Entries — the weighted pool. Per entry:
ItemId — a Gameplay Tag identifying the item (ignored if NestedTable is set).Weight — relative selection weight (> 0 to be selectable).Rarity — Common … Legendary.MinQuantity / MaxQuantity — the drop count range.Conditions — optional FGameplayTagQuery; the entry is only selectable if the roll contextNestedTable — optional; roll this table instead of yielding an item.NumRolls — draws per RollLoot.bAllowDuplicates — if false, the same entry can't be drawn twice in one roll.PityTag, PityThreshold (guarantee after N misses), PityMinRarity.// Get the subsystem (game instance subsystem):
ULootForgeSubsystem* Loot = ULootForgeSubsystem::Get(this);
// Non-deterministic roll with a context:
TArray<FLootRollResult> Drops = Loot->RollLoot(MyTable, ContextTags, /*Seed*/ -1);
// Deterministic roll (same seed + table + context => identical result):
TArray<FLootRollResult> Fixed = Loot->RollLoot(MyTable, ContextTags, /*Seed*/ 12345);
Blueprint convenience nodes (Loot Forge Blueprint Library): Roll Loot Simple,
Roll Loot Seeded, Filter By Rarity. Everything is BlueprintCallable — a Blueprint-only
project needs no C++.
Set PityTag, PityThreshold (e.g. 10) and PityMinRarity (e.g. Rare). LootForge tracks a
miss-streak per tag: after PityThreshold rolls without a drop at or above PityMinRarity, the next
roll is forced to that minimum rarity (if any qualifying entry exists). A qualifying drop resets the
streak. Query/reset the counter with GetPityCounter / ResetPity.
PreviewDropChances(Table, Context) returns a normalized probability (0..1) per entry for the given
context — feed it into an editor widget or debug UI to balance a table.
LogLootForge warning (never divides by zero).MinQuantity ≤ MaxQuantity.Automation tests under LootForge.* (Session Frontend → Automation, or Automation RunTests LootForge):
LootForge.Weights.DistributionSeeded — a fixed seed yields the expected weighted distribution.LootForge.Nested.NoInfiniteRecursion — a self-referencing nested table terminates safely.LootForge.Pity.GuaranteesAfterThreshold — a guaranteed high-rarity drop after the threshold.LootForge — © 2026 Silvan Teufel. All rights reserved.