# Play to Help — Guía de importación a UEFN

> Mundo cooperativo educativo. Sin PvP. Persistencia entre sesiones. ~8h trabajo level designer.

## 0 · Pre-requisitos

- [ ] UEFN 35.0+ con cuenta Epic
- [ ] Proyecto vacío: `play-to-help-startidea`
- [ ] Backend levantado: `curl https://api-pth.hubstartidea.es/health` → `{"status":"ok"}`
- [ ] Token compartido en `.env`: `MAP_AUTH_TOKEN=...` (preguntar a founder)

---

## 1 · Verse import (30 min)

```
Content/play_to_help/
  ├── play_to_help.verse              (entry point)
  ├── cooperative_project.verse       (gestor de proyectos compartidos)
  ├── persistent_garden.verse         (huerto que sobrevive sesiones)
  └── modules/
       ├── role_assigner.verse        (asigna rol al entrar)
       ├── project_director.verse     (coordina objetivos por distrito)
       ├── dialogue_npc.verse         (NPCs con árbol de conversación)
       ├── npc_helper.verse           (IA simple de NPCs ayudantes)
       ├── weather_event.verse        (sequía/lluvia/tormenta)
       ├── persistent_garden.verse    (estado huerto en server)
       └── community_reporter.verse   (sube stats al api-pth backend)
```

Build con `cmd+shift+B`. Tests con `cmd+shift+T` → esperado: 9 tests pasados (project_director_test + garden_test).

---

## 2 · Construir Plaza Central (60 min)

Filtrar `Content/level-blueprint.csv` por `zone=Plaza`:

- Spawn pad + Tablón tareas + 2 NPCs (alcaldesa + role_assigner)
- 4 portales a los distritos (Mutator Zones)
- Community Reporter en el centro (envía a `api-pth.hubstartidea.es`)

**Wiring**:
- `plaza_role_assigner.OnPlayerEnter` → `role_assigner.verse:assign_random_role()`
- Cada `plaza_portal_X.OnPlayerEnter` → `Teleport(player, <distrito>_spawn)`

---

## 3 · 4 distritos en paralelo (4 × 90 min)

Cada distrito tiene la misma estructura: spawn, zone_no_pvp, NPC tutor, taskboard, props específicos.

### Vega (huerto)
- 6 parcelas persistentes (grid 3×2)
- Compostera + gallinero (item granters con cooldown)
- **Crítico**: `vega_huerto_parcela_X` debe usar `PersistentStateMutator` para sobrevivir reinicios

### Loma (casas paja)
- 3 casas paja + 1 casa taller
- Las casas son building props con interior visitable (puerta funcional)

### Fuente (red hidráulica)
- Aljibe central como hub
- Acequias visuales conectan con Vega (cables/animaciones)
- Mini-juego purificación = secuencia de switches educativa

### Vientro (energía)
- 2 paneles solares + 1 aerogenerador
- Switch de distribución conecta visualmente con los otros 3 distritos
- NPC Ingeniera Naya como tutor educativo

---

## 4 · Eventos meteorológicos (45 min)

`weather_event_trigger` dispara cada 30 min uno de:
- **Sequía** (60% probabilidad) → huertos requieren riego doble
- **Lluvia** (30%) → bonus de crecimiento + aljibe se llena
- **Tormenta** (10%) → daño a paneles solares, requiere reparación

Wire: `weather_visual_rain` (VFX) + `weather_visual_sun` (Light intensity) + `community_reporter` para notificar a la app.

---

## 5 · Anti-PvP enforcement

**CRÍTICO** — esto es el USP del mapa.

- Cada `<distrito>_zone_no_pvp` (Mutator Zone) tiene config:
  - `Player Damage Multiplier: 0`
  - `Block Building Damage: True`
  - `Tag: NoPvP`
- Plaza central también es NoPvP (cubierta por una Mutator Zone radius 2000cm)
- En `play_to_help.verse:init()`: validar que TODA la superficie está dentro de una NoPvP zone. Si no, refuse to start.

Para testear: 2 jugadores en mismo distrito. Disparar entre ellos → 0 damage.

---

## 6 · Assets externos

### Building Props (UE Marketplace o custom)
- `Casa_Paja_Mesh` — 3 variantes (Marketplace "Rural Vernacular Pack" ~$15)
- `Aljibe_Nazari_Mesh` — modelar custom (8h Blender) o adaptar de pack árabe
- `Panel_Solar_Mesh` — Marketplace "Modern Renewable" ~$8
- `Aerogenerador_Mesh` — idem
- `Acequia_Mesh` — UE basic cylinder + agua animada

### NPCs (4 únicos)
- Alcaldesa (Plaza): textura nazarí + clothing local
- Hortelana (Vega): outfit campo
- Constructora (Loma): casco + herramientas
- Hidrologa (Fuente): outfit hidráulico
- Ingeniera Naya (Vientro): bata técnica + gafas

Cada uno con árbol de diálogo en `Content/NPCs/dialogues.md`.

### Audio
- Ambient pajaros (Vega + Loma)
- Ambient agua corriendo (Fuente)
- Ambient viento (Vientro)
- SFX colocación bloque, riego, panel orientado, etc.
- Música tranquila ambient (1 track loop 6 min)

**Coste estimado assets**: ~$30 marketplace + 16h modelado custom (~$640) + 4h NPCs (~$160).

---

## 7 · Persistencia entre sesiones

El api-pth backend (`api-pth.hubstartidea.es`) recibe:
- `POST /api/v1/events` con `{type: "garden_state", player_epic_id, parcela_id, crop, growth_pct}`
- Al re-spawn, Verse hace `GET /api/v1/state/{epic_id}` para restaurar el estado

Esto requiere bearer token MAP_AUTH_TOKEN. Configurar Web Request Device con header.

**Test de persistencia**:
1. Plantar tomate en parcela_1
2. Salir del mapa
3. Esperar 5 min
4. Re-entrar — el tomate debe seguir creciendo

---

## 8 · Publicar

`File → Publish Game` → código privado para beta-testers. Para Megagrants:
- Video gameplay 90s mostrando: spawn → role asignado → cooperación en Vega → evento meteorológico → persistencia
- Capturas in-game: 8-10 por distrito + 2 eventos especiales

---

## Notas finales

- Mapa **NO está optimizado para grupos >16 jugadores** (Verse persistente puede saturar). Limit en publish settings.
- Si comunidad crece, segmentar en "instancias" de mapa por región geográfica.
- Aplicación Megagrants escalonada: $35K solicitados, beta junio 2026 con UGR.
