Real-time, server-validated combat with AoE and crowd control.
Combat System
ED5 uses real-time action combat where every attack, heal, and ability is validated by the server. Players can't cheat — the server checks everything.

How Combat Works
1. Player activates an ability (click or hotkey) 2. The server checks: is the ability off cooldown? Does the player have enough MP/stamina? Is the target in range? 3. If valid, the server calculates damage using the ability's stats, the attacker's stats, and the target's defenses 4. Status effects are rolled (e.g., 25% chance to apply Burn) 5. Results are sent to all nearby players so everyone sees the action
A cast that fails any of those checks costs the player nothing — no mana, no cooldown, no global cooldown, no weapon durability. The action simply doesn't happen, so a mistimed or slightly-too-far click never eats a rotation.
Auto-attack
Players pick a target once and keep swinging at it until it dies, they pick another, or they stop. The server decides when each swing lands, walks the player into range if the target runs, and drops the target the moment it stops being a legal one.
That last part matters more than it sounds. The swing rate is your character's, not your connection's: two players with identical gear attack at exactly the same speed whether they're next to the server or on the other side of the world. There is nothing to tune for it and nothing that can drift.
How players use it
| Action | Default input |
|---|---|
| Start attacking the target under the cursor | Double-click |
| Stop attacking, walking and casting | Z |
Both are rebindable under World → Player Controls, where Stop appears as its own action in the Combat category.
What sets the swing rate: the equipped weapon's basic-attack ability. Its GCD (ms) is the interval between swings, scaled by the attacker's Attack Speed and by World → Gameplay → Combat Speed Multiplier. Author the weapon's basic attack, and you've authored its attack rate — there is no separate auto-attack speed field.
Which ability swings: the equipped weapon type's Normal Attack Ability, exactly what shows in the player's first ability slot. With no weapon (or a broken one) it falls back to the built-in unarmed attack, so a player is never left unable to fight.
Gotchas
- Auto-attack stops on its own when the target dies, leaves the instance, enters
- A weapon type with no Normal Attack Ability set falls back to the unarmed
- Attacking is refused entirely while mounted. Players dismount first.
Responsiveness
Three behaviours make combat forgiving without giving anything away. All are server-side, so they work identically for every player regardless of connection.
Input buffer
Pressing an ability while you're still on cooldown used to do nothing. Now, if you press within the buffer window of being ready, the press is **held and fired the instant the cooldown clears** — you no longer have to release and re-press with perfect timing.
Set the window under Combat → Tuning → Timing:
| Field | What it does |
|---|---|
| Input Buffer (ms) | How early a press is accepted before a cooldown ends. Default 300. Set 0 to turn buffering off entirely. |
| Base GCD (ms) | The shared global cooldown between abilities. Default 1000. |
| Min GCD Floor (ms) | The floor the GCD can never go below, however much attack speed a player stacks. Default 50. |
| Min Cast Time (ms) | The floor a cast time can be reduced to. Default 100. |
| Lunge Duration (ms) | How long the melee step-in animation runs. Default 200. |
Only the last press is held — mashing two abilities before your cooldown ends fires the one you pressed last, not both. A held press is re-checked when it fires, so if you died, were silenced, unsheathed a different weapon, or changed zone while it waited, it's discarded rather than going off against stale state.
Gotcha: a large buffer makes combat feel loose rather than responsive, since presses land noticeably after you make them. Values much above ~400 ms are usually worse, not better. Presses made earlier than the window are still rejected outright — the buffer is a grace period, not a queue.
Walk into range
Using a targeted ability on something slightly too far away no longer fails. Your character walks into range and casts on arrival, and keeps following if the target moves. The order is abandoned if the target dies, you die, you change zone, or five seconds pass without getting there.
Nothing is spent until the ability actually lands, and it's re-checked on arrival — so if the target became untargetable during the walk, you simply don't cast.
Hits land with weight
Every hit briefly freezes both sprites at the moment of contact — a few frames, scaled by the damage, longer on a crit. Without it two characters just pass through each other's animations; the hitch is what makes a blow read as a collision. It applies to the sprites, not the camera, so a crowded fight doesn't stutter, and it's disabled entirely for players who have Reduced Motion on.
Nothing to configure. It reads the damage the server already sent.
Failed actions don't spam the chat log
Out of range, not enough mana, silenced, still recovering — these happen constantly in a normal fight, and they used to go into the chat log, burying actual messages. They now appear as a brief cue above the action bar, play the Action refused sound, and are announced to screen readers. Real errors still go to the log.
Bind your own audio to Action refused on the Sounds page like any other slot.
Aim indicators
Hovering (or keyboard-focusing) an ability previews it on the ground, so "out of range" and "who does this hit" are things players see before they act rather than learn by being refused. There are two indicators, because they answer different questions:
- the reach ring — how far the ability can be used from, drawn around your feet.
- the area footprint — the shape it actually covers, drawn at the point you're
The footprint follows your target if you have one and your cursor otherwise, and is clamped to the ability's reach — so it never shows you an area the server would refuse to place. It's coloured by intent: harmful areas one colour, heals and buffs another, decided from the ability's damage and target mode.
Style both under World → UI Customization → Layout → Ability range indicator, next to the selection indicator:
| Field | What it does |
|---|---|
| Enabled | Off removes both previews entirely. |
| Style | Reach ring only: Ring (outline with a faint wash), Filled (solid wash), or Dashed (outline only). |
| Color | Reach-ring colour. Default amber. |
| Outline opacity | How strong the reach ring's edge reads. |
| Fill opacity | The reach ring's interior wash. 0 = outline only. |
| Thickness | Outline width for both indicators, 1-6px. |
| Also show while casting | Keeps the reach ring up during the cast, not just on hover — useful in telegraph-heavy worlds where an incoming spell's reach is information the target should have. |
| Show area footprint | Off leaves only the reach ring. |
| Harmful color | Footprint colour for anything that damages or debuffs. Default red. |
| Helpful color | Footprint colour for heals and ally-only abilities. Default green. |
| Footprint outline / Footprint fill | Edge and interior strength for the footprint. |
Gotchas
- Both are drawn in the isometric projection, so they read as distances on the floor
- The reach ring uses the ability's authored Range; an ability with no range set
- A self-buff draws no reach ring (a circle round your own feet is noise) but still
- Leave the whole block untouched and you get the engine defaults. Reset clears
AoE shapes and their proportions
Abilities → (pick one) → Targeting & AoE picks the shape; the fields beside it give the shape its proportions. Only the ones the chosen shape reads are shown, and a live diagram beside them draws exactly what the server will hit.
| Shape | What it covers |
|---|---|
| None | Just the target. |
| Circle | A disc where the ability lands. |
| Ring | A doughnut where it lands — the centre is safe. |
| Nova | A disc centred on the caster. |
| Cone | A wedge opening out from the caster toward the aim point. |
| Wave | The same, but a broad frontal sweep by default. |
| Line | A fixed-length band forward from the caster. |
| Rectangle | A band from the caster that stretches to the aim point. |
| Cross | Two bands crossing where it lands. |
| Field | Applies to | What it does |
|---|---|---|
| AoE Radius | all areas | How far the area extends, in tiles. Circles and rings measure from the impact point; cones, lines and novas measure out from the caster. |
| Cone Angle | Cone, Wave | How wide the wedge opens, in degrees. 90 is a typical cone, 360 a full circle. Blank inherits 90 (Cone) or 180 (Wave). |
| Band Width | Line, Rectangle | Total width in tiles — 2 means one tile either side of the centre line. Blank inherits 2 for a Line, and the AoE Radius for a Rectangle. |
| Hole Size | Ring | Safe centre as a fraction of the radius. 0.5 leaves the inner half safe. Blank inherits 0.5. |
| Arm Width | Cross | Total width of each crossing band, in tiles. Blank inherits 2. |
Gotchas
- Blank means inherit, not zero. Clearing a box uses the engine default; typing
- Cone Angle is not Spread Angle. Spread Angle (on the same tab) fans *multiple
- Existing cones and novas changed. A cone previously had no angle at all — it
- Line, Ring and Cross keep the dimensions they always had, so those abilities hit
- Shape changes are content, so they need a publish; they do not need a
Casting while moving
A cast-time ability stops the caster. That is what Dota, League and Albion all do — mobility during a cast is an explicit per-spell property in each of them, never the default — and it is what Movement during wind-up on the ability's Timing & Feel tab controls:
| Setting | What happens |
|---|---|
| None (default) | The caster halts to cast. Deliberately issuing a move order cancels the cast and refunds the mana. |
| Slowed | The caster keeps walking at Slowed move speed and the cast continues. |
| Full speed | The caster keeps moving normally and the cast continues. |
Gotcha: before this, a player who cast while already walking broke their own cast almost immediately — the server cancelled on movement but never stopped them, so they drifted out of position within a couple of ticks. If you have an ability that is supposed to be castable on the move, set Movement during wind-up rather than relying on the old behaviour.
Cast interruptions
Moving or being stunned during a cast cancels it and refunds the mana. Switching to a different cast mid-wind-up refunds the abandoned one too.
Interruptions no longer write to the chat log. Instead the cast bar ends and a Cast interrupted sound plays — bind your own audio to that slot on the Sounds page, like any other sound. Screen readers are notified separately, so the feedback isn't purely visual.
Attack Timing & Weight
Every action runs in three phases: wind-up → impact → recovery. Wind-up is the swing before the hit, impact is the moment damage lands, recovery is the pause afterwards before the attacker is free again. Setting those three numbers per ability is how a hammer feels different from a dagger even at the same damage.
Before this, every melee ability in every world landed damage at exactly the same moment and recovered instantly, whatever the artwork showed. **Nothing you have already authored changes** — an ability that sets none of the fields below behaves exactly as it did.
Where to author it
Two places, and they layer:
1. Combat → Tuning → Timing — the world defaults every ability inherits. 2. Ability editor → Timing & Feel — the per-ability overrides, with a live timeline showing wind-up, the impact marker and recovery on one ruler. 3. Sprite/Avatar editor → an attack animation → Contact Frame — where the blade actually connects in the art.
Start with the contact frame. It is the one that pays for itself: set it once on the animation and every ability using that art lands its damage on the right frame, with no millisecond values typed anywhere. Contact belongs to the artwork — a hammer connects on frame 5 of 8 whichever skill swings it — so the person who drew the animation is the one who sets it.
Setting up a heavy weapon
1. Open the weapon's attack animation in the sprite editor and set **Contact Frame** to the frame where the blade connects. 2. Open the ability in Abilities → your ability → Timing & Feel. 3. Raise Wind-up (ms) until the swing reads as slow and deliberate. The animation is fitted to this, so the art slows down with it. 4. Set Recovery (ms) to something like 250–400. This is the field that creates weight: the player is committed after the swing. 5. Optionally turn Recovery cancelable off, so they cannot walk out of the follow-through. Use sparingly — it punishes hard. 6. Watch the timeline at the top of the tab. The red line is the hit; the hatched band at the end of the wind-up is where cancelling stops working.
Wind-ups are audible: bind the Attack wind-up sound on the Sounds page and players hear an attack start, not just land. A telegraph nobody can perceive is only a delay — the sound is what makes a long wind-up a chance to react rather than a mystery.
Fields
Ability editor → Timing & Feel. Every field is optional; blank inherits the world default shown in the placeholder.
| Field | What it does |
|---|---|
| Wind-up (ms) | How long the swing takes before recovery starts. Blank uses the ability's cast time if it has one, otherwise the world default. The attack animation is fitted to this. |
| Impact point (0-1) | How far through the wind-up damage lands. Blank derives it from the animation's contact frame — the setting you usually want to leave alone. |
| Recovery (ms) | Pause after the hit before the attacker can act. 0 = none. This is the weight knob. |
| Cancel lockout (ms) | Final stretch of the wind-up that can no longer be cancelled, so a swing the target already reacted to can't be taken back at the last instant. |
| Recovery cancelable | On: moving or acting cuts recovery short. Off: committed for its whole duration. |
| Resets auto-attack | On: using this restarts the auto-attack swing timer. Off: the swing clock keeps running underneath, so players can weave this between hits. |
| Movement during wind-up | None (rooted), Slowed, or Full speed. |
| Slowed move speed | Move-speed multiplier while the above is Slowed. |
Combat → Tuning → Timing. The world defaults.
| Field | What it does |
|---|---|
| Default Wind-up (ms) | Swing length for abilities with no cast time and no wind-up of their own. Default 400. |
| Default Impact Point | Fallback impact fraction when neither the ability nor the animation says. Default 0.3. |
| Default Recovery (ms) | Default 0 — no recovery, matching how the engine behaved before. |
| Recovery Cancelable | Default on. |
| Cancel Lockout (ms) | Default 50. |
| Abilities Reset Auto-Attack | Default on. |
| Attack Speed Cap | Ceiling on how far Attack Speed can compress wind-ups and recoveries. Default 3. |
Sprite editor → attack animation.
| Field | What it does |
|---|---|
| Contact Frame | 0-indexed frame where the blade connects. Shown on striking animations only — anything with "attack", "shoot" or "thrust" in the name, plus a staff's "cast". Blank = not authored, and impact falls back to the world default. |
Gotchas
- **Attack Speed now shortens wind-ups and recoveries, not just the global
- Blank is not zero. An empty field means "inherit"; a typed 0 means an
- Contact Frame only appears on striking animations. Idle and walk cycles have
- Attack Speed is capped everywhere, not just on wind-ups. The cap bounds the
- A long wind-up is a long animation. Raising Wind-up slows the art to match
- The impact marker moves with attack speed. The timeline previews the base
Damage Calculation
The damage formula considers:
- Base damage from the ability
- Attacker stat (Attack for physical, Magic Power for spells) × the ability's scaling ratio
- Weapon tier multiplier (linear +0.25 per tier — T1 = 1.0× through T8 = 2.75×)
- Buff multipliers from food, potions, and passive effects
- Critical hits — 5% base chance, dealing 1.5× damage
- Physical defense reduces physical damage
- Magic resist reduces magical damage
- True damage ignores all defense entirely
AoE Shapes
Abilities can hit multiple targets using 9 area-of-effect shapes:
| Shape | Description |
|---|---|
| None | Single target |
| Circle | All targets within radius |
| Cone | Fan-shaped area |
| Line | Narrow beam |
| Rectangle | Rectangular area |
| Ring | Donut shape |
| Cross | Plus (+) pattern |
| Nova | Expanding ring from caster |
| Wave | Expanding arc |
Telegraphed AoEs
Area abilities can broadcast a telegraph — a ground indicator matching the AoE shape — while the ability winds up, giving players a window to step out before it resolves. Telegraph visuals are authorable per ability (see Visual Effects); mob and boss encounters use the same system for their big hits.
PvP Zone Rules
Each zone has a PvP rule setting:
| Rule | Behavior |
|---|---|
| Safe | No player vs player combat |
| PvP | Open player-vs-player combat |
| Full Loot | Open PvP; players drop equipped gear on death |
| Full Loot All | Open PvP; players drop their entire inventory on death |
| Arena | Structured PvP arena rules |
Duels
Duels are a separate opt-in system, independent of the zone PvP rule. Players can request 1v1 duels with optional gold wagers. Duels are contained — both players must stay in range, and the loser's HP stops at 1 (no death).
Death & Respawn
When a player dies: 1. All active status effects are cleared 2. A respawn screen appears 3. The player respawns at the nearest safe zone 4. Penalties are configurable (XP loss, gold drop, etc.)