Extra · 4 de septiembre de 2026

Habemus Bluetooth

Tres días para conseguir que Escobita pueda jugarse entre dispositivos cercanos, con o sin Wi-Fi.

Hay funciones que empiezan con una idea aparentemente sencilla:

«Estaría bien poder jugar una partida con alguien que tienes al lado.»

En casa puede ser tu abuelo en el sofá con una tablet mientras tú juegas desde el PC.

Pero también puedes estar en un tren, en el metro, de viaje o sencillamente en cualquier sitio donde haya dos personas con ganas de echar una partida y ninguna razón para depender de Internet.

Así que nos hicimos una pregunta:

«¿Por qué una partida entre dos dispositivos que están a pocos metros debería necesitar un servidor al otro lado del mundo?»

Parecía una idea razonable.

Nos ha costado tres días de nuestras vidas.

Día 1 — Empecemos por lo fácil: una red local

La primera parte era evidente. Si dos dispositivos están conectados a la misma red, Escobita debería permitir que uno crease una sala y el otro entrase.

Así nació una cosa extremadamente glamurosa llamada LAN-001 · Sala y chat.

Primera pantalla experimental LAN de Escobita
01 · EL PRINCIPIO — No era bonita, pero tenía botones. Y los botones son peligrosos porque puedes pulsarlos.

Lo pulsamos.

Naturalmente, no funcionó todo a la primera.

Pantalla de búsqueda LAN con conexión manual
02 · DISCOVERY NO DISPONIBLE — Cuando descubrir al otro dispositivo todavía era más una aspiración que una característica.

Había interfaces virtuales, direcciones que no eran las que esperábamos, descubrimiento que no siempre encontraba al otro dispositivo y algún que otro «¿PERO POR QUÉ ESTÁS INTENTANDO CONECTARTE POR AHÍ?».

Después llegaron la verificación entre dispositivos, los estados de conexión y nuevos errores.

Prueba LAN con verificación expirada
03 · VERIFICACIÓN EXPIRADA — El tipo de mensaje que te recuerda que «conectado» y «listo» no son exactamente lo mismo.

Hasta que finalmente ocurrió algo bastante más interesante.

Sala LAN con dos jugadores conectados y chat funcional
04 · 2/2 — Dos jugadores, sala creada, chat funcionando y la conexión real ya detrás de la interfaz.

Dos dispositivos. Jugadores: 2/2. Sala creada. Chat funcionando. Y, finalmente, una partida real.

Habemus LAN.

Podríamos haberlo dejado ahí.

Eso habría sido sensato.

Día 2 — ¿Y si no hay Wi-Fi?

Éste fue el momento en el que la cosa empezó a torcerse.

Porque LAN solucionaba perfectamente una situación: dos personas dentro de una misma red.

Pero Escobita también debería funcionar cuando esa red sencillamente no existe.

Dos móviles en el metro. Una tablet y un portátil durante un viaje. Dos personas sentadas una al lado de la otra.

Tenemos dos dispositivos. Están prácticamente pegados. Ambos tienen Bluetooth.

...

«¿Y si hacemos exactamente lo mismo por Bluetooth?»

Y así apareció esto:

Prototipo técnico inicial de Bluetooth para Escobita
05 · EL LABORATORIO — Botones gigantes, permisos, paquetes y pruebas. Horrible. Maravilloso.

Eso no pretendía ser una pantalla de Escobita. Era un laboratorio. Lo importante era averiguar una cosa: ¿podíamos establecer una comunicación Bluetooth real entre dispositivos y utilizarla para una partida?

Empezaron las pruebas: Windows, Android, Bluetooth RFCOMM, sockets, fragmentación de datos, conexiones, desconexiones y reconexiones.

Y después quisimos conservar también la capa de seguridad que ya habíamos construido para las partidas locales.

Resultado: Bluetooth RFCOMM real entre PC y Android con un canal seguro basado en TLS 1.3.

Aquello ya no era una idea. La tubería funcionaba. Ahora había que meter Escobita entera por ella.

Día 3 — «Conecta» y «funciona» son dos conceptos sorprendentemente diferentes

El objetivo nunca fue construir un «Escobita Bluetooth» separado. La partida tenía que seguir siendo la misma. Las reglas, el chat, la identificación y la confianza entre dispositivos tenían que seguir siendo las mismas.

Lo único que debía cambiar era el camino por el que viajaban los datos.

Interfaz de Conexión local con selector Red local y Bluetooth
06 · CONEXIÓN LOCAL — Bluetooth deja de ser un experimento aislado y entra en la misma pantalla que la red local.

Y entonces empezaron los gremlins.

Conectaba. A veces. Alguna vez parecía tener especial predilección por funcionar a la segunda, cosa que técnicamente no consideramos una característica.

Conseguimos que los dispositivos se reconocieran. Conseguimos establecer confianza entre ellos. Conseguimos crear una sala Bluetooth real.

