Overview
This genre pack targets action role-playing games (ARPGs) in the Diablo / Path of Exile mould: a character defined by primary attributes, equippable items that roll stat modifiers, signature abilities, and — above all — a multiplicative damage pipeline that has to stay sane as item counts grow.
It is the practical, copy-and-extend companion to the ARPG (Diablo-style) case study in
the core specification (Section 15.3). Where the case study explains the
Damage Bucket architecture, this pack ships the matching schema-conformant Attributes, Tags,
Abilities, and Effects in entities/, plus a worked hero in entities/gameplay_controller.yaml.
Relationship to the core specification
This document is additive. It defines genre-specific Attributes, Tags, Abilities, and Effects on top of the core Universal Gameplay Ability System specification.
-
It MUST NOT redefine, override, or contradict any concept in the core spec.
-
All entities in
entities/validate against the sameschemas/*.jsonas the core. -
It reuses core state tags (
State.Alive,State.Combat,State.Dead,State.Debuff.Stunned,State.Buff.Regenerating) by reference — it never re-declares them. -
The damage-bucket stacking it relies on is the core modifier
Channelmechanism (core spec §5.3 and §15.3), not a new construct.
Genre Attributes
Defined in entities/attribute_set.yaml as the RPGCoreAttributes set.
| Attribute | Category | Role |
|---|---|---|
|
Statistic |
Primary, player-allocated stats that feed everything else. |
|
Statistic / Resource |
|
|
Statistic / Resource |
|
|
Statistic |
The aggregated outgoing-damage stat targeted by the damage buckets. |
|
Statistic |
Derived combat stats. |
|
Meta / Resource |
Progression. |
Damage buckets (the core RPG mechanic)
ARPG power scaling is multiplicative across named channels and additive within a channel.
This pack uses three canonical channels, all aggregating onto WeaponDamage:
| Channel | What goes in it | Stacking |
|---|---|---|
|
Primary-stat scaling (e.g. Strength → +damage) |
Additive within |
|
Conditional / item damage bonuses (fire, vs. elites, while healthy …) |
Additive within |
|
Item-set / legendary multipliers |
Additive within, multiplied across the others |
Because channels are part of the core modifier pipeline, the stacking is expressed declaratively in Effect YAML — no custom calculation code is needed for it.
entities/gameplay_controller.yaml)With Strength = 50 and the Fire Sword equipped:
-
MainStatfactor: \(1 + (0.01 \times 50) = 1.50\) -
DamageBonusesfactor: \(1 + 0.20 = 1.20\) -
Final
WeaponDamage: \(10 \times 1.50 \times 1.20 = 18.0\)
This is exactly the CurrentValue recorded for WeaponDamage on the example hero.
Genre Tags
Defined in entities/tag_registry.yaml (additive only):
-
Damage types —
DamageType.Physical|Fire|Cold|Lightning|Poison. -
Ability types —
Ability.Type.Melee|Ranged|Spell. -
Combat status —
Status.Vulnerable,Status.FightingElite; immunitiesImmunity.Physical,Immunity.Fire. -
Items —
Item.Equipped.,Item.Type.,Item.Rarity.Legendary. -
Classes —
Class.Barbarian|Sorcerer|Rogue.
Genre Abilities
-
entities/ability_basic_attack.yaml—GA_BasicAttack: free single-target weapon strike; plays a montage and appliesGE_BasicAttackDamageon the hit window. -
entities/ability_whirlwind.yaml—GA_Whirlwind: signature melee AoE. TaggedAbility.Type.Melee+DamageType.Physical, blocked whileState.Dead/State.Debuff.Stunned, applies the damage effect to every target in radius while skippingImmunity.Physicaltargets. Models theGA_Whirlwindtag-query example from §15.3.
Genre Effects
-
entities/effect_mainstat_strength.yaml—GE_MainStat_Strength: infinite;+1%WeaponDamageper point ofStrengthin theMainStatchannel (AttributeBased). -
entities/effect_weapon_firesword.yaml—GE_Weapon_FireSword: infinite equip effect;+20%WeaponDamagein theDamageBonuseschannel and grants item/element tags. -
entities/effect_basic_attack_damage.yaml—GE_BasicAttackDamage: instant; subtracts the source’s fully-aggregatedWeaponDamagefrom the target’sHealth. -
entities/effect_regeneration.yaml—GE_Regeneration:HasDuration+Period; restores5Healthper second for5seconds.
Using this pack
-
Copy
genres/rpg/into your project (or loadentities/directly via theugas-schema-authorskill). -
Keep, rename, or extend the
RPGCoreAttributesset; add classes/skills as new Abilities and Effects. -
Author new damage modifiers by choosing the right
Channel— additive bonuses go inDamageBonuses, set/legendary multipliers inLegendaryPowers. -
Validate with
python scripts/validate_schema_examples.pybefore committing.