Underground 2 Revived
Play Need for Speed: Underground 2 (2004) in Chrome and Firefox with WebGPU graphics, Web Audio, up to 120 fps widescreen, controller support, free roam and Online races with friends. Fan project, not
Minijuego que recrea una tradición muy popular de la Velá de Triana, La Cucaña. Coge impulso, mantén el equilibrio y alcanza la bandera.
Translation pending
GamesJavaScript · HTMLGitHub @Luisao82OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Explorando varias herramientas para desarrollar un juego con IA
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
Minijuego retro en estilo pixel art 16 bits inspirado en la Cucaña de Triana, la tradicional prueba de equilibrio de la Velá de Santa Ana en Sevilla. La tradición de la Cucaña en Triana Cada mes de julio, el barrio de Triana en Sevilla celebra la Velá de Santa Ana, una de las fiestas populares más antiguas y queridas de la ciudad. Entre farolillos, casetas, música y el olor a pescaíto frito, el río Guadalquivir se convierte en escenario de una de las pruebas más divertidas y esperadas: la Cucaña.Read the full README ↗
Minijuego retro en estilo pixel art 16 bits inspirado en la Cucaña de Triana, la tradicional prueba de equilibrio de la Velá de Santa Ana en Sevilla.
Cada mes de julio, el barrio de Triana en Sevilla celebra la Velá de Santa Ana, una de las fiestas populares más antiguas y queridas de la ciudad. Entre farolillos, casetas, música y el olor a pescaíto frito, el río Guadalquivir se convierte en escenario de una de las pruebas más divertidas y esperadas: la Cucaña.
La Cucaña consiste en un largo palo de madera colocado en horizontal sobre el río, engrasado con sebo o jabón, que parte desde una barcaza. Los participantes deben recorrerlo manteniendo el equilibrio hasta alcanzar una bandera clavada en el extremo. Lo que parece sencillo se convierte en un desafío casi imposible: el palo resbala, se balancea con cada paso y la caída al Guadalquivir está asegurada para la mayoría.
Es una tradición que lleva generaciones formando parte del verano trianero, donde niños y mayores se lanzan a intentarlo entre los aplausos y las risas del público que observa desde la orilla y el puente. Más que una competición, es un espectáculo que representa el espíritu festivo, valiente y desenfadado de Triana.
La Cucaña Trianera traslada esta tradición a la pantalla. El jugador debe avanzar por el palo engrasado sobre el Guadalquivir, manteniendo el equilibrio hasta alcanzar la bandera en el extremo. Sencillo de entender, difícil de conseguir.
Cada personaje tiene estadísticas que afectan a la partida:
| Stat | Efecto |
|---|---|
| Peso | Afecta a la física del palo. Más peso = más inercia, pero también más estabilidad en condiciones normales |
| Equilibrio | Determina el margen antes de caer. Más equilibrio = más tiempo de reacción |
| Altura | Centro de gravedad más alto (más difícil de equilibrar), pero brazos más largos para alcanzar la bandera |
| Edad | Afecta a la velocidad de movimiento y la resistencia |
Personaje inicial: "El Trianero" - Stats medios en todo. El personaje equilibrado para aprender las mecánicas.
El jugador elige la perspectiva de la partida en la pantalla Elige tu vista:
| Tecnología | Uso |
|---|---|
| Phaser 3 | Motor del juego (v3.90) |
| three.js | Renderizado de la vista 3D en primera persona (v0.185) |
| Vite | Bundler y servidor de desarrollo (v6.3) |
| JavaScript (ES2022) | Lenguaje base — módulos ES, sin transpilación adicional |
| Capacitor (iOS + Android) | Empaquetado nativo del juego para App Store y Google Play (v8) |
| Plugins Capacitor | @capacitor/share, @capacitor/preferences, @capacitor/haptics, @capacitor/browser |
| GitHub Actions | CI/CD — workflow ios-release.yml compila y sube a App Store Connect al pushear un tag v*.*.* |
| Vercel | Despliegue web con auto-deploy desde main |
| Sentry | Monitorización y captura de errores en producción (breadcrumbs de navegación entre escenas) |
| Vitest | Tests unitarios |
| Prettier + ESLint | Formato y linting (validados en CI en cada PR) |
| LibreSprite / Aseprite | Sprites y pixel art dibujados a mano |
| BeepBox / jsfxr | Música y efectos de sonido, hechos a mano |
| ChatGPT / Gemini | Generación de imágenes de fondos y premios con prompts JSON compartidos por coherencia visual |
| Claude Code | Copiloto de desarrollo (código, arquitectura, refactor, debugging, docs) |
| Comando | Descripción |
|---|---|
npm install | Instalar dependencias |
npm run dev | Servidor de desarrollo en http://localhost:8080 |
npm run build | Build de producción en carpeta dist |
├── index.html # HTML principal
├── package.json
├── capacitor.config.json # Configuración Capacitor (appId, appName, webDir)
├── public/
│ ├── assets/ # Sprites, audio, fondos, rewards, personajes
│ ├── favicon.png
│ └── style.css # Estilos globales del contenedor
├── src/
│ ├── main.js # Bootstrap web + init NativeStorageBridge
│ └── game/
│ ├── main.js # Configuración y arranque de Phaser
│ ├── config/ # Constantes y configuración del juego
│ ├── scenes/ # Escenas de Phaser (capa de presentación)
│ ├── entities/ # Modelo del dominio (lógica pura sin Phaser)
│ ├── systems/ # Sistemas de juego (equilibrio, impulso, física)
│ ├── components/ # Componentes UI reutilizables
│ ├── services/ # Servicios (persistencia nativa, etc.)
│ └── utils/ # Utilidades puras (share, math, haptics…)
├── android/ # Proyecto nativo Android (Capacitor)
├── ios/ # Proyecto nativo iOS (Capacitor)
├── docs/ # Documentación técnica de release e IP
├── vite/ # Configuración de Vite (dev, prod)
├── .github/
│ └── workflows/ # CI/CD (ci.yml, ios-release.yml)
├── CHANGELOG.md # Historial de versiones (Keep a Changelog)
├── GDD.md # Game Design Document
├── CREDITS.md # Créditos y agradecimientos
├── PRIVACY.md # Política de privacidad publicada
├── LICENSE # Licencia
└── CLAUDE.md # Directrices para el copiloto IA
Sigue los principios de Clean Architecture: las escenas son orquestadoras (sin lógica de negocio), las entidades y sistemas contienen la lógica pura del juego, y los componentes UI son reutilizables. Detalle completo en el CLAUDE.md.
ios-release.yml que compila con Xcode 26 y sube a App Store Connect al pushear un tag v*.*.*unhandledrejection, con breadcrumbs de navegación entre escenas para reproducir el camino que llevó al fallo@capacitor/filesystem para escribir el blob en disco antes de invocar el share nativo)android-release.yml para automatizar el AAB (pendiente hasta que Google Play desbloquee la cuenta developer)Este juego es mi Trabajo Fin de Máster del Máster de Desarrollo con IA de MoureDev / BIG School, pero para mí es mucho más que eso.
Soy trianero de adopción y de corazón. Cuando empecé a explorar el desarrollo con IA me di cuenta de que podía atreverme con cosas que antes no. Quería hacer un minijuego pixel art propio, pero no me salían ideas que no estuvieran ya cogidas. En algún momento caí en una de las tradiciones más antiguas y curiosas de Triana: la cucaña de la Velá de Santa Ana. De niño mis padres me llevaban a verla, y siempre me quedó el ambiente, el bullicio del río y el momento en que alguien conseguía coger la bandera al final del palo engrasado.
Empezó como algo mínimo — mantener el equilibrio, no caerse — y fue creciendo: personajes de Sevilla, premios muy sevillanos, un mapa por trozos, la vista 3D final… hasta convertirse en un pequeño homenaje a la tradición.
Este juego no es solo un TFM: es una criatura hecha 100% a mano en el tiempo que me dejaba mi trabajo. Las fotos son mías, hechas con mi cámara y pixeladas después. Los skins de los personajes están dibujados píxel a píxel. Ha sido una inversión enorme de horas y de ilusión.
Más allá del componente sentimental, ha sido un ejercicio real de aplicar los conocimientos del máster a un proyecto vivo:
.gitignore bien pensado.Además del plazo del máster, me impuse una fecha propia: publicar la app en App Store y Google Play antes de la Velá de Santa Ana (cuando se celebra esta tradición en Triana, en julio). Trabajar con una fecha real, con las consecuencias reales de no cumplirla, es una lección que en el aula no se enseña del todo. Este palo me lo he trabajado por mi cuenta y ha sido tan didáctico como el resto.
Publicar en producción es la fase más ignorada por los cursos y una de las más reales del oficio. Este proyecto me ha metido de lleno en:
Y bloqueantes que me han obligado a ser resolutivo:
LANG=en_US.UTF-8 al rescate.compileSdk 36 y AGP 8.9.1 con conflicto de duplicate classes en Kotlin stdlib.docs/ip-content-audit.md), decisión de autor con plan de sustitución si aparece reclamación.Además de por el TFM, quería que la app existiera de verdad. Dos motivos:
He usado varias herramientas distintas para construir cada tipo de contenido del juego, no una sola IA para todo. La intención era que cada pieza saliera de la herramienta más adecuada, no del atajo más rápido:
Que el proyecto se apoye en más de una IA (y en herramientas artesanales) no es casualidad: forma parte de aprender para qué sirve cada una y no encajar todo a martillazos con la que ya conoces.
Este proyecto está construido con Claude Code como copiloto, pero con yo siempre al volante. La regla ha sido clara: antes de dejarle escribir código, entender el porqué. Preguntaba una y otra vez, y me lo explicaba con paciencia hasta que lo entendía.
Donde más me ha ayudado:
Hemos discrepado a veces — soluciones que yo veía de otra manera y prevalecía la mía. La IA nunca ha sido el autor del proyecto: ha sido un colaborador senior con quien discutía diseño y aparcaba dudas. Es la única forma sana de usarla, para mí: para amplificar lo que sé, no para tapar lo que no.
Si tuviera que dar un consejo a alguien que empieza con estas herramientas, sería uno solo: no dejes que escriba nada que no puedas explicar tú a un colega. Ese filtro te obliga a aprender y protege tu proyecto de decisiones que no entiendes.
docs/ (release iOS, workflow Android, contenido/IP, App Store checklist)CHANGELOG.md