El combo premia ganar tres rondas seguidas con la misma arma: el tercer golpe hace doble daño.

COMBO_THRESHOLD = 3
COMBO_MULTIPLIER = 2

Cómo se arma

Cada victoria actualiza tu racha (winStreak) y el arma de la última victoria (lastWinWeapon):

function applyWinStreak(winner, loser) {
  const sameWeapon = winner.lastWinWeapon === winner.choice
  winner.winStreak = sameWeapon ? winner.winStreak + 1 : 1
  winner.lastWinWeapon = winner.choice
  loser.winStreak = 0          // perder rompe la racha del rival
}

El combo se pre-arma justo antes de calcular el daño de tu tercera victoria consecutiva:

attacker.comboReady = (attacker.winStreak === COMBO_THRESHOLD - 1)
                   && (attacker.lastWinWeapon === attacker.choice)
// ...y entra en la tubería como ×2 (paso 5)

Tras dispararse, la racha se reinicia (winStreak = 0): no encadenas combos infinitos, vuelves a empezar la cuenta.

graph LR
  W1["Win arma X<br/>streak=1"] --> W2["Win arma X<br/>streak=2"]
  W2 --> W3["Win arma X<br/>💥 ×2 daño<br/>streak→0"]
  W2 -.->|cambias arma<br/>o empatas| R["streak=1 / 0"]

Lo que lo rompe

  • Ganar con otra arma → la racha se reinicia a 1 (empiezas de nuevo).
  • Empatar (misma arma) → racha a 0 para ambos.
  • Perder → racha a 0.

Combo vs predecibilidad

Para armar el combo tienes que repetir arma, lo que te hace legible. El rival que lee tu racha puede contrarte en la tercera. El combo es poder a cambio de información: justo la tensión que lo hace interesante.

Relación con el resto

  • Entra en dano como ×2, se apila multiplicativamente con last-stand y lanzamiento.
  • Es el opuesto filosófico del furor: el combo premia actuar y ganar; el furor premia no hacer daño. Un jugador rara vez nutre los dos a la vez.