Skip to main content

Overview

Combat in Elemental Battlecards is determined by a sophisticated system that considers both card levels and type advantages. The combat resolution follows specific rules to determine the winner, loser, or if the battle results in a draw.

Combat Resolution Rules

The resolveCombat function processes battles in the following priority order:

Rule 1: Level Difference of 2 or More

A card that is 2 or more levels higher always wins, regardless of type advantages.
  • Level 3 vs Level 1: Attacker wins automatically
  • Level 1 vs Level 3: Defender wins automatically
// From Frontend/src/helpers/combat.js

if (levelDiff >= 2) {
    return { winner: 'attacker', loser: 'defender' };
}
if (levelDiff <= -2) {
    return { winner: 'defender', loser: 'attacker' };
}

Rule 2: Level Difference of 1

When cards differ by exactly one level, the higher-level card has an advantage, but type matchups can neutralize this:
Attacker is one level higher:
  • If defender has type advantage → Draw (neutralized)
  • If defender has no type advantage → Attacker wins
if (levelDiff === 1) {
    // Defender had type advantage - now neutralized
    if (defenderAdvantage === attacker.type) {
        return { winner: 'none', loser: 'none' }; // Draw
    }
    // No defender type advantage - attacker wins
    return { winner: 'attacker', loser: 'defender' };
}

Rule 3: Same Level

When both cards are the same level, type advantage determines the outcome:
// Same level - type advantage decides
if (attackerAdvantage === defender.type) {
    return { winner: 'attacker', loser: 'defender' };
}
if (defenderAdvantage === attacker.type) {
    return { winner: 'defender', loser: 'attacker' };
}

// No type advantage - it's a draw
return { winner: 'none', loser: 'none' };

Type Advantage Wins

Fire vs Plant → Fire winsWater vs Fire → Water winsLight vs Shadow → Light wins

Neutral Matchup Draws

Fire vs Water → DrawLight vs Spirit → DrawShadow vs Fire → Draw

Combat Function Signature

The combat resolver accepts two card objects and returns the result:
/**
 * Determines the result of combat between two cards.
 * @param {object} attacker - The attacking card.
 * @param {string} attacker.type - The card type (e.g., 'fuego').
 * @param {number} attacker.level - The card level (1, 2, or 3).
 * @param {object} defender - The defending card.
 * @param {string} defender.type - The card type.
 * @param {number} defender.level - The card level.
 * @returns {object} Result with winner/loser. e.g., { winner: 'attacker', loser: 'defender' }
 */
export function resolveCombat(attacker, defender)

Combat Outcomes

There are three possible outcomes from any combat:

Attacker Victory

{ winner: 'attacker', loser: 'defender' }
  • Attacker card remains on the field
  • Defender card is destroyed and sent to graveyard

Defender Victory

{ winner: 'defender', loser: 'attacker' }
  • Defender card remains on the field
  • Attacker card is destroyed and sent to graveyard

Draw (Neutral)

{ winner: 'none', loser: 'none' }
  • Both cards remain on the field
  • No cards are destroyed
When a card is destroyed in combat, it’s sent to the graveyard and decomposed into base Level 1 cards. A Level 2 card becomes 2 Level 1 cards, and a Level 3 card becomes 4 Level 1 cards.

Combat Examples

Example 1: Pure Level Advantage

Attacker: Fire Level 3
Defender: Water Level 1

Level Difference: +2
Result: Attacker wins (level difference ≥2)
Even though Water has type advantage over Fire, the 2-level difference guarantees victory.

Example 2: Level Neutralizes Type

Attacker: Fire Level 2
Defender: Water Level 1

Level Difference: +1
Defender Type Advantage: Water beats Fire
Result: Draw (type advantage neutralized by level)

Example 3: Same Level, Type Decides

Attacker: Fire Level 2
Defender: Plant Level 2

Level Difference: 0
Attacker Type Advantage: Fire beats Plant
Result: Attacker wins

Example 4: Same Level, Neutral Matchup

Attacker: Fire Level 2
Defender: Shadow Level 2

Level Difference: 0
No Type Advantage: Fire and Shadow are from different cycles
Result: Draw

Strategic Tips

Build Higher Levels

Fuse cards to create Level 2 and 3 cards for stronger attacks that can overcome type disadvantages.

Know Your Matchups

Memorize the type advantage cycles to predict combat outcomes when levels are equal.

Protect High-Level Cards

Losing a Level 3 card means 4 Level 1 cards go to your graveyard - position them carefully.

Force Draws Strategically

Use level advantages to neutralize enemy type advantages and create favorable positions.

Build docs developers (and LLMs) love