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.

Combat Config — Damage & Defense tab showing armor softcap, magic resist, minimum damage, and tier scaling
Combat Config — Damage & Defense tab showing armor softcap, magic resist, minimum damage, and tier scaling
① Damage & Defense section — armor softcap, magic resist, minimum damage, tier scaling② Category tabs — Timing, Mob AI, Player Combat, Skill & XP, Itemization, Quality, Guild, Pet Battle③ Fine-tunable constants with defaults and reset-per-section controls

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

ActionDefault input
Start attacking the target under the cursorDouble-click
Stop attacking, walking and castingZ

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 safe zone, or otherwise stops being something the player may damage. The player is told, and the target highlight clears — it never silently switches to someone else.
  • A weapon type with no Normal Attack Ability set falls back to the unarmed
punch. If a weapon "attacks like fists", that field is empty.
  • 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:

FieldWhat 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
aiming at. A cone shows as a cone, a ring shows its safe centre, a cross shows as a cross.

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:

FieldWhat it does
EnabledOff removes both previews entirely.
StyleReach ring only: Ring (outline with a faint wash), Filled (solid wash), or Dashed (outline only).
ColorReach-ring colour. Default amber.
Outline opacityHow strong the reach ring's edge reads.
Fill opacityThe reach ring's interior wash. 0 = outline only.
ThicknessOutline width for both indicators, 1-6px.
Also show while castingKeeps 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 footprintOff leaves only the reach ring.
Harmful colorFootprint colour for anything that damages or debuffs. Default red.
Helpful colorFootprint colour for heals and ally-only abilities. Default green.
Footprint outline / Footprint fillEdge and interior strength for the footprint.

Gotchas

  • Both are drawn in the isometric projection, so they read as distances on the floor
rather than shapes on the screen. A large circle becomes a wide, flat ellipse and a cross becomes a rotated X — that is correct, and it is exactly the ground the server tests against.
  • The reach ring uses the ability's authored Range; an ability with no range set
draws none. The footprint needs an AoE Shape other than none and an **AoE Radius** above 0.
  • A self-buff draws no reach ring (a circle round your own feet is noise) but still
draws its footprint if it has an area — that's how a nova centred on the caster previews.
  • Leave the whole block untouched and you get the engine defaults. Reset clears
every field back to them.

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.

ShapeWhat it covers
NoneJust the target.
CircleA disc where the ability lands.
RingA doughnut where it lands — the centre is safe.
NovaA disc centred on the caster.
ConeA wedge opening out from the caster toward the aim point.
WaveThe same, but a broad frontal sweep by default.
LineA fixed-length band forward from the caster.
RectangleA band from the caster that stretches to the aim point.
CrossTwo bands crossing where it lands.
FieldApplies toWhat it does
AoE Radiusall areasHow far the area extends, in tiles. Circles and rings measure from the impact point; cones, lines and novas measure out from the caster.
Cone AngleCone, WaveHow wide the wedge opens, in degrees. 90 is a typical cone, 360 a full circle. Blank inherits 90 (Cone) or 180 (Wave).
Band WidthLine, RectangleTotal 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 SizeRingSafe centre as a fraction of the radius. 0.5 leaves the inner half safe. Blank inherits 0.5.
Arm WidthCrossTotal width of each crossing band, in tiles. Blank inherits 2.

Gotchas

  • Blank means inherit, not zero. Clearing a box uses the engine default; typing
0 is a real 0. The placeholder tells you what you'd inherit.
  • Cone Angle is not Spread Angle. Spread Angle (on the same tab) fans *multiple
projectiles; Cone Angle is the width of the area*. An ability can use either or both.
  • Existing cones and novas changed. A cone previously had no angle at all — it
tested a 180° half-plane measured from the impact point, which collapsed into a plain circle whenever you aimed further away than the radius. It is now a real wedge from the caster, defaulting to 90°. A nova was anchored at the impact point, making it identical to a circle; it is now centred on the caster. If you were relying on either of the old behaviours, set Cone Angle to 360 or switch the shape to Circle.
  • Line, Ring and Cross keep the dimensions they always had, so those abilities hit
exactly who they hit before.
  • Shape changes are content, so they need a publish; they do not need a
server roll.

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:

SettingWhat happens
None (default)The caster halts to cast. Deliberately issuing a move order cancels the cast and refunds the mana.
SlowedThe caster keeps walking at Slowed move speed and the cast continues.
Full speedThe 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.

FieldWhat 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 cancelableOn: moving or acting cuts recovery short. Off: committed for its whole duration.
Resets auto-attackOn: 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-upNone (rooted), Slowed, or Full speed.
Slowed move speedMove-speed multiplier while the above is Slowed.

Combat → Tuning → Timing. The world defaults.

FieldWhat 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 PointFallback 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 CancelableDefault on.
Cancel Lockout (ms)Default 50.
Abilities Reset Auto-AttackDefault on.
Attack Speed CapCeiling on how far Attack Speed can compress wind-ups and recoveries. Default 3.

Sprite editor → attack animation.

FieldWhat it does
Contact Frame0-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
cooldown.** A fast build feels fast rather than merely acting more often — but it does mean a high-Attack-Speed character's swings are visibly shorter. The Attack Speed Cap exists so they cannot shrink to the point where nobody can see or react to them.
  • Blank is not zero. An empty field means "inherit"; a typed 0 means an
instant wind-up or no recovery. The placeholder always shows what is inherited.
  • Contact Frame only appears on striking animations. Idle and walk cycles have
no contact point, so the field is hidden rather than asking a question that has no answer. Your weapon swings are usually named like 1h-attack-1 or bow-attack-1; those all qualify.
  • Attack Speed is capped everywhere, not just on wind-ups. The cap bounds the
wind-up, the recovery, the cast time, the global cooldown and the auto-attack interval together, so raising Attack Speed past it stops helping rather than quietly continuing to shorten one of them.
  • A long wind-up is a long animation. Raising Wind-up slows the art to match
rather than delaying an already-finished swing, which is what you want — but a 4-frame animation stretched over 900 ms will look choppy. Add frames, or keep the wind-up nearer the animation's natural length.
  • The impact marker moves with attack speed. The timeline previews the base
values at 1× speed; in-game both the phases and the animation compress together, so contact stays on the same frame.

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
Defense reduces damage using a ratio formula:
  • Physical defense reduces physical damage
  • Magic resist reduces magical damage
  • True damage ignores all defense entirely
The formula has diminishing returns — stacking more defense helps less each time, so there's no way to become invincible.

AoE Shapes

Abilities can hit multiple targets using 9 area-of-effect shapes:

ShapeDescription
NoneSingle target
CircleAll targets within radius
ConeFan-shaped area
LineNarrow beam
RectangleRectangular area
RingDonut shape
CrossPlus (+) pattern
NovaExpanding ring from caster
WaveExpanding 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:

RuleBehavior
SafeNo player vs player combat
PvPOpen player-vs-player combat
Full LootOpen PvP; players drop equipped gear on death
Full Loot AllOpen PvP; players drop their entire inventory on death
ArenaStructured 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.)