Difference between revisions of "Bonus system"

From VCMI Project Wiki
Jump to: navigation, search
(Calculating the total value of a bonus)
(Replaced content with "{{Template:MovedToWebpage|https://vcmi.eu/developers/Bonus_System/}}")
 
(13 intermediate revisions by 2 users not shown)
Line 1: Line 1:
The bonus system of VCMI is a set of mechanisms that make handling of different bonuses for heroes, towns, players and units easier. The system consists of a set of nodes representing objects that can be a source or a subject of a bonus and two directed acyclic graphs (DAGs) representing inheritance and propagation of bonuses. Core of bonus system is defined in HeroBonus.h file.
+
{{Template:MovedToWebpage|https://vcmi.eu/developers/Bonus_System/}}
 
 
Here is a brief sketch of the system (black arrows indicate the direction of inheritance and red arrows the direction of propagation):
 
 
 
[[File:Bonus system.png|center]]
 
 
 
 
 
== Propagation and inheritance ==
 
 
 
Assuming the graph of bonus system is temporarily not changing, the bonuses are propagated as follows:
 
# We take all bonuses by precedence in red DAG (more accurate description is not yet specified) and using their propagators we apply them to appropriate red children. Propagators default to none.
 
# We take all bonuses by precedence in black DAG (more accurate description to be specified) and apply them to all black children with respect to limiters. A limiter can specify that inheritance should be stopped at a certain node, default is to propagate to all black children.
 
 
 
== Operations on the graph ==
 
 
 
There are two basic types of operations that can be performed on the graph:
 
 
 
=== Adding a new node ===
 
 
 
When node is attached to a new black parent <ref>the only possibility -> adding parent is the same as adding a child to it</ref>, the propagation system is triggered and works as follows:
 
: For the attached node and its all red ancestors
 
:: For every bonus
 
::: Call propagator giving the new descendant -> then attach appropriately bonuses to the red descendant of attached node (or the node itself).
 
 
 
=== Deleting an existing node ===
 
 
 
Analogically to the adding a new node, just remove propagated bonuses instead of adding them. Then update the hierarchy.
 
 
 
== Limiters ==
 
 
 
== Propagators ==
 
 
 
== Calculating the total value of a bonus ==
 
 
 
*[[List of bonus value types]]
 
 
 
== Bonus string constants ==
 
*[[Bonus Format]]
 
*[[List of all bonus types]]
 
*[[List of bonus value types]]
 
*[[List of bonus range types]]
 
*[[List of bonus duration types]]
 
*[[List of bonus sources]]
 
*[[List of bonus limiters]]
 
*[[List of bonus propagators]]
 
 
 
== Automatic generation of bonus description ==
 
 
 
TBD
 
 
 
=Notes=
 
<references/>
 

Latest revision as of 16:04, 16 July 2024

Logo256.png    Page moved to VCMI-Homepage