Saltar al contenido
Proyectos

Juego de navegador · teléfono y computadora

En vivo swarmgeddon.adelsonaguasvivas.workers.dev

SWARMGEDDON

Un shooter de supervivencia de dos sticks: enjambres de insectos alienígenas en tres mundos, jefes y un reto diario con semilla.

SWARMGEDDON en un teléfono: una alerta de STAMPEDE y después un chorro de insectos alienígenas entra mientras el piloto dispara.
El juego en vivo con controles táctiles, a dos minutos y medio de partida.
Rol
Solo: diseño, código y publicación
Tiempo
Desde jun 2026
Stack
TypeScript, PixiJS, WebGL, Web Audio, Capacitor, Cloudflare Workers

En vivo en swarmgeddon.adelsonaguasvivas.workers.dev. Código público en GitHub. Estado verificado el 15 oct de 2026.

En números

60 Hz

paso fijo de simulación con acumulador; el render interpola entre pasos

7

streams de azar con semilla: aparición, guion, jefe, botín, draft, combate y efectos

30

semillas por mundo para cada tipo de bot en la matriz final de balance

14

armas, más 31 perks y 10 fusiones, definidas como datos

Fig. 1 Un cuadro: pasos fijos y un solo render
  1. 1 · Cada cuadro requestAnimationFrame El tiempo del cuadro se limita, así una pausa no acumula segundos de pasos, y se suma al acumulador.
  2. 2 · Simulación, 60 Hz

    Pasos fijos Mientras el acumulador tenga 1/60 s: corre un paso y resta 1/60 s. El estado del juego solo cambia aquí.
    7 streams con semilla Cada uno es mulberry32, con semilla hash32(semilla de la partida, su sal).
    • spawn
    • script
    • boss
    • loot
    • draft
    • combat
    • fx
    Chequeo de pureza En cada build, src/systems, src/game y src/content no pueden llamar:
    • Math.random
    • Date.now
    • performance.now
    • window.
    • document.
    • localStorage
  3. 3 · Una vez por cuadro Render Dibuja entre los dos últimos pasos con alpha = acumulador / paso, así 30 fps y 120 Hz juegan el mismo juego.

La idea

SWARMGEDDON es un shooter de supervivencia de dos sticks que corre en el navegador, en teléfonos y computadoras. Peleas contra enjambres de insectos alienígenas en tres mundos, con jefes y un reto diario con semilla. Quería que las peleas con muchos enemigos respondieran bien en un teléfono sin usar un motor de juegos genérico.

Lo que construí

El loop del juego avanza la simulación en pasos fijos de 60 Hz con un acumulador y dibuja una vez por cuadro, interpolando entre pasos. Las colisiones usan un spatial hash escrito a mano en vez de un motor de física. Todo el azar de una partida sale de siete streams mulberry32, cada uno con semilla derivada de la semilla de la partida, así la misma semilla con los mismos controles repite la misma partida.

Armas, perks, enemigos, pilotos y mundos son datos sobre el mismo motor: 14 armas con 9 evoluciones, 31 perks, 10 fusiones, 3 pilotos y 3 mundos. Cada sonido se sintetiza con la Web Audio API, así el repo no tiene archivos de audio. Capacitor empaqueta el mismo build para iOS y Android, y las partidas se guardan también en el almacenamiento nativo.

Lo difícil

  1. 01 Misma semilla, misma partida

    Para repetir partidas y tener un reto diario justo, la simulación nunca puede leer el reloj ni un número al azar sin semilla. Cada build corre un chequeo sobre las carpetas de simulación que rechaza Math.random, Date.now, performance.now, window, document, localStorage y llamadas de audio.

    Dónde está en el código: scripts/check-sim-purity.mjs (se abre en otra pestaña)

  2. 02 El mismo juego con cualquier frame rate

    Un teléfono a 30 fps y un monitor a 120 Hz tienen que jugar el mismo juego. La simulación siempre avanza a 60 Hz, y el render dibuja entre dos pasos con un valor de interpolación, así el movimiento se ve fluido sin cambiar las reglas.

    Dónde está en el código: src/core/time.ts (se abre en otra pestaña)

  3. 03 Ajustar el balance con bots

    Bots sin pantalla juegan el juego real en un navegador con estrategias turret, roam, crude y smart, más variantes con dash y con tiempo de reacción. Un script de matriz guarda métricas por mundo y semilla, y con esos resultados ajusté la vida de los jefes, el largo de las peleas y la densidad de los enjambres.

    Dónde está en el código: scripts/playtest/matrix.mjs (se abre en otra pestaña)

Lo próximo

Publicar la versión de iPhone desde el mismo código.

La selección de SWARMGEDDON al subir de nivel: tres cartas de perks para escoger, con reroll, banish y skip abajo.

Pruébalo

Relacionados por idea