Juego de navegador · teléfono y computadora
SWARMGEDDON
Un shooter de supervivencia de dos sticks: enjambres de insectos alienígenas en tres mundos, jefes y un reto diario con semilla.
- Rol
- Tiempo
- Stack
- Enlaces
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
- 1 · Cada cuadro request
Animation El tiempo del cuadro se limita, así una pausa no acumula segundos de pasos, y se suma al acumulador.Frame -
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 · 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
-
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.
-
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.
-
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.
Lo próximo
Publicar la versión de iPhone desde el mismo código.
Pruébalo
Relacionados por idea
Azar con semilla, para repetir cualquier partida
Invicto, Flawless, The Veil · El Velo, Conuco, Coherente, Este sitio
Reglas en un módulo sin imports de la interfaz
Dificultad verificada con simulación antes de publicar
Invicto, Flawless, The Veil · El Velo, Coherente
Partidas guardadas que sobreviven recargas, actualizaciones y pérdida de almacenamiento
Conuco, Coherente, El Corre Corre, Invicto