Custom mapping and Mods > Editor Discussion

Composite Skills

(1/5) > >>

Hipshot:
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 Event
Calls 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.


--- Code: XML ---<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>                                  

Summon
When 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.


--- Code: XML ---<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>

Heal
Heals other enemies, used on lich_2 in Act4


--- Code: XML ---<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>

Blink
Teleports an enemy a certain distance, if negative it will blink towards the player.


--- Code: XML ---<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>

Hit
A normal hit attack, this is skeleton_2_elite. If cooldown is above "0", that will be the delay in milliseconds between each attack animation.


--- Code: XML ---<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>

Buff
Applies 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.




--- Code: XML ---<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>

Whirlnova
A 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.




--- Code: XML ---<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>


Spew
Shoots 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.




--- Code: XML ---<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>

Shoot
Used to shoot a single projectile, like an arrow or such.


--- Code: XML ---<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>

Teleport
Teleports to destinations, a destination is any PathNode in a level, used by the Survival lich boss (lich_boss_small).


--- Code: XML ---<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 Hit
Same 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.


--- Code: XML ---<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.

Drop
When 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.


--- Code: XML ---<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>

Retaliate
If 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.


--- Code: XML ---<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>

Armor
Give the monster armor, that can block a certain number or percentage of the damage you deal to it.


--- Code: XML ---<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....

Heretic:
This is awesome thanks!

Amran:
Thanks for taking the time to document this, definitely handy to know!

Hipshot:
Added heal, that is present only on lich_2  =)

Kashlavor:
Just got back into Hammerwatch editor, very cool!

I decided to try remixing ranger by making his bomb spawn an enemy which applies a speed/damage debuff to all other enemies using this.  Just trying to see how far the classes can be stretched.

Edit: Also, what is the syntax for the composite explode skill?  Any other skills to know about?  And what is the full list of movement types?

Final query: is launching seeker projectiles and healing something the composite type can do, or is that restricted to casters?

As for explosions I found the answer mere moments after asking - adding it here in case anyone else is curious.


--- Code: ---<array name="skills">
<dictionary>
<string name="type">explode</string>
<string name="anim-set">attack</string>
<int name="cooldown">0</int>
<float name="range">2</float>

<string name="sound">sound/monsters.xml:lich_summon</string>
<string name="effect">effects/particles.xml:flash</string>

<string name="particle">effects/particles.xml:ice-particle</string>
<dictionary name="light">
<float name="add-range">8</float>
<string name="add-color1">10 100 150</string>
<string name="add-color2">0 50 100</string>
<string name="add-color3">0 50 75</string>
</dictionary>

<float name="splash">5</float>
<int name="dmg">25</int>
<string name="buff">buffs/frost.xml</string>
<bool name="suicide">true</bool>
</dictionary>
</array>
--- End code ---

Navigation

[0] Message Index

[#] Next page

Go to full version