# Escuela DJs — Guía de importación a UEFN

> Sigue este orden exacto. Cada paso es 30-90 min para un nivel-designer con experiencia UEFN.

## 0 · Pre-requisitos

- [ ] UEFN 35.0+ instalado y logueado con cuenta Epic
- [ ] Proyecto UEFN vacío creado: nombre `escuela-djs-startidea`
- [ ] Stack local levantado: `cd /Users/STARTIDEA/Proyectos && docker compose -f docker-compose.master.yml up -d dj-bridge`
- [ ] Bridge verificado: `curl https://dj-bridge.hubstartidea.es/health` → `{"ok":true}`

---

## 1 · Importar código Verse (30 min)

1. En UEFN, abrir `Verse Explorer` (View → Verse Explorer)
2. Copiar todo el árbol `Verse/dj_school/` del proyecto a `Content/dj_school/` del UEFN project
3. Importar también el archivo raíz: `Verse/rhythm_pad.verse`, `Verse/code_redeem.verse`, `Verse/dj_school.verse`
4. Click derecho sobre `dj_school.verse` → `Build Verse Code` (cmd+shift+B)
5. Verificar: panel Output sin errores rojos

Estructura final esperada:
```
Content/
  └── dj_school/
       ├── dj_school.verse              (entry point)
       ├── rhythm_pad.verse
       ├── code_redeem.verse
       ├── modules/
       │    ├── rhythm_engine.verse
       │    ├── rhythm_pad.verse
       │    ├── lesson_flow.verse
       │    ├── duel_arena.verse
       │    └── live_event.verse
       └── tests/
            ├── lesson_flow_test.verse
            └── rhythm_engine_test.verse
```

---

## 2 · Construir el lobby central (45 min)

Coords en `Content/level-blueprint.csv`. Importar como CSV en UEFN:
1. `Window → Data Table` o usar el script `tools/csv-to-actors.py` (ver `tools/`)
2. Filtrar por `zone=Lobby`
3. Colocar cada actor en su X,Y,Z según CSV

**Actores del Lobby:**
- 1× Player Spawn Pad central (0,0,0)
- 1× NPC Spawner (Maestra Patchwork) — diálogo en `Content/dj_school/modules/lesson_flow.verse`
- 7× Mutator Zone (portales) — wiring de teleport en sec. 4

---

## 3 · Construir las 5 aulas (5 × 60 min = 5h)

### Aula 1 — Beat & Pulso
- Filtrar CSV por `zone=Aula1`
- Colocar 3× Rhythm Pad, 1× Metronome (Audio Player), 1× Score HUD
- **Wiring Verse**: cada `Rhythm Pad` referenciado en `modules/rhythm_engine.verse`
  - Configurar `BPM = 120`, `Pattern = "x...x..."`

### Aula 2 — Pads & Loops
- 4× Rhythm Pad (loops superpuestos)
- Verse: `modules/rhythm_pad.verse` ya tiene la lógica de overlap

### Aula 3 — Transiciones
- 2× Rhythm Pad (decks A/B) + 1× Slider Device (crossfader)
- Verse: extender `modules/lesson_flow.verse` con `OnCrossfaderMove` event

### Aula 4 — Drops & Build-ups
- 2× build-up pads + 1× drop_pad + Strobe + Smoke VFX
- Wire `drop_pad → strobe_fx + smoke_fx + screen_shake`
- Verse: `modules/lesson_flow.verse:on_drop()`

### Aula 5 — Set Completo
- 5× pads + 3× audience NPC + 1× recording device
- Verse: `modules/lesson_flow.verse:start_full_set()`

---

## 4 · Arena Duelos + Auditorio Eventos (90 min)

### Arena
- 2× spawn (A izquierda, B derecha)
- 2× decks grandes
- 1× Judge NPC (Maestra Patchwork — share el mismo asset)
- Verse: `modules/duel_arena.verse`

