← Proyectos
Personales 2026

Crystalysis

Un roguelite de tirachinas para Android, hecho y publicado en solitario. Una bola inmortal defiende un cristal de una horda infinita, con drafting estilo survivors montado sobre una bola que el jugador apunta y lanza. Publicado en Google Play en trece idiomas.

Dónde jugar

Hoy en Android, y con más plataformas en camino. Esta lista se mantiene al día: cuando una plataforma se publica, su botón lleva directo a la tienda.

Google Play Disponible ya
iOS / App Store Planeado
PC / Steam Planeado

Estiras, sueltas, y una sola bola inmortal abre un agujero en la horda que avanza hacia tu cristal. La bola nunca muere. Pero se frena a medida que mata, y el daño depende de la velocidad, así que la partida se convierte en una pelea por mantenerla en movimiento: rebotarla en las paredes, atraparla en pleno vuelo para reapuntar, no dejar que se arrastre.

La construcción está tomada de Vampire Survivors. Entre oleadas eliges armas y pasivas que se emparejan en evoluciones. Lo que no está tomado de nadie es de dónde sale el daño. Tus armas disparan solas, pero la bola es tuya: la estiras, la apuntas y la sueltas. Mantener el apuntado congela el mundo, pero la congelación está medida y se agota con el dedo todavía en la pantalla.

Por debajo, una sola regla decidió la arquitectura. La previsualización y el vuelo real pasan por la misma función de simulación, así que el juego no puede mentir sobre dónde va a ir la bola. La bola usa integración cinemática propia en vez de física. Un reloj de mundo propio sustituye a Time.timeScale, de modo que la interfaz nunca se congela con el mundo. Todo se construye por código en tiempo de ejecución, los visuales se dibujan proceduralmente y el audio se sintetiza, y por eso la build apenas lleva assets.

Lleva 3.700 tests automatizados, trece idiomas, clasificaciones, guardado en la nube, configuración remota y un pipeline que llega a Google Play con un solo comando. Android primero, más plataformas en camino.

Duración In active development
Estado Live on Google Play (open testing)
Año 2026
1
Team Size
13
Languages
3,700+
Automated Tests
Google Play
Platform

Resumen

A slingshot roguelite for Android, made and shipped alone. You defend one crystal with a single immortal ball, drafting weapons and passives between waves the way survivors games do. The difference is that survivors games never ask you to aim: here the ball is yours to throw, and damage is speed. Live on Google Play in thirteen languages.

Reto

Ship a live mobile game alone. No team, no publisher, no art budget. The controls had to carry a whole action game on one thumb, the difficulty had to run forever without hand-authored content, and the architecture had to survive months of me adding to it.

Investigación

I went through the survivors-like genre asking which parts its appeal actually rests on. The drafting and the build fantasy, it turns out. What is convention is the passivity: you move, and everything else happens for you. Putting a ball the player aims and throws at the centre kept what people come for and made the minute-to-minute mine instead of borrowed. Device playtests, a telemetry pipeline and a simulation bot then replaced opinion with measurement on every balance call.

Solución

One rule decided the rest: the trajectory preview and the real flight have to be the same code, so the game cannot lie about where the ball will go. From there a custom world clock turned time into a resource, an orchestrator generated pressure from a threat budget instead of authored waves, and a strict module pattern gave every weapon and passive its own data and behaviour.

Implementación

Unity 6 with URP's 2D renderer and UI Toolkit. The ball runs on custom kinematic integration rather than physics, which makes it deterministic and testable. The scene is built from code at runtime, the visuals are drawn procedurally and the audio is synthesized, so the build stays tiny. Unity Gaming Services covers leaderboards, cloud save and remote config. The release pipeline is scripted end to end, from batchmode tests through IL2CPP to a published Google Play track.

Resultados

On Google Play, playable worldwide in thirteen languages, with an open test running and feedback coming in from players who owe me nothing. Every report is tracked in an audited ledger with its real root cause and how it was closed. 3,700 automated tests, one person maintaining all of it.

Flujo de desarrollo

Crystalysis es también un experimento de desarrollo en solitario con IA, y lo interesante no es el asistente. Es el andamiaje que hay alrededor. Construyo el juego con Claude Code contra un contrato escrito que vive en el repositorio y recoge las reglas de arquitectura, así que el asistente trabaja bajo las mismas restricciones que yo. El estado del proyecto vive en un único documento canónico en vez de reconstruirse de memoria en cada sesión. El feedback de jugadores entra en un registro auditado, y cerrar una entrada ahí exige el hash del commit, la causa raíz real y una nota de qué es lo que el arreglo no cubre. Ese último campo existe porque la causa que se reporta a menudo no es la verdadera. Lo que lo mantiene honesto está automatizado. La documentación de contenido se genera ejecutando las propias funciones del juego, así que un inventario de armas o de números de economía no puede pudrirse en silencio. Un linter de higiene corre en un hook de pre-commit. Una base de conocimiento invalida sus propias páginas a partir del historial de Git cuando cambian sus dependencias, de forma que una página no puede darse por vigente sólo porque nadie la haya mirado. Tests de guardia rompen la build cuando se da de alta contenido mal. Y el editor de Unity se maneja por MCP para editar assets, lanzar tests y leer la consola. Con precisión sobre lo que eso significa: el código está asistido por IA y la localización está traducida a máquina. No hay arte ni audio generativos en ninguna parte del juego. Los visuales se dibujan por código y el audio se sintetiza en tiempo de ejecución.

Desafíos

  • •Una bola que el jugador apunta y lanza perdona mucho menos que el control de sólo moverse en el que se apoya el género survivors, y aquí sostiene el juego entero con un solo pulgar
  • •Dificultad que pueda correr indefinidamente, con ritmo real, sin escribir oleadas a mano ni chocar contra un muro de repetición
  • •Poder seguir añadiendo contenido durante meses, en solitario, sin que la arquitectura se venga abajo

Soluciones

  • •La previsualización y el vuelo real comparten una única función de simulación, así que el camino que ves es el que sale, con varios esquemas de apuntado encima
  • •Un orquestador rellena un presupuesto de amenaza creciente con un compositor procedural, más una capa de ritmo y un marcapasos adaptativo para que la presión respire en vez de subir plana
  • •Cada arma, pasiva y evolución es dueña de sus datos y su comportamiento. Añadir una es un asset nuevo y una clase nueva, sin tocar código compartido, y con 3.700 tests detrás
Tech Unity 6C#URP 2DUI ToolkitProcedural AudioDeterministic SimulationTelemetry & Analytics
Plataforma AndroidGoogle Play
Rol Solo DeveloperGame DesignerTechnical Director