The Hand of Merlin – Status Effects Modding Guide

Extensive and detailed guide for creating new status effects or modifying existing ones in The Hand of Merlin, written by its game designer Mat.

Guide to Modding Status Effects

Topics

  • Introduction – What is a Status Effect?
  • Identification – ID, Descriptions, Categories
  • Stacks – Stacking behaviour and how it works
  • Visuals – Setting up particles
  • Modifiers – Attribute, Damage, and Healing modifiers
  • Unit States – Unqiue permanent unit states available
  • Activated Actions – Trigger an ability passively

Introduction

Our game relies heavily on Status Effects, so we’ll focus on those today – teach you how to create or edit them!

We’ll be looking at some effects already in game, such as Burn and Backplates, for example. Hopefully you’ll be able implement what you learn here to your own mechanics.

Do note – Status effects don’t really work until you set yourself an Ability, a Unit, or a Relic that uses it, so feel free to peruse the guides on those topics.

What is a Status Effect?

A Status Effect is anything that modifies a unit during a Skirmish. It can change rules, attributes, modify damage, or even change how some abilities and AI behaves.

In The Hand of Merlin, Status effects often have “Stacks” associated with them, which is a sort of “number of magnitude”. This stack size can be used for all sorts of effects, and can even be the duration of the effect.

If you want to create your own Status Effect, use the Create menu (CTRL+N), and choose Generic – > (Merlin) Status effect params.

Once you have a new file, remember to save it. We usually use the

  • Content\Merlin\Effects folder.

Now, let’s break down each feature of the status effect.

Identification

The first thing is setting your effect with a Name. Choose something short, but descriptive.

Then you get a Description. This is usually a bit more complex, and is filled with dynamic tags to be filled in. Let’s take a look at the one for Burning:

Take <special>{Damage}</special> damage <special>each turn</special>. <br/><special>Decays</special>, losing <special>1</special> stack <special>per turn</special>.

It’s a bit heavy with tags, but here’s what everything is:

<special></special> is a wrapper you can use when you want that part of the text to be accented. We have several of these, described in Merlin/databases/DescriptionParser.rsc.

<br/> is to break a line.

{Damage} is a special entry that refers to an ID set up later in Activated Actions.It could be anything, as long as it’s the same down there, as we’ll see. You can also refer to Attribute Modifiers, Damage modifiers, etc. Just check our other effects for some examples!

It ends up looking like this:

Because these are text properties, you have two fill in two fields:

  1. Identifier.
  2. String.

This is to make it easier for translations. If you are making a big mod, you might want to have your own identifier naming conventions, but here’s mine: I use HOM.StatusEffect.[Name] and HOM.StatusEffect.[Name].Description.

Then, you can choose if you want the Stack size to actually show. We usually make passives not show stack size for clarity.

And, more importantly, decide on a Category for your status effect. This impacts some abilities and relics that interact with buffs or debuffs, and also colors your effects. Here’s how we set it up:

  • Positive Status Effects, in blue, are buffs.
  • Negative Status Effects, in purple, are debuffs.
  • Marker status effects, in yellow, are passives and static effects.
  • Hidden status effects are not shown, and we usually leave them for complex internal mechanics.

Stacks

Stack Management

Speaking of Stacks, there’s a few entries here that change how stacks work on a particular effect. Note Berserk here:

Merge Behavior determines if you want the effect to merge with other applications of itself. Say if two enemies apply Mark to you (increasing the damage they deal), you’d want them to be separate, but multiple applications of Vulnerable (Increased the damage you receive) should be merged.

Then, you have what happens in case of merging: If two instances of the same effect are applied, what should happen? Take the older? The lowest? The highest? Add them together? Your call. Berserk uses the Max stack, not being added.

Then, you can add a Min or Max to stacks – if your min stacks is higher than 0, the effect won’t expire by getting its stacks reduced by 0 like normal, so beware!

Finally, note the “Allow no affector” and “Allow dead affectors”. If your status effect depends on knowing some information about who gave the effect to you (like Mark), you can tick this off, making the effect expire when the affector dies.

Visuals

Setting up particles

If you want your Status effect to have associated particle or sound effects, you can use Effect Preset While Active. There, you can browse effects that are enabled/disabled when the effect starts or expires, and it’ll always be attached to the unit. We tend to use Geometric Particles, like this:

Modifiers

Now, for the actual mechanics. The first half are sort of “passive” effects, that modify the unit’s attributes or how it deals/receives damage and healing.

We got three major components:

  • Attribute Modifiers.
  • Damage Modifiers.
  • Healing Modifiers.

Attribute Modifiers change one the affected unit’s attributes. You can do it in two ways: by addition/subtraction (Added component), and by multiplication (Multiplied Component). We strongly recommend the former.

Inside each component, you have an addend (a flat increase) and a multiplier, that is dependent on the stack size. Note how we set up Evading:

Because we have a Multiplier in the Added component, the resulting Evasion modification is + “1 x Stacks”, so a character with Evading 5 would have an extra 5 to their Evasion stat. Pretty simple stuff! Most of our Attribute modifiers tend to use the stack size as the magnitude of the effect, and that’s how we do it.

