diff --git a/doc/nyan/aoe2_nyan_tree.svg b/doc/nyan/aoe2_nyan_tree.svg
new file mode 100644
index 0000000000..2d1bbc947c
--- /dev/null
+++ b/doc/nyan/aoe2_nyan_tree.svg
@@ -0,0 +1,5509 @@
+
+
+
diff --git a/doc/nyan/aoe2_nyan_tree.uxf b/doc/nyan/aoe2_nyan_tree.uxf
new file mode 100644
index 0000000000..8440bec694
--- /dev/null
+++ b/doc/nyan/aoe2_nyan_tree.uxf
@@ -0,0 +1,8434 @@
+
+ // Uncomment the following line to change the fontsize and font:
+// fontsize=10
+// fontfamily=SansSerif //possible: SansSerif,Serif,Monospaced
+
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+// Welcome to UMLet!
+//
+// Double-click on elements to add them to the diagram, or to copy them
+// Edit elements by modifying the text in this panel
+// Hold Ctrl to select multiple elements
+// Use Ctrl+mouse to select via lasso
+//
+// Use +/- or Ctrl+mouse wheel to zoom
+// Drag a whole relation at its central square icon
+//
+// Press Ctrl+C to copy the whole diagram to the system clipboard (then just paste it to, eg, Word)
+// Edit the files in the "palettes" directory to create your own element palettes
+//
+// Select "Custom Elements > New..." to create new element types
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+
+// This text will be stored with each diagram; use it for notes.
+ 10
+
+ UMLClass
+
+ 2670
+ 2640
+ 100
+ 60
+
+
+*Entity*
+bg=red
+
+
+
+ UMLClass
+
+ 1890
+ 2620
+ 300
+ 120
+
+ *GameEntity*
+
+bg=pink
+--
+types : set(GameEntityType)
+variants : set(Variant)
+abilities : set(Ability)
+modifiers : set(Modifier)
+
+
+
+ UMLClass
+
+ 1250
+ 2400
+ 100
+ 60
+
+
+*Ambient*
+bg=pink
+
+
+
+ UMLClass
+
+ 5400
+ 2170
+ 290
+ 80
+
+ *DropSite*
+bg=green
+
+--
+accepts : set(Resource)
+accept_on_construction : set(Resource)
+
+
+
+ UMLClass
+
+ 1660
+ 2780
+ 100
+ 60
+
+
+*Item*
+bg=pink
+
+
+
+ UMLClass
+
+ 1120
+ 2660
+ 100
+ 60
+
+
+*Unit*
+bg=pink
+
+
+
+ Relation
+
+ 2180
+ 2660
+ 510
+ 30
+
+ lt=<<-
+ 490.0;10.0;10.0;10.0
+
+
+ UMLClass
+
+ 1470
+ 2780
+ 100
+ 60
+
+
+*Relic*
+
+
+
+ UMLClass
+
+ 1350
+ 2150
+ 100
+ 60
+
+
+*Tree*
+
+
+
+ UMLClass
+
+ 1140
+ 2290
+ 100
+ 60
+
+
+*Cliff*
+
+
+
+ UMLClass
+
+ 1350
+ 2290
+ 100
+ 60
+
+
+*GoldMine*
+
+
+
+ UMLClass
+
+ 1350
+ 2220
+ 100
+ 60
+
+
+*StoneMine*
+
+
+
+ UMLClass
+
+ 2330
+ 2130
+ 300
+ 150
+
+ *ResourceSpot*
+
+bg=pink
+--
+type : Resource
+capacity : int
+decay_rate : float
+harvest_progress : set(HarvestProgress)
+gatherer_limit : int
+harvestable_by_default : bool
+
+
+
+ UMLClass
+
+ 2390
+ 2340
+ 180
+ 80
+
+ *Resource*
+bg=pink
+
+--
+name : TranslatedString
+max_storage : int
+
+
+
+ UMLClass
+
+ 1350
+ 3250
+ 120
+ 60
+
+
+*Building*
+bg=pink
+
+
+
+ UMLClass
+
+ 1480
+ 1710
+ 270
+ 80
+
+ *TranslatedString*
+bg=pink
+
+--
+translations : set(LanguageTextPair)
+
+
+
+ UMLClass
+
+ 1850
+ 1870
+ 150
+ 60
+
+
+*TranslatedObject*
+bg=pink
+
+
+
+ UMLClass
+
+ 1770
+ 1710
+ 290
+ 80
+
+ *TranslatedMarkupFile*
+bg=pink
+
+--
+translations : set(LanguageMarkupPair)
+
+
+
+ UMLClass
+
+ 2080
+ 1710
+ 280
+ 80
+
+ *TranslatedSound*
+bg=pink
+
+--
+translations : set(LanguageSoundPair)
+
+
+
+ Relation
+
+ 1910
+ 1780
+ 30
+ 110
+
+ lt=<<-
+ 10.0;90.0;10.0;10.0
+
+
+ Relation
+
+ 1600
+ 1780
+ 340
+ 60
+
+ lt=-
+ 320.0;40.0;10.0;40.0;10.0;10.0
+
+
+ Relation
+
+ 1910
+ 1780
+ 330
+ 60
+
+ lt=-
+ 10.0;40.0;310.0;40.0;310.0;10.0
+
+
+ UMLClass
+
+ 3750
+ 1460
+ 320
+ 120
+
+ *ResearchableTech*
+bg=pink
+
+--
+tech : Tech
+cost : set(ResourceAmount)
+research_time : float
+requirements : set(AvailabilityRequirement)
+
+
+
+ UMLClass
+
+ 2810
+ 2770
+ 320
+ 160
+
+ *Terrain*
+bg=pink
+
+--
+name : LanguageString
+terrain_graphic : Terrain
+sound : Sound
+passable : bool
+allowed_types : set(GameEntityType)
+blacklisted_game_entities : set(GameEntity)
+ambient : orderedset(TerrainAmbient)
+
+
+
+ UMLClass
+
+ 2780
+ 3020
+ 190
+ 70
+
+ *AnimatedTerrain*
+bg=pink
+
+--
+terrain_animation : file
+
+
+
+ UMLClass
+
+ 2990
+ 2990
+ 190
+ 100
+
+ *TerrainAmbient*
+bg=pink
+
+--
+object : Ambient
+density : int
+limit : int
+
+
+
+ UMLClass
+
+ 3300
+ 2290
+ 190
+ 80
+
+ *Sound*
+bg=pink
+
+--
+play_delay : float
+sounds : orderedset(file)
+
+
+
+ UMLClass
+
+ 3210
+ 1470
+ 100
+ 60
+
+
+*Modifier*
+bg=pink
+
+
+
+ UMLClass
+
+ 3340
+ 2570
+ 100
+ 60
+
+
+*Patch*
+bg=pink
+
+
+
+ UMLClass
+
+ 2890
+ 2560
+ 210
+ 70
+
+ *Mod*
+bg=pink
+
+--
+patches : orderedset(Patch)
+
+
+
+ Relation
+
+ 2760
+ 2660
+ 1600
+ 30
+
+ lt=<<-
+ 10.0;10.0;1580.0;10.0
+
+
+ UMLClass
+
+ 4340
+ 2640
+ 100
+ 60
+
+
+*Ability*
+bg=pink
+
+
+
+ UMLClass
+
+ 4550
+ 2380
+ 200
+ 70
+
+ *AnimatedAbility*
+bg=pink
+
+--
+animation : set(Animation)
+
+
+
+ UMLClass
+
+ 4550
+ 2290
+ 160
+ 70
+
+ *SoundAbility*
+bg=pink
+
+--
+sounds : set(Sound)
+
+
+
+
+ UMLClass
+
+ 4780
+ 2880
+ 180
+ 80
+
+ *Move*
+bg=green
+
+--
+speed : float
+mode : set(MoveMode)
+
+
+
+ UMLClass
+
+ 4110
+ 1730
+ 250
+ 80
+
+ *Construct*
+bg=green
+
+--
+costructables : set(Constructable)
+
+
+
+ UMLClass
+
+ 4540
+ 3320
+ 230
+ 80
+
+ *FormFormation*
+bg=green
+
+--
+formations : set(UnitFormation)
+
+
+
+ UMLClass
+
+ 5330
+ 3360
+ 180
+ 80
+
+ *RegenerateAttribute*
+bg=green
+
+--
+rate : AttributeRate
+
+
+
+ UMLClass
+
+ 6430
+ 990
+ 320
+ 290
+
+ *ShootProjectile*
+bg=green
+
+--
+projectiles : orderedset(Projectile)
+min_projectiles : int
+max_projectiles : int
+min_range : int
+max_range : int
+// Ballistics in AoE2
+target_mode : TargetMode
+// time until the ability can be used again
+reload_time : float
+// time to wait between the start of the ability
+// and the application of the attack
+spawn_delay : float
+// time between the firing of each projectile
+// if projectiles is > 1
+projectile_delay : float
+require_turning : bool
+spawning_area_width : float
+spawning_area_height : float
+spawning_area_randomness : float
+allowed_types : set(GameEntityType)
+blacklisted_game_entities : set(GameEntity)
+
+
+
+ UMLClass
+
+ 5300
+ 3560
+ 210
+ 80
+
+ *Resistance*
+bg=green
+
+--
+resistances : set(Resistance)
+
+
+
+ UMLClass
+
+ 4560
+ 2880
+ 160
+ 80
+
+ *Fly*
+bg=green
+
+--
+height : float
+
+
+
+ Relation
+
+ 1990
+ 1890
+ 750
+ 770
+
+ lt=<<-
+ 730.0;750.0;730.0;10.0;10.0;10.0
+
+
+ UMLClass
+
+ 3590
+ 2110
+ 200
+ 100
+
+ *Cheat*
+bg=pink
+
+--
+activation_message : text
+impact : orderedset(Patch)
+modifiers : set(Modifier)
+
+
+
+ Relation
+
+ 2560
+ 2380
+ 180
+ 30
+
+ lt=-
+ 160.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 2470
+ 2270
+ 30
+ 90
+
+ lt=<.
+ 10.0;70.0;10.0;10.0
+
+
+ Relation
+
+ 2620
+ 2190
+ 120
+ 30
+
+ lt=-
+ 10.0;10.0;100.0;10.0
+
+
+ UMLClass
+
+ 1140
+ 2220
+ 100
+ 60
+
+
+*Cactus*
+
+
+
+ Relation
+
+ 1290
+ 2310
+ 80
+ 110
+
+ lt=<<-
+ 10.0;90.0;10.0;10.0;60.0;10.0
+
+
+ Relation
+
+ 1290
+ 2240
+ 80
+ 100
+
+ lt=-
+ 60.0;10.0;10.0;10.0;10.0;80.0
+
+
+ Relation
+
+ 1290
+ 2170
+ 80
+ 100
+
+ lt=-
+ 60.0;10.0;10.0;10.0;10.0;80.0
+
+
+ Relation
+
+ 1230
+ 2240
+ 90
+ 30
+
+ lt=-
+ 10.0;10.0;70.0;10.0
+
+
+ Relation
+
+ 1230
+ 2310
+ 90
+ 30
+
+ lt=-
+ 10.0;10.0;70.0;10.0
+
+
+ Relation
+
+ 1560
+ 2800
+ 120
+ 30
+
+ lt=<<-
+ 100.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 1290
+ 2450
+ 30
+ 260
+
+ lt=-
+ 10.0;10.0;10.0;240.0
+
+
+ Relation
+
+ 1210
+ 2680
+ 700
+ 30
+
+ lt=<<-
+ 680.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 1750
+ 2800
+ 100
+ 30
+
+ lt=-
+ 10.0;10.0;80.0;10.0
+
+
+ UMLClass
+
+ 940
+ 2590
+ 100
+ 60
+
+
+*Militia*
+
+
+
+ UMLClass
+
+ 940
+ 2520
+ 100
+ 60
+
+
+*Spearman*
+
+
+
+ UMLClass
+
+ 920
+ 2450
+ 120
+ 60
+
+
+*EagleWarrior*
+
+
+
+ UMLClass
+
+ 730
+ 2450
+ 100
+ 60
+
+
+*Camel*
+
+
+
+ UMLClass
+
+ 730
+ 2520
+ 100
+ 60
+
+
+*Knight*
+
+
+
+ UMLClass
+
+ 710
+ 2590
+ 120
+ 60
+
+
+*Scout*
+
+
+
+ UMLClass
+
+ 510
+ 2450
+ 140
+ 60
+
+
+*HandConnoneer*
+
+
+
+ UMLClass
+
+ 550
+ 2520
+ 100
+ 60
+
+
+*Skirmisher*
+
+
+
+ UMLClass
+
+ 550
+ 2590
+ 100
+ 60
+
+
+*Archer*
+
+
+
+ UMLClass
+
+ 700
+ 2380
+ 130
+ 60
+
+
+*BattleElephant*
+
+
+
+ UMLClass
+
+ 340
+ 2450
+ 100
+ 60
+
+
+*Scorpion*
+
+
+
+ UMLClass
+
+ 340
+ 2520
+ 100
+ 60
+
+
+*Mangonel*
+
+
+
+ UMLClass
+
+ 320
+ 2590
+ 120
+ 60
+
+
+*Ram*
+
+
+
+ UMLClass
+
+ 340
+ 2380
+ 100
+ 60
+
+
+*Trebuchet*
+
+
+
+ UMLClass
+
+ 290
+ 2310
+ 150
+ 60
+
+
+*BombardCannon*
+
+
+
+ UMLClass
+
+ 530
+ 2940
+ 120
+ 60
+
+
+*Villager*
+
+
+
+ UMLClass
+
+ 550
+ 2730
+ 100
+ 60
+
+
+*Monk*
+
+
+
+ UMLClass
+
+ 550
+ 2800
+ 100
+ 60
+
+
+*King*
+
+
+
+ UMLClass
+
+ 530
+ 2870
+ 120
+ 60
+
+
+*TradeCart*
+
+
+
+ UMLClass
+
+ 930
+ 2730
+ 110
+ 60
+
+
+*FishingBoat*
+
+
+
+ UMLClass
+
+ 910
+ 2800
+ 130
+ 60
+
+
+*TransportBoat*
+
+
+
+ UMLClass
+
+ 940
+ 2870
+ 100
+ 60
+
+
+*FireGalley*
+
+
+
+ UMLClass
+
+ 910
+ 2940
+ 130
+ 60
+
+
+*DemolitionRaft*
+
+
+
+ UMLClass
+
+ 910
+ 3010
+ 130
+ 60
+
+
+*Galley*
+
+
+
+ UMLClass
+
+ 910
+ 3080
+ 130
+ 60
+
+
+*TradeBoat*
+
+
+
+ UMLClass
+
+ 910
+ 3150
+ 130
+ 60
+
+
+*CannonGalleon*
+
+
+
+ UMLClass
+
+ 730
+ 2730
+ 100
+ 60
+
+
+*Sheep*
+
+
+
+ UMLClass
+
+ 730
+ 2800
+ 100
+ 60
+
+
+*Deer*
+
+
+
+ UMLClass
+
+ 710
+ 2870
+ 120
+ 60
+
+
+*Wolf*
+
+
+
+ UMLClass
+
+ 710
+ 2940
+ 120
+ 60
+
+
+*Bird*
+
+
+
+ Relation
+
+ 1070
+ 2680
+ 70
+ 30
+
+ lt=<<-
+ 50.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 1030
+ 2610
+ 70
+ 100
+
+ lt=-
+ 10.0;10.0;50.0;10.0;50.0;80.0
+
+
+ Relation
+
+ 1030
+ 2540
+ 70
+ 100
+
+ lt=-
+ 10.0;10.0;50.0;10.0;50.0;80.0
+
+
+ Relation
+
+ 1030
+ 2470
+ 70
+ 100
+
+ lt=-
+ 10.0;10.0;50.0;10.0;50.0;80.0
+
+
+ Relation
+
+ 1030
+ 2680
+ 70
+ 100
+
+ lt=-
+ 50.0;10.0;50.0;80.0;10.0;80.0
+
+
+ Relation
+
+ 1030
+ 2750
+ 70
+ 100
+
+ lt=-
+ 50.0;10.0;50.0;80.0;10.0;80.0
+
+
+ Relation
+
+ 1030
+ 2820
+ 70
+ 100
+
+ lt=-
+ 50.0;10.0;50.0;80.0;10.0;80.0
+
+
+ Relation
+
+ 1030
+ 2890
+ 70
+ 100
+
+ lt=-
+ 50.0;10.0;50.0;80.0;10.0;80.0
+
+
+ Relation
+
+ 1030
+ 2960
+ 70
+ 100
+
+ lt=-
+ 50.0;10.0;50.0;80.0;10.0;80.0
+
+
+ Relation
+
+ 1030
+ 3030
+ 70
+ 100
+
+ lt=-
+ 50.0;10.0;50.0;80.0;10.0;80.0
+
+
+ Relation
+
+ 1030
+ 3100
+ 70
+ 100
+
+ lt=-
+ 50.0;10.0;50.0;80.0;10.0;80.0
+
+
+ Relation
+
+ 820
+ 2610
+ 280
+ 100
+
+ lt=-
+ 10.0;10.0;50.0;10.0;50.0;80.0;260.0;80.0
+
+
+ Relation
+
+ 820
+ 2540
+ 70
+ 100
+
+ lt=-
+ 10.0;10.0;50.0;10.0;50.0;80.0
+
+
+ Relation
+
+ 820
+ 2470
+ 70
+ 100
+
+ lt=-
+ 10.0;10.0;50.0;10.0;50.0;80.0
+
+
+ Relation
+
+ 820
+ 2400
+ 70
+ 100
+
+ lt=-
+ 10.0;10.0;50.0;10.0;50.0;80.0
+
+
+ Relation
+
+ 820
+ 2680
+ 70
+ 100
+
+ lt=-
+ 10.0;80.0;50.0;80.0;50.0;10.0
+
+
+ Relation
+
+ 820
+ 2750
+ 70
+ 100
+
+ lt=-
+ 10.0;80.0;50.0;80.0;50.0;10.0
+
+
+ Relation
+
+ 820
+ 2820
+ 70
+ 100
+
+ lt=-
+ 10.0;80.0;50.0;80.0;50.0;10.0
+
+
+ Relation
+
+ 820
+ 2890
+ 70
+ 100
+
+ lt=-
+ 10.0;80.0;50.0;80.0;50.0;10.0
+
+
+ Relation
+
+ 640
+ 2890
+ 70
+ 100
+
+ lt=-
+ 10.0;80.0;50.0;80.0;50.0;10.0
+
+
+ Relation
+
+ 640
+ 2820
+ 70
+ 100
+
+ lt=-
+ 10.0;80.0;50.0;80.0;50.0;10.0
+
+
+ Relation
+
+ 640
+ 2750
+ 70
+ 100
+
+ lt=-
+ 10.0;80.0;50.0;80.0;50.0;10.0
+
+
+ Relation
+
+ 640
+ 2680
+ 70
+ 100
+
+ lt=-
+ 10.0;80.0;50.0;80.0;50.0;10.0
+
+
+ Relation
+
+ 640
+ 2610
+ 250
+ 100
+
+ lt=-
+ 230.0;80.0;50.0;80.0;50.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 640
+ 2540
+ 70
+ 100
+
+ lt=-
+ 50.0;80.0;50.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 640
+ 2470
+ 70
+ 100
+
+ lt=-
+ 50.0;80.0;50.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 430
+ 2330
+ 70
+ 100
+
+ lt=-
+ 50.0;80.0;50.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 430
+ 2400
+ 70
+ 100
+
+ lt=-
+ 50.0;80.0;50.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 430
+ 2470
+ 70
+ 100
+
+ lt=-
+ 50.0;80.0;50.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 430
+ 2540
+ 70
+ 100
+
+ lt=-
+ 50.0;80.0;50.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 430
+ 2610
+ 280
+ 100
+
+ lt=-
+ 260.0;80.0;50.0;80.0;50.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 1460
+ 2680
+ 390
+ 620
+
+ lt=-
+ 370.0;10.0;370.0;600.0;10.0;600.0
+
+
+ UMLClass
+
+ 1310
+ 3690
+ 130
+ 60
+
+
+*LumberCamp*
+
+
+
+ UMLClass
+
+ 820
+ 3550
+ 130
+ 60
+
+
+*Mill*
+
+
+
+ UMLClass
+
+ 1310
+ 3620
+ 130
+ 60
+
+
+*MiningCamp*
+
+
+
+ Relation
+
+ 2860
+ 2920
+ 30
+ 120
+
+ lt=<<-
+ 10.0;10.0;10.0;100.0
+
+
+ Relation
+
+ 3020
+ 2920
+ 30
+ 90
+
+ lt=<.
+ 10.0;70.0;10.0;10.0
+
+
+ Relation
+
+ 3520
+ 2250
+ 90
+ 100
+
+ lt=-
+ 10.0;80.0;10.0;10.0;70.0;10.0
+
+
+ Relation
+
+ 2950
+ 2660
+ 30
+ 130
+
+ lt=-
+ 10.0;10.0;10.0;110.0
+
+
+ UMLClass
+
+ 1490
+ 3550
+ 130
+ 60
+
+
+*Barracks*
+
+
+
+ UMLClass
+
+ 1310
+ 3550
+ 130
+ 60
+
+
+*Farm*
+
+
+
+ UMLClass
+
+ 1490
+ 3900
+ 130
+ 60
+
+
+*House*
+
+
+
+ UMLClass
+
+ 1490
+ 3620
+ 130
+ 60
+
+
+*ArcheryRange*
+
+
+
+ UMLClass
+
+ 1490
+ 3690
+ 130
+ 60
+
+
+*Stable*
+
+
+
+ UMLClass
+
+ 1490
+ 3760
+ 130
+ 60
+
+
+*SiegeWorkshop*
+
+
+
+ UMLClass
+
+ 2050
+ 3460
+ 130
+ 60
+
+
+*TownCenter*
+
+
+
+ UMLClass
+
+ 1120
+ 3550
+ 130
+ 60
+
+
+*Castle*
+
+
+
+ UMLClass
+
+ 1120
+ 3620
+ 130
+ 60
+
+
+*Tower*
+
+
+
+ UMLClass
+
+ 1120
+ 3760
+ 130
+ 60
+
+
+*Outpost*
+
+
+
+ UMLClass
+
+ 1120
+ 3830
+ 130
+ 60
+
+
+*StoneWall*
+
+
+
+ UMLClass
+
+ 1770
+ 3780
+ 130
+ 60
+
+
+*StoneGate**
+
+
+
+ UMLClass
+
+ 1770
+ 3850
+ 130
+ 60
+
+
+*PalisadeGate**
+
+
+
+ UMLClass
+
+ 820
+ 3690
+ 130
+ 60
+
+
+*Blacksmith*
+
+
+
+ UMLClass
+
+ 1490
+ 3830
+ 130
+ 60
+
+
+*Monastery*
+
+
+
+ UMLClass
+
+ 1490
+ 3970
+ 130
+ 60
+
+
+*University*
+
+
+
+ UMLClass
+
+ 1310
+ 3760
+ 130
+ 60
+
+
+*Market*
+
+
+
+ UMLClass
+
+ 1120
+ 3690
+ 130
+ 60
+
+
+*BombardTower*
+
+
+
+ UMLClass
+
+ 1490
+ 4040
+ 130
+ 60
+
+
+*Wonder*
+
+
+
+ UMLClass
+
+ 820
+ 3620
+ 130
+ 60
+
+
+*FishTrap*
+
+
+
+ Relation
+
+ 1270
+ 3460
+ 150
+ 30
+
+ lt=-
+ 130.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 1240
+ 3510
+ 60
+ 90
+
+ lt=-
+ 40.0;10.0;40.0;70.0;10.0;70.0
+
+
+ Relation
+
+ 1240
+ 3570
+ 60
+ 100
+
+ lt=-
+ 40.0;10.0;40.0;80.0;10.0;80.0
+
+
+ Relation
+
+ 1240
+ 3640
+ 60
+ 100
+
+ lt=-
+ 40.0;10.0;40.0;80.0;10.0;80.0
+
+
+ Relation
+
+ 1240
+ 3710
+ 60
+ 100
+
+ lt=-
+ 40.0;10.0;40.0;80.0;10.0;80.0
+
+
+ Relation
+
+ 1240
+ 3780
+ 60
+ 100
+
+ lt=-
+ 40.0;10.0;40.0;80.0;10.0;80.0
+
+
+ Relation
+
+ 940
+ 3570
+ 90
+ 100
+
+ lt=-
+ 70.0;10.0;70.0;80.0;10.0;80.0
+
+
+ Relation
+
+ 1270
+ 3780
+ 60
+ 30
+
+ lt=-
+ 10.0;10.0;40.0;10.0
+
+
+ Relation
+
+ 1270
+ 3710
+ 60
+ 30
+
+ lt=-
+ 10.0;10.0;40.0;10.0
+
+
+ Relation
+
+ 1270
+ 3640
+ 60
+ 30
+
+ lt=-
+ 10.0;10.0;40.0;10.0
+
+
+ Relation
+
+ 1000
+ 3460
+ 300
+ 30
+
+ lt=-
+ 280.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 1270
+ 3460
+ 30
+ 80
+
+ lt=-
+ 10.0;10.0;10.0;60.0
+
+
+ Relation
+
+ 1450
+ 3570
+ 60
+ 100
+
+ lt=-
+ 10.0;10.0;10.0;80.0;40.0;80.0
+
+
+ Relation
+
+ 1450
+ 3640
+ 60
+ 100
+
+ lt=-
+ 10.0;10.0;10.0;80.0;40.0;80.0
+
+
+ Relation
+
+ 1450
+ 3710
+ 60
+ 100
+
+ lt=-
+ 10.0;10.0;10.0;80.0;40.0;80.0
+
+
+ Relation
+
+ 1450
+ 3780
+ 60
+ 100
+
+ lt=-
+ 10.0;10.0;10.0;80.0;40.0;80.0
+
+
+ Relation
+
+ 940
+ 3640
+ 90
+ 100
+
+ lt=-
+ 70.0;10.0;70.0;80.0;10.0;80.0
+
+
+ Relation
+
+ 1450
+ 3850
+ 60
+ 100
+
+ lt=-
+ 10.0;10.0;10.0;80.0;40.0;80.0
+
+
+ Relation
+
+ 1450
+ 3920
+ 60
+ 100
+
+ lt=-
+ 10.0;10.0;10.0;80.0;40.0;80.0
+
+
+ UMLClass
+
+ 7060
+ 2630
+ 230
+ 80
+
+ *Die*
+bg=green
+
+--
+condition : set(DeathCondition)
+
+
+
+ UMLClass
+
+ 5120
+ 1990
+ 220
+ 80
+
+ *Harvestable*
+bg=green
+
+--
+resources : ResourceSpot
+
+
+
+ UMLClass
+
+ 5440
+ 3670
+ 200
+ 80
+
+ *Live*
+bg=green
+
+--
+attributes : set(Attribute)
+
+
+
+ UMLClass
+
+ 3590
+ 2220
+ 190
+ 80
+
+ *Taunt*
+bg=pink
+
+--
+activation_message : text
+sound : Sound
+
+
+
+ Relation
+
+ 2980
+ 2620
+ 30
+ 70
+
+ lt=-
+ 10.0;10.0;10.0;50.0
+
+
+ Relation
+
+ 3250
+ 1520
+ 30
+ 1170
+
+ lt=-
+ 10.0;10.0;10.0;1150.0
+
+
+ Relation
+
+ 3380
+ 2620
+ 30
+ 70
+
+ lt=-
+ 10.0;10.0;10.0;50.0
+
+
+ Relation
+
+ 3520
+ 2160
+ 90
+ 120
+
+ lt=-
+ 70.0;10.0;10.0;10.0;10.0;100.0
+
+
+ UMLClass
+
+ 6890
+ 2780
+ 120
+ 60
+
+
+*Decay*
+bg=green
+
+
+
+ UMLClass
+
+ 1880
+ 3040
+ 310
+ 190
+
+ *Civilization*
+bg=pink
+
+--
+name : TranslatedString
+description : TranslatedMarkupFile
+tech_tree_help : TranslatedMarkupFile
+leader_names : set(TranslatedString)
+modifiers : set(ScopedModifier)
+starting_resources : set(ResourceAmount)
+civ_setup : orderedset(Patch)
+graphic_set : orderedset(Patch)
+diplo_setup : set(DiplomaticSetup)
+
+
+
+ Relation
+
+ 2180
+ 2840
+ 100
+ 340
+
+ lt=-
+ 10.0;320.0;80.0;320.0;80.0;10.0
+
+
+ UMLClass
+
+ 3060
+ 3290
+ 320
+ 90
+
+ *AvailabilityRequirement*
+bg=pink
+
+--
+requirements : set(Prerequisite)
+
+
+
+ Relation
+
+ 3200
+ 2660
+ 30
+ 650
+
+ lt=-
+ 10.0;10.0;10.0;630.0
+
+
+ UMLClass
+
+ 6890
+ 2710
+ 120
+ 60
+
+
+*Idle*
+bg=green
+
+
+
+ UMLClass
+
+ 3170
+ 1320
+ 170
+ 60
+
+
+*ContinuousModifier*
+bg=yellow
+
+
+
+ UMLNote
+
+ 3040
+ 1540
+ 210
+ 160
+
+ Modifier should only be used in cases where Patches don't work. For example, if the bonus is a percentage value or continuously stacks (like resources from the Feitoria). Modifier objects can still be patched.
+bg=blue
+
+
+
+ UMLClass
+
+ 3140
+ 1180
+ 240
+ 80
+
+ *ContinuousResourceModifier*
+bg=yellow
+
+--
+rate : set(ResourceRate)
+
+
+
+ Relation
+
+ 3250
+ 1250
+ 30
+ 90
+
+ lt=<<-
+ 10.0;70.0;10.0;10.0
+
+
+ UMLClass
+
+ 2390
+ 2470
+ 180
+ 80
+
+ *ResourceAmount*
+bg=pink
+
+--
+type : Resource
+amount : int
+
+
+
+ UMLClass
+
+ 2010
+ 2450
+ 120
+ 60
+
+
+*GoldAmount*
+
+
+
+ UMLClass
+
+ 2010
+ 2520
+ 120
+ 60
+
+
+*StoneAmount*
+
+
+
+ UMLClass
+
+ 2010
+ 2380
+ 120
+ 60
+
+
+*WoodAmount*
+
+
+
+ UMLClass
+
+ 2010
+ 2310
+ 120
+ 60
+
+
+*FoodAmount*
+
+
+
+ Relation
+
+ 2560
+ 2500
+ 180
+ 30
+
+ lt=-
+ 160.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 2470
+ 2410
+ 30
+ 80
+
+ lt=<.
+ 10.0;10.0;10.0;60.0
+
+
+ Relation
+
+ 2140
+ 2500
+ 270
+ 30
+
+ lt=<<-
+ 250.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 2120
+ 2330
+ 50
+ 100
+
+ lt=-
+ 10.0;10.0;30.0;10.0;30.0;80.0
+
+
+ Relation
+
+ 2120
+ 2400
+ 50
+ 100
+
+ lt=-
+ 10.0;10.0;30.0;10.0;30.0;80.0
+
+
+ Relation
+
+ 2120
+ 2490
+ 50
+ 80
+
+ lt=-
+ 10.0;60.0;30.0;60.0;30.0;10.0
+
+
+ Relation
+
+ 2120
+ 2470
+ 50
+ 50
+
+ lt=-
+ 10.0;10.0;30.0;10.0;30.0;30.0
+
+
+ Relation
+
+ 3250
+ 1370
+ 30
+ 120
+
+ lt=<<-
+ 10.0;100.0;10.0;10.0
+
+
+ UMLClass
+
+ 3110
+ 1060
+ 120
+ 60
+
+
+*FeitoriaBonus*
+
+
+
+ Relation
+
+ 3160
+ 1110
+ 120
+ 90
+
+ lt=<<-
+ 100.0;70.0;100.0;40.0;10.0;40.0;10.0;10.0
+
+
+ UMLClass
+
+ 2610
+ 1310
+ 170
+ 80
+
+ *PercentageModifier*
+bg=yellow
+
+--
+multiplier : float
+
+
+
+ Relation
+
+ 1840
+ 1370
+ 870
+ 70
+
+ lt=-
+ 850.0;50.0;10.0;50.0;10.0;10.0
+
+
+ UMLClass
+
+ 2470
+ 1210
+ 170
+ 80
+
+ *AttributeModifier*
+bg=yellow
+
+--
+attribute : Attribute
+
+
+
+ UMLClass
+
+ 2450
+ 1140
+ 190
+ 60
+
+
+*MoveSpeedModifier*
+bg=yellow
+
+
+
+ UMLClass
+
+ 2420
+ 1050
+ 220
+ 80
+
+ *GatheringRateModifier*
+bg=yellow
+
+--
+resource_spot : ResourceSpot
+
+
+
+ Relation
+
+ 2630
+ 1240
+ 80
+ 90
+
+ lt=<<-
+ 60.0;70.0;60.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 2630
+ 1160
+ 80
+ 110
+
+ lt=-
+ 60.0;90.0;60.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 2630
+ 1080
+ 80
+ 110
+
+ lt=-
+ 60.0;90.0;60.0;10.0;10.0;10.0
+
+
+ UMLClass
+
+ 3290
+ 1060
+ 120
+ 60
+
+
+*RelicBonus*
+
+
+
+ Relation
+
+ 3250
+ 1110
+ 120
+ 60
+
+ lt=-
+ 10.0;40.0;100.0;40.0;100.0;10.0
+
+
+ UMLClass
+
+ 4110
+ 1610
+ 250
+ 80
+
+ *Create*
+bg=green
+
+--
+units : set(CreatableGameEntity)
+
+
+
+ UMLClass
+
+ 4840
+ 1710
+ 230
+ 80
+
+ *Trade*
+bg=green
+
+--
+trade_routes : set(TradeRoute)
+
+
+
+
+ UMLClass
+
+ 4130
+ 1460
+ 230
+ 80
+
+ *Research*
+bg=green
+
+--
+techs : set(ResearchableTech)
+
+
+
+ UMLClass
+
+ 5570
+ 3250
+ 320
+ 100
+
+ *Gate*
+bg=green
+
+--
+range : float
+// Types that open the gate
+allowed_types : set(GameEntityType)
+blacklisted_game_entities : set(GameEntity)
+
+
+
+
+ UMLClass
+
+ 1850
+ 2810
+ 150
+ 80
+
+ *RandomVariant*
+
+bg=pink
+--
+chance : float
+
+
+
+ Relation
+
+ 2230
+ 2660
+ 50
+ 210
+
+ lt=-
+ 10.0;190.0;30.0;190.0;30.0;10.0
+
+
+ Relation
+
+ 2160
+ 2730
+ 30
+ 100
+
+ lt=<.
+ 10.0;80.0;10.0;10.0
+
+
+ UMLClass
+
+ 5090
+ 690
+ 260
+ 80
+
+ *Storage*
+bg=green
+
+--
+container : Container
+// container is emptied if Attribute amount falls below threshold
+empty_threshold : AttributeAmount
+
+
+
+ UMLClass
+
+ 5110
+ 340
+ 240
+ 170
+
+ *StorageElement*
+bg=pink
+
+--
+storage_element : GameEntity
+elements_per_slot : int
+conflicts : set(GameEntity)
+enable_abilities : set(Ability)
+disable_abilities : set(Ability)
+enable_modifiers : set(Modifier)
+disable_modifiers : set(Modifier)
+
+
+
+
+ Relation
+
+ 5210
+ 640
+ 30
+ 70
+
+ lt=<.
+ 10.0;10.0;10.0;50.0
+
+
+ UMLClass
+
+ 4920
+ 1000
+ 270
+ 90
+
+ *CollectStorage*
+bg=green
+
+--
+container : Container
+storage_elements : set(GameEntity)
+
+
+
+ UMLClass
+
+ 4920
+ 910
+ 270
+ 80
+
+ *RemoveStorage*
+bg=green
+
+--
+container : Container
+storage_elements : set(GameEntity)
+
+
+
+ UMLNote
+
+ 1460
+ 2150
+ 170
+ 130
+
+ Trees and mines are not ResourceSpots by themselves.
+They have the Harvestable ability which defines the ResourceSpot
+bg=blue
+
+
+
+ UMLNote
+
+ 2200
+ 3170
+ 220
+ 80
+
+ civ_setup patches the unique features into the objects (graphics, techs, boni, abilities, etc.)
+bg=blue
+
+
+
+ UMLNote
+
+ 1180
+ 3250
+ 160
+ 70
+
+ snow_sprites are patched in as variants
+bg=blue
+
+
+
+ UMLClass
+
+ 3550
+ 3670
+ 240
+ 130
+
+ *Progress*
+bg=pink
+
+--
+progress : int
+enable_abilities : set(Ability)
+disable_abilities : set(Ability)
+enable_modifiers : set(Modifier)
+disable_modifiers : set(Modifier)
+
+
+
+
+ Relation
+
+ 3620
+ 2660
+ 30
+ 1030
+
+ lt=-
+ 10.0;10.0;10.0;1010.0
+
+
+ UMLClass
+
+ 3440
+ 3830
+ 190
+ 80
+
+ *DamageProgress*
+bg=pink
+
+--
+attribute : Attribute
+
+
+
+ UMLClass
+
+ 3440
+ 3920
+ 190
+ 60
+
+
+*ConstructionProgress*
+bg=pink
+
+
+
+ UMLClass
+
+ 3480
+ 3990
+ 150
+ 60
+
+
+*HarvestProgress*
+bg=pink
+
+
+
+ Relation
+
+ 3620
+ 3790
+ 70
+ 90
+
+ lt=<<-
+ 50.0;10.0;50.0;70.0;10.0;70.0
+
+
+ Relation
+
+ 3620
+ 3850
+ 70
+ 120
+
+ lt=-
+ 50.0;10.0;50.0;100.0;10.0;100.0
+
+
+ Relation
+
+ 3620
+ 3940
+ 70
+ 100
+
+ lt=-
+ 50.0;10.0;50.0;80.0;10.0;80.0
+
+
+ UMLNote
+
+ 3640
+ 3540
+ 190
+ 90
+
+ Stores what sprite is used after a percentage of consruction, damage, decay or transformation is reached
+bg=blue
+
+
+
+ UMLNote
+
+ 3280
+ 4020
+ 170
+ 90
+
+ In AoE2 there is only one HarvestProgress State in the interval [0,100], but AoM had more.
+bg=blue
+
+
+
+ UMLNote
+
+ 6510
+ 1290
+ 240
+ 90
+
+ If min_projectiles is greater than the number of Projectiles in projectiles, the last projectile in the orderedset should be used
+bg=blue
+
+
+
+ Relation
+
+ 1970
+ 3350
+ 100
+ 160
+
+ lt=<<-
+ 10.0;10.0;50.0;10.0;50.0;140.0;80.0;140.0
+
+
+ UMLClass
+
+ 1710
+ 3320
+ 270
+ 90
+
+ *MultiPartBuilding*
+bg=pink
+
+--
+subbuilding_parts : set(BuildingPart)
+
+
+
+ UMLNote
+
+ 3250
+ 3010
+ 240
+ 80
+
+ Abilities and StorageElements can use these Override types
+to change any other ability's animation.
+bg=blue
+
+
+
+ UMLNote
+
+ 5130
+ 2370
+ 210
+ 100
+
+ Villager abilities for Repair, Build, Gather will be of type AnimationOverride. Gather will also be of type CarryAnimationOverride
+bg=blue
+
+
+
+ UMLClass
+
+ 3590
+ 2460
+ 190
+ 80
+
+ *Animation*
+bg=pink
+
+--
+sprite : file
+
+
+
+ Relation
+
+ 3480
+ 2320
+ 70
+ 200
+
+ lt=-
+ 10.0;10.0;50.0;10.0;50.0;180.0
+
+
+ UMLClass
+
+ 1310
+ 3830
+ 130
+ 60
+
+
+*Palisade*
+
+
+
+ Relation
+
+ 1270
+ 3850
+ 60
+ 30
+
+ lt=-
+ 40.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 1440
+ 3300
+ 290
+ 80
+
+ lt=<<-
+ 10.0;10.0;10.0;60.0;270.0;60.0
+
+
+ Relation
+
+ 1760
+ 3400
+ 30
+ 50
+
+ lt=<.
+ 10.0;30.0;10.0;10.0
+
+
+ UMLClass
+
+ 1770
+ 3710
+ 170
+ 60
+
+
+*PalisadePillar**
+
+
+
+ Relation
+
+ 1730
+ 3730
+ 60
+ 100
+
+ lt=-
+ 40.0;80.0;10.0;80.0;10.0;10.0
+
+
+ UMLClass
+
+ 2050
+ 3530
+ 130
+ 60
+
+
+*StoneGate*
+
+
+
+ UMLClass
+
+ 2050
+ 3600
+ 130
+ 60
+
+
+*PalisadeGate*
+
+
+
+ Relation
+
+ 2010
+ 3480
+ 60
+ 100
+
+ lt=-
+ 10.0;10.0;10.0;80.0;40.0;80.0
+
+
+ Relation
+
+ 2010
+ 3550
+ 60
+ 100
+
+ lt=-
+ 10.0;10.0;10.0;80.0;40.0;80.0
+
+
+ UMLNote
+
+ 2190
+ 3560
+ 140
+ 70
+
+ These are the buildable gates.
+bg=blue
+
+
+
+ UMLNote
+
+ 1950
+ 3740
+ 140
+ 70
+
+ * Non-buildable gate parts of the MultiPartBuilding gates
+bg=blue
+
+
+
+ Relation
+
+ 1730
+ 3800
+ 60
+ 100
+
+ lt=-
+ 40.0;80.0;10.0;80.0;10.0;10.0
+
+
+ UMLNote
+
+ 1210
+ 3900
+ 150
+ 60
+
+ walls have variants for pillars and connectors
+bg=blue
+
+
+
+ UMLClass
+
+ 1770
+ 3640
+ 170
+ 60
+
+
+*StoneWallPillar**
+
+
+
+ Relation
+
+ 1730
+ 3660
+ 60
+ 100
+
+ lt=-
+ 40.0;80.0;10.0;80.0;10.0;10.0
+
+
+ Relation
+
+ 1730
+ 3500
+ 60
+ 190
+
+ lt=<<-
+ 10.0;10.0;10.0;170.0;40.0;170.0
+
+
+ UMLClass
+
+ 820
+ 3760
+ 130
+ 60
+
+
+*Dock*
+
+
+
+ Relation
+
+ 940
+ 3710
+ 90
+ 100
+
+ lt=-
+ 70.0;10.0;70.0;80.0;10.0;80.0
+
+
+ Relation
+
+ 1450
+ 3990
+ 60
+ 100
+
+ lt=-
+ 10.0;10.0;10.0;80.0;40.0;80.0
+
+
+ Relation
+
+ 1270
+ 3510
+ 240
+ 90
+
+ lt=-
+ 10.0;10.0;190.0;10.0;190.0;70.0;220.0;70.0
+
+
+ Relation
+
+ 1270
+ 3570
+ 60
+ 30
+
+ lt=-
+ 10.0;10.0;40.0;10.0
+
+
+ UMLClass
+
+ 1670
+ 3430
+ 190
+ 80
+
+ *BuildingPart*
+bg=pink
+
+--
+offset_x : int
+offset_y : int
+
+
+
+ UMLClass
+
+ 2240
+ 500
+ 240
+ 60
+
+
+*FlatAtttributeChangeModifier*
+bg=yellow
+
+
+
+ UMLClass
+
+ 1850
+ 440
+ 320
+ 80
+
+ *FlyoverModifier*
+bg=yellow
+
+--
+flyover_types : set(GameEntityType)
+blacklisted_game_entities : set(GameEntity)
+
+
+
+ Relation
+
+ 2470
+ 520
+ 90
+ 100
+
+ lt=-
+ 70.0;80.0;70.0;10.0;10.0;10.0
+
+
+ UMLClass
+
+ 1990
+ 530
+ 180
+ 60
+
+
+*ElevationModifier*
+bg=yellow
+
+
+
+ Relation
+
+ 2190
+ 520
+ 70
+ 30
+
+ lt=<<-
+ 50.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 2160
+ 470
+ 60
+ 80
+
+ lt=-
+ 40.0;60.0;40.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 2160
+ 520
+ 60
+ 60
+
+ lt=-
+ 40.0;10.0;40.0;40.0;10.0;40.0
+
+
+ UMLNote
+
+ 290
+ 440
+ 190
+ 70
+
+ Pink elements:
+
+Basic nyan API objects
+
+bg=pink
+
+
+
+ UMLNote
+
+ 290
+ 520
+ 190
+ 70
+
+ Green elements:
+
+Abilities (handled by engine implementation)
+bg=green
+
+
+
+ UMLNote
+
+ 290
+ 600
+ 190
+ 70
+
+ Yellow elements:
+
+Modifiers (handled by engine implementation)
+bg=yellow
+
+
+
+ UMLNote
+
+ 290
+ 780
+ 190
+ 70
+
+ White elements:
+
+AoE2 specific objects
+
+
+
+ UMLClass
+
+ 4210
+ 1820
+ 150
+ 70
+
+ *RallyPoint*
+bg=green
+
+--
+flag : Ambient
+
+
+
+ UMLClass
+
+ 6890
+ 2850
+ 130
+ 60
+
+
+*Selectable*
+bg=green
+
+
+
+ UMLClass
+
+ 4270
+ 3990
+ 240
+ 90
+
+ *Transform*
+bg=green
+
+--
+states : set(TransformState)
+initial_state : TransformState
+
+
+
+ UMLClass
+
+ 4530
+ 3990
+ 330
+ 100
+
+ *TransformTo*
+bg=green
+
+--
+target_state : TransformState
+transform_time : float
+transform_progress : set(TransformProgress)
+
+
+
+ Relation
+
+ 3620
+ 4080
+ 70
+ 100
+
+ lt=-
+ 50.0;10.0;50.0;80.0;10.0;80.0
+
+
+ UMLClass
+
+ 3460
+ 4130
+ 170
+ 60
+
+
+*TransformProgress*
+bg=pink
+
+
+
+ UMLClass
+
+ 4270
+ 4120
+ 240
+ 80
+
+ *TransformState*
+bg=pink
+
+--
+enabled_abilities : set(Ability)
+enabled_modifiers : set(Modifier)
+
+
+
+ Relation
+
+ 4370
+ 4070
+ 30
+ 70
+
+ lt=<.
+ 10.0;50.0;10.0;10.0
+
+
+ UMLClass
+
+ 1770
+ 1320
+ 160
+ 60
+
+
+*DiscreteModifier*
+bg=yellow
+
+
+
+ Relation
+
+ 2680
+ 1380
+ 600
+ 60
+
+ lt=-
+ 580.0;40.0;10.0;40.0;10.0;10.0
+
+
+ UMLClass
+
+ 2030
+ 2810
+ 210
+ 80
+
+ *Variant*
+bg=pink
+
+--
+changes : orderedset(Patch)
+
+
+
+ Relation
+
+ 1990
+ 2840
+ 60
+ 30
+
+ lt=<<-
+ 40.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 940
+ 3460
+ 90
+ 140
+
+ lt=-
+ 70.0;10.0;70.0;120.0;10.0;120.0
+
+
+ UMLClass
+
+ 2930
+ 3550
+ 250
+ 90
+
+ *TechPrerequisite*
+bg=pink
+
+--
+techs : set(Tech)
+min_techs : int
+
+
+
+ UMLClass
+
+ 3250
+ 3550
+ 270
+ 90
+
+ *BuildingPrerequisite*
+bg=pink
+
+--
+buildings : set(Building)
+min_buildings : int
+
+
+
+ Relation
+
+ 3150
+ 3500
+ 30
+ 70
+
+ lt=<<-
+ 10.0;10.0;10.0;50.0
+
+
+ Relation
+
+ 3250
+ 3500
+ 30
+ 70
+
+ lt=<<-
+ 10.0;10.0;10.0;50.0
+
+
+ UMLClass
+
+ 4960
+ 800
+ 230
+ 100
+
+ *TransferStorage*
+bg=green
+
+--
+storage_element : GameEntity
+source_container : Container
+target_container : Container
+
+
+
+ UMLClass
+
+ 3250
+ 2810
+ 210
+ 70
+
+ *CarryAnimationOverride*
+bg=pink
+
+--
+carry_threshold : float
+
+
+
+
+ UMLClass
+
+ 3250
+ 2690
+ 260
+ 80
+
+ *TemporaryAnimationOverride*
+bg=pink
+
+--
+overrides : set(AnimationOverride)
+
+
+
+ Relation
+
+ 3200
+ 2720
+ 70
+ 30
+
+ lt=-
+ 10.0;10.0;50.0;10.0
+
+
+ UMLClass
+
+ 5250
+ 1000
+ 160
+ 60
+
+
+*SendBackToWork*
+bg=green
+
+
+
+
+ UMLClass
+
+ 4540
+ 3410
+ 190
+ 80
+
+ *UnitStance*
+bg=green
+
+--
+stances: set(UnitStance)
+
+
+
+ UMLClass
+
+ 4820
+ 3410
+ 120
+ 60
+
+
+*UnitStance*
+bg=pink
+
+
+
+ Relation
+
+ 4720
+ 3430
+ 120
+ 30
+
+ lt=<.
+ 100.0;10.0;10.0;10.0
+
+
+ UMLClass
+
+ 5090
+ 2980
+ 110
+ 60
+
+
+*Patrol*
+bg=pink
+
+
+
+ UMLClass
+
+ 5090
+ 3050
+ 110
+ 60
+
+
+*Follow*
+bg=pink
+
+
+
+ UMLClass
+
+ 5090
+ 3120
+ 110
+ 60
+
+
+*Guard*
+bg=pink
+
+
+
+ Relation
+
+ 5040
+ 2940
+ 70
+ 90
+
+ lt=<<-
+ 10.0;10.0;10.0;70.0;50.0;70.0
+
+
+ Relation
+
+ 5040
+ 3000
+ 70
+ 100
+
+ lt=-
+ 10.0;10.0;10.0;80.0;50.0;80.0
+
+
+ Relation
+
+ 5040
+ 3070
+ 70
+ 100
+
+ lt=-
+ 10.0;10.0;10.0;80.0;50.0;80.0
+
+
+ UMLClass
+
+ 6800
+ 1010
+ 150
+ 60
+
+
+*AttackGround*
+bg=green
+
+
+
+ Relation
+
+ 6740
+ 1030
+ 80
+ 30
+
+ lt=<<-
+ 10.0;10.0;60.0;10.0
+
+
+ UMLClass
+
+ 4840
+ 1620
+ 290
+ 80
+
+ *TradePost*
+bg=green
+
+--
+allowed_trade_routes : set(TradeRoute)
+
+
+
+ UMLClass
+
+ 4840
+ 1510
+ 310
+ 90
+
+ *TradeResource*
+bg=green
+
+--
+sell_resources : set(ResourceAmount)
+receive_resources : set(ResourceAmount)
+
+
+
+ UMLClass
+
+ 4780
+ 3500
+ 100
+ 60
+
+
+*Agressive*
+bg=pink
+
+
+
+ UMLClass
+
+ 4780
+ 3570
+ 100
+ 60
+
+
+*Defensive*
+bg=pink
+
+
+
+ UMLClass
+
+ 4760
+ 3640
+ 120
+ 60
+
+
+*StandGround*
+bg=pink
+
+
+
+ UMLClass
+
+ 4780
+ 3710
+ 100
+ 60
+
+
+*Passive*
+bg=pink
+
+
+
+ Relation
+
+ 4870
+ 3520
+ 60
+ 100
+
+ lt=-
+ 40.0;10.0;40.0;80.0;10.0;80.0
+
+
+ Relation
+
+ 4870
+ 3460
+ 60
+ 90
+
+ lt=<<-
+ 40.0;10.0;40.0;70.0;10.0;70.0
+
+
+ Relation
+
+ 4870
+ 3590
+ 60
+ 100
+
+ lt=-
+ 40.0;10.0;40.0;80.0;10.0;80.0
+
+
+ Relation
+
+ 4870
+ 3660
+ 60
+ 100
+
+ lt=-
+ 40.0;10.0;40.0;80.0;10.0;80.0
+
+
+ UMLClass
+
+ 5070
+ 2080
+ 270
+ 140
+
+ *Restock*
+bg=green
+
+--
+auto_restock : bool
+target : RestockableResourceSpot
+restock_time : float
+manual_cost : set(ResourceAmount)
+auto_cost : set(ResourceAmount)
+amount : int
+
+
+
+ Relation
+
+ 1390
+ 3300
+ 300
+ 190
+
+ lt=<<-
+ 10.0;10.0;10.0;170.0;280.0;170.0
+
+
+ UMLClass
+
+ 1850
+ 2900
+ 170
+ 80
+
+ *PerspectiveVariant*
+
+bg=pink
+--
+angle : int
+
+
+
+ Relation
+
+ 2010
+ 2880
+ 140
+ 80
+
+ lt=<<-
+ 120.0;10.0;120.0;60.0;10.0;60.0
+
+
+ UMLClass
+
+ 6480
+ 3800
+ 220
+ 80
+
+ *Foundation*
+bg=green
+
+--
+foundation_terrain : Terrain
+flatten_terrain : bool
+
+
+
+ UMLClass
+
+ 6890
+ 2570
+ 120
+ 60
+
+
+*Passable*
+bg=green
+
+
+
+ UMLClass
+
+ 6890
+ 2500
+ 120
+ 60
+
+ // Triggers Die ability if present
+
+*Deletable*
+bg=green
+
+
+
+ UMLClass
+
+ 6890
+ 2430
+ 120
+ 60
+
+ // Returns unit to Idle state
+
+*Stop*
+bg=green
+
+
+
+ UMLClass
+
+ 6890
+ 2920
+ 230
+ 80
+
+ *Herdable*
+bg=green
+
+--
+adjacent_discover_range : float
+
+
+
+ UMLClass
+
+ 5400
+ 2260
+ 140
+ 60
+
+
+*DropResources*
+bg=green
+
+
+
+ UMLClass
+
+ 5240
+ 3250
+ 270
+ 100
+
+ *Named*
+bg=green
+
+--
+name : TranslatedString
+description : TranslatedMarkupFile
+ingame_help : TranslatedMarkupFile
+
+
+
+ UMLClass
+
+ 5370
+ 3450
+ 140
+ 100
+
+ *Hitbox*
+bg=green
+
+--
+radius_x : float
+radius_y : float
+radius_z : float
+
+
+
+ UMLClass
+
+ 6240
+ 3610
+ 180
+ 90
+
+ *TileRequirement*
+bg=green
+
+--
+tile_width : int
+tile_length : int
+
+
+
+ UMLClass
+
+ 6480
+ 3710
+ 250
+ 80
+
+ *TerrainRequirement*
+bg=green
+
+--
+terrain_requirement : set(Terrain)
+
+
+
+ UMLClass
+
+ 6110
+ 3710
+ 310
+ 80
+
+ *Constructable*
+bg=green
+
+--
+construction_progress : set(BuildProgress)
+
+
+
+ UMLClass
+
+ 6110
+ 3800
+ 310
+ 80
+
+ *Damageable*
+bg=green
+
+--
+damage_progress : set(DamageProgress)
+
+
+
+ UMLClass
+
+ 6430
+ 830
+ 320
+ 150
+
+ *Projectile*
+bg=green
+
+--
+die_on_hit : bool
+// ignore these game entities for hit detection
+ignored_types : set(GameEntityType)
+unignore_entities : set(GameEntity)
+pass_through_range : int
+// arc in degrees
+arc : int
+accuracy : set(Accuracy)
+
+
+
+ UMLClass
+
+ 1660
+ 2940
+ 100
+ 60
+
+
+*Projectile*
+bg=pink
+
+
+
+ Relation
+
+ 1750
+ 2960
+ 100
+ 30
+
+ lt=-
+ 10.0;10.0;80.0;10.0
+
+
+ UMLClass
+
+ 1470
+ 2940
+ 100
+ 60
+
+
+*Arrow*
+
+
+
+ Relation
+
+ 1560
+ 2960
+ 120
+ 30
+
+ lt=<<-
+ 100.0;10.0;10.0;10.0
+
+
+ UMLClass
+
+ 3130
+ 3430
+ 160
+ 80
+
+ *Prerequisite*
+bg=pink
+
+--
+negation : bool
+
+
+
+ Relation
+
+ 3200
+ 3370
+ 30
+ 80
+
+ lt=<.
+ 10.0;60.0;10.0;10.0
+
+
+ UMLNote
+
+ 2970
+ 3170
+ 230
+ 110
+
+ Only one of the AvailabilityRequirements has to be fulfilled, but all of the Prerequisites are needed for an AvailabilityRequirement to be fulfilled.
+bg=blue
+
+
+
+ UMLClass
+
+ 2330
+ 2000
+ 300
+ 90
+
+ *RestockableResourceSpot*
+
+bg=pink
+--
+destruction_time_limit : float
+restock_progress : set(RestockProgress)
+
+
+
+ UMLClass
+
+ 2180
+ 2340
+ 180
+ 80
+
+ *ResourceContingent*
+bg=pink
+
+--
+min_amount : int
+max_amount : int
+
+
+
+ Relation
+
+ 2350
+ 2370
+ 60
+ 30
+
+ lt=<<-
+ 40.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 2470
+ 2080
+ 30
+ 70
+
+ lt=<<-
+ 10.0;50.0;10.0;10.0
+
+
+ UMLClass
+
+ 5400
+ 1990
+ 250
+ 80
+
+ *ProvideContingent*
+bg=green
+
+--
+amount : set(ResourceAmount)
+
+
+
+ UMLClass
+
+ 5400
+ 2080
+ 250
+ 80
+
+ *UseContingent*
+bg=green
+
+--
+amount : set(ResourceAmount)
+
+
+
+ UMLClass
+
+ 3750
+ 1590
+ 320
+ 130
+
+ *CreatableGameEntity*
+bg=pink
+
+--
+game_entity : GameEntity
+cost : set(ResourceAmount)
+creation_time : float
+requirements : set(AvailabilityRequirement)
+// determines how a game entity is placed after creation
+placement_mode : PlacementMode
+
+
+
+ Relation
+
+ 4060
+ 1640
+ 70
+ 30
+
+ lt=<.
+ 10.0;10.0;50.0;10.0
+
+
+ UMLClass
+
+ 3590
+ 2550
+ 190
+ 80
+
+ *Terrain*
+bg=pink
+
+--
+sprite : file
+
+
+
+ Relation
+
+ 3520
+ 2580
+ 90
+ 110
+
+ lt=-
+ 70.0;10.0;10.0;10.0;10.0;90.0
+
+
+ UMLClass
+
+ 5200
+ 1500
+ 380
+ 120
+
+ *TradeResourceWithModifier*
+bg=green
+
+--
+sell_price_modifier : float
+change_sell_per_transfer : set(ResourceAmount)
+receive_price_modifier : float
+change_sell_receive_transfer : set(ResourceAmount)
+
+
+
+ Relation
+
+ 5140
+ 1540
+ 80
+ 30
+
+ lt=<<-
+ 10.0;10.0;60.0;10.0
+
+
+ UMLClass
+
+ 3470
+ 4060
+ 160
+ 60
+
+
+*RestockProgress*
+bg=pink
+
+
+
+ Relation
+
+ 3620
+ 4010
+ 70
+ 100
+
+ lt=-
+ 50.0;10.0;50.0;80.0;10.0;80.0
+
+
+ Relation
+
+ 3520
+ 2490
+ 90
+ 120
+
+ lt=-
+ 70.0;10.0;10.0;10.0;10.0;100.0
+
+
+ UMLClass
+
+ 6480
+ 3610
+ 350
+ 90
+
+ *OverlayTerrain*
+bg=green
+
+--
+terrain : Terrain
+progress : set(TerrainProgress)
+
+
+
+ UMLNote
+
+ 6840
+ 3610
+ 120
+ 30
+
+ Used for farms
+bg=blue
+
+
+
+ UMLClass
+
+ 3300
+ 3670
+ 220
+ 80
+
+ *AnimationProgress*
+bg=pink
+
+--
+progress_sprite : Animation
+
+
+
+
+ UMLClass
+
+ 3830
+ 3670
+ 220
+ 80
+
+ *TerrainProgress*
+bg=pink
+
+--
+progress_sprite : Terrain
+
+
+
+
+ Relation
+
+ 3510
+ 3700
+ 60
+ 30
+
+ lt=<<-
+ 40.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 3780
+ 3700
+ 70
+ 30
+
+ lt=<<-
+ 10.0;10.0;50.0;10.0
+
+
+ UMLClass
+
+ 5420
+ 3810
+ 240
+ 110
+
+ *Attribute*
+bg=pink
+
+--
+name : TranslatedString
+abbreviation : TranslatedString
+max_value : int
+min_value : int
+
+
+
+ UMLClass
+
+ 5430
+ 3960
+ 210
+ 80
+
+ *ProtectingAttribute*
+bg=pink
+
+--
+protects : Attribute
+
+
+
+ Relation
+
+ 5530
+ 3740
+ 30
+ 90
+
+ lt=<.
+ 10.0;70.0;10.0;10.0
+
+
+ Relation
+
+ 5520
+ 3910
+ 30
+ 70
+
+ lt=<<-
+ 10.0;10.0;10.0;50.0
+
+
+ UMLClass
+
+ 5460
+ 4080
+ 150
+ 60
+
+
+*Shield (SWGB)*
+
+
+
+ Relation
+
+ 5520
+ 4030
+ 30
+ 70
+
+ lt=<<-
+ 10.0;10.0;10.0;50.0
+
+
+ UMLClass
+
+ 5760
+ 3880
+ 100
+ 60
+
+
+*Faith*
+
+
+
+ Relation
+
+ 5650
+ 3890
+ 130
+ 30
+
+ lt=<<-
+ 10.0;10.0;110.0;10.0
+
+
+ UMLClass
+
+ 5570
+ 3450
+ 180
+ 80
+
+ *LineOfSight*
+bg=green
+
+--
+line_of_sight : float
+
+
+
+ UMLClass
+
+ 5570
+ 3360
+ 210
+ 80
+
+ *Stealth (SWGB)*
+bg=green
+
+--
+interrupted_by : set(Ability)
+
+
+
+ UMLClass
+
+ 6800
+ 860
+ 270
+ 110
+
+ *Accuracy*
+bg=pink
+
+--
+target_types : set(GameEntityType)
+blacklisted_entities : set(GameEntity)
+accuracy : float
+accuracy_dispersion : float
+
+
+
+ Relation
+
+ 6740
+ 900
+ 80
+ 30
+
+ lt=<.
+ 60.0;10.0;10.0;10.0
+
+
+ UMLClass
+
+ 5200
+ 3780
+ 160
+ 80
+
+ *AttributeAmount*
+bg=pink
+
+--
+type : Attribute
+amount : int
+
+
+
+ Relation
+
+ 5350
+ 3830
+ 90
+ 30
+
+ lt=<.
+ 70.0;10.0;10.0;10.0
+
+
+ UMLClass
+
+ 2230
+ 2590
+ 140
+ 60
+
+
+*GameEntityType*
+bg=pink
+
+
+
+ Relation
+
+ 2180
+ 2620
+ 70
+ 30
+
+ lt=<.
+ 50.0;10.0;10.0;10.0
+
+
+ UMLClass
+
+ 5760
+ 3950
+ 100
+ 60
+
+
+*Health*
+
+
+
+ Relation
+
+ 5690
+ 3890
+ 90
+ 120
+
+ lt=-
+ 10.0;10.0;10.0;100.0;70.0;100.0
+
+
+ Relation
+
+ 2290
+ 2640
+ 30
+ 50
+
+ lt=-
+ 10.0;30.0;10.0;10.0
+
+
+ Relation
+
+ 2440
+ 2660
+ 30
+ 1390
+
+ lt=-
+ 10.0;1370.0;10.0;10.0
+
+
+ Relation
+
+ 2440
+ 4020
+ 410
+ 80
+
+ lt=-
+ 10.0;10.0;390.0;10.0;390.0;60.0
+
+
+ UMLClass
+
+ 2780
+ 4080
+ 100
+ 60
+
+
+*Resistance*
+bg=pink
+
+
+
+ UMLClass
+
+ 2000
+ 4080
+ 100
+ 60
+
+
+*Effect*
+bg=pink
+
+
+
+ Relation
+
+ 2040
+ 4020
+ 430
+ 80
+
+ lt=-
+ 410.0;10.0;10.0;10.0;10.0;60.0
+
+
+ UMLNote
+
+ 2690
+ 3980
+ 140
+ 40
+
+ Resistors' side
+bg=blue
+
+
+
+ UMLNote
+
+ 2050
+ 3980
+ 140
+ 40
+
+ Effectors' side
+bg=blue
+
+
+
+ UMLClass
+
+ 2150
+ 4290
+ 350
+ 130
+
+ *FlatAttributeChange*
+bg=pink
+
+--
+type : AttributeChangeType
+min_change_value : optional(AttributeAmount)
+max_change_value : optional(AttributeAmount)
+change_value : AttributeAmount
+ignore_protection : set(ProtectingAttribute)
+
+
+
+ UMLClass
+
+ 2960
+ 4290
+ 250
+ 90
+
+ *FlatAttributeResistance*
+bg=pink
+
+--
+type : AttributeChangeType
+block_value : AttributeAmount
+
+
+
+ UMLClass
+
+ 2520
+ 3750
+ 190
+ 60
+
+
+*AttributeChangeType*
+bg=pink
+
+
+
+ UMLClass
+
+ 2150
+ 4690
+ 280
+ 100
+
+ *ChanceEffect*
+bg=orange
+
+--
+type : ChanceType
+chance_success : float
+cost_fail : optional(AttributeAmount)
+
+
+
+ UMLClass
+
+ 2960
+ 4690
+ 280
+ 100
+
+ *ChanceResistance*
+bg=orange
+
+--
+type : ChanceType
+chance_resist : float
+
+
+
+ UMLClass
+
+ 2220
+ 4810
+ 240
+ 80
+
+ *AoE2Conversion*
+bg=orange
+
+--
+skip_guaranteed_rounds : int
+skip_protected_rounds : int
+
+
+
+ UMLClass
+
+ 3010
+ 4810
+ 240
+ 100
+
+ *AoE2ConversionResistance*
+bg=orange
+
+--
+// How man applications of the effect
+// will always be resisted:
+guaranteed_resist_rounds : int
+// After these rounds resistance drops to 0
+protected_rounds : int
+// How long it takes for the protection
+// to recharge
+protection_recharge_time : float
+
+
+
+ UMLClass
+
+ 1800
+ 4190
+ 180
+ 60
+
+
+*ContinuousEffect*
+bg=orange
+
+
+
+
+ UMLClass
+
+ 1650
+ 4290
+ 330
+ 130
+
+ *FlatAttributeChange*
+bg=pink
+
+--
+type : AttributeChangeType
+min_change_rate : optional(AttributeRate)
+max_change_rate : optional(AttributeRate)
+change_rate : AttributeRate
+ignore_protection : set(ProtectingAttribute)
+
+
+
+ UMLClass
+
+ 2150
+ 4190
+ 170
+ 60
+
+
+*DiscreteEffect*
+bg=orange
+
+
+
+ UMLClass
+
+ 2960
+ 4190
+ 180
+ 60
+
+
+*DiscreteResistance*
+bg=orange
+
+
+
+ UMLClass
+
+ 2390
+ 2560
+ 180
+ 80
+
+ *ResourceRate*
+bg=pink
+
+--
+type : Resource
+rate : float
+
+
+
+ Relation
+
+ 2560
+ 2590
+ 180
+ 30
+
+ lt=-
+ 160.0;10.0;10.0;10.0
+
+
+ UMLClass
+
+ 5200
+ 3870
+ 160
+ 80
+
+ *AttributeRate*
+bg=pink
+
+--
+type : Attribute
+amount : int
+
+
+
+ Relation
+
+ 2040
+ 4130
+ 30
+ 60
+
+ lt=<<-
+ 10.0;10.0;10.0;40.0
+
+
+ Relation
+
+ 1880
+ 4160
+ 190
+ 50
+
+ lt=-
+ 170.0;10.0;10.0;10.0;10.0;30.0
+
+
+ Relation
+
+ 2040
+ 4160
+ 210
+ 50
+
+ lt=-
+ 10.0;10.0;190.0;10.0;190.0;30.0
+
+
+ Relation
+
+ 2650
+ 4160
+ 200
+ 50
+
+ lt=-
+ 180.0;10.0;10.0;10.0;10.0;30.0
+
+
+ Relation
+
+ 2820
+ 4130
+ 30
+ 60
+
+ lt=<<-
+ 10.0;10.0;10.0;40.0
+
+
+ Relation
+
+ 2820
+ 4160
+ 240
+ 50
+
+ lt=-
+ 10.0;10.0;220.0;10.0;220.0;30.0
+
+
+ UMLClass
+
+ 2570
+ 4190
+ 180
+ 60
+
+
+*ContinuousResistance*
+bg=orange
+
+
+
+ Relation
+
+ 2440
+ 3770
+ 100
+ 30
+
+ lt=-
+ 10.0;10.0;80.0;10.0
+
+
+ UMLClass
+
+ 2540
+ 4290
+ 210
+ 90
+
+ *FlatResistance*
+bg=pink
+
+--
+type : AttributeChangeType
+block_rate : AttributeRate
+
+
+
+ Relation
+
+ 2110
+ 4210
+ 60
+ 140
+
+ lt=<<-
+ 40.0;10.0;10.0;10.0;10.0;120.0;40.0;120.0
+
+
+ Relation
+
+ 1970
+ 4210
+ 60
+ 140
+
+ lt=<<-
+ 10.0;10.0;40.0;10.0;40.0;120.0;10.0;120.0
+
+
+ Relation
+
+ 2110
+ 4620
+ 60
+ 130
+
+ lt=-
+ 10.0;10.0;10.0;110.0;40.0;110.0
+
+
+ Relation
+
+ 2190
+ 4780
+ 50
+ 90
+
+ lt=<<-
+ 10.0;10.0;10.0;70.0;30.0;70.0
+
+
+ Relation
+
+ 2980
+ 4780
+ 50
+ 90
+
+ lt=<<-
+ 10.0;10.0;10.0;70.0;30.0;70.0
+
+
+ Relation
+
+ 2920
+ 4320
+ 60
+ 330
+
+ lt=-
+ 10.0;10.0;10.0;310.0;40.0;310.0
+
+
+ Relation
+
+ 2920
+ 4210
+ 60
+ 140
+
+ lt=<<-
+ 40.0;10.0;10.0;10.0;10.0;120.0;40.0;120.0
+
+
+ Relation
+
+ 2740
+ 4210
+ 60
+ 140
+
+ lt=<<-
+ 10.0;10.0;40.0;10.0;40.0;120.0;10.0;120.0
+
+
+ UMLClass
+
+ 6690
+ 1780
+ 320
+ 140
+
+ *ApplyDiscreteEffect*
+bg=green
+
+--
+effects : set(DiscreteEffect)
+// time until the effects can be applied again
+reload_time : float
+// time to wait between the start of the ability
+// and the application of the effects
+application_delay : float
+// the types the effects can be applied on
+allowed_types : set(GameEntityType)
+blacklisted_game_entities : set(GameEntity)
+
+
+
+ UMLClass
+
+ 6690
+ 1600
+ 320
+ 120
+
+ *ApplyContinuousEffect*
+bg=green
+
+--
+effects : set(ContinuousEffect)
+// time to wait between the start of the ability
+// and the application of the effects
+application_delay : float
+allowed_types : set(GameEntityType)
+blacklisted_game_entities : set(GameEntity)
+
+
+
+ UMLClass
+
+ 7070
+ 1500
+ 140
+ 60
+
+
+*MonkHeal*
+
+
+
+ UMLClass
+
+ 7070
+ 1630
+ 110
+ 60
+
+
+*Repair*
+
+
+
+ Relation
+
+ 2110
+ 4320
+ 60
+ 330
+
+ lt=-
+ 10.0;10.0;10.0;310.0;40.0;310.0
+
+
+ UMLClass
+
+ 5100
+ 2230
+ 240
+ 130
+
+ *Gather*
+bg=green
+
+--
+auto_resume : bool
+resume_search_range : float
+targets: set(ResourceSpot)
+carry_capacity : int
+gather_rate : ResourceRate
+
+
+
+ UMLClass
+
+ 2150
+ 4590
+ 260
+ 80
+
+ *MakeHarvestable*
+bg=orange
+
+--
+resource_spot : ResourceSpot
+
+
+
+ UMLClass
+
+ 2960
+ 4590
+ 340
+ 80
+
+ *HarvestableResistance*
+bg=orange
+
+--
+resist_condition : set(AvailabilityRequirement)
+
+
+
+ Relation
+
+ 6910
+ 1520
+ 180
+ 30
+
+ lt=<<-
+ 10.0;10.0;160.0;10.0
+
+
+ UMLClass
+
+ 6690
+ 1490
+ 230
+ 80
+
+ *RangedContinuousEffect*
+bg=green
+
+--
+min_range : int
+max_range : int
+
+
+
+ Relation
+
+ 7000
+ 1650
+ 90
+ 30
+
+ lt=<<-
+ 10.0;10.0;70.0;10.0
+
+
+ UMLClass
+
+ 7430
+ 2640
+ 140
+ 60
+
+
+*SelfDestruct*
+
+
+
+
+ Relation
+
+ 7280
+ 2660
+ 170
+ 30
+
+ lt=<<-
+ 10.0;10.0;150.0;10.0
+
+
+ Relation
+
+ 6880
+ 1980
+ 650
+ 680
+
+ lt=<<-
+ 10.0;10.0;630.0;10.0;630.0;660.0
+
+
+ UMLClass
+
+ 6730
+ 2080
+ 130
+ 60
+
+
+*Convert*
+
+
+
+ Relation
+
+ 6780
+ 2020
+ 30
+ 80
+
+ lt=<<-
+ 10.0;10.0;10.0;60.0
+
+
+ UMLClass
+
+ 2520
+ 3840
+ 120
+ 60
+
+
+*ChanceType*
+bg=pink
+
+
+
+ Relation
+
+ 2440
+ 3860
+ 100
+ 30
+
+ lt=-
+ 10.0;10.0;80.0;10.0
+
+
+ Relation
+
+ 2920
+ 4620
+ 60
+ 140
+
+ lt=-
+ 10.0;10.0;10.0;120.0;40.0;120.0
+
+
+ UMLClass
+
+ 7070
+ 1820
+ 120
+ 60
+
+
+*Hunt*
+
+
+
+ UMLClass
+
+ 6690
+ 1950
+ 200
+ 80
+
+ *RangedDiscreteEffect*
+bg=green
+
+--
+min_range : int
+max_range : int
+
+
+
+ Relation
+
+ 6780
+ 1910
+ 30
+ 60
+
+ lt=<<-
+ 10.0;10.0;10.0;40.0
+
+
+ UMLClass
+
+ 5250
+ 800
+ 260
+ 80
+
+ *EnterContainer*
+bg=green
+
+--
+allowed_containers : set(Container)
+
+
+
+ UMLClass
+
+ 5250
+ 910
+ 260
+ 80
+
+ *ExitContainer*
+bg=green
+
+--
+allowed_containers : set(Container)
+
+
+
+ UMLClass
+
+ 3590
+ 2380
+ 160
+ 60
+
+
+*DiplomaticStance*
+bg=pink
+
+
+
+ Relation
+
+ 3520
+ 2400
+ 90
+ 30
+
+ lt=-
+ 70.0;10.0;10.0;10.0
+
+
+ UMLClass
+
+ 4550
+ 2470
+ 240
+ 70
+
+ *DiplomaticAbility*
+bg=pink
+
+--
+stances : set(DiplomaticStance)
+
+
+
+ UMLClass
+
+ 1680
+ 3970
+ 240
+ 80
+
+ *DiplomaticEffect*
+bg=pink
+
+--
+stances : set(DiplomaticStance)
+
+
+
+ Relation
+
+ 1910
+ 4100
+ 110
+ 30
+
+ lt=<<-
+ 90.0;10.0;10.0;10.0
+
+
+ UMLClass
+
+ 2430
+ 600
+ 220
+ 60
+
+
+*EffectPercentageModifier*
+bg=yellow
+
+
+
+ Relation
+
+ 2530
+ 650
+ 180
+ 460
+
+ lt=-
+ 160.0;440.0;160.0;40.0;10.0;40.0;10.0;10.0
+
+
+ UMLClass
+
+ 3790
+ 2380
+ 100
+ 60
+
+
+*Self*
+bg=pink
+
+
+
+ Relation
+
+ 3740
+ 2400
+ 70
+ 30
+
+ lt=<<-
+ 10.0;10.0;50.0;10.0
+
+
+ UMLClass
+
+ 2710
+ 600
+ 270
+ 60
+
+
+*ResistancePercentageModifier*
+bg=yellow
+
+
+
+ Relation
+
+ 2680
+ 650
+ 190
+ 60
+
+ lt=-
+ 170.0;10.0;170.0;40.0;10.0;40.0
+
+
+ UMLClass
+
+ 2900
+ 500
+ 240
+ 60
+
+
+*FlatAtttributeChangeModifier*
+bg=yellow
+
+
+
+ Relation
+
+ 2840
+ 520
+ 80
+ 100
+
+ lt=-
+ 10.0;80.0;10.0;10.0;60.0;10.0
+
+
+ UMLClass
+
+ 3200
+ 500
+ 180
+ 60
+
+
+*ElevationModifier*
+bg=yellow
+
+
+
+ Relation
+
+ 3130
+ 520
+ 90
+ 30
+
+ lt=<<-
+ 10.0;10.0;70.0;10.0
+
+
+ UMLClass
+
+ 1730
+ 4590
+ 250
+ 80
+
+ *Lure*
+bg=orange
+
+--
+// where the game entity is lured to
+destination : set(GameEntity)
+// at what range the luring is stopped
+min_range_to destination : float
+
+
+
+ Relation
+
+ 1970
+ 4320
+ 60
+ 320
+
+ lt=-
+ 40.0;10.0;40.0;300.0;10.0;300.0
+
+
+ UMLClass
+
+ 2590
+ 4590
+ 160
+ 60
+
+
+*LureResistance*
+bg=orange
+
+
+
+
+ Relation
+
+ 2740
+ 4320
+ 60
+ 320
+
+ lt=-
+ 40.0;10.0;40.0;300.0;10.0;300.0
+
+
+ UMLClass
+
+ 1530
+ 1580
+ 160
+ 80
+
+ *LanguageTextPair*
+bg=pink
+
+--
+language : Language
+string : text
+
+
+
+ UMLClass
+
+ 1820
+ 1580
+ 200
+ 80
+
+ *LanguageMarkupPair*
+bg=pink
+
+--
+language : Language
+markup_file : file
+
+
+
+ UMLClass
+
+ 2140
+ 1590
+ 180
+ 80
+
+ *LanguageSoundPair*
+bg=pink
+
+--
+language : Language
+sound : Sound
+
+
+
+ Relation
+
+ 1600
+ 1650
+ 30
+ 80
+
+ lt=<.
+ 10.0;60.0;10.0;10.0
+
+
+ Relation
+
+ 1910
+ 1650
+ 30
+ 80
+
+ lt=<.
+ 10.0;60.0;10.0;10.0
+
+
+ Relation
+
+ 2210
+ 1660
+ 30
+ 70
+
+ lt=<.
+ 10.0;50.0;10.0;10.0
+
+
+ UMLClass
+
+ 2760
+ 1860
+ 170
+ 80
+
+ *Language*
+bg=pink
+
+--
+ietf_string : text
+
+
+
+ Relation
+
+ 2710
+ 1890
+ 70
+ 30
+
+ lt=-
+ 50.0;10.0;10.0;10.0
+
+
+ UMLClass
+
+ 4560
+ 2970
+ 160
+ 80
+
+ *Turn*
+bg=green
+
+--
+turn_speed : float
+
+
+
+ UMLClass
+
+ 5570
+ 3560
+ 160
+ 80
+
+ *Visibility*
+bg=green
+
+--
+visible_in_fog : bool
+
+
+
+ UMLClass
+
+ 5070
+ 550
+ 300
+ 100
+
+ *Container*
+bg=pink
+
+--
+storage_elements : set(StorageElement)
+slots : int
+
+
+
+ Relation
+
+ 5210
+ 500
+ 30
+ 70
+
+ lt=<.
+ 10.0;10.0;10.0;50.0
+
+
+ UMLClass
+
+ 2170
+ 4070
+ 200
+ 80
+
+ *CostEffect*
+bg=pink
+
+--
+cost : set(AttributeAmount)
+
+
+
+ Relation
+
+ 2090
+ 4100
+ 100
+ 30
+
+ lt=<<-
+ 10.0;10.0;80.0;10.0
+
+
+ UMLClass
+
+ 2930
+ 4070
+ 220
+ 80
+
+ *CostResistance*
+bg=pink
+
+--
+cost : set(AttributeAmount)
+
+
+
+ Relation
+
+ 2870
+ 4100
+ 80
+ 30
+
+ lt=<<-
+ 10.0;10.0;60.0;10.0
+
+
+ UMLClass
+
+ 2060
+ 3270
+ 220
+ 80
+
+ *DiplomaticSetup*
+bg=pink
+
+--
+stance : DiplomaticStance
+setup : orderedset(Patch)
+
+
+
+ Relation
+
+ 2130
+ 3220
+ 30
+ 70
+
+ lt=<.
+ 10.0;50.0;10.0;10.0
+
+
+ UMLClass
+
+ 3250
+ 2910
+ 240
+ 90
+
+ *AnimationOverride*
+bg=pink
+
+--
+ability : AnimatedAbility
+animations : set(Animation)
+
+
+
+ Relation
+
+ 3460
+ 2760
+ 30
+ 170
+
+ lt=<.
+ 10.0;150.0;10.0;10.0
+
+
+ Relation
+
+ 3330
+ 2760
+ 30
+ 70
+
+ lt=<<-
+ 10.0;10.0;10.0;50.0
+
+
+ UMLClass
+
+ 3280
+ 2460
+ 230
+ 80
+
+ *DiplomaticPatch*
+bg=pink
+
+--
+stances : set(DiplomaticStance)
+
+
+
+ Relation
+
+ 3380
+ 2530
+ 30
+ 60
+
+ lt=<<-
+ 10.0;40.0;10.0;10.0
+
+
+ Relation
+
+ 7160
+ 2570
+ 30
+ 80
+
+ lt=<.
+ 10.0;10.0;10.0;60.0
+
+
+ UMLClass
+
+ 7090
+ 2520
+ 160
+ 60
+
+
+*DeathCondition*
+bg=pink
+
+
+
+ UMLClass
+
+ 7030
+ 2380
+ 290
+ 100
+
+ *AttributeDeathCondition*
+bg=pink
+
+--
+attribute : Attribute
+min_value : optional(AttributeAmount)
+max_value : optional(AttributeAmount)
+
+
+
+ Relation
+
+ 7160
+ 2470
+ 30
+ 70
+
+ lt=<<-
+ 10.0;50.0;10.0;10.0
+
+
+ UMLClass
+
+ 1750
+ 4070
+ 170
+ 80
+
+ *AreaEffect*
+bg=pink
+
+--
+range : float
+dropoff : DropoffType
+
+
+
+ Relation
+
+ 1910
+ 4000
+ 60
+ 130
+
+ lt=-
+ 10.0;10.0;40.0;10.0;40.0;110.0
+
+
+ UMLClass
+
+ 1410
+ 4170
+ 160
+ 60
+
+
+*DropoffType*
+bg=pink
+
+
+
+ Relation
+
+ 1340
+ 4190
+ 90
+ 30
+
+ lt=<<-
+ 70.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 1340
+ 4190
+ 60
+ 100
+
+ lt=-
+ 40.0;10.0;40.0;80.0;10.0;80.0
+
+
+ Relation
+
+ 1340
+ 4120
+ 60
+ 100
+
+ lt=-
+ 40.0;80.0;40.0;10.0;10.0;10.0
+
+
+ UMLClass
+
+ 1190
+ 4100
+ 160
+ 60
+
+
+*NoDropoff*
+bg=pink
+
+
+
+ UMLClass
+
+ 1190
+ 4170
+ 160
+ 60
+
+
+*Linear*
+bg=pink
+
+
+
+ UMLClass
+
+ 1190
+ 4240
+ 160
+ 60
+
+
+*Exponential*
+bg=pink
+
+
+
+ Relation
+
+ 1560
+ 4140
+ 230
+ 80
+
+ lt=<.
+ 10.0;60.0;210.0;60.0;210.0;10.0
+
+
+ UMLClass
+
+ 2760
+ 3750
+ 120
+ 60
+
+ // This type is _only_ evaluated if all FlatAttributeChange Effects with other types are outside of the
+// range defined in the FlatAttributeChange Effect with type Default.
+//
+// can be used to model the minimum damagge of 1 in AoE
+
+*Default*
+bg=pink
+
+
+
+ Relation
+
+ 2700
+ 3770
+ 80
+ 30
+
+ lt=<<-
+ 60.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 4060
+ 1480
+ 90
+ 30
+
+ lt=<.
+ 10.0;10.0;70.0;10.0
+
+
+ UMLClass
+
+ 2580
+ 3170
+ 270
+ 120
+
+ *Tech*
+bg=pink
+
+--
+name : TranslatedString
+description : TranslatedMarkupFile
+ingame_help : TranslatedMarkupFile
+updates : orderedset(Patch)
+
+
+
+ Relation
+
+ 2710
+ 2690
+ 30
+ 500
+
+ lt=<<-
+ 10.0;10.0;10.0;480.0
+
+
+ UMLClass
+
+ 5200
+ 1630
+ 120
+ 60
+
+ // Determines traded resource and resource amount
+
+*TradeRoute*
+bg=pink
+
+
+
+
+ Relation
+
+ 5060
+ 1680
+ 210
+ 90
+
+ lt=<.
+ 190.0;10.0;190.0;70.0;10.0;70.0
+
+
+ UMLClass
+
+ 5390
+ 1630
+ 170
+ 60
+
+
+*NearestTradePost*
+bg=pink
+
+
+
+
+ UMLClass
+
+ 5390
+ 1710
+ 150
+ 60
+
+
+*AoE2TradeRoute*
+bg=pink
+
+
+
+
+ UMLClass
+
+ 2200
+ 4440
+ 220
+ 60
+
+
+*FlatAttributeDecrease*
+bg=orange
+
+
+
+ UMLClass
+
+ 2200
+ 4510
+ 220
+ 60
+
+
+*FlatAttributeIncrease*
+bg=orange
+
+
+
+ Relation
+
+ 2170
+ 4410
+ 50
+ 80
+
+ lt=->>
+ 30.0;60.0;10.0;60.0;10.0;10.0
+
+
+ Relation
+
+ 2170
+ 4460
+ 50
+ 100
+
+ lt=-
+ 30.0;80.0;10.0;80.0;10.0;10.0
+
+
+ UMLClass
+
+ 3020
+ 4440
+ 310
+ 60
+
+
+*FlatAttributeDecreaseResistance*
+bg=orange
+
+
+
+ UMLClass
+
+ 3020
+ 4510
+ 310
+ 60
+
+
+*FlatAttributeIncreaseResistance*
+bg=orange
+
+
+
+ Relation
+
+ 2980
+ 4370
+ 60
+ 120
+
+ lt=<<-
+ 10.0;10.0;10.0;100.0;40.0;100.0
+
+
+ Relation
+
+ 2980
+ 4460
+ 60
+ 100
+
+ lt=-
+ 10.0;10.0;10.0;80.0;40.0;80.0
+
+
+ UMLClass
+
+ 1710
+ 4440
+ 220
+ 60
+
+
+*FlatAttributeDecrease*
+bg=orange
+
+
+
+ UMLClass
+
+ 1710
+ 4510
+ 220
+ 60
+
+
+*FlatAttributeIncrease*
+bg=orange
+
+
+
+ Relation
+
+ 1920
+ 4460
+ 50
+ 100
+
+ lt=-
+ 10.0;80.0;30.0;80.0;30.0;10.0
+
+
+ Relation
+
+ 1920
+ 4410
+ 50
+ 80
+
+ lt=->>
+ 10.0;60.0;30.0;60.0;30.0;10.0
+
+
+ UMLClass
+
+ 2450
+ 4440
+ 270
+ 60
+
+
+*FlatAttributeDecreaseResistance*
+bg=orange
+
+
+
+ UMLClass
+
+ 2450
+ 4510
+ 270
+ 60
+
+
+*FlatAttributeIncreaseResistance*
+bg=orange
+
+
+
+ Relation
+
+ 2710
+ 4460
+ 50
+ 100
+
+ lt=-
+ 10.0;80.0;30.0;80.0;30.0;10.0
+
+
+ Relation
+
+ 2710
+ 4370
+ 50
+ 120
+
+ lt=->>
+ 10.0;100.0;30.0;100.0;30.0;10.0
+
+
+ UMLClass
+
+ 2970
+ 2200
+ 250
+ 80
+
+ *Formation*
+bg=pink
+
+--
+subformations : set(Subformation)
+
+
+
+ Relation
+
+ 3210
+ 2230
+ 70
+ 30
+
+ lt=-
+ 10.0;10.0;50.0;10.0
+
+
+ UMLClass
+
+ 3030
+ 2330
+ 150
+ 60
+
+
+*Subformation*
+bg=pink
+
+
+
+ UMLClass
+
+ 4820
+ 3320
+ 220
+ 80
+
+ *UnitFormation*
+bg=pink
+
+--
+formation : Formation
+subformation : Subformation
+
+
+
+ Relation
+
+ 4760
+ 3350
+ 80
+ 30
+
+ lt=<.
+ 60.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 3170
+ 2350
+ 110
+ 30
+
+ lt=-
+ 10.0;10.0;90.0;10.0
+
+
+ Relation
+
+ 3090
+ 2270
+ 30
+ 80
+
+ lt=<.
+ 10.0;60.0;10.0;10.0
+
+
+ UMLClass
+
+ 3850
+ 1730
+ 220
+ 80
+
+ *Constructable*
+bg=pink
+
+--
+game_entity : GameEntity
+construction_time : float
+
+
+
+ Relation
+
+ 4060
+ 1760
+ 70
+ 30
+
+ lt=<.
+ 10.0;10.0;50.0;10.0
+
+
+ UMLClass
+
+ 3350
+ 1460
+ 320
+ 90
+
+ *ScopeModifier*
+bg=pink
+
+--
+diplomatic_stances : set(DiplomaticStance)
+// the scope for which the Bonus applies, e.g.
+// only for the game entity (default), for every
+// matching game entity owned by the player or
+// every matching game entity in the game
+scope : ModifierScope
+
+
+
+ Relation
+
+ 3300
+ 1490
+ 70
+ 30
+
+ lt=<<-
+ 10.0;10.0;50.0;10.0
+
+
+ Relation
+
+ 6800
+ 1560
+ 30
+ 60
+
+ lt=<<-
+ 10.0;40.0;10.0;10.0
+
+
+ UMLClass
+
+ 1730
+ 4690
+ 250
+ 80
+
+ *SendToStorage*
+bg=orange
+
+--
+storages : set(GameEntity)
+
+
+
+ Relation
+
+ 1970
+ 4610
+ 60
+ 140
+
+ lt=-
+ 40.0;10.0;40.0;120.0;10.0;120.0
+
+
+ UMLClass
+
+ 2500
+ 4690
+ 250
+ 80
+
+ *SendToStorageResistance*
+bg=orange
+
+--
+search_range : float
+
+
+
+ Relation
+
+ 2740
+ 4610
+ 60
+ 140
+
+ lt=-
+ 40.0;10.0;40.0;120.0;10.0;120.0
+
+
+ Relation
+
+ 4350
+ 1850
+ 60
+ 810
+
+ lt=<<-
+ 40.0;790.0;40.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 4350
+ 1760
+ 60
+ 120
+
+ lt=-
+ 40.0;100.0;40.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 4350
+ 1640
+ 60
+ 150
+
+ lt=-
+ 40.0;130.0;40.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 4350
+ 1490
+ 60
+ 180
+
+ lt=-
+ 40.0;160.0;40.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 4430
+ 2660
+ 2650
+ 30
+
+ lt=<<-
+ 10.0;10.0;2630.0;10.0
+
+
+ Relation
+
+ 4510
+ 2500
+ 60
+ 190
+
+ lt=-
+ 40.0;10.0;10.0;10.0;10.0;170.0
+
+
+ Relation
+
+ 4510
+ 2320
+ 60
+ 120
+
+ lt=-
+ 40.0;10.0;10.0;10.0;10.0;100.0
+
+
+ Relation
+
+ 4510
+ 2410
+ 60
+ 120
+
+ lt=-
+ 40.0;10.0;10.0;10.0;10.0;100.0
+
+
+ Relation
+
+ 4380
+ 2690
+ 30
+ 1320
+
+ lt=<<-
+ 10.0;10.0;10.0;1300.0
+
+
+ Relation
+
+ 4380
+ 3940
+ 340
+ 70
+
+ lt=-
+ 10.0;10.0;320.0;10.0;320.0;50.0
+
+
+ Relation
+
+ 4490
+ 3350
+ 70
+ 120
+
+ lt=-
+ 10.0;10.0;10.0;100.0;50.0;100.0
+
+
+ Relation
+
+ 4380
+ 3350
+ 180
+ 30
+
+ lt=-
+ 10.0;10.0;160.0;10.0
+
+
+ Relation
+
+ 4710
+ 2910
+ 60
+ 120
+
+ lt=-
+ 10.0;100.0;40.0;100.0;40.0;10.0
+
+
+ Relation
+
+ 4710
+ 2660
+ 60
+ 280
+
+ lt=-
+ 10.0;260.0;40.0;260.0;40.0;10.0
+
+
+ Relation
+
+ 4740
+ 2910
+ 60
+ 30
+
+ lt=-
+ 10.0;10.0;40.0;10.0
+
+
+ Relation
+
+ 5120
+ 1650
+ 100
+ 30
+
+ lt=<.
+ 80.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 5310
+ 1650
+ 100
+ 30
+
+ lt=<<-
+ 10.0;10.0;80.0;10.0
+
+
+ Relation
+
+ 5350
+ 1650
+ 60
+ 110
+
+ lt=-
+ 10.0;10.0;10.0;90.0;40.0;90.0
+
+
+ Relation
+
+ 4380
+ 1540
+ 480
+ 30
+
+ lt=-
+ 460.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 4800
+ 1540
+ 60
+ 140
+
+ lt=-
+ 40.0;120.0;10.0;120.0;10.0;10.0
+
+
+ Relation
+
+ 4800
+ 1650
+ 60
+ 120
+
+ lt=-
+ 40.0;100.0;10.0;100.0;10.0;10.0
+
+
+ Relation
+
+ 5350
+ 3880
+ 90
+ 30
+
+ lt=<.
+ 70.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 5530
+ 2660
+ 30
+ 1030
+
+ lt=-
+ 10.0;10.0;10.0;1010.0
+
+
+ Relation
+
+ 5500
+ 3280
+ 60
+ 30
+
+ lt=-
+ 40.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 5500
+ 3390
+ 60
+ 30
+
+ lt=-
+ 40.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 5500
+ 3490
+ 60
+ 30
+
+ lt=-
+ 40.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 5500
+ 3590
+ 60
+ 30
+
+ lt=-
+ 40.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 5530
+ 3590
+ 60
+ 30
+
+ lt=-
+ 40.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 5530
+ 3490
+ 60
+ 30
+
+ lt=-
+ 40.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 5530
+ 3390
+ 60
+ 30
+
+ lt=-
+ 40.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 5530
+ 3280
+ 60
+ 30
+
+ lt=-
+ 40.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 6440
+ 2660
+ 30
+ 1200
+
+ lt=-
+ 10.0;10.0;10.0;1180.0
+
+
+ Relation
+
+ 6410
+ 3640
+ 60
+ 30
+
+ lt=-
+ 40.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 6440
+ 3640
+ 60
+ 30
+
+ lt=-
+ 40.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 6410
+ 3740
+ 60
+ 30
+
+ lt=-
+ 40.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 6440
+ 3740
+ 60
+ 30
+
+ lt=-
+ 40.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 6410
+ 3830
+ 60
+ 30
+
+ lt=-
+ 40.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 6440
+ 3830
+ 60
+ 30
+
+ lt=-
+ 40.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 6850
+ 2590
+ 60
+ 100
+
+ lt=-
+ 40.0;10.0;10.0;10.0;10.0;80.0
+
+
+ Relation
+
+ 6850
+ 2520
+ 60
+ 100
+
+ lt=-
+ 40.0;10.0;10.0;10.0;10.0;80.0
+
+
+ Relation
+
+ 6850
+ 2450
+ 60
+ 100
+
+ lt=-
+ 40.0;10.0;10.0;10.0;10.0;80.0
+
+
+ Relation
+
+ 6850
+ 2660
+ 60
+ 100
+
+ lt=-
+ 40.0;80.0;10.0;80.0;10.0;10.0
+
+
+ Relation
+
+ 6850
+ 2730
+ 60
+ 100
+
+ lt=-
+ 40.0;80.0;10.0;80.0;10.0;10.0
+
+
+ Relation
+
+ 6850
+ 2800
+ 60
+ 100
+
+ lt=-
+ 40.0;80.0;10.0;80.0;10.0;10.0
+
+
+ Relation
+
+ 6850
+ 2870
+ 60
+ 110
+
+ lt=-
+ 40.0;90.0;10.0;90.0;10.0;10.0
+
+
+ Relation
+
+ 6650
+ 1710
+ 210
+ 980
+
+ lt=-
+ 190.0;10.0;190.0;40.0;10.0;40.0;10.0;960.0
+
+
+ Relation
+
+ 7000
+ 1840
+ 90
+ 30
+
+ lt=<<-
+ 10.0;10.0;70.0;10.0
+
+
+ Relation
+
+ 6830
+ 1740
+ 30
+ 60
+
+ lt=-
+ 10.0;10.0;10.0;40.0
+
+
+ Relation
+
+ 5360
+ 2020
+ 30
+ 670
+
+ lt=-
+ 10.0;650.0;10.0;10.0
+
+
+ Relation
+
+ 5360
+ 2020
+ 60
+ 30
+
+ lt=-
+ 10.0;10.0;40.0;10.0
+
+
+ Relation
+
+ 5330
+ 2020
+ 60
+ 30
+
+ lt=-
+ 10.0;10.0;40.0;10.0
+
+
+ Relation
+
+ 5330
+ 2110
+ 60
+ 30
+
+ lt=-
+ 10.0;10.0;40.0;10.0
+
+
+ Relation
+
+ 5360
+ 2110
+ 60
+ 30
+
+ lt=-
+ 10.0;10.0;40.0;10.0
+
+
+ Relation
+
+ 5360
+ 2200
+ 60
+ 30
+
+ lt=-
+ 10.0;10.0;40.0;10.0
+
+
+ Relation
+
+ 5360
+ 2270
+ 60
+ 30
+
+ lt=-
+ 10.0;10.0;40.0;10.0
+
+
+ Relation
+
+ 5330
+ 2270
+ 60
+ 30
+
+ lt=-
+ 10.0;10.0;40.0;10.0
+
+
+ Relation
+
+ 5210
+ 760
+ 1000
+ 1930
+
+ lt=-
+ 980.0;1910.0;980.0;360.0;10.0;360.0;10.0;10.0
+
+
+ Relation
+
+ 6180
+ 1110
+ 270
+ 30
+
+ lt=-
+ 10.0;10.0;250.0;10.0
+
+
+ Relation
+
+ 6390
+ 910
+ 60
+ 230
+
+ lt=-
+ 40.0;10.0;10.0;10.0;10.0;210.0
+
+
+ Relation
+
+ 5210
+ 830
+ 60
+ 30
+
+ lt=-
+ 40.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 5210
+ 940
+ 60
+ 30
+
+ lt=-
+ 40.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 5210
+ 1020
+ 60
+ 30
+
+ lt=-
+ 40.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 5180
+ 1020
+ 60
+ 30
+
+ lt=-
+ 40.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 5180
+ 940
+ 60
+ 30
+
+ lt=-
+ 40.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 5180
+ 830
+ 60
+ 30
+
+ lt=-
+ 40.0;10.0;10.0;10.0
+
+
+ UMLClass
+
+ 6800
+ 1100
+ 140
+ 60
+
+
+*TargetMode*
+bg=pink
+
+
+
+ Relation
+
+ 6740
+ 1120
+ 80
+ 30
+
+ lt=<.
+ 60.0;10.0;10.0;10.0
+
+
+ UMLClass
+
+ 7010
+ 1100
+ 160
+ 60
+
+
+*CurrentPosition*
+bg=pink
+
+
+
+ Relation
+
+ 6930
+ 1120
+ 100
+ 30
+
+ lt=<<-
+ 10.0;10.0;80.0;10.0
+
+
+ UMLClass
+
+ 7010
+ 1170
+ 160
+ 60
+
+
+*ExpectedPosition*
+bg=pink
+
+
+
+ Relation
+
+ 6970
+ 1120
+ 60
+ 100
+
+ lt=-
+ 10.0;10.0;10.0;80.0;40.0;80.0
+
+
+ UMLClass
+
+ 3000
+ 2430
+ 210
+ 80
+
+ *PreceedingSubformation*
+bg=pink
+
+--
+preceeds : Subformation
+
+
+
+ Relation
+
+ 3090
+ 2380
+ 30
+ 70
+
+ lt=<<-
+ 10.0;10.0;10.0;50.0
+
+
+ UMLClass
+
+ 3530
+ 1590
+ 140
+ 60
+
+
+*ModifierScope*
+bg=pink
+
+
+
+ Relation
+
+ 3590
+ 1540
+ 30
+ 70
+
+ lt=<.
+ 10.0;50.0;10.0;10.0
+
+
+ UMLClass
+
+ 5090
+ 3190
+ 110
+ 60
+
+
+*AttackMove*
+bg=pink
+
+
+
+ Relation
+
+ 5040
+ 3140
+ 70
+ 100
+
+ lt=-
+ 10.0;10.0;10.0;80.0;50.0;80.0
+
+
+ UMLClass
+
+ 5000
+ 2890
+ 120
+ 60
+
+
+*MoveMode*
+bg=pink
+
+
+
+ Relation
+
+ 4950
+ 2910
+ 70
+ 30
+
+ lt=<.
+ 50.0;10.0;10.0;10.0
+
+
+ UMLNote
+
+ 5200
+ 1760
+ 150
+ 60
+
+ TODO: Make other resources than gold tradeable
+bg=blue
+
+
+
+ Relation
+
+ 3160
+ 520
+ 60
+ 100
+
+ lt=-
+ 10.0;10.0;10.0;80.0;40.0;80.0
+
+
+ UMLClass
+
+ 3200
+ 570
+ 130
+ 60
+
+
+*StrayModifier*
+bg=yellow
+
+
+
+ UMLClass
+
+ 3870
+ 970
+ 300
+ 80
+
+ *AbsoluteProjectileAmountModifier*
+bg=yellow
+
+--
+amount : float
+
+
+
+ Relation
+
+ 3250
+ 730
+ 590
+ 710
+
+ lt=-
+ 10.0;690.0;570.0;690.0;570.0;10.0
+
+
+ UMLClass
+
+ 2740
+ 1050
+ 240
+ 80
+
+ *GatheringEfficiencyModifier*
+bg=yellow
+
+--
+resource_spot : ResourceSpot
+
+
+
+ Relation
+
+ 2680
+ 1080
+ 80
+ 30
+
+ lt=-
+ 60.0;10.0;10.0;10.0
+
+
+ UMLClass
+
+ 2740
+ 1140
+ 190
+ 60
+
+
+*ReloadTimeModifier*
+bg=yellow
+
+
+
+ Relation
+
+ 2680
+ 1160
+ 80
+ 30
+
+ lt=-
+ 60.0;10.0;10.0;10.0
+
+
+ UMLClass
+
+ 2740
+ 1220
+ 190
+ 60
+
+
+*CreationTimeModifier*
+bg=yellow
+
+
+
+ Relation
+
+ 2680
+ 1240
+ 80
+ 30
+
+ lt=-
+ 60.0;10.0;10.0;10.0
+
+
+ UMLClass
+
+ 2740
+ 940
+ 280
+ 100
+
+ *CreationCostModifier*
+bg=yellow
+
+--
+resources : set(Resource)
+affected_types : set(GameEntityType)
+blacklisted_entities : set(GameEntity)
+
+
+
+
+ Relation
+
+ 2680
+ 970
+ 80
+ 30
+
+ lt=-
+ 60.0;10.0;10.0;10.0
+
+
+ UMLClass
+
+ 2360
+ 940
+ 280
+ 80
+
+ *ResearchCostModifier*
+bg=yellow
+
+--
+resources : set(Resource)
+affected_techs : set(Tech)
+
+
+
+
+ Relation
+
+ 2630
+ 970
+ 80
+ 30
+
+ lt=-
+ 60.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 3810
+ 1000
+ 80
+ 30
+
+ lt=-
+ 60.0;10.0;10.0;10.0
+
+
+ UMLClass
+
+ 3870
+ 880
+ 320
+ 80
+
+ // Immediately unlocks a Tech as soon as the requirements are met
+*TechUnlockModifier*
+bg=yellow
+
+--
+tech : Tech
+requirements : set(AvailabilityRequirement)
+
+
+
+ Relation
+
+ 3810
+ 910
+ 80
+ 30
+
+ lt=-
+ 60.0;10.0;10.0;10.0
+
+
+ UMLClass
+
+ 3870
+ 810
+ 210
+ 60
+
+ // Always herd a Herdable even if other units are closer
+
+*AlwaysHerdModifier*
+bg=yellow
+
+
+
+ Relation
+
+ 3810
+ 830
+ 80
+ 30
+
+ lt=-
+ 60.0;10.0;10.0;10.0
+
+
+ UMLClass
+
+ 5400
+ 2330
+ 320
+ 100
+
+ *Herd*
+bg=green
+
+--
+range : float
+allowed_types : set(GameEntityType)
+blacklisted_game_entities : set(GameEntity)
+
+
+
+ Relation
+
+ 5360
+ 2370
+ 60
+ 30
+
+ lt=-
+ 10.0;10.0;40.0;10.0
+
+
+ UMLClass
+
+ 1930
+ 1210
+ 320
+ 80
+
+ // A one-time resource bonus/malus when requirements are met
+*DiscreteResourceModifier*
+bg=yellow
+
+--
+amount : ResourceAmount
+requirements : set(AvailabilityRequirement)
+
+
+
+ Relation
+
+ 1840
+ 1240
+ 110
+ 100
+
+ lt=-
+ 90.0;10.0;10.0;10.0;10.0;80.0
+
+
+ UMLClass
+
+ 2740
+ 850
+ 280
+ 80
+
+ *ContainerCapacityModifier*
+bg=yellow
+
+--
+container : Container
+
+
+
+
+ UMLClass
+
+ 2360
+ 850
+ 280
+ 80
+
+ *StorageElementCapacityModifier*
+bg=yellow
+
+--
+storage_element : StorageElement
+
+
+
+
+ Relation
+
+ 2680
+ 880
+ 80
+ 30
+
+ lt=-
+ 60.0;10.0;10.0;10.0
+
+
+ Relation
+
+ 2630
+ 880
+ 80
+ 30
+
+ lt=-
+ 60.0;10.0;10.0;10.0
+
+
+ UMLClass
+
+ 2740
+ 780
+ 230
+ 60
+
+
+*ConstructionTimeModifier*
+bg=yellow
+
+
+
+ Relation
+
+ 2680
+ 800
+ 80
+ 30
+
+ lt=-
+ 60.0;10.0;10.0;10.0
+
+
+ UMLClass
+
+ 2450
+ 780
+ 190
+ 60
+
+
+*ResearchTimeModifier*
+bg=yellow
+
+
+
+ Relation
+
+ 2630
+ 800
+ 80
+ 30
+
+ lt=-
+ 60.0;10.0;10.0;10.0
+
+
+ UMLClass
+
+ 3870
+ 700
+ 280
+ 100
+
+ // Reveal area around listed units
+*RevealModifier*
+bg=yellow
+
+--
+line_of_sight : float
+affected_types : set(GameEntityType)
+blacklisted_entities : set(GameEntity)
+
+
+
+ Relation
+
+ 3810
+ 730
+ 80
+ 30
+
+ lt=-
+ 60.0;10.0;10.0;10.0
+
+
+ UMLNote
+
+ 290
+ 680
+ 190
+ 90
+
+ Orange elements:
+
+Effects/Resistances that can be applied on other game entities
+bg=orange
+
+
+
+ UMLClass
+
+ 3870
+ 1070
+ 290
+ 60
+
+
+*RelativeProjectileAmountModifier*
+bg=yellow
+
+
+
+ Relation
+
+ 3810
+ 1090
+ 80
+ 30
+
+ lt=-
+ 60.0;10.0;10.0;10.0
+
+
+ UMLClass
+
+ 4240
+ 1070
+ 310
+ 100
+
+ // The change values and fire rate of the provider and receiver are compared (divided)
+// with the result being added to the projectile amount of the receiver
+*AoE2ProjectileAmountModifier*
+bg=yellow
+
+--
+// Ability of the modifier provider
+provider_ability : ApplyDiscreteEffect
+// Ability of the modifier receiver
+receiver_ability : ApplyDiscreteEffect
+// Only change values from these change types are compared
+change_types : set(AttributeChangeType)
+
+
+
+ Relation
+
+ 4150
+ 1090
+ 110
+ 30
+
+ lt=->>
+ 90.0;10.0;10.0;10.0
+
+
+ UMLClass
+
+ 5400
+ 2440
+ 210
+ 80
+
+ *RegenerateResource*
+bg=green
+
+--
+rate : ResourceRate
+resurce_spot : ResourceSpot
+
+
+
+ Relation
+
+ 5360
+ 2470
+ 60
+ 30
+
+ lt=-
+ 10.0;10.0;40.0;10.0
+
+
+ UMLClass
+
+ 3480
+ 1680
+ 120
+ 60
+
+ // Only affect yourself (default for modifiers in GameEntity)
+
+*Self*
+bg=pink
+
+
+
+ Relation
+
+ 3590
+ 1640
+ 70
+ 100
+
+ lt=<<-
+ 50.0;10.0;50.0;80.0;10.0;80.0
+
+
+ UMLClass
+
+ 3320
+ 1750
+ 280
+ 80
+
+ // Affect all game entities in the list
+*GameEntityScope*
+bg=pink
+
+--
+affected_types : set(GameEntityType)
+blacklisted_entities : set(GameEntity)
+
+
+
+ Relation
+
+ 3590
+ 1710
+ 70
+ 90
+
+ lt=-
+ 10.0;70.0;50.0;70.0;50.0;10.0
+
+
+ Text
+
+ 290
+ 340
+ 220
+ 30
+
+ openage nyan data API v0.1
+
+
+
diff --git a/doc/nyan/nyan.md b/doc/nyan/nyan.md
index ab4b83207a..28fa0a5aaf 100644
--- a/doc/nyan/nyan.md
+++ b/doc/nyan/nyan.md
@@ -29,7 +29,7 @@ so all content data can be verified to be compatible at load time.
It is easy to read, write and modify, and most importantly,
it can actually store unit upgrades, unit abilities, research,
-civ bonuses and age updates.
+civ bonuses and age upgrades.
Technical specification
diff --git a/doc/nyan/openage-lib.md b/doc/nyan/openage-lib.md
index f8ae897c5b..69f7efda99 100644
--- a/doc/nyan/openage-lib.md
+++ b/doc/nyan/openage-lib.md
@@ -1,7 +1,82 @@
openage nyan library
====================
-The openage engine defines all kinds of *NyanObject*s
-so the nyan interpreter can verify data integrity.
+The openage engine defines all kinds of `NyanObject`s so the nyan interpreter can verify data integrity. Together, the defined objects provide the API that can be used by the games running on the engine.
This interface will be described here.
+
+## Design principles
+
+In addition to the [nyan design goals](https://github.com/SFTtech/nyan/blob/master/doc/nyan.md#design-goals), the openage mod API follows its own design principles. It is recommended to follow these principles when extending the API.
+
+**Single API tree**
+
+The API objects and every additional defined object are part of the same inheritance tree. To ensure this, all objects must inherit from the root object `Entity`, either explicitely or implicitely through its parents. By doing this, we can maintain a consistent object hierarchy, even if several mods are activated.
+
+**Define game entities through abilities**
+
+Game entities are nyan objects that are visibly present in the game world (e.g. units or buildings). Their data will mostly be defined by nested objects inheriting from `Ability`. An `Ability` object is basically a capsule for data and corresponds to an engine function. Therefore, abilities indirectly define what a unit can *do* (attack, gather, move, etc.) or what i can *be* (constructable, selectable, etc.). During a game, the corresponding engine function then decides *how* the data is going to be used.
+
+**No replacement of game entities within their life cycle**
+
+In AoE2, game objects' attributes are mostly static and cannot represent different states. For example, tree objects are replaced with tree stump objects when they are chopped down by villagers, empty trade carts are replaced with full trade carts once they reach a market and villager objects change when they are assigned to a different resource spot. Because nyan objects can dynamically change at runtime, this strategy becomes unfeasible as it becomes increasingly difficult to determine a consistent target state. Instead, abilities will be used for modelling the various states a nyan object has. There also exists the possibility to model game entities as state machines.
+
+**No reliance on inheritance for specialization**
+
+Inheritance cannot be removed from an object, so we have to be careful when introducing it to the API. Instead of inheritance an entity-component model is utilized, e.g. for abilities and modifers. If inheritance is used, it should follow these principles:
+
+* Avoid multi-inheritance in the API tree
+* Make it possible to configure the inherited members in such a way that the non-specialized behavior can be replicated
+
+**Genie engine functionality ⊆ nyan API functionality**
+
+The functionality of Genie Engine abilities should always be a subset of the functionality of the openage API. Hardcoding should be removed and integrated into existing abilities.
+
+## API objects
+
+An overview of the API design for the data of Age of Empires 2 is available as an UML diagram.
+
+
+
+### Entity
+
+The root object of the nyan tree. Stores no members. All API objects inherit from `Entity`.
+
+### GameEntity
+
+`GameEntity` defines every object that the player will be able to interact with in the game world. The `GameEntity` object is purposefully kept simple to make it versatile and allow as many unit configurations as possible. Characteristics of a game entity, including all stats and animations, are defined through its **abilities** and **modifiers**. Additionally, game entities can have **variants** that can be used for defining alternative graphics (e.g. for villagers or houses). Game entities are classified by assigning them **types** through `GameEntityType`.
+
+### Ability
+
+An `Ability` gives a game entity a **defined behaviour** implemented in an engine function. Abilities are used for both passive (e.g. `Selectable`, `Constructable`) and active behaviour (e.g. `Move`, `Create`, `Gather`). Most abilities have members that further refine the parameters of the behaviour. For example, the `Move` ability enables a game entity to move around the map, while its `speed` member determines how fast the entity moves.
+
+There are currently three ability subtypes available:
+
+* `SoundAbility`: While the ability is used, the game entity plays a sound. If more than one sound is defined in the set, the engine picks one at random.
+* `AnimatedAbility`: While the ability is used, the game entity plays an animation. The settings for the animation (speed, angles, frames, looping) are defined in the `.spite` file linked in the `Animation` object and are independent from the ability. If more than one animation is defined in the set, the engine picks one at random.
+* `DiplomaticAbility`: Determines whether the ability can be used to interact with other players with a specific diplomatic stance. Diplomatic abilities can only be used on (active abilities) or used by (passive abilities) players that have the diplomatic stance listed in the set. For example, an attack ability where `Enemy` is set in the stances is only able to use this attack on enemy units. If the attack has `Enemy` and `Neutral` in the set, it will also be able to attack neutral units. When `DiplomaticAbility` is not inherited, the ability is available for interaction with all stances by default.
+
+Most abilities have been reworked in comparison to AoE2 to provide extended functionality and make hardcoded parameters accessible to modding. The behaviour of the original game can be seen as a subset of the features in the openage nyan API.
+
+### Modifier
+
+`Modifier` objects alter parts of the behavior of abilities in certain situations. Their main applications are:
+
+* Covering edge cases that do not fit into the definition of an `Ability`. Examples include elevation and cliff attack bonuses as well as free tech unlocks by civs.
+* Providing bonuses that are percentage based (e.g. 20% more HP) because they are hard to model as patches.
+
+By default, modifiers apply to the abilities of the game entity that stores them. With `ScopedModifier` the modifier can be applied to other game entities as well. The primary use for this are civilization bonuses.
+
+### Effect
+
+`Effect`s are used for (combat) interaction between two game entities. An effect is actively applied by one game entity (effector) with the `ApplyDiscreteEffect`/`ApplyContinuousEffect` abilities and met with a response by the affected game entity (resistor) using the `Resistance` ability. The use cases for effects are:
+
+* Combat (attacking, healing)
+* Conversion
+* Making resource spots accessible
+* Lure game entities (e.g. sheep)
+* Town bell
+
+There are two major types of effects: Discrete and continuous. Discrete effects happen at a *specific point in time*, while continuous effects are applied *over time* at a per second rate. Any discrete effect can be combined with every other discrete effect. The same applies for continuous effects.
+
+For an effect to apply, the effector's `Effect` needs a corresponding `Resistance` object on the resistor's side. Otherwise the effect is not evaluated.