Sala Bluetooth de Escobita con anfitrión esperando al segundo jugador
07 · ESPERANDO JUGADOR — La sala ya es real. Falta lo más importante: que la partida sobreviva cuando dejemos esta pantalla.

Después entró el segundo jugador. Funcionó el chat. Pulsamos Iniciar partida.

Y uno de los dispositivos entró en la partida.

El otro se quedó esperando eternamente a que el anfitrión iniciase una partida que, técnicamente, ya había iniciado.

Arreglamos aquello. Los dos entraron. Jugamos una carta.

...

Y no ocurrió nada en el otro dispositivo.

Magnífico.

El bug que tenía bastante sentido... después de encontrarlo

La explicación terminó siendo casi cómica.

Durante la sala, nuestro puente Bluetooth estaba funcionando perfectamente. Cuando pulsábamos Iniciar partida, Escobita abandonaba la pantalla de conexión para entrar en la mesa de juego.

Y al destruir aquella pantalla... también destruíamos el componente que estaba manteniendo vivo el puente Bluetooth.

1. Construimos un puente
2. Cruzamos hasta la partida
3. Destruimos el puente
4. Nos sorprendimos porque ya no cruzaba nada

Una vez descubierto parece evidente. Antes de descubrirlo, bastante menos.

La conexión pertenecía a la sesión de juego, no a una pantalla concreta. Corregimos su ciclo de vida, volvimos a empezar y probamos otra vez.

Una carta. Llegó.

Otra. Llegó.

Turnos. Capturas. Escobas.

La partida siguió.

Hasta que apareció esto:

Resultado de una partida completa de Escobita jugada mediante Bluetooth
08 · FIN DE MANO — No es un «Hello World». No es una conexión de laboratorio. Es una partida completa.
Habemus Bluetooth.

No una pantalla de pruebas. No dos dispositivos que dicen estar conectados.

Una partida real de Escobita, jugada entre hardware real mediante Bluetooth. Desde crear la sala hasta terminar la mano. Con verificación entre dispositivos, chat, turnos, capturas, escobas y puntuación.

De principio a fin.

¿Y para qué demonios hemos hecho todo esto?

Porque queremos que Conexión local signifique exactamente eso.

📶 Red local. En casa, compartiendo Wi-Fi o red, desde un PC, una tablet o un móvil.
🟦 Bluetooth. En el metro, viajando o simplemente cuando no hay una red común.

Y por encima de ambas cosas debería existir una sola Escobita.

Aquello que inicialmente imaginábamos casi como:

móvil → Wi-Fi → PC

acabó necesitando algo más parecido a:

conexión → canal seguro → verificación entre dispositivos → sala → chat → partida

Bajo el capó hay bastante ingeniería —incluido TLS 1.3 en la build normal—, pero precisamente nuestro objetivo es que el jugador no tenga que saber absolutamente nada de ella.

De hecho, todavía tenemos trabajo precisamente ahí.

Nadie debería necesitar saber qué demonios es una dirección MAC para jugar a las cartas. Tampoco aceptamos que «a la segunda suele funcionar» sea documentación de usuario. 😅

Tenemos que mejorar el descubrimiento de dispositivos, el historial, las reconexiones y toda la experiencia alrededor de Bluetooth hasta conseguir algo mucho más cercano a:

Crear sala.
Encontrar a la otra persona.
Jugar.

Y punto.

Esto acaba de empezar

El multiplayer local todavía tiene cosas muy interesantes por delante: opciones de partida, reglas configurables por el anfitrión, temporizadores, latencia y alguna que otra tontería para picar al amigo que tienes enfrente.

Y después está todo lo demás.

Seguimos construyendo nuestras propias barajas. Seguimos trabajando en cómo enseñar no sólo las reglas de la Escoba, sino también a entender mejor una partida. Seguimos investigando la historia y diversidad de las cartas que llevan siglos pasando de mano en mano.

Y hay cierta parte roguelike esperando pacientemente su turno.

Sí. Hemos dicho roguelike.

No. Hoy no vamos a contar más. 👀

¿Y USB-C?

Mira.

Después de estos tres días hemos aprendido una cosa: es extremadamente peligroso que alguien diga cerca del repositorio:

«¿Te acuerdas de aquellos cables Link de las consolas portátiles?»

Porque sí. Los dos dispositivos tienen USB-C.

Y no nos hemos olvidado.

No prometemos absolutamente nada. 😂

Hace tres días todo esto era una pregunta:

«¿Podríamos jugar con alguien que tenemos al lado sin depender de Internet?»

Hoy podemos empezar a responderla.

Red local. ✅
Bluetooth. ✅

Y todavía queda mucho por hacer.

Pero después de tres días de pruebas, conexiones que funcionaban a la segunda, componentes que desaparecían al cambiar de pantalla y algún que otro momento de mirar fijamente el monitor preguntándonos qué habíamos hecho para merecer aquello...

por fin podemos escribirlo:

🧹 Habemus Bluetooth.

Dos personas. Dos dispositivos. Una partida. Sin Internet.

Y ahora sí: a seguir haciendo Escobita.