Wardogs — GameFeature: Challenges_KOTH Reference
Extracted from cooked game data (build ++Wardogs+Live-CL-516586, UE 5.7.4). Source: Wardogs/Plugins/GameFeatures/Challenges_KOTH/ (75 JSON files). Scripted pass over every file, then spot-checked against representative files.
Scope note: this folder holds the wiring for the KOTH challenge set: which state tree runs for which session event, which reward tag it grants, and which lookup table turns a vehicle/item variant into a reward tag. The reward values (cash, XP) live in the shared challenge tables outside this folder. See
Wardogs_Rewards_and_Progression_v2.md(sections 10, 13, 15) and the sibling docWardogs_GameFeatures_Rewards_v2.md.
Season 02 update (2026-10-15)
- Challenge definitions are now present.
DT_Challenges_SessionEvents_KOTHwent from 0 rows to 60 rows. Every row has an emptyRewardsandObjectiveslist.Challenges.SessionEvents.SupplyPalletDroppedis the only row with auto-activate off. - Lookup tables grew:
DestroyVehicle30 → 34 rows;DestroyVehicleSection,DestroyVehicleFOBSuppliedAssist,DestroyVehicleLogisticAssistandDestroyVehicleReviveAssist24 → 28 rows each.RevivePlayerLogisticAssistandRevivePlayerReviveAssistdid not change (6 rows each in both seasons). - Distinct reward tags referenced by the lookups: 112 → 193.
- Vehicle variants now have their own reward tags.
VehicleDestroyed.Kodiakis nowVehicleDestroyed.Kodiak.Default,.Kodiak.MachineGunand.Kodiak.Pickup. The same split applies to other families (for exampleVehicleDestroyed.LittleBird→.LittleBird.Default,.LittleBird.MountedMachineGuns,.LittleBird.RocketPods). - Supply crate tags were renamed:
DestroySupplyCrate.Free→DestroySupplyCrate.Container.Free(lookup), andDestroySupplyCrate.Pallet→DestroySupplyCrate.Pallet.BuildSupply,.FuelSupply,.MunitionsSupply,.SparePartsSupply. - Destroy-vehicle-section trees now grant reward tags (previously none). Examples:
DestroyVehicleSection.CrewAssistandVehicleDestroyed.SupplyCrateAssist. - State tree step counts changed:
SafeZoneEntered24 → 36 states,PlayerKill29 → 31,PlayerDelivered21 → 25,RevivePlayer35 → 36,RepairVehicle27 → 28,PurchaseFromSupplyCrate10 → 11,Player_DeploySupplyCrate15 → 18. The overall range is now 10 to 36 states. - New reward tags on state trees:
PassengerSurvived(survival tree),ReceiveTipandSendTip(tip trees),DeployOnVehicle,DeploySupplyCrate,DestroyThrowable,SupplyPalletDropped, andZoneEntry.SpawnVehicle. - Outside this folder, 6 files were added under
Content/Meta/Challenges/: curve assetsCRV_Challenges_Curves_DeploySupplyCrate_XPandCRV_Challenges_Curves_DestroySupplyCrate_Cash, and four challenge state trees:ST_Challenges_Challenge_PassengersDelivered,ST_Challenges_Challenge_RewardedKills,ST_Challenges_Challenge_RewardedRevivesandST_Challenges_Challenge_RewardedVehiclesDestroyed. - No files were removed from this folder. The folder still holds 75 JSON files.
Full before/after list: Season 2 Changes → Rewards & Unlocks.
1. What the Package Contains
| Export type | Count | Role |
|---|---|---|
GameFeatureData (Challenges_KOTH) | 1 | Root bundle. Two actions. |
GameFeatureAction_DataRegistrySource | 1 | Adds DT_Challenges_SessionEvents_KOTH as a source to the Challenges registry (client and server). |
GameFeatureAction_DataRegistry | 1 | Adds 13 lookup registries (DR_SessionEvent_*). |
StateTree | 60 | One state tree per session event or assist variant (section 3). |
WDChallengeStateTreeSchema | 60 | One schema object per state tree. All are empty (no properties). |
DataTable | 14 | 1 challenge-definition table (60 rows) plus 13 reward lookup tables (section 4). |
The DT_Challenges_SessionEvents_KOTH table has RowStruct = WDChallengeDefinition and 60 rows, one per session event or assist variant. Every row has empty Rewards and Objectives lists. The reward amounts for these challenges are not in this folder (section 5).
2. How the Pieces Connect
- A gameplay event fires (for example
Event.StateTree.DestroyVehicle.Assist.CrewAssist). - The matching state tree runs. Its states are, in order, roughly: wait for the event → populate context tags → populate reward XP tags → add role XP tag to context → transfer context from event → add crew/assist tags → increment match stat → calculate reward → update reward XP tags → grant reward → complete.
- The state tree grants a reward tag (
Challenges.Rewards.*). - Where the reward depends on what was involved (vehicle variant, item, supply crate), the registry lookup maps the variant tag to that reward tag (section 4).
- The reward tag’s cash and XP values are resolved from the shared challenge tables (not in this folder).
The state trees carry context tags such as Challenges.Context.FriendlyKill, Challenges.Context.Target.Friendly, Challenges.Context.VehicleDismantled, Challenges.Context.Instigator.InSpawnVehicle, Challenges.Context.LastKiller and Challenges.Context.RessedByEnemy. These are the inputs the shared calculator uses to pick modifiers.
3. State Tree Inventory (60 trees)
Families by event. State counts are the number of states in each tree (range 10 to 36).
| Family | Trees | Event tag root | Reward tags referenced by the tree |
|---|---|---|---|
| Player kill (direct) | 6 | Event.StateTree.PlayerKill[.CrewAssist / .FOBSuppliedAssist / .LogisticAssist / .ReviveAssist / .SupplyCrateAssist] | Challenges.Rewards.PlayerKill and .PlayerKill.LogisticAssist (base and FOB, logistic and revive variants). None on the crew and supply crate variants. |
| Player kill (assist) | 6 | Event.StateTree.KillAssist[.<assist type>] | Analytics.Player.Assists, plus Challenges.Rewards.PlayerKill, .PlayerKill.Assist and .PlayerKill.Assist.LogisticAssist on the base and variants. None on the crew and supply crate variants. |
| Destroy vehicle | 12 | Event.StateTree.DestroyVehicle[.Assist[.<type>] / .<assist type>] | Challenges.Rewards.VehicleDestroyed, plus .Assist.*, .CrewAssist, .FOBSuppliedAssist, .LogisticAssist, .ReviveAssist and .SupplyCrateAssist variants. The FOB, logistic and revive variants also grant Challenges.Rewards.RevivePlayer. |
| Destroy vehicle section | 10 | Event.StateTree.DestroyVehicleSection[.Assist][.<assist type>] | Challenges.Rewards.VehicleDestroyed and .DestroyVehicleSection.<type> (CrewAssist, LogisticAssist, ReviveAssist). Logistic and revive variants also grant RevivePlayer. Assist base grants Assist.VehicleDestroyed and .DamageAssist. |
| Destroy supply crate | 1 | Event.StateTree.DestroySupplyCrate | Challenges.Rewards.DestroySupplyCrate, Challenges.Rewards.DestroySupplyCrate.Free and Challenges.Rewards.ReceiveTip |
| Heal player | 4 | Event.StateTree.HealPlayer[.LogisticAssist / .ReviveAssist / .SupplyCrateAssist] | Challenges.Rewards.HealPlayer, .Tip.Heal (base tree), plus .LogisticAssist and .ReviveAssist variants |
| Revive player | 5 | Event.StateTree.RevivePlayer[.Contributor / .LogisticAssist / .ReviveAssist / .SupplyCrateAssist] | Challenges.Rewards.RevivePlayer, .Tip.Revive (base tree), plus variants |
| Repair / refuel vehicle | 2 | Event.StateTree.RepairVehicle, Event.StateTree.RefuelVehicle | Challenges.Rewards.RepairVehicle and .Tip.Repair (repair tree), Challenges.Rewards.Tip.Refuel (refuel tree) |
| Player delivered / passenger | 2 | Event.StateTree.PlayerDelivered, Event.StateTree.PassengerSurvived | Challenges.Rewards.Tip.PlayerDelivered (delivery tree), Challenges.Rewards.PassengerSurvived (passenger tree) |
| Supply crate purchase / deploy | 3 | Event.StateTree.PurchaseFromSupplyCrate, Event.StateTree.DeployOnVehicle, Event.StateTree.DeploySupplyCrate | Challenges.Rewards.PurchaseFromSupplyCrate, .DeployOnVehicle, .DeploySupplyCrate |
| Throwables, pallets, air time | 4 | Event.StateTree.DestroyThrowable, .SupplyPalletDropped, .VehicleAirborne, .VehicleFlyThrough | Challenges.Rewards.DestroyThrowable and .SupplyPalletDropped. Air time and fly through trees reference none. |
| Zone and tips | 4 | Event.StateTree.SafeZoneEntered, .ZoneEntry, .PreTip, .Tip | Challenges.Rewards.PassengerSurvived (safe zone), .ZoneEntry.SpawnVehicle (zone entry), .ReceiveTip and .SendTip (pre-tip and tip) |
| Test | 1 | Event.StateTree.Test | None |
Notes:
- Reward tags in this table come from each tree’s state data. Where a family lists none, the tree grants no reward tag through its state data.
- The
Event.StateTree.*tags are how the game routes an event to its tree. The link from in-game action to event tag is not in this folder.
3a. Sampled tree: ST_Challenges_SessionEvents_KOTH_PlayerKill_Assist_CrewAssist (13 states)
Root → Wait For Player Kill Assist Crew Assist Event → On Player Kill Assist Crew Assist Event → Populate Context → Populate Reward XP Tags → Add Role XP Tag To Context → Transfer Context from Event → Add Crew Assist To Context Tags → IncrementMatchStat → Calculate Reward → Update Reward XP Tags → Grant Reward → Complete When Done
Tags present: Event.StateTree.KillAssist.CrewAssist, Analytics.Player.Assists, State.Player.Vitality.Critical.
4. Reward Lookup Tables (13 tables, 183 rows)
Each row maps a variant tag (the specific vehicle, item or buildable variant) to a reward tag. Row names and the Tag column are the variant. The RewardTag column is what the state tree grants.
| Lookup table | Rows | Maps to (reward tag family) | Examples |
|---|---|---|---|
DT_RewardLookup_SessionEvent_DestroyVehicle | 34 | Challenges.Rewards.VehicleDestroyed.<Vehicle>.<Variant> | Kodiak (3 variants), LittleBird (3), Huey (2), Blackhawk (2), SpawnVehicle (3), TNK_01 (3), TNK_04, WHL_08 (2), Bobcat, Humvee (3), DuneBuggy, Ural (3), Havoc, Loudspeaker, MistralAA, Mortar, Phalanx, STN_05, MGNest |
DT_RewardLookup_SessionEvent_DestroyVehicleSection | 28 | Challenges.Rewards.DestroyVehicleSection.<Vehicle>.<Variant> | Same vehicle families as above, section-based |
DT_RewardLookup_SessionEvent_DestroyVehicleFOBSuppliedAssist | 28 | Challenges.Rewards.VehicleDestroyed.FOBSuppliedAssist.<Vehicle>.<Variant> | Blackhawk, TNK_01.Artillery, Humvee, and others |
DT_RewardLookup_SessionEvent_DestroyVehicleLogisticAssist | 28 | Challenges.Rewards.VehicleDestroyed.LogisticAssist.<Vehicle>.<Variant> | Havoc, TNK_01.AntiAir, Humvee, and others |
DT_RewardLookup_SessionEvent_DestroyVehicleReviveAssist | 28 | Challenges.Rewards.VehicleDestroyed.ReviveAssist.<Vehicle>.<Variant> | Same family pattern as above |
DT_RewardLookup_SessionEvent_DestroySupplyCrate | 10 | Challenges.Rewards.DestroySupplyCrate.<Size> | Free (2 variants: Free and Container.Free), Small, Small.Armoured, Large, Large.Armoured, Pallet (4 pallet types: BuildSupply, FuelSupply, MunitionsSupply, SparePartsSupply) |
DT_RewardLookup_SessionEvent_HealPlayer | 6 | Challenges.Rewards.HealPlayer.<Item> | Bandage, SuperBandage, MedKit, StimPen, AdrenalinePen, Defibrillator |
DT_RewardLookup_SessionEvent_HealPlayer_LogisticAssist | 6 | Challenges.Rewards.HealPlayer.LogisticAssist.<Item> | Same six items |
DT_RewardLookup_SessionEvent_HealPlayer_ReviveAssist | 6 | Challenges.Rewards.HealPlayer.ReviveAssist.<Item> | Same six items |
DT_RewardLookup_SessionEvent_RevivePlayer | 6 | Challenges.Rewards.RevivePlayer.<Item> | AdrenalinePen, Defibrillator, MedKit, Resuscitator (2 variants), StimPen |
DT_RewardLookup_SessionEvent_RevivePlayerLogisticAssist | 5 | Challenges.Rewards.RevivePlayer.LogisticAssist.<Item> | AdrenalinePen, Defibrillator, MedKit, Resuscitator, StimPen |
DT_RewardLookup_SessionEvent_RevivePlayerReviveAssist | 5 | Challenges.Rewards.RevivePlayer.ReviveAssist.<Item> | AdrenalinePen, Defibrillator, MedKit, Resuscitator, StimPen |
DT_RewardLookup_SessionEvent_RepairVehicle | 3 | Challenges.Rewards.RepairVehicle.<Tool> | Wrench.Standard, Drill.Light, Drill.Heavy |
Observations:
- Heal and revive lookups map a consumable item to a reward tag. The item tags are
Id.Item.*(for exampleId.Item.MedKit.Standard,Id.Item.Defibrillator.Standard). - Repair lookups map a tool to a reward tag. Tool tags are
ID.Item.RepairTool.*. - Each vehicle variant now has its own reward tag. For example, Kodiak Default, MachineGun and Pickup grant
VehicleDestroyed.Kodiak.Default,VehicleDestroyed.Kodiak.MachineGunandVehicleDestroyed.Kodiak.Pickup. Reward values for these tags are still resolved outside this folder. - Row names and
Tagcolumns are not always spelled identically. The revive lookups useDefibrilatorin some row keys andMedkitin some row keys, while theTagcolumn isId.Item.Defibrillator.StandardandId.Item.MedKit.Standard. TheTagcolumn is what the game uses to match. This was verified on the RevivePlayerLogisticAssist table. - Across all 13 tables there are 193 distinct
Challenges.Rewards.*reward tags referenced by the lookups.
5. Reward Values
Not in this folder. The KOTH state trees grant reward tags, but the cash and XP amounts for those tags are defined in the shared challenge reward table (DT_ChallengeRewards_SessionEvents_Shared, under Content/Meta/Challenges/), which the existing v2 doc covers in section 15. Use that section for the per-kill and per-event calculator, and section 10 for end-of-match rewards.
6. Limitations
- Values for each
Challenges.Rewards.*tag are not resolved in this doc. They live outside the folder. - Per-state logic (the actual calculation in
Calculate Reward) is compiled StateTree bytecode. This doc names states and tags but does not decode the expressions. DT_Challenges_SessionEvents_KOTHhas 60 rows, but theirRewardsandObjectiveslists are empty. The reward amounts for each challenge are not visible from this folder.- The
DataRegistryaction lists 13 lookup registries, but not every state tree maps to a lookup. Some trees (the families in section 3 with noChallenges.Rewards.*tag, or only event tags) grant no reward through a lookup, and their reward path was not traced. - The
WDChallengeStateTreeSchemaobjects carry no properties, so schema-level settings are not available. - The meaning of
Challenges.Context.*tags is inferred from their names. Their runtime values were not checked.