But if you must, you can use the multiplied component to do things like “-50% power” or “Move x2”. Just be careful, special with Armor and Health, as these are further modified by the Nourishment system.

Damage and Healing Modifiers change how a unit deals or receives damage, in a pretty similar way. You do have access to a few more things here, though. Let’s take a look at Backplates, the passive from Basilisk:

This sets up to “Reduce half the standard damage I’ll take if my conditions are met.”. Some of the new entries are obvious: Direction is if the modifier is for dealt or taken damage, and Type sets if the damage/healing is Standard, Armor-only, or Health-only.

Now, note the Scaling Source – this is what will count as the “stacks” for the stack-based modifier. You got several options:

Backplates uses the sum of incoming life change (aka total damage), but feel free to explore.

But the star of the show here is the Conditions. We talked about them in other guides before, but let’s break down the 2 conditions that Backplates have.

  1. Makes it so that only if the target is not at or below 1.5 range will this effect work – i.e. only on Ranged attacks.
  2. Works as sort of an exception as well – only if the ability being used is not a spell. We tend to not allow Spells to be reduced by damage reduction effects, to reflect their otherworldly nature.

Most of the entries in the Conditions are just to qualify the condition, but note the “Condition Type”, that’s where you’ll decide which is the actual condition, and which of the other entries will be relevant. For instance, the Relation entry only matters for the “Matches Relation” condition type. We recommend leaving those you aren’t using in their default values.

Unit States

Permanent Unit State

An interesting use for Status Effects is to add “Unit States” to a unit. There’s a substantial list including many things, mostly centered around disabling the “normal rules” a unit has – AP gathering, enabling skills, that sort of stuff. Most of the list is self-explanatory, but note the last three:

If your conditions and effects relate to taunters, last hitters (last unit that damaged affected unit) and last target, you might use these effects here so that the player can have an extra UI item showing which unit is which, like so:

In the current design, we don’t use these effects very often, but you can have some interesting effects, like dealing extra damage to the unit that just attacked you.

Activated Actions

This is where it gets a bit more complicated. You see, whenever some actions happen in game, like a character taking damage or someone dying, all Status Effects in play can receive a notification of that event, and then do something. These are the Activated Actions, and it’s where a lot of our complex Status Effect Behavior comes from.

Let’s take a look at Berserk. Here’s how it looks in-game:

Note how it has a growing and decaying properties. These are based on Activated Actions!

Here’s how a normal decay rule, seen in a lot of effects including this one, is set up:

Description ID is used in determining description items. Remember Burn, from the top of the document? The {Damage} keyword refers to an activated action set up with “Damage” as its description ID.

Then, you have Trigger Time, which determines the event this status effect will listen to. Each trigger time has in parentheses the actual properties you can listen to in this event, defined in the Trigger Source.

Turn start, the one we used for Berserk’s decay rule, only listens to a Warband match, so that’s the only one we fill in, describing that it is when the turn starts for the affected unit’s warband.

But the set up for the “grow when attacking” is a bit more complicated:

We qualify that the Hit Unit (Primary unit) can be whomever, but the Attacker (Secondary Unit) needs to be the affected unit, and it must be using a valid Ability – not dealing damage from status effects or ground effects or whatever.

Do note: whenever the Trigger lists two units (such as Attacker and Target), the first one is the Primary Unit, and the second one, the Secondary unit. These can sometimes be messy to keep track.

The next important thing here is to define an Action Type. This is what kind of effects can be used. Here’s a rundown on how to use them, with the caveat that Stack Amount does not need to be about stacks – its Add/mul like most number operations we got.

  • Heal / Damage: Modifies the life of a given unit, based on the Stack Amount and Life Change type.
  • Show Effect Preset: Good for one-off VFX triggers. We use it constantly with the buff/debuff arrows
  • Grant Action Points: Also uses Stack Amount.
  • Use Ability: Great for complex behaviors. Remember to set up Auto-targetting in a way that respects the ability targeting. This Action type ignores cooldowns, AP, all of that, so it’s best to make unique ability files to use here.
  • Expire instantly expires this status effect.
  • Gain Reaction Turn makes the affected unit able to act immediately after the trigger, with an amount of AP that you determine in the Stack Amount.
  • Apply Aura grants the specified aura with the specified power to the unit.
  • Animation States are deprecated.
  • Reset Ability Cooldown does exactly that to a listed ability.
  • Modify Stacks is commonly used to decay or grow rules, using the Stack Amount.
  • Modify Ability Charges/Cooldown can be used to increase or decrease these properties in any listed ability. Great for “reset CD on kill” or similar effects.
  • Cancel Reactions / Delayed Abilities remove a listed vigil-type or delayed ability. More about those on our Ability guide.
  • Grant Mana grants mana to someone’s warband, based on stack amount
  • Show Combat Message allows you to put a small text message on top of the unit when this triggers, defined in the Combat Message entry. As any text entry, it uses identifiers and strings. As an example, Merlin’s passive effect is “HOM.CombatMessage.Prophecy = Triggered – Prophecy”

Status effects are our most powerful tool, so feel free to explore and mess around with. There are multiple examples to look for both simple and complex behaviors in our folders, Good luck!

Recommended for You

Be the first to comment

Leave a Reply

Your email address will not be published.


*