# Kit de la tienda Meta Horizon Store - Ember Bastion

Todo lo de esta carpeta está generado: no hay que dibujar nada a mano.

## Cómo regenerar las imágenes

```
node /workspace/tools/render_store_art.mjs            # todas
node /workspace/tools/render_store_art.mjs cover      # solo las que contengan "cover" en el nombre
```

Las plantillas (HTML + SVG, sin imágenes externas) están en `store/art/*.html`; el dibujo común (arco, luna, muralla, brasas, título) está en `store/art/common.js` y las tipografías (Liberation Serif Bold y Sans Bold) en `store/art/fonts/`. Los PNG salen en `store/png/`. El nombre de cada plantilla lleva el tamaño (`nombre-ANCHOxALTO.html`) y el script lo usa para fijar el viewport exacto.

## Qué archivo va en cada campo del panel de desarrolladores

Panel: developer.meta.com/horizon/manage > tu app > **Distribution > Store Assets** (los nombres de Meta pueden variar un poco según la versión del panel).

| Campo del panel (Assets) | Archivo | Tamaño |
|---|---|---|
| Icon (App icon) | `store/png/icon-512x512.png` | 512x512 |
| Cover art - Landscape | `store/png/cover-landscape-2560x1440.png` | 2560x1440 |
| Cover art - Portrait | `store/png/cover-portrait-1008x1440.png` | 1008x1440 |
| Cover art - Square | `store/png/cover-square-1440x1440.png` | 1440x1440 |
| Hero art | `store/png/hero-3000x900.png` | 3000x900 |
| Logo (transparente, solo el título) | `store/png/logo-2560x1440.png` | 2560x1440 |
| Mini landscape (Landscape mini) | `store/png/mini-landscape-1080x360.png` | 1080x360 |
| Capturas de pantalla (Screenshots) | `png/screenshot-01.png` … `screenshot-08.png` (2560x1440): capturas reales del Quest 2 (partida de Felipe, 16/10/2026, `adb screencap`), ojo izquierdo recortado a 16:9 y ampliado con `tools/crop_headset_caps.mjs` (`node tools/crop_headset_caps.mjs entrada.png salida.png [sx sy sw sh]`; recorte por defecto 1600x900 centrado en x 916, y 960 del ojo izquierdo de 1832x1920). 01 flecha de fuego contra un guardián y su escolta, 02 guardián acercándose a la puerta con el arco tensado, 03 flechas de fuego y brasas contra el bruto, 04 aviso "The Warden comes", 05 combate junto a la puerta con ember burst, 06 flecha de fuego volando hacia el guardián, 07 resumen de oleada y tienda de mejoras, 08 "The gate has fallen" con las dianas Again/Menu. El script de render web (`tools/render_screenshots.mjs`, ver abajo) sigue existiendo como alternativa: copiar `game/` a /tmp/shots-proj, poner `const DEBUG := true` en `scripts/main.gd`, ocultar mira y pista en `scripts/hud.gd` (`set_crosshair` hace `return` al principio; `_hint.visible = false` en `_refresh`), exportar Web a /tmp/shots-web y ejecutar `node /workspace/tools/render_screenshots.mjs /tmp/shots-web /tmp/shots-run` (≈15 min; escribe `shot-<nombre>.png`; nombres: menu, shop, boss, action-bow, action-draw, action-hit, gameover) | 1920x1080 o más |
| Tráiler | Pendiente: guion en `store/listing.md` | 1920x1080, hasta 60 s |

Textos (campos de la ficha "Store listing"), todos en `store/listing.md`:

| Campo | Sección de `listing.md` |
|---|---|
| App name / Nombre | App name |
| Short description | Short description (máx. 100 caracteres) |
| Long description | Long description |
| Keywords / Tags | Keywords / tags |
| Genre | Genre (Action, Shooter, Arcade) |
| Comfort rating | Comfortable + justificación |
| Supported devices / Play modes / Controllers | las secciones del mismo nombre |
| Price | Suggested price (USD 4.99) |
| Idioma secundario (Spanish) | bloque ESPAÑOL del mismo archivo |

## Lo que todavía necesita el panel y solo puede hacer la persona dueña

1. **Cuenta de desarrollador de Meta** verificada (identidad, autenticación en dos pasos).
2. **Organización** creada en el panel (nombre de la empresa o nombre propio) y, para vender, datos de pago/impuestos (Payout / Tax info).
3. **Crear la app** en el panel (plataforma Meta Quest) para obtener el **App ID**; se necesita para el check de titularidad y para firmar el build.
4. **Cuestionario de clasificación por edad** (Age rating questionnaire): se responde en el panel. Respuestas esperables: violencia de fantasía contra criaturas sin sangre, sin chat, sin compras internas, sin contenido de azar.
5. **Política de privacidad**: URL `https://ember-bastion.dictala.app/privacy.html` (completar antes el contacto `[tu correo]` en `site/privacy.html`). Además, el formulario "Data Use Checkup" del panel: declarar que no se recoge ningún dato.
6. **Usuarios de prueba** (Test users) y/o canal de pruebas (Alpha/Beta/RC) para subir y probar el APK antes de enviarlo a revisión.
7. Subir el **APK firmado** (keystore propia, no incluida en el repositorio) al canal elegido y enviar a revisión.

## VRC (Virtual Reality Check) que el diseño ya cumple

- **Confort**: sin locomoción artificial, sin movimiento ni rotación forzados de cámara; el jugador está fijo en la muralla. Jugable de pie o sentado. Califica como "Comfortable".
- **Tasa de refresco**: presupuesto de rendimiento pensado para Quest 2 a 72 Hz (low-poly, sin postproceso, sombras desactivadas en móvil).
- **Controles**: todo el menú y la tienda se manejan disparando a dianas con el arco; sin punteros láser ni botones ocultos; tienda y menú dentro del alcance visual a la altura de los ojos.
- **Háptica** en cada evento del arco y cada impacto.
- **Sin conexión**: no requiere red, no hay cuentas ni analíticas; guardado local (`user://save.cfg`).
- **Ajustes de accesibilidad**: mano dominante (diestro/zurdo), inclinación del arco, sonido activable.
- **Sin contenido inapropiado**: violencia de fantasía, sin sangre.

### Pendiente técnico (requiere el App ID)

- **Entitlement check (comprobación de titularidad)**: una app de pago debe verificar en el arranque que el usuario es dueño de ella usando el Meta Platform SDK (`Entitlement.IsUserEntitledToApplication`) y cerrarse si no. Se debe añadir cuando exista el App ID (inicializar el Platform SDK con el App ID y llamar a la comprobación antes de mostrar el menú). El juego aún NO lo incluye.
- Revisar en el APK final: manejo de pausa al quitarse el casco (el juego debe pausar y silenciar), y que el audio y el tracking se recuperen al volver.
- Declarar en el manifiesto los tipos de dispositivos (Quest 2, 3, 3S, Pro) y no pedir permisos innecesarios (el juego no necesita ninguno salvo los del runtime XR).

## Tráiler

`trailer/ember-bastion-trailer-en.mp4` y `-es.mp4` (1920x1080, 30 fps, H.264 + AAC, 54 s): portada 3 s, siete tramos de una partida grabada en el Quest 2 de Felipe (17/10/2026, 1080p60 nativo con `debug.oculus.capture.*`) y cierre EN/ES. Se montan con `/workspace/tools/trailer/make_trailer.sh` (tramos usados: 17:7 230:7 358:7 264:7 583:7 216:9 593:7). No están en git.