### Auditorio
- Tarima 8×4m, booth, rig de luces, pantalla video, code-redeem pad
- Verse: `modules/live_event.verse`
- **Importante**: wire `code_redeem.verse` con código `DJ-LIVE-001` para evento beta

---

## 5 · Audio assets (importación manual)

Los Verse references esperan estos audio assets en `/Game/Audio/`:

| Path | Archivo origen | Notas |
|------|----------------|-------|
| `/Game/Audio/Aula1/kick_120bpm` | Content/Audio/kick_120bpm.wav | Buscar en `Content/Audio/README.md` |
| `/Game/Audio/Aula2/loop_a_125bpm` | (a producir) | Bass loop 4 compases |
| `/Game/Audio/Aula3/track_a_125bpm` | (licenciar) | Set acoustic-electronic |
| `/Game/Audio/Aula3/track_b_125bpm` | (licenciar) | Compatible con track_a |
| `/Game/Audio/Drops/drop_riser_long` | (a producir) | 8-bar riser |
| `/Game/Audio/Drops/drop_hit_main` | (a producir) | Heavy drop hit |

Ver `Content/Audio/README.md` para spec completa.

---

## 6 · Wiring del live-bridge OSC (45 min)

El bridge en `https://dj-bridge.hubstartidea.es` recibe OSC de Resolume/Mixxx y emite eventos SSE.

1. En UEFN, añadir un `Web Request Device` al auditorio
2. Configurar URL: `https://dj-bridge.hubstartidea.es/events` (SSE)
3. Wire el listener al Verse module: `modules/live_event.verse:on_external_cue()`
4. Los cues OSC entrantes disparan FX (strobes sync con drops, smoke, etc.)

**Bearer token** (si se decide protegerlo): añadir `Authorization: Bearer ...` en el header del Web Request Device.

---

## 7 · Tests Verse (15 min)

```
cmd+shift+T (Test Runner)
```

Esperado:
- `lesson_flow_test.verse` → 7 tests pasados
- `rhythm_engine_test.verse` → 12 tests pasados

Si falla algún test, revisar el archivo correspondiente en `modules/` — los tests llevan diagnóstico inline.

---

## 8 · Publicar y compartir (30 min)

1. `File → Publish Game` (genera código de 16 dígitos)
2. Anotar código en `_operations/megagrants/escuela-djs/CODE-PRIVATE-BETA.md`
3. Compartir con beta-testers (lista en `_operations/beta-testers.md`)
4. **Para Megagrants**: añadir el código al PDF de aplicación junto con video de gameplay (45-90s)

---

## 9 · Eventos en vivo trimestrales

Cada sesión:
- 1 hora antes: levantar bridge en local (`npm start` en `live-bridge/`)
- DJ envía OSC a `localhost:9000` (Resolume/Mixxx config: `Output → OSC → 127.0.0.1:9000`)
- Bridge redistribuye via SSE al panel del operador (puerto 3200) — abre en pantalla aparte
- Operador opcional: ajusta cues manualmente desde el panel HTML
- Audiencia entra al mapa con el código publicado

Plan para 2026:
| Trimestre | Fecha sugerida | DJ invitado | Tema |
|-----------|----------------|-------------|------|
| Q2 | Junio 2026 | (TBD Granada) | Inauguración beta |
| Q3 | Septiembre 2026 | (TBD) | Aniversario UGR |
| Q4 | Diciembre 2026 | (TBD) | Cierre de año |

---

## Checklist final antes de aplicar Megagrants

- [ ] Mapa publicado con código privado
- [ ] Video gameplay 45-90s grabado (OBS recommended)
- [ ] 8-10 capturas in-game para el deck
- [ ] Texto Memoria Técnica (`_operations/outreach/decks/memoria-tecnica-megagrants.md`) actualizado con código del mapa
- [ ] Carta de asesoría académica (UGR Música) firmada en PDF
- [ ] PDF aplicación Megagrants generado (`_operations/outreach/decks/`)
- [ ] Email founder@startidea.es notificando Aplicación enviada
