1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-11-06 09:09:40 +02:00
Files
vcmi/docs/images/Bonus_System_Nodes.gv
2025-05-10 19:13:47 +03:00

238 lines
7.9 KiB
Plaintext

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 =<<table>
<tr><td><b>Global</b></td></tr>
<tr><td>Propagator: <font face="monospace"><b>GLOBAL_EFFECT</b></font></td></tr>
<tr><td>C++ Class: <font face="monospace"><b>CGameState</b></font></td></tr>
<tr><td>Global node to which<br/>all map entities are connected</td></tr>
<tr><td>Note: Not recruited heroes (such as in tavern)<br/>are not attached to any node</td></tr>
</table>>
]
"Team" [
label =<<table>
<tr><td><b>Team</b></td></tr>
<tr><td>Propagator: <font face="monospace"><b>TEAM_PROPAGATOR</b></font></td></tr>
<tr><td>C++ Class: <font face="monospace"><b>TeamState</b></font></td></tr>
<tr><td>Per-team node.<br/>Game will put players without team<br/>into a team with a single player</td></tr>
</table>>
]
"Player" [
label =<<table>
<tr><td><b>Player</b></td></tr>
<tr><td>Propagator: <font face="monospace"><b>PLAYER_PROPAGATOR</b></font></td></tr>
<tr><td>C++ Class: <font face="monospace"><b>CPlayerState</b></font></td></tr>
<tr><td>Per-player team.<br/>All objects owned by a player<br/>belong to such node</td></tr>
</table>>
]
};
subgraph rankedArmies {
rank="same"
"Hero" [
fillcolor="#80808080"
label =<<table>
<tr><td><b>Hero</b></td></tr>
<tr><td>Propagator: <font face="monospace"><b>HERO</b></font></td></tr>
<tr><td>C++ Class: <font face="monospace"><b>CGHeroInstance</b></font></td></tr>
<tr><td>Represents a hero, either owned by player or in prison.<br/>Bonuses from specialty and secondary skills<br/>are attached directly to this node</td></tr>
</table>>
]
"Combat" [
label =<<table>
<tr><td><b>Combat</b></td></tr>
<tr><td>Propagator: <font face="monospace"><b>BATTLE_WIDE</b></font></td></tr>
<tr><td>Node that contains both sides of a combat<br/>Anything propagated to this node will affect both sides in combat</td></tr>
</table>>
]
};
subgraph rankedHeroes {
rank="same"
"Visiting Hero" [
fillcolor="#80808080"
label =<<table>
<tr><td><b>Visiting Hero</b></td></tr>
<tr><td>Hero that is currently<br/>visiting owned or allied town</td></tr>
</table>>
]
"Garrisoned Hero" [
fillcolor="#80808080"
label =<<table>
<tr><td><b>Garrisoned Hero</b></td></tr>
<tr><td>Hero that is currently<br/>placed in a garrison of owned town</td></tr>
</table>>
]
"Wandering Hero" [
fillcolor="#80808080"
label =<<table>
<tr><td><b>Wandering Hero</b></td></tr>
<tr><td>Hero that is currently<br/>moving on map, outside of towns</td></tr>
</table>>
]
"Neutral Army" [
fillcolor="#80808080"
label =<<table>
<tr><td><b>Neutral Army</b></td></tr>
<tr><td>Any army that is not owned by a player<br/>Wandering monsters, Banks, Events, etc</td></tr>
</table>>
]
"Owned Army" [
fillcolor="#80808080"
label =<<table>
<tr><td><b>Owned Army</b></td></tr>
<tr><td>Army owned by a player.<br/>Mines, Garrisons, Dwellings</td></tr>
</table>>
]
};
subgraph rankedTopHero {
rank="same"
"Town" [
fillcolor="#80808080"
label =<<table>
<tr><td><b>Town</b></td></tr>
<tr><td>C++ Class: <font face="monospace"><b>CGTownInstance</b></font></td></tr>
<tr><td>Represents a town on map.<br/>Town buildings can provide bonuses to this node<br/>(or propagate them upward)</td></tr>
</table>>
]
"Artifact Instance" [
fillcolor="#00FFFF80"
label =<<table>
<tr><td><b>Artifact Instance</b></td></tr>
<tr><td>C++ Class: <font face="monospace"><b>CArtifact</b></font></td></tr>
<tr><td>Represents a particular instance of an artifact<br/> that hero can equip or trade</td></tr>
</table>>
]
"Boat" [
fillcolor="#00FFFF80"
label =<<table>
<tr><td><b>Boat</b></td></tr>
<tr><td>C++ Class: <font face="monospace"><b>CGBoat</b></font></td></tr>
<tr><td>Represents a boat or other type of transport.<br/>Can provide bonuses to boarded hero</td></tr>
</table>>
]
};
subgraph rankedMisc {
"Town and visiting hero" [
label =<<table>
<tr><td><b>Town and Visiting Hero</b></td></tr>
<tr><td>Propagator: <font face="monospace"><b>VISITED_TOWN_AND_VISITOR</b></font></td></tr>
<tr><td>C++ Class: <font face="monospace"><b>CTownAndVisitingHero</b></font></td></tr>
<tr><td>Helper node that exists solely<br/>to propagate bonuses to both town and visiting hero</td></tr>
<tr><td>Note: Neutral towns are attached to global node instead</td></tr>
</table>>
]
"Combat" [
label =<<table>
<tr><td><b>Combat</b></td></tr>
<tr><td>Propagator: <font face="monospace"><b>BATTLE_WIDE</b></font></td></tr>
<tr><td>C++ Class: <font face="monospace"><b>BattleInfo</b></font></td></tr>
<tr><td>Node that contains both sides of a combat<br/>Anything propagated to this node will affect both sides in combat</td></tr>
</table>>
]
"Creature Type" [
fillcolor="#00FFFF80"
label =<<table>
<tr><td><b>Creature Type</b></td></tr>
<tr><td>C++ Class: <font face="monospace"><b>CCreature</b></font></td></tr>
<tr><td>Represents a creature type, such as Pikeman or Archer</td></tr>
</table>>
]
"Artifact Type" [
fillcolor="#00FFFF80"
label =<<table>
<tr><td><b>Artifact Type</b></td></tr>
<tr><td>C++ Class: <font face="monospace"><b>CArtifact</b></font></td></tr>
<tr><td>Represents an artifact type, for example Ring of Life</td></tr>
</table>>
]
"Artifact Component" [
fillcolor="#80808080"
label =<<table>
<tr><td><b>Artifact Component</b></td></tr>
<tr><td>C++ Class: <font face="monospace"><b>CArtifact</b></font></td></tr>
<tr><td>For combined, non-fused artifacts,<br/>instances of components are attached to instance of combined artifact</td></tr>
</table>>
]
"Army" [
label =<<table>
<tr><td><b>Army</b></td></tr>
<tr><td>C++ Class: <font face="monospace"><b>CArmedInstance</b></font></td></tr>
<tr><td>Represents any object that can hold army,<br/>such as town, hero, mines, garrisons, wandering monsters</td></tr>
</table>>
]
"Unit in Army" [
label =<<table>
<tr><td><b>Unit in Army</b></td></tr>
<tr><td>C++ Class: <font face="monospace"><b>CStackInstance</b></font></td></tr>
<tr><td>Represents a unit that is part of a army<br/>A unit always has a creature type,<br/>belongs to an army and has stack size</td></tr>
</table>>
]
"Unit in Combat" [
label =<<table>
<tr><td><b>Unit in Combat</b></td></tr>
<tr><td>C++ Class: <font face="monospace"><b>CStack</b></font></td></tr>
<tr><td>Represents current state of a unit during combat,<br/>can be affected by spells or receive damage</td></tr>
</table>>
]
"Summon in Combat" [
label =<<table>
<tr><td><b>Summon in Combat</b></td></tr>
<tr><td>C++ Class: <font face="monospace"><b>CStack</b></font></td></tr>
<tr><td>Represents any unit that was added in combat,<br/>and may not remain after combat</td></tr>
</table>>
]
};
"Global" -> "Team"
"Global" -> "Neutral Army"
"Team" -> "Player"
"Player" -> "Town and visiting hero"
"Player" -> "Wandering Hero"
"Player" -> "Owned Army"
"Town and visiting hero" -> "Town"
"Town and visiting hero" -> "Visiting Hero"
"Boat" -> "Hero"
"Combat" -> "Army"
"Army" -> "Unit in Army"
"Army" -> "Summon in Combat"
"Unit in Army" -> "Unit in Combat"
"Artifact Type" -> "Artifact Instance"
"Artifact Component" -> "Artifact Instance"
"Artifact Instance" -> "Hero"
"Creature Type" -> "Summon in Combat"
"Creature Type" -> "Unit in Army"
"Town" -> "Garrisoned Hero"
"Town" -> "Army"
"Neutral Army" -> "Army"
"Owned Army" -> "Army"
"Visiting Hero" -> "Hero"
"Garrisoned Hero" -> "Hero"
"Wandering Hero" -> "Hero"
"Hero" -> "Army"
}