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.
Doble clic en index.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.
- Base de datos (Firebase): cuentas con nombre + contraseña o Google, y la partida se sigue en cualquier ordenador. Pasos en docs/FIREBASE.md. Sin configurar, el juego guarda sólo en el navegador, como antes.
- Jugar con amigos (hasta 4) y ranking: con cuenta en la nube, menú Amigos (añadir por apodo, invitar a tu sala) y Ranking (tiempo aguantado: solo o grupo, de hoy a histórico, amigos, por Pokémon).
- Publicar gratis en GitHub Pages: docs/PUBLICAR.md.
- Si se juega en dos ordenadores a la vez o sin conexión, las partidas se fusionan: las colecciones se unen (nunca se pierde un Pokémon ni un shiny), mejoras y estadísticas se quedan con el máximo, y monedas y compañero con la versión más reciente. Los cambios de otro ordenador llegan en directo.
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 commit b297089 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.
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
- 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, porquefetch()está bloqueado enfile://. - Shiny. Los shiny de SpriteCollab son el mismo dibujo con otra paleta; están
en
s/y sólo 30 tienen geometría distinta (camposaen 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.jsen 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.
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.