The composite AI typ can have several different skills used by monsters, most of them are active skills but there's also a few passive ones.
Active skills goes inside the <array name="skills"></array> tags and passive ones goes under <array name="pskills"></array>. Various different enemy types can be made from using these skills, like towers, archers, casters etc.
These are all the active ones (I think).Level EventCalls upon an event in a level, an event is specified in the GlobalEventTrigger, just type something there and it will execute when this skill triggers.
<dictionary>
<string name="conditional">hp lt 0.5</string>
<string name="type">event</string>
<int name="cooldown">5000</int>
<float name="range">25</float>
<string name="event">eventname</string>
</dictionary>
SummonWhen you want the enemy to spawn other monsters or other units, two examples below, the first one is used as a skill by lich_3 (black liches that summons fast skeletons in Act 4). The other example is a lich that summons item/bombs in an arc in front of him, used in the not yet released desert campaign. Prefabs can not be spawned.
<dictionary name="summon">
<entry name="actor"><string>actors/skeleton_3.xml</string></entry>
<entry name="timer"><int>2000</int></entry>
<entry name="parts"><int>3</int></entry>
<entry name="effect"><string>effects/particles.xml:flash_summon</string></entry>
<entry name="sound"><string>sound/monsters.xml:lich_summon</string></entry>
</dictionary>
<dictionary>
<string name="type">summon</string>
<string name="anim-set">attack</string>
<int name="cooldown">1500</int>
<float name="range">100</float>
<float name="dist">4</float>
<string name="sound">sound/monsters.xml:lich_summon</string>
<int name="num">10</int>
<int name="arc">150</int>
<string name="actor">items/bomb_lich_desert_1.xml</string>
<bool name="safety-raycast">false</bool>
</dictionary>
HealHeals other enemies, used on lich_2 in Act4
<dictionary>
<string name="type">heal</string>
<string name="anim-set">attack</string>
<int name="cooldown">500</int>
<float name="range">40</float>
<string name="sound">sound/monsters.xml:lich_heal</string>
<int name="heal">20</int>
<float name="cast-range">10</float>
<string name="particle">effects/particles.xml:player_heal</string>
</dictionary>
BlinkTeleports an enemy a certain distance, if negative it will blink towards the player.
<dictionary>
<string name="type">blink</string>
<string name="anim-set">attack</string>
<int name="cooldown">1500</int>
<float name="range">2.5</float>
<string name="sound">sound/misc.xml:spawn_tele</string>
<float name="dist">5</float>
<string name="effect">effects/particles.xml:flash</string>
</dictionary>
HitA normal hit attack, this is skeleton_2_elite. If cooldown is above "0", that will be the delay in milliseconds between each attack animation.
<dictionary>
<string name="type">hit</string>
<string name="anim-set">attack</string>
<int name="cooldown">0</int>
<float name="range">2</float>
<int name="dmg">25</int>
</dictionary>
BuffApplies a buff on enemies or players, the first example is the red bloodlust effect cast by several minibosses, like the large tick in act 1 (tick_1_mb). The other example is a banner that drains mana from players close by. Results is heavily dependent on how the buff is constructed in itself, this just allows enemies to apply them.
<dictionary>
<string name="type">buff</string>
<int name="cooldown">1000</int>
<float name="range">13</float>
<float name="cast-range">13</float>
<string name="category">Enemy</string>
<string name="buff">buffs/bloodlust.xml</string>
</dictionary>
<dictionary>
<string name="type">buff</string>
<int name="cooldown">100</int>
<float name="range">100</float>
<float name="cast-range">5</float>
<string name="category">Player</string>
<string name="buff">buffs/banner_drain.xml</string>
</dictionary>
WhirlnovaA nova that can be set to shoot several projectiles with an attack animation AND an animation that plays while the nova is active. This example is from the miniboss lich (lich_1_mb) on Act 4.
<dictionary>
<string name="type">whirlnova</string>
<string name="anim-set">attack</string>
<int name="cooldown">2000</int>
<float name="range">15</float>
<float name="min-range">2</float>
<int name="duration">2500</int>
<string name="chnl-anim">whirlwind</string>
<string name="projectile">projectiles/enemy_lich_1_mb.xml</string>
<int name="proj-delay">33</int>
<int name="per-revolution">8</int>
</dictionary>
SpewShoots projectiles in a organized or random fashion, can be controlled, first example is from the Lich boss in the survival level (lich_boss_small), the second one is a tracking tower in the yet to be released desert campaign (tower_tracking_3) and the last one is the healing frost lich on Act 4. All these attacks are very different and are also heavily affected by what kind or projectile that is used and their behavior.
<dictionary>
<string name="conditional">hp lt 0.25</string>
<string name="type">spew</string>
<string name="anim-set">attack</string>
<int name="cooldown">4000</int>
<float name="range">14</float>
<string name="sound">sound/misc.xml:spawn_tele</string>
<string name="chnl-anim-set">attack</string>
<string name="proj">projectiles/enemy_lich_boss_small2.xml</string>
<float name="spread">0.5</float>
<int name="rate">33</int>
<int name="duration">2500</int>
<int name="ang-offset">180</int>
</dictionary>
<dictionary>
<string name="sound">sound/monsters.xml:tower_shoot_beam</string>
<string name="type">spew</string>
<int name="cooldown">750</int>
<float name="range">100</float>
<string name="chnl-anim-set">attackstatic</string>
<string name="anim-set">attack</string>
<bool name="static-dir">true</bool>
<string name="proj">projectiles/enemy_tower_drainbeam.xml</string>
<float name="spread">0</float>
<int name="rate">10</int>
<int name="duration">300</int>
</dictionary>
<dictionary>
<string name="type">spew</string>
<string name="anim-set">attack</string>
<int name="cooldown">3000</int>
<float name="range">3</float>
<string name="chnl-anim-set">attack</string>
<string name="proj">projectiles/enemy_lich_frostspray.xml</string>
<float name="spread">0.33</float>
<int name="rate">45</int>
<int name="duration">2500</int>
</dictionary>
ShootUsed to shoot a single projectile, like an arrow or such.
<dictionary>
<string name="type">shoot</string>
<string name="anim-set">attack</string>
<int name="cooldown">3000</int>
<float name="min-range">2.5</float>
<float name="range">20</float>
<string name="sound">sound/monsters.xml:lich_seeker</string>
<string name="proj">projectiles/enemy_arrow_1.xml</string>
</dictionary>
TeleportTeleports to destinations, a destination is any PathNode in a level, used by the Survival lich boss (lich_boss_small).
<dictionary>
<string name="conditional">hp lt 0.5</string>
<string name="type">teleport</string>
<float name="range">15</float>
<int name="usages">1</int>
<string name="sound">sound/misc.xml:spawn_tele</string>
<float name="min-dist">15</float>
<float name="max-dist">60</float>
<bool name="trail">true</bool>
</dictionary>
Ground HitSame as the attack used by flowers (but not by the flowers, since they are not composite units), a spike launched up from the ground, or it's more an attack that spawns under the player, the graphics could be whatever.
<dictionary>
<string name="type">ground-hit</string>
<string name="anim-set">attack</string>
<string name="chnl-anim-set">hold</string>
<int name="cooldown">1000</int>
<float name="range">5</float>
<string name="sound">sound/monsters.xml:hit_flower_1</string>
<string name="attack-effect">actors/guard_desert_1.xml:attack-effect</string>
<int name="dmg">10</int>
<int name="max-targets">1</int>
<int name="dmg-delay">400</int>
<float name="dmg-range">0.125</float>
</dictionary>
</array>
These are all the passive skills.DropWhen you struck the monster, it can drop things, just like loot, this is a tick (tick_2) that drops money when hit. It can be monsters or something else too, but not prefabs.
<dictionary>
<string name="type">drop</string>
<string name="sound">sound/monsters.xml:death_tick_golden</string>
<int name="hp">14</int>
<dictionary name="loot">
<string name="origin">0 0</string>
<float name="spread">0.5</float>
<array name="loot">
<array>
<int>50</int><string>items/valuable_9.xml</string>
<int>450</int><string>items/valuable_8.xml</string>
<int>500</int><string>items/valuable_7.xml</string>
</array>
</array>
</dictionary>
</dictionary>
RetaliateIf you strike a monster, there's a chance it will reflect some damage back and also it can apply a buff doing so. It can be compared to the Wizard Frost Armor skill.
<dictionary>
<string name="type">retaliate</string>
<string name="sound">sound/monsters.xml:lich_summon</string>
<string name="effect">effects/particles.xml:flash</string>
<int name="chance">50</int>
<int name="dmg">5</int>
<string name="buff">buffs/enemy_tower_icebeam.xml</string>
</dictionary>
ArmorGive the monster armor, that can block a certain number or percentage of the damage you deal to it.
<dictionary>
<string name="type">armor</string>
<string name="sound">sound/monsters.xml:lich_summon</string>
<string name="effect">effects/particles.xml:flash</string>
<int name="chance">100</int>
<int name="dmg-sub">2</int>
<float name="dmg-mul">0.5</float>
</dictionary>
I think that's all....