Cada arma tiene una skin equipada (un emoji): punoSkinId, punalSkinId, batSkinId. Se compran en el hub de avatar y se resuelven a emojis al crear el jugador:

skinEmojis: { puno: '👊', punal: '🔪', bate: '🏏' }   // por defecto

La mayoría son puramente cosméticas — cambian cómo se ve tu arma, no cómo pega. Salvo una excepción crítica.

Las skins protectoras de puño

Tres skins de 👊 tienen un efecto mecánico real: te protegen de romperte la mano al lanzar el puño.

const PROTECTED_FIST_EMOJIS = ['🧤', '🥊', '🪬']  // Guante, Manopla, Mano mágica
const isProtected = PROTECTED_FIST_EMOJIS.includes(player.skinEmojis.puno)
if (!isProtected && Math.random() < 0.3) {
  player.handBroken = true   // 30% de romperte la mano
}
SkinEmojiEfecto
Guante🧤Anula el riesgo de rotura al lanzar puño
Manopla🥊Íd.
Mano mágica🪬Íd.
(cualquier otra)👊 ✊ …Cosmética — 30% de romperte la mano al lanzar puño

Una skin puede ser una decisión de build

Esto rompe la frontera “cosmético vs funcional”: equipar 🧤 no es estética, es habilitar el lanzamiento de puño sin riesgo. Es el gancho de diseño más interesante del sistema de skins — y un sitio natural para meter más objetos con efecto leve.

Tensión de diseño

  • skinslanzamiento: las protectoras existen para el lanzamiento. Sin lanzar, dan igual.
  • Es la semilla de un sistema mayor → ver objetos-funcionales: un tier de skins con efecto mecánico. El primero más allá del puño ya existe, el Bate con clavos, que castiga el robo.

Detalle de implementación

Al lanzar, el cambio de skin se difiere a la siguiente ronda (pendingSkinSwap), para no romper la animación del resultado. Si no hay skin distinta disponible, se conserva el ítem actual del inventario.

Conexiones

  • objetos-funcionales — el tier de skins con efecto mecánico
  • lanzamiento — el único sitio donde una skin cambia el resultado
  • armas — las skins se equipan por arma
  • Hub de economía: avatar / shop / battlepass (todo redirige a /avatar)