digraph mygraph { fontname="monospace" edge [fontname="Noto Serif"] node [ fontname="Noto Serif" style=filled shape=plain fillcolor="#60200080" pencolor="#00000080" // frames color ] subgraph rankedTop { "Global" [ label =<
Global
Propagator: GLOBAL_EFFECT
C++ Class: CGameState
Global node to which
all map entities are connected
Note: Not recruited heroes (such as in tavern)
are not attached to any node
Contains global bonuses, global stack experience and difficulty bonuses
> ] "Team" [ label =<
Team
Propagator: TEAM
C++ Class: TeamState
Per-team node.
Game will put players without team
into a team with a single player
> ] "Player" [ label =<
Player
Propagator: PLAYER
C++ Class: CPlayerState
Per-player team.
All objects owned by a player
belong to such node
> ] }; subgraph rankedArmies { rank="same" "Hero" [ fillcolor="#80808080" label =<
Hero
Propagator: HERO
C++ Class: CGHeroInstance
Represents a hero, either owned by player or in prison.
Bonuses from specialty and secondary skills
are attached directly to this node
Contains per-hero global bonuses, specialty bonuses,
primary and secondary skill bonuses, campaign primary skill bonus
> ] }; subgraph rankedHeroes { rank="same" "Visiting Hero" [ fillcolor="#80808080" label =<
Visiting Hero
Hero that is currently
visiting owned or allied town
> ] "Hero defending town" [ fillcolor="#80808080" label =<
Hero defending town
Hero that is currently
fighting on a defending side in a siege
> ] "Wandering Hero" [ fillcolor="#80808080" label =<
Wandering Hero
Hero that is currently
moving on map, outside of towns
> ] "Neutral Army" [ fillcolor="#80808080" label =<
Neutral Army
Any army that is not owned by a player
Wandering monsters, Banks, Events, etc
> ] "Owned Army" [ fillcolor="#80808080" label =<
Owned Army
Army owned by a player.
Mines, Garrisons, Dwellings
> ] "Owned Object" [ label =<
Owned Object
Other objects owned by a player, like Lighthouse
Contains Flaggable Objects bonuses
> ] }; subgraph rankedTopHero { rank="same" "Town" [ fillcolor="#80808080" label =<
Town
Propagator: TOWN
C++ Class: CGTownInstance
Represents a town on map.
Contains town building bonuses
> ] "Artifact Instance" [ fillcolor="#00FFFF80" label =<
Artifact Instance
C++ Class: CArtifactInstance
Represents a particular instance of an artifact
that hero can equip or trade
Contains bonuses of spell scrolls and growing artifacts
> ] "Boat" [ fillcolor="#00FFFF80" label =<
Boat
C++ Class: CGBoat
Represents a boat or other type of transport.
Contains bonuses provided to boarded hero
> ] }; subgraph rankedMisc { "Town and visiting hero" [ label =<
Town and Visiting Hero
Propagator: TOWN_AND_VISITOR
C++ Class: CTownAndVisitingHero
Helper node that exists solely
to propagate bonuses to both town and visiting hero
Note: Neutral towns are attached to global node instead
> ] "Combat" [ label =<
Combat
Propagator: BATTLE_WIDE
C++ Class: BattleInfo
Node that contains both sides of a combat
Anything propagated to this node will affect both sides in combat
Contains battlefield and native terrain bonuses
> ] "Creature Type" [ fillcolor="#00FFFF80" label =<
Creature Type
C++ Class: CCreature
Represents a creature type, such as Pikeman or Archer
Contains creature abilities bonuses, stack experience bonuses
> ] "Artifact Type" [ fillcolor="#00FFFF80" label =<
Artifact Type
C++ Class: CArtifact
Represents an artifact type, for example Ring of Life
Contains fixed bonuses of artifacts
> ] "Artifact Component" [ fillcolor="#80808080" label =<
Artifact Component
C++ Class: CArtifactInstance
For combined, non-fused artifacts,
instances of components are attached to instance of combined artifact
> ] "Army" [ label =<
Army
Propagator: ARMY
C++ Class: CArmedInstance
Represents any object that can hold army,
such as town, hero, mines, garrisons, wandering monsters
Contain anti-magic garrison bonus, faction mixing morale bonus
> ] "Unit in Army" [ label =<
Unit in Army
C++ Class: CStackInstance
Represents a unit that is part of a army
A unit always has a creature type,
belongs to an army and has stack size
> ] "Commander" [ label =<
Commander
C++ Class: CCommanderInstance
Represents a hero commander, WoG feature
> ] "Unit in Combat" [ label =<
Unit in Combat
C++ Class: CStack
Represents current state of a unit during combat,
can be affected by spells or receive damage
> ] "Summon in Combat" [ label =<
Summon in Combat
C++ Class: CStack
Represents any unit that was added in combat,
and may not remain after combat
> ] }; "Global" -> "Team" "Global" -> "Neutral Army" "Team" -> "Player" "Player" -> "Town and visiting hero" "Player" -> "Wandering Hero" "Player" -> "Owned Army" "Player" -> "Owned Object" "Town and visiting hero" -> "Town" "Town and visiting hero" -> "Visiting Hero" "Boat" -> "Hero" "Combat" -> "Army" "Army" -> "Commander" "Army" -> "Unit in Army" "Army" -> "Summon in Combat" "Unit in Army" -> "Unit in Combat" "Commander" -> "Unit in Combat" "Artifact Type" -> "Artifact Instance" "Artifact Component" -> "Artifact Instance" "Artifact Instance" -> "Hero" "Creature Type" -> "Commander" "Creature Type" -> "Summon in Combat" "Creature Type" -> "Unit in Army" "Town" -> "Hero defending town" "Town" -> "Army" "Neutral Army" -> "Army" "Owned Army" -> "Army" "Visiting Hero" -> "Hero" "Hero defending town" -> "Hero" "Wandering Hero" -> "Hero" "Hero" -> "Army" }