PokéSurvivor · Mundo Misterioso
Bullet-heaven con Pokémon al estilo de Survivor.io y Megabonk, con sprites de Pokémon Mundo Misterioso, capa roguelike, 966 Pokémon de las 9 generaciones, shinies y gacha por región. Música y efectos compuestos para el juego. HTML + CSS + JavaScript vanilla sobre Canvas 2D. Sin build, sin dependencias y todo local: no necesita internet para jugar.Aviso sobre criptomonedas / Crypto disclaimer
PokéSurvivor no tiene ninguna criptomoneda, token ni NFT oficial, y yo no
he creado ninguno. Cualquier token que use el nombre del juego lo han creado
terceros. No me hago cargo de ninguna compra, venta o inversión que hagas
con ellos y nada de lo que hay aquí es una recomendación de inversión. El
juego es gratis y lo seguirá siendo.
PokéSurvivor has no official cryptocurrency, token or NFT, and I have not
created any. Any token using the game's name was created by third parties.
I take no responsibility for any purchase, sale or investment you make
with them, and nothing here is investment advice. The game is free and will
stay free.
Jugar
Doble clic enindex.html. Crea una cuenta o entra como invitado, haz el test
de personalidad y a la mazmorra.
| Tecla | Acción |
|---|---|
| W A S D / flechas | Moverse |
| 1 2 3 4 | Elegir el movimiento activo |
| Q / E | Ciclar movimientos |
| Esc / P | Pausa |
En móvil o tablet (en horizontal): pon el dedo en cualquier sitio y arrastra
para moverte (el joystick aparece donde tocas), toca un ataque de abajo para
cambiarlo y el botón de arriba a la derecha para pausar. Se puede instalar como
app ("Añadir a pantalla de inicio"). En Ajustes hay sonido, calidad gráfica
(con modo automático), números de daño, menos sacudidas, FPS y la cuenta.
El Pokémon ataca solo con el movimiento activo (o con todos los de un
vínculo: cada legendario vencido deja fusionar movimientos para lanzarlos a
la vez desde un solo hueco, hasta 4). Las rocas, cofres y la hierba
alta se rompen; las paredes y los árboles bloquean los disparos enemigos; el
agua frena y la lava quema (también a los enemigos).
En el mapa hay altares de poder, manantiales que curan, **cofres con
candado (quédate a su lado unos segundos) y trampas** que también dañan a
los enemigos. A veces se abre una grieta: entra y lucharás contra un
legendario en una arena aparte.
Hay tabla de tipos (un Rayo Burbuja le quita más a un Charmander) y,
de vez en cuando, climas (sol, lluvia, arena, nieve, niebla) que potencian
unos tipos y debilitan otros.
Cada día hay misiones (y semanales) que dan tickets y monedas; los
logros dan medallas y títulos, y tu perfil enseña tus 3 Pokémon
favoritos, tus marcas y tus medallas. En las runs encuentras objetos (Restos,
Cinta Elección...) y tus movimientos evolucionan al máximo nivel. Los
enemigos tienen personalidad: curan, ponen escudos, llaman a su manada o atacan
con aviso en el suelo.
Las mejoras son de cada Pokémon. El gacha va con tickets que se
ganan jugando (×1 de algunos Pokémon, ×10 de jefes y legendarios), y se tira
en una tragaperras pixel art.
Cada enemigo tiene 1/4096 de salir shiny: brilla, una flecha en el borde de
la pantalla te dice dónde está, y si lo derrotas te lo quedas. En el gacha sale
shiny 1 de cada 100 tiradas. En la colección eliges tu compañero en versión
normal o shiny.
La música suena tras el primer clic (los navegadores no dejan reproducir sonido
antes). Volumen y silencio: botón del altavoz arriba a la derecha, o en la pausa.
El guardado vive en el localStorage del navegador: si borras los datos del
sitio, se pierde.
En videos/ hay grabaciones del juego (con su música): un combate contra un
jefe, la captura de un shiny salvaje y un shiny en el gacha.
Guardado en la nube y publicación
- Base de datos (Firebase): cuentas con nombre + contraseña o Google, y la
- Jugar con amigos (hasta 4) y ranking: con cuenta en la nube, menú
- Publicar gratis en GitHub Pages: docs/PUBLICAR.md.
- Si se juega en dos ordenadores a la vez o sin conexión, las partidas se
Licencia
Código bajo PolyForm Noncommercial 1.0.0 desde el 14-10-2026: se puede usar, estudiar y modificar, pero **no con fines comerciales** (ni vender el juego ni cobrar nada dentro de él). Las versiones hasta el commitb297089 se publicaron bajo MIT. Los sprites (CC BY-NC 4.0),
la fuente (OFL) y las marcas de Pokémon tienen sus propias condiciones: ver
LICENSE y CREDITS.md. Proyecto de fan sin ánimo de
lucro.
La única web oficial es pokesurvivor.com. El
juego es y será gratis: si alguien te pide pagar, no somos nosotros.
Estructura
``
index.html pantallas + orden de carga
css/style.css interfaz estilo Mundo Misterioso
assets/pokemon/{dex}/ hojas de sprites PMD (Idle, Walk, Attack, Shoot, Charge, Hurt, Faint)
assets/pokemon/{dex}/s/ las mismas en versión shiny
assets/fonts/ Pixelify Sans (OFL) y su versión con números redibujados (tools/make_font.py)
js/
net/ social (apodo, amigos, salas), net (WebRTC + relé),
coop (partida en grupo), ranking
core/ util, db (guardado), audio (sintetizador + efectos), input,
sprites (animador PMD), camera
data/ pokedex, sprites-meta, moves, starters (+ test), enemies,
upgrades, music (partituras)
world/ tiles (pixel art en código), world (terreno, objetos, colisiones)
entities/ player, enemy, projectile, pickup, fx
systems/ combat, spawner, levelup, gacha
ui/ icons (pixel art), ui, hud, login, test, menu, gacha-ui, run-ui,
social-ui, ranking-ui
game.js flujo y bucle principal
tools/ scripts que regeneran los ficheros marcados con *
`
* = generado. Para rehacerlos (necesita Python 3 + Pillow e internet, sólo esa vez):
`
python tools/fetch_sprites.py # sprites normal y shiny + js/data/sprites-meta.js
# (~20 min; se puede cortar y relanzar: usa tools/cache/)
python tools/fetch_pokedex.py # js/data/pokedex.js
python tools/fetch_credits.py # CREDITS.md
`
Notas de implementación
- Sprites PMD. Columnas = fotogramas, filas = 8 direcciones (Down, DownRight,
Right, UpRight, Up, UpLeft, Left, DownLeft — verificado con los -Offsets.png).
Cada animación tiene su propio tamaño de fotograma, así que se alinean por el
ancla al suelo sacada del -Shadow.png; sin eso el sprite saltaría al atacar.
- Coordenadas.
(x, y) de una entidad son sus pies. Las colisiones ocurren en el plano del suelo; los proyectiles vuelan en ese plano y se dibujan
elevados con su sombra debajo.
- Mundo. Chunks de 16×16 tiles: los datos (terreno, objetos) son baratos y
se generan siempre; la imagen se hornea a resolución de arte escribiendo en un
ImageData (~4 ms por chunk en Chrome) y sólo para los visibles.
- Rendimiento. Rejilla espacial de enemigos reconstruida cada frame. Con 420
enemigos, simulación + render completo ≈ 3 ms por frame en Chrome.
- Metadatos en
.js, no .json, porque fetch() está bloqueado en file://.
Shiny. Los shiny de SpriteCollab son el mismo dibujo con otra paleta; están en s/ y sólo 30 tienen geometría distinta (campo sa en los metadatos).
Las hojas se guardan como PNG con paleta exacta: misma imagen, la mitad de peso.
- Audio. Sintetizador Web Audio con planificador anticipado (programa las
notas 150 ms por delante) y reverb por convolución con un impulso generado.
Las partituras están en js/data/music.js en un formato de texto propio.
Los efectos tienen separación mínima entre repeticiones y un tope de voces,
para que 400 enemigos golpeados a la vez no saturen.
- Iconos. Mapas de caracteres convertidos a canvas y data URLs; siempre a
múltiplos enteros de su tamaño para que el píxel quede limpio.
Créditos y licencia
Sprites de SpriteCollab bajo
CC BY-NC 4.0 — uso no comercial y con atribución; la lista de artistas
está en CREDITS.md`. Pokémon es propiedad de Nintendo, Creatures
Inc. y GAME FREAK. Proyecto de fan sin ánimo de lucro.