Al empezar la partida los dos jugadores no son simétricos. Uno es el asaltado (defensor) y otro el ladrón (atacante). El reparto es 50/50:

// 50/50: quién es defensor (asaltado) vs atacante (ladrón)
const playerIsDefender = Math.random() < 0.5

La diferencia: el bate

La única asimetría mecánica es quién empieza con el bate:

hp: INITIAL_HP,
isDefender,
hasBat: isDefender,   // el defensor nace con el bate en la mano
  • Asaltado / defensor → empieza con 🏏. Es el que estaba en casa cuando llegó el chorizo.
  • Ladrón / atacante → empieza sin bate, solo 👊 y 🔪. Tiene que robar el bate para acceder al arma fuerte.

El rol es permanente, la posesión no

Tras cada ronda y entre partidas, los roles (isDefender) se conservan, pero hasBat se resetea al dueño original. El bate vuelve a su sitio salvo que se haya robado en esa ronda. Ver el-bate.

// Al reiniciar partida: se conservan roles, se restaura posesión
p.hasBat = p.isDefender

Por qué importa para el diseño

El rol define tu plan de apertura:

  • El defensor puede ir a daño bruto con el bate desde la ronda 1, pero debe proteger su posesión de un puño ladrón.
  • El atacante juega a robar: si acierta puño contra el bate del rival, le quita el arma y el tempo a la vez.

Esto se cruza con la pasiva de bate (el calcetín), que existe precisamente para que el defensor pueda resistir un intento de robo.

Conexiones

  • el-bate — toda la mecánica de posesión y robo
  • armas — por qué el puño es la llave del bate
  • El bot también recibe un rol aleatorio al ofrecerse.