El combo premia ganar tres rondas seguidas con la misma arma: el tercer golpe hace doble daño.
COMBO_THRESHOLD = 3
COMBO_MULTIPLIER = 2Có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.