# UMBRAL — recursos y licencias Recursos descargados de sus fuentes oficiales entre el 22 y el 25 de octubre de 2026, según los apartados siguientes. Los archivos se sirven desde el propio juego; no hay dependencias de CDN en ejecución. Los originales descargados (audio, modelos y captura de movimiento) se conservan en `outputs/asset-sources/` para auditoría local y no se publican. ## Texturas — Poly Haven, CC0 [Licencia oficial](https://polyhaven.com/license), [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/). Todos los mapas son JPG de 1K. Las URL se obtuvieron mediante la API oficial `https://api.polyhaven.com/files/`. | Archivo publicado | Recurso original | Mapa | |---|---|---| | `public/assets/textures/wall.jpg` | [Painted Plaster Wall](https://polyhaven.com/a/painted_plaster_wall) | Diffuse 1K | | `public/assets/textures/wall-normal.jpg` | [Painted Plaster Wall](https://polyhaven.com/a/painted_plaster_wall) | Normal OpenGL 1K | | `public/assets/textures/floor.jpg` | [Concrete Floor](https://polyhaven.com/a/concrete_floor) | Diffuse 1K | | `public/assets/textures/floor-normal.jpg` | [Concrete Floor](https://polyhaven.com/a/concrete_floor) | Normal OpenGL 1K | | `public/assets/textures/metal.jpg` | [Rusty Metal 02](https://polyhaven.com/a/rusty_metal_02) | Diffuse 1K | No se han descargado previews ni imágenes de terceros para el fondo: el escenario se renderiza en Babylon.js. ## Foley grabado — Kenney, CC0 [Permiso oficial de uso comercial](https://kenney.nl/support). Las licencias originales acompañan los WAV en `public/assets/audio/LICENSE-Kenney-Impact.txt` y `LICENSE-Kenney-RPG.txt`. Los OGG originales se convirtieron con FFmpeg a WAV PCM mono, 44.1 kHz, 16 bit, para compatibilidad de decodificación Web Audio en iOS y escritorio. No se ha generado ni sustituido el contenido de las grabaciones. | Archivo publicado en `public/assets/audio/` | Archivo original | Colección | |---|---|---| | `step-1.wav` | `footstep_concrete_000.ogg` | [Impact Sounds](https://kenney.nl/assets/impact-sounds) | | `step-2.wav` | `footstep_concrete_001.ogg` | Impact Sounds | | `step-3.wav` | `footstep_concrete_002.ogg` | Impact Sounds | | `step-4.wav` | `footstep_concrete_003.ogg` | Impact Sounds | | `metal-impact.wav` | `impactMetal_heavy_000.ogg` | Impact Sounds | | `glass-impact.wav` | `impactGlass_light_000.ogg` | Impact Sounds | | `wood-impact.wav` | `impactWood_heavy_000.ogg` | Impact Sounds | | `door-open.wav` | `doorOpen_1.ogg` | [RPG Audio](https://kenney.nl/assets/rpg-audio) | | `door-close.wav` | `doorClose_1.ogg` | RPG Audio | | `creak-1.wav` | `creak1.ogg` | RPG Audio | | `creak-2.wav` | `creak2.ogg` | RPG Audio | | `latch.wav` | `metalLatch.ogg` | RPG Audio | Descargas originales verificadas: - `https://kenney.nl/media/pages/assets/impact-sounds/87b4ddecda-1677589768/kenney_impact-sounds.zip` - `https://kenney.nl/media/pages/assets/rpg-audio/8e99002d76-1677590336/kenney_rpg-audio.zip` El ambiente de ventilación, el zumbido eléctrico, la reverberación y las capas graves son diseño procedural de Web Audio en `src/game/audio.ts`. Los sustos combinan foley grabado, cambios de velocidad y esas capas de diseño. Desde el 25 de octubre de 2026, los sonidos que cubren las grabaciones del apartado «Efectos» (puertas, pasos de madera, golpes, cerradura, cadena, lluvia, trueno, gruñidos, interfaz) sustituyen a su versión procedural; el resto la conserva hasta que lleguen sus descargas. El audio se activa tras interacción del usuario y empieza pausado para respetar la intro de marca. ## Banda sonora — OpenGameArt, CC0 Las dos composiciones iniciales de la banda sonora se distribuyen bajo [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/). Se descargaron de las páginas de sus autores el 22 de octubre de 2026 y forman parte de la selección actual de cinco obras, ampliada en el apartado final: | Archivo publicado | Composición original y autor | Fuente | |---|---|---| | `public/assets/audio/umbral-piano-loop.mp3` | «GoshtPiano2» — Kilua Boy / KiluaBoy | [Dark environment / Horror games](https://opengameart.org/content/dark-environment-horror-games) | | `public/assets/audio/umbral-strings-loop.mp3` | «Lost in a bad place» — congusbongus | [Lost in a bad place (horror ambience loop)](https://opengameart.org/content/lost-in-a-bad-place-horror-ambience-loop) | Se conserva la atribución a sus autores aunque CC0 no la exige. Cada capa se editó a un bucle de 60 segundos con un fundido cruzado circular de 4 segundos y limitación de picos; codificación MP3 estéreo 44.1 kHz a 160 y 128 kbps respectivamente. Las dos capas suman aproximadamente 2,16 MB. El 25/10/2026 se rehízo la unión del bucle de `umbral-strings-loop.mp3`, que hacía clic al volver a empezar: bucle circular de 58,98 s con un fundido de 1 s sobre su propio periodo, mismo nivel, pico real ≤ −1 dBTP y 0,5 s de margen periódico a cada lado (`loopStart`/`loopEnd` en `public/assets/audio/manifest-soundtrack.json`; detalle en [docs/soundtrack.md](docs/soundtrack.md)). Las descargas originales se conservan solo para auditoría en `outputs/asset-sources/GoshtPiano2.ogg` y `lost_2.ogg`. URL de descarga verificadas en las páginas de los autores: - `https://opengameart.org/sites/default/files/GoshtPiano2.ogg` - `https://opengameart.org/sites/default/files/lost_2.ogg` Desde el 25 de octubre de 2026 estas cinco obras forman parte de las bolsas de acecho, caza y furia de la banda sonora adaptativa (apartado «Banda sonora adaptativa»), que cambia entre piezas con fundidos de potencia constante según la fase, la persecución y la escena. La tensión de proximidad y los latidos utilizan buses de Web Audio separados. La música baja en pausa y resultados, respeta el control de silencio y se detiene al ocultar la pestaña. No se reproduce sobre el vídeo de presentación. ## Tipografía de Halloween — SIL OFL 1.1 Las fuentes para la interfaz del juego se descargaron del repositorio oficial de Google Fonts. Se sirven localmente y son distintas de la identidad gráfica del vídeo del estudio. - `public/assets/fonts/font-display.ttf`: [Metal Mania Regular](https://github.com/google/fonts/tree/main/ofl/metalmania), diseñada por Open Window / Dathan Boardman. Licencia completa: `public/assets/fonts/OFL-Metal-Mania.txt`. - `public/assets/fonts/font-ui.ttf`: [Barlow Condensed Regular](https://github.com/google/fonts/tree/main/ofl/barlowcondensed), diseñada por Jeremy Tribby. Licencia completa: `public/assets/fonts/OFL-Barlow-Condensed.txt`. - `public/assets/fonts/font-ui-bold.ttf`: Barlow Condensed Bold, misma fuente y licencia. ## Marca y vídeo — AiQube Labs Game Studio Recursos proporcionados en el espacio de trabajo del usuario, utilizados para esta campaña de su empresa. No están incluidos en la licencia CC0 de los recursos externos. - `public/media/intro-landscape.mp4`: copia de `Game-Studio/exports/AiQubeLabs-GameStudio_logo_16x9.mp4` (10 s, 1920×1080, H.264/AAC). - `public/media/intro-portrait.mp4`: copia de `Game-Studio/exports/AiQubeLabs-GameStudio_logo_9x16.mp4` (10 s, 1080×1920, H.264/AAC). - `public/brand/logo.svg`: variante oficial `Game-Studio/logo/SVG/GameStudio_HD_Horizontal_Negativo.svg`, con el cubo vectorial original de AiQube Labs y el descriptor Game Studio. Se muestra bajo el botón de entrada; sustituye a la variante pixelada. - `public/brand/mark.svg`: isotipo original conservado entre los recursos del estudio, procedente de `Game-Test/assets/brand-mark.svg`. El juego utiliza su propio favicon en `public/assets/horror/favicon.svg`. - `public/brand/font-regular.ttf`, `font-bold.ttf`: Open Sauce One Regular y ExtraBold, suministradas por el proyecto de marca. [Open Sauce Fonts](https://github.com/marcologous/Open-Sauce-Fonts), SIL Open Font License 1.1; licencia incluida en `public/brand/OFL.txt`. La geometría de decorado Halloween y la composición del escenario se crean para UMBRAL dentro del proyecto. ## Presencia sobrenatural — imagen generada para UMBRAL `public/assets/horror/presence.png` es una imagen original generada con OpenAI ImageGen para una versión anterior de esta campaña bajo la dirección artística del proyecto. Actualmente no se utiliza: la persecución y captura se representan con el modelo tridimensional descrito más abajo. La imagen no procede de un banco de imágenes ni se incluye en las licencias CC0 de los recursos externos. El registro del prompt se conserva en `docs/horror-art-direction.md`. ## Supervivientes — Irene y Hugo / Microsoft Rocketbox, MIT `public/assets/models/survivor-irene.glb` y `survivor-hugo.glb` derivan de la **Microsoft Rocketbox Avatar Library**, publicada por Microsoft bajo [licencia MIT](https://github.com/microsoft/Microsoft-Rocketbox/blob/master/LICENSE.md) («Copyright (c) 2020 Microsoft»). El usuario aprobó expresamente esta licencia. - Fuente y licencia verificadas en el [repositorio oficial](https://github.com/microsoft/Microsoft-Rocketbox), consultado el 24 de octubre de 2026. Las carpetas de avatares y animaciones no tienen licencia propia y quedan cubiertas por el `LICENSE.md` de la raíz. - Descargas originales del 24/10/2026, desde `https://raw.githubusercontent.com/microsoft/Microsoft-Rocketbox/master/Assets/`: - Irene: avatar `Avatars/Adults/Female_Adult_04/Export/Female_Adult_04.fbx` (código `f004`) y sus siete TGA de `Textures/`. - Hugo: avatar `Avatars/Adults/Male_Adult_07/Export/Male_Adult_07.fbx` (código `m013`) y sus siete TGA de `Textures/`. - Animaciones de `Animations/all_animations_max_motextr_static/`: `f_/m_idle_breathe_01`, `f_/m_idle_nervous_03`, `f_/m_idle_look_around_01` y `f_/m_try_door_inwards`. - Animaciones de `Animations/all_animations_max_motextr_xy/`: `f_walk_fast_02`, `m_walk_fast_02`, `f_/m_run_neutral`, `f_run_fast_01`, `m_run_fast_02`, `f_walk_injured` y `m_walk_bruised`. - Los originales se conservan en `outputs/asset-sources/rocketbox/` para auditoría y no se publican. - Contenido de cada GLB: - Una malla de 3 materiales. - Esqueleto de juego de 54 huesos. - Siete texturas de 1.024 px: seis JPEG de color, normal y metal-rugosidad, y un PNG de pelo con recorte alfa. - Doce animaciones a 30 FPS: `Idle`, `Idle_Nervous`, `Idle_LookAround`, `Walk`, `Jog`, `Run`, `Walk_Injured` y `Door_Push` de Rocketbox; `Torch_Hold` y `Capture` creadas para UMBRAL; `Walk_Scared` e `Idle_Torch_Search` de CMU (apartado siguiente). - Modificaciones de UMBRAL, que no se atribuyen a Microsoft: - Escala a 1,68 m (Irene) y 1,75 m (Hugo). - Esqueleto reconstruido con nombres de juego y jerarquía corregida, con `Root` y `held_accessory` nuevos; los 28 huesos faciales se fusionaron en `head`. - Texturas reducidas de 2.048 a 1.024 px, con rugosidad PBR derivada del mapa especular. - Clips horneados en el sitio, con bucles cerrados; `Walk` reajustado en tiempo (0,767 s en los dos) para la velocidad de marcha del juego. - La postura de linterna `Torch_Hold` y la captura `Capture` (4,4 s, pareada con `Capture_irene` y `Capture_hugo` de Hollow) son actuaciones originales sobre el rig. - Tamaños: `survivor-irene.glb` ocupa 2.900.364 bytes y `survivor-hugo.glb` 3.041.848 bytes. Los SHA-256 están en `public/assets/models/manifest.json`. - Retratos del selector, WebP de 720 × 900 y 480 × 600: `public/assets/characters/irene-portrait.webp` (16.270 bytes), `irene-portrait-480.webp` (9.366), `hugo-portrait.webp` (15.780) y `hugo-portrait-480.webp` (8.860). Son renders de Blender de estos modelos, generados para UMBRAL con `scripts/render-survivor-portraits.py` y `scripts/export-survivor-portraits.mjs`. No son fotografías tomadas para el juego: las caras son las texturas de los avatares de Rocketbox. Como derivados de Rocketbox, quedan cubiertos por su licencia MIT y por `LICENSE-Rocketbox.md`. - Aviso de licencia, texto MIT completo y rutas originales: `public/assets/models/LICENSE-Rocketbox.md`. Preparación reproducible: `scripts/prepare-survivor-textures.py`, `scripts/prepare-survivors.py` y `docs/survivors.md`. ## Captura de movimiento — CMU Graphics Lab Motion Capture Database `Walk_Scared` e `Idle_Torch_Search`, dentro de `survivor-irene.glb` y `survivor-hugo.glb`, derivan de la **CMU Graphics Lab Motion Capture Database** (Carnegie Mellon University), http://mocap.cs.cmu.edu/. El usuario aprobó expresamente su uso. - Tomas usadas, descargadas el 24 de octubre de 2026 desde `http://mocap.cs.cmu.edu/subjects//`: - `Walk_Scared`: 91_32, «ScaredWalk» (`91.asf` y `91_32.amc`, 120 FPS). - `Idle_Torch_Search`: 77_05, «look around with flashlight» (`77.asf` y `77_05.amc`, 60 FPS). - Las demás tomas evaluadas no se publican. Los ASF/AMC se conservan en `outputs/asset-sources/cmu/` para auditoría. - Términos, según la portada y el FAQ consultados el 24/10/2026: - Uso libre, también en productos que se venden. - Se permite copiar, modificar y redistribuir sin pedir permiso. - Se prohíbe revender los datos, aunque estén convertidos. - UMBRAL solo publica las animaciones retargeteadas dentro de los GLB, nunca los datos originales ni conversiones sueltas. - Agradecimiento solicitado por CMU: «The data used in this project was obtained from mocap.cs.cmu.edu. The database was created with funding from NSF EIA-0196217.» - Modificaciones de UMBRAL, que no se atribuyen a CMU: - Retarget en espacio mundo al esqueleto de juego de cada protagonista. - Filtrado de ruido de 20 ms, ciclo en el sitio con fundido de cierre y remuestreo a 30 FPS. - Pies fijados al suelo con IK. - Manos y dedos con la postura de Rocketbox. - En `Idle_Torch_Search`, el brazo de la linterna con el agarre de `Torch_Hold`. - Las dos animaciones ocupan unos 77 KiB de datos en cada GLB (22,5 KiB `Walk_Scared` y 54,3 KiB `Idle_Torch_Search`). - Aviso de licencia: `public/assets/models/LICENSE-CMU.md`. Proceso: `scripts/prepare-survivor-mocap.py` y `docs/survivors.md`. ## Álex — Sam / Innerscene y MakeHuman, CC0 `public/assets/models/survivor-sam.glb` y la derivación de juego `survivor-sam-cinematic.glb` proceden de **Locomotion collection - Sam 3D Person, Animated**, publicado por Innerscene con cuerpo, rig y piel de MakeHuman/MPFB bajo [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/). - Autor y licencia verificados en la [página oficial de Sam](https://www.innerscene.com/tools/library/3d-parts/locomotion-collection-sam-3d-person-animated-dc23800f), consultada el 22 de octubre de 2026. - Descarga original: `https://www.innerscene.com/api/library/locomotion-collection-sam-3d-person-animated-dc23800f/download`. - Se conservan la anatomía adulta, ropa, materiales PBR, rig, geometría de 65.056 vértices y siete clips originales: Idle Standing, Walk Relaxed, Walk Brisk, Jog, Run, Walk Carry y Sit Stand. - Optimización para navegador: texturas integradas de hasta 1.024 px (ojos/dientes 512); difusos opacos JPEG calidad 90, máscaras alfa y normales PNG. El GLB pasa de 21,87 MB a 8,34 MB (8.336.512 bytes). Se oculta el teléfono de la colección y se escala el personaje a 1,75 m. - La derivación cinematográfica ocupa 8.008.108 bytes, mantiene el esqueleto de 56 articulaciones y añade `Walk_Natural`, `Jog_Natural` y `Run_Natural`: correcciones de IK sobre los clips del autor para colocar los pies bajo las caderas. Cada clip fuente contiene cuatro pasos; la cadencia de ejecución tiene en cuenta esos dos ciclos completos. - `Capture` es una actuación esquelética nueva de 4,4 segundos creada para UMBRAL: sobresalto, protección, empuje contra los brazos de la criatura, forcejeo y caída articulada de rodillas. No se atribuye esta actuación al autor del recurso base. Fuente reproducible: `scripts/prepare-capture.py`; ficha: `docs/paired-capture.md`. - Aviso de licencia y modificaciones: `public/assets/models/LICENSE-Sam.md`. - Desde el 25/10/2026 el juego carga `public/assets/models/companion-alex.glb` (2.436.400 bytes), derivado de `survivor-sam-cinematic.glb` para Álex, el compañero del rescate: sin teléfono, piel y pelo simplificados, texturas de 256 a 1.024 px, sudadera granate y vaqueros oscuros, y los clips `Idle_Standing`, `Walk_Natural`, `Jog_Natural` y `Run_Natural`. `Huddle` y `Huddle_Stand` son actuaciones nuevas creadas para UMBRAL con IK sobre el esqueleto de Sam; no se atribuyen al autor del recurso. Fuente reproducible: `scripts/prepare-companion.py`; ficha: `docs/companions.md`. - Irene y Hugo son los protagonistas desde el 24/10/2026: `survivor-sam.glb` y `survivor-sam-cinematic.glb` ya no se cargan y se conservan como fuentes de `scripts/prepare-capture.py` y `scripts/prepare-companion.py`. ## Criatura — Hollow / City Building Game Art, CC0 `public/assets/models/pursuer-hollow.glb` deriva de **3D Horror Game Monster**, publicado por **City Building Game Art** como parte de Horror Game Maker bajo [CC0 1.0 Universal](https://creativecommons.org/publicdomain/zero/1.0/). - Fuente y licencia verificadas en la [página oficial de OpenGameArt](https://opengameart.org/content/3d-horror-game-monster), consultada el 23 de octubre de 2026. Se conserva el crédito opcional a **HorrorGameMaker.com**. - La geometría, el rig, las texturas y las animaciones de reposo, marcha y carrera proceden del recurso libre. Se convierten los FBX a GLB y los materiales a PBR de glTF para servirlos localmente. - El GLB preparado ocupa 3.992.932 bytes; antes de añadir las capturas de Irene y Hugo el 24/10/2026, ocupaba 3.585.500. Integra un mapa de color JPEG de 2048 px y un mapa normal PNG de 1024 px. El material no es metálico y utiliza rugosidad constante; no se distribuye un mapa de rugosidad adicional. - `Attack` (1 s) y la captura cinematográfica `Capture` (4,4 s), sincronizada con Sam, se han creado para UMBRAL sobre el rig del modelo; no son animaciones de ataque atribuidas al autor del recurso. `Capture` queda sin uso con Sam. - `Capture_irene` y `Capture_hugo` (4,4 s, 24/10/2026) repiten esa actuación con las manos sobre los hombros de cada protagonista. También se crearon para UMBRAL (`scripts/prepare-survivor-capture.py`). Al añadirlas, el resto del GLB quedó idéntico byte a byte. - Aviso de licencia: `public/assets/models/LICENSE-Hollow.md`. Adaptaciones y procedencia: `docs/creature-redesign.md`. ## Rezagados — Scissorman / Goth Scarecrow, CC0 `public/assets/models/pursuer-scissorman.glb` es **Scissorman**, criatura original de Goth Scarecrow, distribuida bajo [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/). - Autor y licencia verificados en la [página oficial de Scissorman](https://goth-scarecrow.itch.io/scissorman), consultada el 22 de octubre de 2026. Descarga gratuita mediante el flujo público del autor, sin cuenta ni compra. - Se conserva el GLB original de 741.892 bytes, textura original integrada de 256 px, rig y diez animaciones del artista: Idle, Walk, Run, React Player, Charge Attack, Simple Attack, Simple Attack 2, Defense, Hit y Dead. - Es una criatura corporal de estética PSX con dos cabezas y extremidades deformadas. No es un modelo extraído de Silent Hill, Resident Evil ni Clock Tower. - Uso actual (25/10/2026): los «rezagados», monstruos secundarios del rescate. El juego carga el GLB original sin modificar el archivo y, al cargarlo, lo escala a 1,6 m, lo gira hacia +Z y oscurece su material (`src/game/stalkers.ts`); usa Idle, Walk, Run, Simple Attack y Hit. - Integración anterior (hasta el 24/10/2026): perseguidor principal a 2,25 m, con la mezcla de locomoción y el ataque original en la captura. - Aviso de licencia: `public/assets/models/LICENSE-Scissorman.md`. El humano CesiumMan y la criatura procedimental se utilizaron en versiones anteriores y no se cargan en la versión de supervivencia. `survivor.glb` y su licencia CC BY 4.0 se conservan como recurso anterior sin uso. ## Vehículos de la entrada - `public/assets/models/vehicle-car.glb` y `public/assets/models/vehicle-ambulance.glb`: modelos originales de UMBRAL (AiQube Labs Game Studio), generados con `scripts/prepare-vehicles.py` en Blender 4.5.9 sin mallas externas. Coche compacto y ambulancia de techo alto genéricos, sin marcas, logotipos ni emblemas reales; matrículas («2347 OCT», «5803 BDL») y rotulación («AMBULANCIA», «CLÍNICA SAN TELMO · UNIDAD 07») ficticias. Rótulos con Barlow Condensed Bold (SIL OFL 1.1, `public/assets/fonts/font-ui-bold.ttf`); óxido teñido con `public/assets/textures/metal.jpg` (Rusty Metal 02, Poly Haven, CC0). Detalles en `docs/vehicles.md`. - `public/assets/models/prop-covered-car.glb`: [Covered Car](https://polyhaven.com/a/covered_car) de Poly Haven, [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/). Descargado el 25 de octubre de 2026 (glTF 1K con sus mapas JPG de 1K); el original se conserva para auditoría en `outputs/asset-sources/vehicles/covered_car/`. Convertido con `scripts/prepare-vehicles.py`: una malla con un material, funda y ruedas simplificadas y mapas reducidos a 512 px. ## Ambiente de supervivencia — grabaciones Grabaciones obtenidas de las páginas de sus autores en OpenGameArt el 22 de octubre de 2026. Se sirven localmente; no se utilizan audio ni personajes de Silent Hill o Resident Evil. | Archivo del juego | Autor y fuente | Licencia | Adaptación | |---|---|---|---| | `public/assets/audio/survival-scream.mp3` | Vinrax — [Horror scream1](https://opengameart.org/content/horror-scream1) | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | Fragmento de 3,3 segundos desde 0,32 s, fundidos, limitación de picos, MP3 128 kbps. | | `public/assets/audio/survival-drips-loop.mp3` | Independent.nu, distribuido por qubodup — [Dripping water loop](https://opengameart.org/content/dripping-water-loop) | CC0 1.0 | Bucle de 20 s con fundidos cortos, normalización RMS y limitación de transitorios, MP3 128 kbps. | | `public/assets/audio/survival-wood.mp3` | fractilegames — [Creaky light wooden door](https://opengameart.org/content/creaky-light-wooden-door) | [CC BY 3.0](https://creativecommons.org/licenses/by/3.0/) | Fundidos, MP3 112 kbps; variaciones de tono en ejecución. | | `public/assets/audio/survival-dread.mp3` | techiew — [Ambient horror](https://opengameart.org/content/ambient-horror) | CC0 1.0 | Fragmento de seis segundos, fundidos, limitación de picos y MP3 128 kbps. | Los originales se conservan para auditoría en `outputs/asset-sources/survival-*`, fuera del paquete público. Los gritos se limitan a encuentros y captura; los eventos ambientales tienen pausas entre disparos. El goteo bajo acompaña la exploración y la mezcla de cuerdas responde a la amenaza. La pestaña oculta y el silencio detienen los sonidos. La presentación obligatoria del estudio conserva su propio audio. Normalización final desde los originales (22/10/2026), medida sobre los MP3 decodificados: grito −3,0 dBTP y RMS −15,19 dBFS; madera −3,1 dBTP y RMS −26,95 dBFS; goteo −3,6 dBTP y RMS −24,46 dBFS. Se rebajaron grito/madera para dejar margen de picos y se elevó el goteo con limitación de transitorios, sin recortar las muestras. El goteo se codifica a 128 kbps. Los valores incluyen los posibles picos entre muestras después de la codificación MP3. ## Capas de tensión y ambiente — 22/10/2026 Cinco efectos locales derivados de cuatro fuentes publicadas por sus autores bajo [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/). Licencias verificadas en las páginas originales. No se utilizan sonidos extraídos de otras franquicias ni dependencias de audio remoto durante la partida. | Archivo en `public/assets/audio/` | Autor y fuente primaria | Adaptación | Uso | |---|---|---|---| | `intense-breath.mp3` | mikeask — [Breathing Tired](https://opengameart.org/content/breathing-tired) | Grabación humana, paso alto a 75 Hz, ganancia, limitación de transitorios y fundido cruzado circular de 100 ms. | Inhalación, exhalación y jadeos del superviviente según cansancio, heridas y miedo; sin bucle continuo. | | `intense-monster-breath.mp3` | qubodup / Iwan Gabovitch — [Ghost breath](https://opengameart.org/content/ghost-breath) | Respiración procesada por el autor; fragmento de 3,2 s, paso alto a 40 Hz, ganancia y fundidos cortos. | Exhalación sobrenatural cercana. | | `intense-wind-loop.mp3` | SketchMan3 — [wind whoosh loop](https://opengameart.org/content/wind-whoosh-loop), derivado de [Loopable Dungeon Ambience](https://opengameart.org/content/loopable-dungeon-ambience) de JaggedStone, también CC0 | Ganancia y fundido cruzado circular de 180 ms. | Corriente de aire continua en el edificio. | | `intense-metal-drag.mp3` | qubodup — [Metal Interactions](https://opengameart.org/content/metal-interactions), original `metal_swing1.wav` | Movimiento metálico a la mitad de velocidad mediante `atempo`, ganancia y fundidos. No es una grabación de cadenas. | Contacto o arrastre metálico lejano. | | `intense-metal-hit.mp3` | qubodup — [Metal Interactions](https://opengameart.org/content/metal-interactions), original `metal_interaction1.wav` | Ganancia y fundidos muy cortos conservando el ataque. | Impacto seco de metal y refuerzo de captura. | Todos los archivos publicados son MP3 estéreo a 44,1 kHz y 128 kbps. Las dos capas continuas se prepararon como bucles circulares, solapando el final y el principio sin añadir una banda de silencio. Los originales y los intermedios de edición están en `outputs/asset-sources/intense/`, fuera de Git y de la distribución pública. Medición sobre los MP3 decodificados, no sobre el original sin comprimir: | Archivo | Duración | RMS | True peak | |---|---:|---:|---:| | `intense-breath.mp3` | 3,070 s | −21,6 dBFS | −4,1 dBTP | | `intense-monster-breath.mp3` | 3,200 s | −21,5 dBFS | −7,1 dBTP | | `intense-wind-loop.mp3` | 5,779 s | −22,8 dBFS | −9,7 dBTP | | `intense-metal-drag.mp3` | 1,722 s | −23,9 dBFS | −4,0 dBTP | | `intense-metal-hit.mp3` | 0,578 s | −23,6 dBFS | −3,9 dBTP | Los cinco efectos suman 235.398 bytes. La mezcla final aplica su propia ganancia y compresión; estas mediciones describen los archivos de origen de la mezcla. Descargas originales verificadas: - `https://opengameart.org/sites/default/files/breathing%20tired.wav` - `https://opengameart.org/sites/default/files/ghostbreath.flac` - `https://opengameart.org/sites/default/files/wind%20woosh%20loop.ogg` - `https://opengameart.org/sites/default/files/metal_interactions.7z` ## Cuadros del edificio — imágenes originales, 23/10/2026 `public/assets/paintings/portrait.jpg`, `hallway.jpg` y `watcher.jpg` son tres imágenes originales generadas para UMBRAL mediante la herramienta integrada OpenAI ImageGen bajo la dirección artística del proyecto. Representan un retrato adulto inquietante, un hospital abandonado y un bosque con una silueta entre la niebla. No se han descargado de un banco de imágenes ni extraído de otras franquicias; no están incluidas en las licencias CC0 de los recursos externos. Se publican como JPEG verticales 1024 × 1280, optimizados con Sharp, con un peso total de 703.916 bytes. Los PNG de generación se conservaron sin modificaciones. El método, los prompts finales y el registro de procedencia están en `docs/painting-sources.md`. Los marcos y la colocación procedural pertenecen al escenario 3D del juego. El logo de AiQube utiliza los recursos oficiales descritos en el apartado de marca. ## Ampliación de banda sonora — tres composiciones CC0, 23/10/2026 La música rota entre las dos obras anteriores y tres composiciones adicionales, con carga local perezosa y fundidos de 6,5 segundos. Los tres archivos nuevos sumaban 2.690.949 bytes (2.655.598 desde la reparación de sus uniones del 25/10/2026); están codificados en MP3 estéreo 44,1 kHz / 128 kbps. | Archivo publicado | Obra y autor | Fuente primaria, CC0 1.0 | |---|---|---| | `public/assets/audio/umbral-ward-loop.mp3` | Ambient Horror Track 01 — Cleyton Kauffman. Music by Cleyton Kauffman — https://soundcloud.com/cleytonkauffman | [OpenGameArt](https://opengameart.org/content/ambient-horror-track-01) | | `public/assets/audio/umbral-depths-loop.mp3` | Ancient caverns — congusbongus | [OpenGameArt](https://opengameart.org/content/ancient-caverns-horror-ambient-loop) | | `public/assets/audio/umbral-wasteland-loop.mp3` | Horror Atmosphere / Post Apocalyptic Wastelands — Juhani Junkala / SubspaceAudio | [OpenGameArt](https://opengameart.org/content/horror-atmosphere) | Se conserva la composición completa de Cleyton (48 s); de Ancient caverns y Horror Atmosphere se preparan ventanas circulares de 60 s con solapamiento de 4 s. El 25/10/2026 se rehízo la unión de los tres bucles, que hacía clic (Ancient caverns, y muy débil en Horror Atmosphere) o se quedaba en silencio 1,3 s (la obra de Cleyton, que empieza en silencio): la obra de Cleyton pierde ese silencio inicial y vuelve a su principio con un fundido de 2 s (bucle de 44,75 s); las otras dos, con un fundido de 1 s sobre su propio periodo (58,98 s). Mismo nivel, pico real ≤ −1 dBTP y 0,5 s de margen periódico a cada lado (`loopStart`/`loopEnd` en el manifiesto de la banda sonora; detalle en [docs/soundtrack.md](docs/soundtrack.md)). Se ajustan ganancias para igualar la mezcla. Licencia y descargas directas: `public/assets/audio/LICENSE-Soundtrack-Expansion.md`. Preparación, rotación y validación: [docs/soundtrack-variety.md](docs/soundtrack-variety.md). ## Fondo del menú — imagen original, 23/10/2026 `public/assets/horror/threshold-menu.png` es una imagen original generada para UMBRAL mediante la herramienta integrada OpenAI ImageGen bajo la dirección artística del proyecto. Representa el interior de un hospital abandonado con una silueta detrás de una puerta de cristal y una pequeña calabaza de Halloween. No se ha descargado de un banco de imágenes ni extraído de otras franquicias y no forma parte de las licencias CC0 de los recursos externos. El PNG original de 1672 × 941 se conserva sin modificaciones (2.110.300 bytes). Para el navegador se sirve `threshold-menu.webp`, codificado con Sharp a la misma resolución (154.606 bytes). El prompt final, método de generación y codificación están documentados en [docs/menu-art.md](docs/menu-art.md). ## Presencia animada del menú — capas originales, 23/10/2026 `public/assets/horror/menu-empty.png` es una edición del fondo anterior que retira únicamente la figura del cristal. Se generó con la herramienta integrada OpenAI ImageGen, conservando la escena original, y se publica como `menu-empty.webp` (1672 × 941; 150.166 bytes). El PNG original de edición se conserva sin cambios (1.967.354 bytes). `public/assets/horror/menu-creature.png` es una criatura adulta original, sin rostro, generada con la misma herramienta para animarse detrás del cristal. El PNG RGBA de 1024 × 1536 conserva su transparencia original (1.460.235 bytes). Para el navegador se sirve `menu-creature.webp` (136.698 bytes), codificado con Sharp, calidad 86 y alfa 100, con las mismas dimensiones y canal alfa idéntico píxel a píxel; el PNG original se conserva sin cambios. No se han extraído imágenes ni personajes de otras franquicias y estas dos generaciones no forman parte de las licencias CC0 de los recursos externos. Los prompts exactos, las verificaciones y la colocación del cristal están en [docs/menu-presence-art.md](docs/menu-presence-art.md). ## Archivo histórico de voces sintéticas — Kokoro-82M Las grabaciones de voz de las versiones anteriores se conservan como recursos de desarrollo. El juego actual cuenta la historia mediante texto en pantalla: no reproduce narrador ni diálogo de personajes, ni descarga su manifiesto o sus MP3. - Modelo original: [Kokoro-82M](https://huggingface.co/hexgrad/Kokoro-82M), de hexgrad, bajo licencia [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0). Se ejecutó localmente en su versión ONNX (`kokoro-v1.0.onnx` y `voices-v1.0.bin`) con `kokoro-onnx` 0.6.1 (MIT), en `../tools/umbral-tts`, fuera del repositorio. Ni el modelo ni su entorno se publican. - Archivos conservados: MP3 y `manifest.json` en `public/assets/voices/`, generados para UMBRAL mediante `scripts/generate-voices.py`. No forman parte de la reproducción o precarga del juego actual. - Reparto histórico: narrador y Hugo, `em_alex`; Irene, `ef_dora`; Álex, una mezcla de ambos estilos. Estas grabaciones son sintéticas, corresponden a personajes ficticios y no imitan a una persona real. - Herramientas y procedencia: [docs/voices.md](docs/voices.md). La presentación del estudio mantiene su audio original; la música, los efectos, las respiraciones y los gritos no verbales permanecen activos. ## Banda sonora adaptativa — descargada el 25/10/2026 Archivos en `public/assets/audio/music/`, preparados con `scripts/prepare-soundtrack.py` a partir de originales descargados el 25 de octubre de 2026 de las páginas de sus autores (conservados en `outputs/asset-sources/audio/`, fuera del paquete público). Suenan en el juego: `src/game/audio.ts`, `music-plan.ts` y `soundtrack.ts` los leen de `public/assets/audio/manifest-soundtrack.json`, con los tramos, cambios y mediciones de cada archivo. Detalle: [docs/soundtrack.md](docs/soundtrack.md). Atribuciones obligatorias: - «Distant Screams – Dark Ambient Music Pack» by Ricardo Cuello (Rest!), CC BY-SA 4.0. Tema del menú, lechos de caza y furia, stingers del despertar y del cuadro eléctrico. Cada uno de los cinco archivos derivados se publica también bajo [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/), sin mezclarse con otro material: `public/assets/audio/music/LICENSE-Rest-CC-BY-SA.md`. - 'Katabasis I' by Scott Buckley - released under CC-BY 4.0. www.scottbuckley.com.au - 'Eyes In The Void' by Scott Buckley - released under CC-BY 4.0. www.scottbuckley.com.au - 'Wildflowers' by Scott Buckley - released under CC-BY 4.0. www.scottbuckley.com.au - Entrada, escolta, stinger de liberación, victoria y resultado de rescate. Scott Buckley registra su música en Content ID: quien publique un vídeo del juego debe copiar estas tres líneas en la descripción para evitar una reclamación (`public/assets/audio/music/LICENSE-ScottBuckley-CC-BY.md`). - ObsydianX, [Horror SFX Volume 1](https://obsydianx.itch.io/horror-sfx-volume-1), [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/): capas de caza y persecución, resultado de derrota y ocho stingers (`public/assets/audio/music/LICENSE-ObsydianX-CC-BY.md`). Con crédito voluntario (CC0): isaiah658, [Unsolved Investigation](https://opengameart.org/content/unsolved-investigation), lecho de acecho (`public/assets/audio/music/LICENSE-CC0.md`). | Archivo publicado en `public/assets/audio/` | Obra y autor | Licencia | Adaptación | |---|---|---|---| | `music/menu-bad-feeling.mp3` | [«A Bad Feeling (Menu)», de *Distant Screams - Dark Ambient Music Pack (Tiny Pack)*](https://richarrest.itch.io/distant-screams-dark-ambient-music-pack-tiny-pack) — Rest! (Ricardo Cuello) | [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/) | tramo de 60,0 s desde 75,5 s, bucle circular con fundido de potencia constante, −20,0 LUFS, MP3 | | `music/arrival-katabasis.mp3` | [*Katabasis I*](https://www.scottbuckley.com.au/library/katabasis-i/) — Scott Buckley | [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) | tramo de 40,0 s desde 68,6 s, bucle circular con fundido de potencia constante, −20,0 LUFS, MP3 | | `music/bed-investigation.mp3` | [*Unsolved Investigation*](https://opengameart.org/content/unsolved-investigation) — isaiah658 | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | bucle del autor, sin editar, a compás (24 compases a 120,0 BPM), −20,0 LUFS, MP3 | | `music/bed-awakening.mp3` | [«Awakening of the Monster (Threat 1)», de *Distant Screams - Dark Ambient Music Pack (Tiny Pack)*](https://richarrest.itch.io/distant-screams-dark-ambient-music-pack-tiny-pack) — Rest! (Ricardo Cuello) | [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/) | tramo de 60,0 s desde 7,0 s, bucle circular con fundido de potencia constante, −20,0 LUFS, MP3 | | `music/bed-furia.mp3` | [«Dark Room (Tension 1)», de *Distant Screams - Dark Ambient Music Pack (Tiny Pack)*](https://richarrest.itch.io/distant-screams-dark-ambient-music-pack-tiny-pack) — Rest! (Ricardo Cuello) | [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/) | tramo de 60,0 s desde 6,1 s, bucle circular con fundido de potencia constante, −20,0 LUFS, MP3 | | `music/escort-void.mp3` | [*Eyes In The Void*](https://www.scottbuckley.com.au/library/eyes-in-the-void/) — Scott Buckley | [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) | tramo de 59,1 s desde 49,0 s, bucle circular con fundido de potencia constante, a compás (16 compases a 65,0 BPM), −20,0 LUFS, MP3 | | `music/result-rescue.mp3` | [*Wildflowers*](https://www.scottbuckley.com.au/library/wildflowers/) — Scott Buckley | [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) | tramo de 46,5 s desde 31,0 s, bucle circular con fundido de potencia constante, a compás (20 compases a 103,3 BPM), −20,0 LUFS, MP3 | | `music/result-defeat.mp3` | [«Drones 1 - horror_01_drone_17», de *Horror SFX Volume 1*](https://obsydianx.itch.io/horror-sfx-volume-1) — ObsydianX | [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) | tramo de 45,0 s desde 9,7 s, bucle circular con fundido de potencia constante, −20,0 LUFS, MP3 | | `music/layers/hunt.mp3` | [«Drones 1 - horror_01_drone_12», de *Horror SFX Volume 1*](https://obsydianx.itch.io/horror-sfx-volume-1) — ObsydianX | [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) | tramo de 30,0 s desde 12,9 s, bucle circular con fundido de potencia constante, mezcla a mono, −23,0 LUFS, MP3 | | `music/layers/chase-a.mp3` | [«Drones 1 - horror_01_drone_06», de *Horror SFX Volume 1*](https://obsydianx.itch.io/horror-sfx-volume-1) — ObsydianX | [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) | tramo de 30,0 s desde 19,7 s, bucle circular con fundido de potencia constante, mezcla a mono, −23,0 LUFS, MP3 | | `music/layers/chase-b.mp3` | [«Drones 1 - horror_01_drone_09», de *Horror SFX Volume 1*](https://obsydianx.itch.io/horror-sfx-volume-1) — ObsydianX | [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) | tramo de 30,0 s desde 16,0 s, bucle circular con fundido de potencia constante, mezcla a mono, −23,0 LUFS, MP3 | | `music/stingers/title.mp3` | [«Stingers Piano 1 - piano_12», de *Horror SFX Volume 1*](https://obsydianx.itch.io/horror-sfx-volume-1) — ObsydianX | [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) | recorte 0,00–6,00 s, normalizado, MP3 | | `music/stingers/slam.mp3` | [«Stingers 2 - impact_02», de *Horror SFX Volume 1*](https://obsydianx.itch.io/horror-sfx-volume-1) — ObsydianX | [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) | recorte 0,00–4,00 s, normalizado, MP3 | | `music/stingers/wake.mp3` | [«Aparition (Encounter 1)», de *Distant Screams - Dark Ambient Music Pack (Tiny Pack)*](https://richarrest.itch.io/distant-screams-dark-ambient-music-pack-tiny-pack) — Rest! (Ricardo Cuello) | [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/) | recorte 0,00–1,87 s, normalizado, MP3 | | `music/stingers/caza.mp3` | [«Stingers 2 - drum_1_01», de *Horror SFX Volume 1*](https://obsydianx.itch.io/horror-sfx-volume-1) — ObsydianX | [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) | recorte 0,00–3,19 s, mezcla a mono, normalizado, MP3 | | `music/stingers/furia.mp3` | [«Stingers 2 - synth_1_02», de *Horror SFX Volume 1*](https://obsydianx.itch.io/horror-sfx-volume-1) — ObsydianX | [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) | recorte 0,00–3,78 s, mezcla a mono, normalizado, MP3 | | `music/stingers/spotted.mp3` | [«Stingers 2 - violin_01», de *Horror SFX Volume 1*](https://obsydianx.itch.io/horror-sfx-volume-1) — ObsydianX | [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) | recorte 0,00–3,08 s, mezcla a mono, normalizado, MP3 | | `music/stingers/lost.mp3` | [«Stingers Piano (Ring Mod) 1 - ring_mod_05», de *Horror SFX Volume 1*](https://obsydianx.itch.io/horror-sfx-volume-1) — ObsydianX | [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) | recorte 0,00–2,80 s, normalizado, MP3 | | `music/stingers/poweron.mp3` | [«No Escape (Encounter 2)», de *Distant Screams - Dark Ambient Music Pack (Tiny Pack)*](https://richarrest.itch.io/distant-screams-dark-ambient-music-pack-tiny-pack) — Rest! (Ricardo Cuello) | [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/) | recorte 0,00–2,10 s, normalizado, MP3 | | `music/stingers/fuse.mp3` | [«Stingers Piano 1 - piano_09», de *Horror SFX Volume 1*](https://obsydianx.itch.io/horror-sfx-volume-1) — ObsydianX | [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) | recorte 0,00–2,50 s, normalizado, MP3 | | `music/stingers/freed.mp3` | [«Eyes In The Void (first bar of the march)», de *Eyes In The Void*](https://www.scottbuckley.com.au/library/eyes-in-the-void/) — Scott Buckley | [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) | recorte 49,02–53,53 s, normalizado, MP3 | | `music/stingers/victory.mp3` | [«Wildflowers (opening piano and strings)», de *Wildflowers*](https://www.scottbuckley.com.au/library/wildflowers/) — Scott Buckley | [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) | recorte 0,78–10,90 s, normalizado, MP3 | | `music/stingers/death.mp3` | [«Stingers Piano (Ring Mod) 1 - ring_mod_12», de *Horror SFX Volume 1*](https://obsydianx.itch.io/horror-sfx-volume-1) — ObsydianX | [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) | recorte 0,00–6,00 s, normalizado, MP3 | Adaptaciones de UMBRAL, que no se atribuyen a los autores: recortes, bucles circulares con fundido de potencia constante (a compás en la escolta y el resultado de rescate) y 0,5 s de margen a cada lado para `loopStart`/`loopEnd`, normalización (música −20 LUFS integrado, capas −23, pico real ≤ −1 dBTP), mezcla a mono en capas y algunos stingers, y codificación MP3 de 44,1 kHz. ## Efectos (OpenGameArt, Kenney, itch.io, Freesound) — descargados el 25/10/2026 Archivos en `public/assets/audio/sfx/`, preparados con el mismo script y en el mismo manifiesto. Cada evento de sonido del juego conserva su nombre y reproduce estas grabaciones; mientras un archivo no se ha decodificado (o si falla) suena el sonido procedural de antes. Atribución obligatoria: Canvas Coven, [Old Locations: Free Horror Ambiences](https://canvas-coven.itch.io/old-locations-free-horror-ambiences-asset), [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/): ambientes de las zonas industrial, tranquila y de escaleras (`public/assets/audio/sfx/LICENSE-CanvasCoven-CC-BY.md`). Con crédito voluntario (CC0), tabla por archivo en `public/assets/audio/sfx/LICENSE-CC0.md`: Kenney ([Interface Sounds](https://kenney.nl/assets/interface-sounds), [UI Audio](https://kenney.nl/assets/ui-audio) e [Impact Sounds](https://kenney.nl/assets/impact-sounds)); rubberduck ([100 CC0 metal and wood SFX](https://opengameart.org/content/100-cc0-metal-and-wood-sfx)); qubodup ([Door Open, Door Close Set](https://opengameart.org/content/door-open-door-close-set); el autor pide el crédito «qubodup»); Ylmir ([Rain (loopable)](https://opengameart.org/content/rain-loopable)); WuxiaScrub ([Rain + Long Thunder](https://opengameart.org/content/rain-long-thunder)); pauliuw ([Monster or beast sounds](https://opengameart.org/content/monster-or-beast-sounds)). | Archivo publicado en `public/assets/audio/` | Obra y autor | Licencia | Adaptación | |---|---|---|---| | `sfx/ui-navigate-1.wav`, `sfx/ui-navigate-2.wav` | [*Interface Sounds*](https://kenney.nl/assets/interface-sounds) — Kenney | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | recorte 0,01–0,26 s y variaciones, paso bajo y sala breve, mezcla a mono, normalizado, WAV 16 bit | | `sfx/ui-confirm.mp3` | [*Interface Sounds*](https://kenney.nl/assets/interface-sounds) — Kenney | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | recorte 0,00–0,29 s, paso bajo y sala breve, mezcla a mono, normalizado, MP3 | | `sfx/ui-back.wav` | [*Interface Sounds*](https://kenney.nl/assets/interface-sounds) — Kenney | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | recorte 0,00–0,09 s, paso bajo y sala breve, mezcla a mono, normalizado, WAV 16 bit | | `sfx/ui-error.wav` | [*Interface Sounds*](https://kenney.nl/assets/interface-sounds) — Kenney | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | recorte 0,03–0,24 s, paso bajo y sala breve, mezcla a mono, normalizado, WAV 16 bit | | `sfx/torch-click-1.wav`, `sfx/torch-click-2.wav` | [*UI Audio*](https://kenney.nl/assets/ui-audio) — Kenney | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | recorte 0,01–0,20 s y variaciones, mezcla a mono, normalizado, WAV 16 bit | | `sfx/step-wood-1.wav`, `sfx/step-wood-2.wav`, `sfx/step-wood-3.wav`, `sfx/step-wood-4.wav`, `sfx/step-wood-5.wav` | [*Impact Sounds*](https://kenney.nl/assets/impact-sounds) — Kenney | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | recorte 0,00–0,27 s y variaciones, mezcla a mono, normalizado, WAV 16 bit | | `sfx/impact-punch-1.wav`, `sfx/impact-punch-2.wav`, `sfx/impact-punch-3.wav` | [*Impact Sounds*](https://kenney.nl/assets/impact-sounds) — Kenney | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | recorte 0,00–0,31 s y variaciones, mezcla a mono, normalizado, WAV 16 bit | | `sfx/impact-plate-1.wav`, `sfx/impact-plate-2.wav` | [*Impact Sounds*](https://kenney.nl/assets/impact-sounds) — Kenney | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | recorte 0,00–0,35 s y variaciones, mezcla a mono, normalizado, WAV 16 bit | | `sfx/door-open-1.mp3`, `sfx/door-open-2.mp3`, `sfx/door-open-3.mp3`, `sfx/door-open-4.mp3` | [*Door Open, Door Close Set*](https://opengameart.org/content/door-open-door-close-set) — qubodup | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | recorte 0,00–0,55 s y variaciones, mezcla a mono, normalizado, MP3 | | `sfx/door-close-1.mp3`, `sfx/door-close-2.mp3`, `sfx/door-close-3.mp3`, `sfx/door-close-4.mp3`, `sfx/door-close-5.mp3` | [*Door Open, Door Close Set*](https://opengameart.org/content/door-open-door-close-set) — qubodup | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | recorte 0,00–0,77 s y variaciones, mezcla a mono, normalizado, MP3 | | `sfx/door-metal-slam-1.wav`, `sfx/door-metal-slam-2.wav` | [*100 CC0 metal and wood SFX*](https://opengameart.org/content/100-cc0-metal-and-wood-sfx) — rubberduck | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | recorte 0,01–0,42 s y variaciones, mezcla a mono, normalizado, WAV 16 bit | | `sfx/lock.mp3` | [*100 CC0 metal and wood SFX*](https://opengameart.org/content/100-cc0-metal-and-wood-sfx) — rubberduck | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | recorte 0,02–0,69 s, mezcla a mono, normalizado, MP3 | | `sfx/chain-release.mp3` | [*100 CC0 metal and wood SFX*](https://opengameart.org/content/100-cc0-metal-and-wood-sfx) — rubberduck | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | mezcla a mono, normalizado, MP3 | | `sfx/fuse-metal.wav` | [*100 CC0 metal and wood SFX*](https://opengameart.org/content/100-cc0-metal-and-wood-sfx) — rubberduck | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | recorte 0,00–0,27 s, mezcla a mono, normalizado, WAV 16 bit | | `sfx/spring.wav` | [*100 CC0 metal and wood SFX*](https://opengameart.org/content/100-cc0-metal-and-wood-sfx) — rubberduck | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | recorte 0,00–0,39 s, mezcla a mono, normalizado, WAV 16 bit | | `sfx/wood-break.wav` | [*100 CC0 metal and wood SFX*](https://opengameart.org/content/100-cc0-metal-and-wood-sfx) — rubberduck | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | recorte 0,02–0,51 s, mezcla a mono, normalizado, WAV 16 bit | | `sfx/rain-loop.mp3` | [*Rain (loopable)*](https://opengameart.org/content/rain-loopable) — Ylmir | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | bucle del autor, sin editar, −22,0 LUFS, MP3 | | `sfx/thunder-long.mp3` | [*Rain + Long Thunder*](https://opengameart.org/content/rain-long-thunder) — WuxiaScrub | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | recorte 20,50–34,00 s, mezcla a mono, normalizado, MP3 | | `sfx/growl-beast-1.mp3`, `sfx/growl-beast-2.mp3` | [*Monster or beast sounds*](https://opengameart.org/content/monster-or-beast-sounds) — pauliuw | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | recorte 0,00–2,77 s y variaciones, mezcla a mono, normalizado, MP3 | | `sfx/stalker-recoil-1.mp3`, `sfx/stalker-recoil-2.mp3` | [*Monster or beast sounds*](https://opengameart.org/content/monster-or-beast-sounds) — pauliuw | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | recorte 0,00–0,69 s y variaciones, mezcla a mono, normalizado, MP3 | | `sfx/stalker-breath.mp3` | [*Monster or beast sounds*](https://opengameart.org/content/monster-or-beast-sounds) — pauliuw | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | recorte 0,00–3,25 s, mezcla a mono, normalizado, MP3 | | `sfx/ambience-industrial.mp3` | [«Old Factory Workzone», de *Old Locations: Free Horror Ambiences*](https://canvas-coven.itch.io/old-locations-free-horror-ambiences-asset) — Canvas Coven | [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) | tramo de 40,0 s desde 122,4 s, bucle circular con fundido de potencia constante, mezcla a mono, −24,0 LUFS, MP3 | | `sfx/ambience-quiet.mp3` | [«Old Room», de *Old Locations: Free Horror Ambiences*](https://canvas-coven.itch.io/old-locations-free-horror-ambiences-asset) — Canvas Coven | [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) | tramo de 40,0 s desde 21,3 s, bucle circular con fundido de potencia constante, mezcla a mono, −24,0 LUFS, MP3 | | `sfx/ambience-stairs.mp3` | [«Old Canalization», de *Old Locations: Free Horror Ambiences*](https://canvas-coven.itch.io/old-locations-free-horror-ambiences-asset) — Canvas Coven | [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) | tramo de 40,0 s desde 8,1 s, bucle circular con fundido de potencia constante, mezcla a mono, −24,0 LUFS, MP3 | Adaptaciones de UMBRAL: recortes, variaciones del mismo juego igualadas, paso bajo y una sala breve en los sonidos de interfaz, mezcla a mono, normalización (efectos −16 LUFS de sonoridad momentánea máxima, pasos −18, interfaz −20, lluvia −22 y ambientes −24 LUFS integrado; pico real ≤ −1 dBTP) y codificación MP3, o WAV de 16 bit en lo que dura menos de 0,6 s. ### Freesound — 33 sonidos CC0 1.0, descargados el 25/10/2026 Descargados de [freesound.org](https://freesound.org) por el estudio, con una cuenta gratuita, el 25 de octubre de 2026 (lista de la descarga en `outputs/asset-sources/audio/DESCARGAR.md`). Los 33 están publicados bajo [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/), comprobado en la página de cada uno ese mismo día: no exige atribución y se listan con su autor y su página como registro. Originales en `outputs/asset-sources/audio/freesound/` (fuera del paquete público). Llevan las mismas adaptaciones que el resto de efectos (párrafo anterior); tramo, cambios y mediciones de cada archivo en `public/assets/audio/sfx/LICENSE-Freesound-CC0.md` y en el manifiesto. | # | Sonido y autor | Licencia | Archivo publicado en `public/assets/audio/` | Uso en el juego | |---|---|---|---|---| | FS-1 | [switch big breaker metal click on, off](https://freesound.org/people/kyles/sounds/451933/) — kyles | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | `sfx/breaker.wav` | Cuadro eléctrico (`powerOn`): el golpe del interruptor | | FS-2 | [Faulty Fluorescent Light Starter & Hum](https://freesound.org/people/EverydaySounds/sounds/125064/) — EverydaySounds | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | `sfx/tubes-start.mp3` | Cuadro eléctrico (`powerOn`): los tubos arrancan | | FS-3 | [Flickering Fluorescent Light with Background Hum (Seamless Loop)](https://freesound.org/people/kentspublicdomain/sounds/777053/) — kentspublicdomain | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | `sfx/fluorescent-loop.mp3` | Fluorescente de la ventana en la entrada (`lightBuzz`) y ambiente de las salas clínicas | | FS-4 | [Electric Sparks](https://freesound.org/people/kev_durr/sounds/396470/) — kev_durr | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | `sfx/sparks-1.mp3`, `sfx/sparks-2.mp3`, `sfx/sparks-3.mp3` | Chispas de los cables (`sparks`, `shock`) | | FS-5 | [Electric zap](https://freesound.org/people/michael_grinnell/sounds/512471/) — michael_grinnell | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | `sfx/zap.wav` | Descarga de un cable (`shock`) | | FS-6 | [Fuze Switch Flick](https://freesound.org/people/LordForklift/sounds/448394/) — LordForklift | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | `sfx/fuse-pickup.mp3` | Recoger un fusible (`fusePickup`) | | FS-7 | [Fuse Box (klick)](https://freesound.org/people/Syndicate12/sounds/141581/) — Syndicate12 | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | `sfx/fuse-insert.wav` | Colocar los fusibles (`fuseInsert`) | | FS-8 | [Steel Spring Bear Trap](https://freesound.org/people/fractionalist/sounds/644245/) — fractionalist | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | `sfx/trap-snap.mp3` | Cepo (`trapSnap`) | | FS-9 | [Glass_Shards_Crunching_10](https://freesound.org/people/BlondPanda/sounds/778603/) — BlondPanda | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | `sfx/glass-crunch.mp3` | Cristales pisados (`glassCrunch`) | | FS-10 | [Walking_On_Broken_Mirror](https://freesound.org/people/LazyLids/sounds/369071/) — LazyLids | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | `sfx/glass-walk-1.mp3`, `sfx/glass-walk-2.mp3` | Cristales pisados (`glassCrunch`) | | FS-11 | [body_hit](https://freesound.org/people/insanity54/sounds/276600/) — insanity54 | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | `sfx/body-hit.wav` | Golpes al superviviente (`hurt`, `hollowStrike`, `collapse`) | | FS-12 | [Heartbeat 97 BPM](https://freesound.org/people/Cloud-10/sounds/688735/) — Cloud-10 | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | `sfx/heartbeat.wav` | Latido con la salud baja (`lowHealth`) | | FS-13 | [Velcro Pull 01](https://freesound.org/people/Rudmer_Rotteveel/sounds/536231/) — Rudmer_Rotteveel | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | `sfx/medkit-velcro.mp3` | Botiquín (`medkit`): el velcro | | FS-14 | [Wrapping cloth](https://freesound.org/people/ChuckleNutsDev/sounds/718668/) — ChuckleNutsDev | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | `sfx/medkit-bandage.mp3` | Botiquín (`medkit`): la venda | | FS-15 | [Metal Stairs Foot Steps](https://freesound.org/people/sagamusix/sounds/452421/) — sagamusix | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | `sfx/step-metal-1.wav`, `sfx/step-metal-2.wav`, `sfx/step-metal-3.wav`, `sfx/step-metal-4.wav` | Pasos en la escalera metálica | | FS-16 | [puddlewalk](https://freesound.org/people/j1987/sounds/106395/) — j1987 | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | `sfx/step-water-1.wav`, `sfx/step-water-2.wav`, `sfx/step-water-3.wav`, `sfx/step-water-4.wav` | Pasos en los charcos, bajo la lluvia de la entrada | | FS-17 | [Footsteps, Tile, Male Sneakers, Slow Pace](https://freesound.org/people/SpliceSound/sounds/170506/) — SpliceSound | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | `sfx/step-tile-1.wav`, `sfx/step-tile-2.wav`, `sfx/step-tile-3.wav`, `sfx/step-tile-4.wav` | Pasos en la baldosa de las salas clínicas | | FS-18 | [door metal big heavy close kinda slam thud echo offmic](https://freesound.org/people/kyles/sounds/406197/) — kyles | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | `sfx/door-metal-heavy.mp3` | Puertas metálicas de la sala de calderas; Hollow golpea una puerta (`threat`) | | FS-19 | [Metal Door Slam_SoundSmith](https://freesound.org/people/Lunardrive/sounds/48980/) — Lunardrive | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | `sfx/door-metal-slam2.mp3` | Hollow golpea una puerta (`threat`) | | FS-20 | [Kicking/Forcing/Breaking Wooden Door](https://freesound.org/people/qubodup/sounds/160213/) — qubodup | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | `sfx/door-forced.mp3` | Hollow fuerza una puerta (`impact`) | | FS-21 | [SeriesofDoorPounding](https://freesound.org/people/shelbyshark/sounds/444701/) — shelbyshark | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | `sfx/door-pounding.mp3` | Hollow aporrea una puerta durante una persecución (`doorPounding`) | | FS-22 | [hospital-door-latch](https://freesound.org/people/alienistcog/sounds/125297/) — alienistcog | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | `sfx/latch-hospital.mp3` | Pestillo de las puertas de las salas clínicas | | FS-23 | [Car Lock](https://freesound.org/people/hz37/sounds/396448/) — hz37 | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | `sfx/car-lock.wav` | Cierre del coche en la entrada (`carLock`) | | FS-24 | [Car Door open and close 3](https://freesound.org/people/NachtmahrTV/sounds/556690/) — NachtmahrTV | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | `sfx/car-door.mp3` | Puerta del coche al bajar en la entrada (`carDoor`) | | FS-25 | [gate big rusty metal door garage open heavy creak rattle](https://freesound.org/people/kyles/sounds/637583/) — kyles | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | `sfx/gate-creak-1.mp3`, `sfx/gate-creak-2.mp3` | Verja de la entrada (`gateCreak`) | | FS-26 | [Close lightning strike 2018 07 07](https://freesound.org/people/csengeri/sounds/434359/) — csengeri | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | `sfx/thunder-close.mp3` | Trueno (`thunder`) | | FS-27 | [Pressure Meter Pipe Noises 1](https://freesound.org/people/RutgerMuller/sounds/104087/) — RutgerMuller | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | `sfx/pipe-1.mp3`, `sfx/pipe-2.mp3` | Tuberías (`pipe`) | | FS-28 | [Scissors Snipping in Air](https://freesound.org/people/megashroom/sounds/390165/) — megashroom | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | `sfx/scissors-1.wav`, `sfx/scissors-2.wav`, `sfx/scissors-3.wav` | Tijeras de Scissorman (`stalkerAttack`) | | FS-29 | [High Quality Monster Screech](https://freesound.org/people/NaturesTemper/sounds/518297/) — NaturesTemper | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | `sfx/screech-a.mp3` | Chillido de los rezagados al ver al superviviente (`stalkerAlert`) | | FS-30 | [Monster screech](https://freesound.org/people/Khrinx/sounds/565024/) — Khrinx | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | `sfx/screech-b.mp3` | Chillido de los rezagados (`stalkerAlert`) | | FS-31 | [Monster Guttural Growl, Dry](https://freesound.org/people/DeqstersLab/sounds/734900/) — DeqstersLab | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | `sfx/growl-hollow.mp3` | Gruñido de Hollow (`growl`) | | FS-32 | [Monster breathing](https://freesound.org/people/iut_Paris8/sounds/567723/) — iut_Paris8 | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | `sfx/monster-breath.mp3` | Respiración monstruosa en las salas (`whisper`) y de los rezagados (`stalkerBreath`) | | FS-33 | [Hybrid Monster Growl](https://freesound.org/people/john129pats/sounds/146558/) — john129pats | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | `sfx/hollow-strike.mp3` | Zarpazo de Hollow (`hollowStrike`) | ## Pistola de servicio — audio CC0, 28/10/2026 | Grabación | Autor y fuente | Licencia | Uso local | |---|---|---|---| | 9mm Pistol Shot | [michorvath / Freesound 427592](https://freesound.org/people/michorvath/sounds/427592/) | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | `audio/weapon/shot.wav` | | Handgun reload sound effect | [zer0_sol / OpenGameArt](https://opengameart.org/content/handgun-reload-sound-effect) | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | `audio/weapon/dry.wav`, `magazine-out.wav`, `magazine-in.wav`, `slide.wav` | El disparo parte de la preescucha MP3 pública de alta calidad de Freesound. Se han recortado el silencio inicial y las partes de la recarga para sincronizar cada contacto con la animación; filtrado ligero, normalización de picos y fundidos cortos. Derivados PCM mono a 44,1 kHz, sin clipping (picos de −3,4 a −8 dBFS). El inventario de munición reutiliza el contacto del cargador; el impacto usa el golpe de madera de Kenney ya acreditado. `public/assets/audio/weapon/sources.json` conserva los SHA-256 de fuentes y derivados, ventanas y niveles; `LICENSES.txt` acompaña los WAV. Preparación reproducible: `scripts/prepare-weapon-audio.py`. ## Pistola y animaciones de arma originales de UMBRAL (28/10/2026) `public/assets/models/weapon-pistol.glb`: modelo y texturas creados para AiQube Labs Game Studio con `scripts/prepare-weapon.py`, sin recursos de terceros. Los cuatro clips `Pistol_*` de Irene y Hugo se han creado sobre sus esqueletos con `scripts/prepare-survivor-weapon.py`. Los personajes conservan su licencia MIT de Microsoft Rocketbox. Procedencia: `public/assets/models/LICENSE-Weapon.md`; construcción, tiempos y comprobación: `docs/weapon.md`.