Actualización 2.209
2/8/2026
v2.209.0.0BETAMINOR
Seymour1 ago 2026
Aurora × noclip: puente de batalla 3D (el editor ahora representa el campo de juego REAL con la formación editada)
- Descubrimiento:
parseEncounter(bin.ts:2494) de noclip usa EXACTAMENTE nuestro diseñoBattle_File(script@0x4, identificadores de monstruo i16@+0xC, posiciones float32 16B) —0e/<id>.bines byte idéntico abtl_*.bin(prueba de hash: 0e/0002 == bjyt02_00). EncounterIndexBridge(FfxLib/Battle): SHA-256 battleId↔encounterId índice — partido de 614/858 batallas (azit03_00→0e/00EF, klyt00_00→0e/001E, mihn00_00→0e/002F); 244 incomparables informaron honestamente.Aurora3DLauncher+ botón "🐉 Ver batalla en 3D (noclip)" en Aurora Cámara: sobrescribe0e/<encId>.bincon el btl ACTUAL (copia de seguridad básica.aurora3d.bak, botón "↩️ Restaurar 3D") y abreindex.html?battle=<encId>#ffx/b<mapIndex>(mapIndex de EncounterTable campo de batalla&0xFF) — el renderizado nativo de noclip PS2 muestra la formación/posiciones editadas.- Aditivo noclip parche (scenes.ts
selectEncounter, ~20 líneas): el parámetro?battle=fuerza el encuentro exacto (omite la selección de peso); dist reconstruido + actualizado en el directorio de servicio 8769 (verificado en el paquete servido). - Puertas:
--filter AuroraOverlayEnrichment9/9 PASS; conjunto completa 357/357 PASS;Aurora3DLinkLab --override azit03_00copiar=Verdadero/restaurar=Verdadero; HTTP E2E: 8769 sirve la anulación byte por byte. Documento:docs/reverse/FFX_AURORA_NOCLIP_3D_BATTLE_BRIDGE_2026-08-01.md. - Fase 2 (siguiente): arrastrar/cámara en noclip → PUBLICAR en el editor (patrón AuroraDragBridge) → escribir en bin → recargar. Humo visual por campo pendiente. ### PARCHE
v2.208.0.1
v2.209.1.0BETAPATCH
Seymour1 ago 2026
Aurora: visores DENTRO del editor (WebView2) + nomenclatura RealGame/EditViewer + battle-preview sin el menú del juego
- Incrustado: Aurora Cámara obtuvo una columna
WebView2Host— "Renderizar EditViewer" y "🐉 Ver en RealGame (dentro del juego)" ahora se abren DENTRO del editor (sin navegador); ⟳ Botón Recargar visor;EmbeddedReloadRequestedse recarga automáticamente después de guardar. - Acciones en la parte superior: arreglado ActionBar (Renderizar EditViewer · Ver en RealGame · Restaurar · Guardar posiciones · +/- monstruo · Exportar anclas) — ya no hay nada oculto en el desplazamiento.
- UI cambio de nombre:
noclip→ RealGame (dentro del juego);MapViewer→ EditViewer (textos, estados, banners). - sin menú de juego: se corrigió la descripción de escena
battle-previewen el catálogo noclip FFX — URL?battle=<encId>&map=<mapIndex>#ffx/battle-previewsiempre se resuelve directamente en FFX (mapIndex no necesita estar entre los 55 catalogados); dist reconstruido + verificado en el paquete servido (battle-preview+get("battle")presente). - Sincronización automática: SaveDraggedPositions/SaveCameraShots/SaveCameraFloats/AddMonster/RemoveMonster re: aplique la anulación de RealGame + vuelva a cargar el visor (la posición guardada se muestra en el juego sin hacer clic en re).
- Puertas: conjunto completa 359/359 PASS; Lanzar errores de compilación 0; paquete servido verificado. ### MENOR
v2.209.0.0
v2.209.2.0BETAPATCH
Seymour1 ago 2026
Aurora UI/UX: panel de control limpio + visores emergentes dedicados
- Panel de control: la pantalla principal ahora es la selección de mapas: lista con insignias ([ gLTF ] [ N tex ] [ N/N submallas ] [ STUB ] [ solo mapa ], color de tono), tarjeta oscura premium para el lugar (#16121F bg + texto blanco), Acciones en UN solo lugar (debajo de la tarjeta: Renderizar EditViewer · 🐉 Ver en RealGame · 💾 Guardar posiciones · ➕/➖ Monstruo · Exportar anclas · ↩️ Restaurar) — se eliminó la duplicación de botones.
- Ventanas emergentes (nueva arquitectura):
AuroraViewerWindow(WebView2) dedicado para EditViewer (edición sin formato) y RealGame (solo lectura): NO interactúan entre sí; cambiar mapa/batalla en el tablero cierra todas las ventanas automáticamente (evita editar monstruos en el mapa incorrecto/fugas). - Superposición de barra lateral: el panel del visor flotante se convirtió en una barra lateral plegable (❮ Ocultar → tira de 58 píxeles): ya no bloquea la vista 3D.
- Textos enormes → [?] con información sobre herramientas (HonestyBanner se movió a la información sobre herramientas del botón "?").
- Puertas: conjunto completa 360/360 PASS · Errores de versión 0 de la versión ·
node --checkOK. ### PARCHE
v2.209.1.0
v2.209.3.0BETAPATCH
Seymour2 ago 2026
Alquimia personalizada / Arena+ desbloqueados: ruta del laboratorio corregida + ArenaMultiBossLab implementado en el juego + vanilla-root configurado
- Lab corrección de ruta (
ArenaPlusComposePick.cppResolveLabExe): se agregó el candidato..\data\modules\tools\ArenaMultiBossLab\ArenaMultiBossLab.exe: el patrón de herramientas del proyecto (data\modules\tools, donde reside SinScaleInject). Antes, el gancho solo buscaba enmodules\tools\...- el lab nunca se encontró → CreateProcess falló → El Alquimia personalizado nunca compuso nada en el juego. - Lab implementado en el juego:
ArenaMultiBossLabcompilado (versión, 0 errores/0 advertencias) y copiado (exe+dll+deps+recetas) endata\modules\tools\ArenaMultiBossLab\. - Raíz básica configurada:
modules\config\arena_plus_compose_vanilla_btl.txtcreado apuntando aFFX Extracted\FFX\ffx_ps2\ffx\master\jppc\battle\btl(los textos de configuración estaban vacíos antes →--vanilla-root ""→ lab falló). El valor predeterminado de Mod-raíz es correcto ({gameRoot}\data\mods\...\btlexiste). - Reversión de v6 absorbida: el dllmain de HEAD ya está en el estado v5 (DrawString
0x9016B0falla en DIFF; la nueva navegación se reintroducirá con IDA disponible). Nota sobre la entrada del registro de cambios 2.207.6.0. - RT2
Needs Testing(Alquimia personalizado): F7 → Arena+ → Alquimia personalizado → elegir eones → Lanzar → batalla compuesta (p. ej. Bikanel + 4 Eones oscuros, battle_id bika02_01). El relanzamiento utiliza el manifiesto creado por el primer lanzamiento. ### PARCHE
v2.209.2.0
v2.209.4.0BETAPATCH
Seymour2 ago 2026
SIN desbloqueado: ruta de SinScaleInject corregida (data\modules\tools) + directorio de listas corregido + listas de Macalania/Electro restauradas desde git + herramienta implementada
- Corrección de ruta de archivo EXE (
SinCurseHook.cpp):{DLL_DIR}\tools\SinScaleInject\→..\data\modules\tools\SinScaleInject\SinScaleInject.exe(patrón de herramientas de proyecto; antes, CreateProcessA fallaba y SIN nunca se ejecutó en el juego). - Corrección del directorio de lista (
SinScaleInject/Program.cs): el valor predeterminado ahora es{gameRoot}\data\modules\tools\SinScaleInject\data\rosters(eramodules\tools\..., un nivel menos). - Listas restauradas desde git (commit
eb2e93ed):spira-sin-area-rosters/conmacalania_all/bosses/field/woods.csv+thunder_plains.csv(monster_id,role,note,allowed_presetscon lista de permitidos UNI-001..006) + README. - Implementado en el juego:
SinScaleInjectcompilado (versión, 0 errores) y copiado en las listas dedata\modules\tools\SinScaleInject\+ endata\modules\tools\SinScaleInject\data\rosters\. - RT2
Needs Testing(SIN): transición de área consin_curse.flag→ ejecuciones de SinScaleInject (registroSinCurseHook SinScaleInject SUCCESS) → monstruos de área con HP/estadísticas escaladas (T) + nombres de kernel[UNI]+ controlador ATEL en AiFile → batalla. - ffx-hooks con la solución de ruta SIN: compilar listo, implementar pendiente (el juego estaba abierto en el momento de la confirmación; implementar cuando se cerró). ### PARCHE
v2.209.3.0
v2.209.5.0BETAPATCH
Seymour2 ago 2026
música personalizada de jefes de Alquimia/Arena+ desbloqueada: la puerta del latido ya no bloquea MusicHook
- El problema: MusicHook (que aplica la anulación de música de batalla) fue bloqueado junto a la puerta
WaitForProbeHeartbeat; el latido del corazón de la sonda ffx nunca aumenta (sonda sin GetDeviceState enganchada) →MusicHook install skipped: ffx-probe heartbeat gate failed→ La música de Arena+ nunca se reprodujo. - La música:
ARENA_PLUS_MUSIC_TRACK_DEFAULT 145 = "Challenge"(pista de batalla contra jefes: todas las filas de Arena+ F7: Eones oscuros + Verdugo final; anulación mediantearena_plus_music_<row>.txt/FFXHOOKS_ARENAPLUS_MUSIC_TRACK_<N>). - Solución: la puerta ahora no se bloquea — espera 10 segundos para la sonda (si responde, el SOUNDCMD adicional también se activa) e instala MusicHook incluso sin latidos (anulación a través de FFXHooksBlock + ganchos de entrada de batalla Preparación/PlayTrackWithPreload/SwitchCrossfade funcionan sin la sonda; solo el disparador SOUNDCMD se degrada — ADVERTENCIA en el registro).
- RT2
Needs Testing: Alquimia personalizado → Iniciar → la batalla compuesta debería reproducir Desafío (145) en lugar del tema de batalla común. - pendiente notado: El latido del corazón de la sonda ffx nunca aumenta (dinput8 66.560 del 07 al 19): investigue por qué GetDeviceState no está enganchado (afecta a SOUNDCMD/FORCEBATTLE a través de la sonda; la música ya no depende de ello). ### MENOR
v2.209.4.0
v2.209.6.0BETAPATCH
Seymour2 ago 2026
música de Alquimia personalizada sin silencio/fugas + restauración del contenedor compuesto (nunca sobrescribe los canónicos de forma permanente)
- Mutis/corrección de fugas (MusicHook.cpp
MusicPlayWithPreload_Shim): con SOUNDCMD degradado (sin latidos de la sonda), el adaptador suprimió la música básica y confió en soundcmd para reproducir la anulación → batalla en silencio + anulación filtrada al siguiente PlayTrack (la música "deseado" se reprodujo al salir). Ahora, sin soundcmd: sustituye la pista y reproduce la vainilla (sin silencio, sin fugas); con soundcmd: mantiene la receta lab (suprimir + receta). - Restauración de contenedor compuesto en la ruta normal personalizada Alquimia:
ArmDeferredFileRestoresolo se armó en la ruta 781D60 (mapa cruzado); la ruta normal (p. ej. compuesta bika02_01) dejó el contenedor en la raíz del mod para siempre (sobrescribiendo las batallas canónicas del área). Ahora la ruta normal también activa la restauración (~30s). - Restauración de arranque (
ArenaPlus_RestorePendingComposeOnBoot): si una sesión anterior se cerró antes de la restauración diferida (~30 s), el arranque restaura lo canónico desde.spiraforge.bak(leebattle_idde gameRootcompose_last.json): la composición nunca permanece permanente. - Construye PASS + LabDeploy para Steam.
- RT2
Needs Testing: Alquimia personalizado → Lanzamiento → batalla compuesta con la música adecuada (sin silencio) → ~30 segundos después, se restaura el contenedor canónico → el área de encuentros aleatorios vuelve a la normalidad; cerrar el juego antes de los 30 segundos → se restaura el siguiente arranque. ### PARCHE
v2.209.5.0
v2.209.7.0BETAPATCH
Seymour2 ago 2026
música de Alquimia personalizada: la devolución de llamada soundcmd solo se configura cuando la sonda está activa (sin soundcmd → el shim sustituye la pista y reproduce la versión básica)
- Por qué la solución 2.209.6.0 no fue suficiente:
g_arenaSoundCmdFnno era nulo (el dllmain configuróArenaPlus_MusicHookProbeSoundCmdcuando se instaló el enlace); solo falló en tiempo de ejecución (sin latido de la sonda) → la corrección vio la devolución de llamada → usó la ruta lab (supresión + receta) → soundcmd falló → silencio + fuga persistió. - Solución: el dllmain ahora mantiene
probeAlive = FFXHOOKS_SKIP_PROBE_WAIT || WaitForProbeHeartbeat(10000)y solo configura la devolución de llamada de soundcmd si la sonda está activa (3 puntos de instalación). Sonda muerta → devolución de llamada nula → la cuñaPlayTrackWithPreloadsustituye la pista y reproduce la vainilla → El desafío (145) se reproduce en la batalla compuesta, sin silencio, sin fugas para salir. - Veredicto de bloqueo inactivo (investigado en IDA a través de MCP 13337): el AV fmodex es preexistente —
AsyncTask_InvokeCallbackThunk(0x691480) llama a(*(this+4))(*(this+8))con este+4/this+8 = montón liberado (0x10CDCDCD); el puntero del procesador se encuentra en la tabla0xB46FA0(región de audio). NASHI: nuestros ganchos no tocan este camino (AsyncTask/0x691480/0xB46FA0): los AV son anteriores al F7. El VEH GLOBAL lo captura y lo registra (diagnóstico). Arreglarlo = encontrar quién libera el audio AsyncTask (enfoque separado). - Construye PASS + LabDeploy para Steam (20:09). ### MENOR
v2.209.6.0
v2.209.8.0BETAPATCH
Seymour2 ago 2026
restauración de arranque corregida (manifiesto real en `modules\compose_last.json`) + bin compuesto de prueba restaurado + escenarios compatibles de Alquimia personalizada confirmados
- Restauración de arranque reparada: el manifiesto REAL está escrito por lab en
modules\compose_last.json(relativo al módulo). La restauración de arranque solo se vio en gameRoot → el contenedor compuesto de una sesión interrumpida permaneció en el disco. Ahora mira en orden:modules\compose_last.json→{gameRoot}\compose_last.json→{gameRoot}\mods\Spira Reforge\arena\compose_last.json. - Limpieza de disco: el
bika02_01.bincompuesto de la prueba (19:37) fue restaurado a vainilla (.spiraforge.bakdel 09/06/2024, 24,016 bytes) — confirmado por tamaño/marca de tiempo. - Escenarios compatibles con Alquimia personalizados (verificados a través de lab --compose seco-ejecutar): bikanel (bika02_01), macalania_forest/abrir/open2 (mcfr00_00/mcyt00_00/mcyt00_21), remiem (kino00_00), caverna/cavern_alt (nagi05_50/24/25). Mushroom Rock NO es un escenario compatible (la composición vuelve a la caverna; es por eso que el x4 "no se abrió" allí). x3/x4 (3-4 actores) se componen perfectamente en escenarios compatibles (ensayo probado: 4 ranuras, chunk2/chunk3 ok).
- Construye PASS + LabDeploy para Steam. ### PARCHE
v2.209.7.0