Actualización 2.224
6/8/2026
v2.224.0.0BETAMINOR
Seymour2 ago 2026
OPERACIÓN DEMON WAVE 1+2: TABLERO F8 RESTAURADO + ARBITRAJE DE LLAVE F7/F8
- Panel F8 restaurado (la fuente ya está en el árbol; faltaba el cable):
StartInGameMenuDashboard()+StartUnXBoosterHook()enInstallHooks(la puerta[dashboard] enabledestá activada de forma predeterminada: agregada akDefaultInien Config.cpp);InGameMenuDashboard.cpp/UnXBoosterHook.cpp/Config.cppre: agregado a vcxproj (Config.cpp nunca estuvo en el proyecto; la puertadashboard.enablednunca se leyó). - Arbitraje de claves (Ola 2): con
dashboard.enabled, F8/INSERT pertenecen al PANEL (único propietario);InGameMenuProcessKeyconsume F8/INSERT sin alternar (retroceso con el tablero apagado). F7 (NativeMenu/F7_LeverApply) SIN TOCAR. - Heredado UnX ELIMINADO de la implementación (INC-002 - falla comprobada 3/3):
unx.dll/dxgi.dll/dxgi.ini/dxgi.dll.055508/dinput8 - Copia.dllse movió amodules\_unx_legacy_removed_20260802_*(copia de seguridad reversible) en Steam Y_isolated. - Nuevas definiciones en ffx_addresses.h:
RVA_FFX_DEBUG_FLAGS(0xD2A8F8),RVA_FFX_PERMANENT_SENSOR,RVA_FFX_BATTLE_PARTICIPATION/RVA_FFX_AP_EARN(0x1F10EA0/0x1F10EC4 de UnX). Jugable Seymour DESACTIVADO (dirección de estructura del grupo no validada — pendiente RE; la aplicación se eliminó del refuerzo). - Regla Hooks-EN aplicada al tablero: "F8 cerrar", "Encendido/Apagado", "Abrir/Cerrar"; tablero
Log→DashLog(OutputDebugStringA -Logde dllmain es estático). - Modelo ffx-hooks.ini creado en
RuntimeTools/FfxHooksDll/ffx-hooks.ini(con[dashboard] enabled=1). - Puerta: Errores de versión 0 en la versión; cadenas del tablero en binario (4/4); Implementación de Steam +
_isolated(copias de seguridad.bak_20260802_184354). RT2 pendiente: F8 abre el tablero, F7 intacto, los trucos del tablero funcionan. ### MENOR
v2.223.1.0
v2.224.0.1BETAPATCH
Seymour2 ago 2026
OPERACIÓN DEMON WAVE 3: DIALOG SKIP portado de forma segura (gancho, no parche)
DialogSkipHook.{h,cpp}(nuevo): puerto seguro delret 8parche heredado de UnX codificado (RVA 0x30B040 —FFX_FmodVoice_ReadEventData@ 0x70B040, __thiscall validado en IDA): MinHook/PolyHook2 en el objetivo; coninput.dialog_skip=1devuelve 0 inmediatamente (mismo efecto que ret 8, REVERSIBLE y controlado por configuración).- Panel: elemento
Dialog Skip (voices)en la pestaña Entrada (input.dialog_skip, desactivado por defecto). - Cable:
InstallDialogSkipHook(g_base, LogLine)en InstallHooks (dentro de la puerta del tablero). - Definir:
RVA_FFX_FMODVOICE_READ_EVENT_DATA(0x30B040) en ffx_addresses.h. - Puerta: Errores de versión 0 en la versión; cadenas en binario; Steam + implementación de
_isolated(copia de seguridad185543). RT2: con el elemento ON, los diálogos hablados se saltan (sin bloqueo); DESACTIVADO = comportamiento básico. ### MENOR
v2.224.0.0
v2.224.0.2BETAREVISION
Seymour2 ago 2026
OPERACIÓN DEMON: Cierre de documentación de Ola 4 + script RT2
run_f8_rt2.ps1(nuevo): humo de arranque + comprobaciones F8 (panel/F7/trucos/salto de diálogo): requiere editor cerrado, guardado desechable, hash antes/después.F8_UNX_INCONSISTENCY_REGISTER(sesión 3): INC-002/005 + P1/P2/P5/P7 RESUELTO; P3 parcial (v2.flag ya ausente); puerto nunca registrado (KillMeNow/automático-update/textura inyectar/sig-escanear).- SESSION_HANDOFF + PORT_STATUS: F8
Needs Testing— usuario de RT2 pendiente en el juego (editor cerrado). - Limpieza:
ingame_menu_v2.flagya no está en la implementación (P3 confirmó que está limpio). ### PARCHE
v2.224.0.1
v2.224.0.3BETAREVISION
Seymour2 ago 2026
OPERACIÓN DEMONIO: plan posterior a F8 — Nivel 2 a través de la sonda ffx (§9) + verificación RT2
- F7F8_RECONCILIATION_PLAN §9: con UnX fuera de implementación, vtable[9] (GetDeviceState) regresa a ffx-probe.dll — la sonda del hilo principal en proceso (FORCEBATTLE/SETINPUT/SOUNDCMD/LEER/ESCRIBIR/CALL — Nivel 2: a_ability/arms_rate/Encounter Tabla/IA/calibración Aurora). Estado ACTUAL: APAGADO en implementación (
.RT2OFF); cargador presente; El tablero ya tiene el elementoplugins.ffx_probe. run_f8_rt2.ps1: verificación del latido del corazón de la sonda (enganchado=1) cuando la sonda está activa.- Puerta: solo documentos (REVISIÓN); desplegar intacto. ### REVISIÓN
v2.224.0.2
v2.224.0.3BETAREVISION
Seymour2 ago 2026
TABLA DE DESPACHO PPP: CICLO CERRADO (consumidor + mesa principal)
- PROBADO por el consumidor:
FFX_MagicHost_RelocatePppSection(0x7121D0) —a2 + 40*index(zancada 40 = 0x28 en el código); llamantes pasada&pppSysProgTbl(0x72a8eapush offset pppSysProgTbl→ 0xC3A500; 0x761b72). Elhandler_table_indexen disco de cada ranura se convierte en el puntero de entrada de la tabla; ranura de tiempo de ejecución = 16B ([0]=índice, [1]/[2]=reubicado ptrs; recuento en*(int16*)(record+0x26)): coincide con la ventana pppSclMove T3. - pppSysProgTbl @0xC3A500 = la tabla PRINCIPAL — diseño "progtbl" (nombre@+0x00, fnMain@+0x08, fnExtra@+0x20), 418 entradas (coincide con 2026-07-31 DOCUMENTO MÁGICO); ranuras 0-11 = pppAccele..pppColor con los controladores de clasificación Yonishi (pppSclMove T3 = 0x75C090 @ ranura 6; pppScale = 0x75D0D0 @ ranura 10; pppAngle = 0x75CF20 en la ranura 9; pppSclAccele = 0x75B9F0 en la ranura 2).
- Corrección del pasada anterior: 0xC3A500 NO es un vector de nombre (el bloque 0xC3A4E0 = cadenas de depuración END/CHR/MAP-G/MAT; cambio de nombre de
FFX_PppNameVectorREVERTIDO). - 2026-07-31 Los cambios de nombre MAGIC se propagan A LA BD CANÓNICA: 0x716D20→FFX_Render_PppProgramProcessor_2, 0x75B830→FFX_PppHandler_Accele, 0x75B900→FFX_PppHandler_Accele_SetFromGlobalQ, 0xC3E798→FFX_PppHostDispatchTable_AltQ, 0xC86080→FFX_PppKeyholeDispatchTable.
- Jaula albhed obtuvo el diseño del programa + la tabla principal: 5 tablas, 1191 controladores en
scripts/ppp_dispatch_table.json. Documento:docs/reverse/PPP_DISPATCH_TABLE_RECONCILED_2026-08-02.md(segundo pasada). - C2 con la cadena completa: índice en disco → pppSysProgTbl + 40*índice → entrada (nombre+fn). Siguiente: la ventana del disco 16B → ranura de tiempo de ejecución (T3) y los 145 alias. ### PARCHE
v2.224.0.2
v2.224.0.4BETAPATCH
Seymour2 ago 2026
F8 DESHABILITADO (puerta `dashboard.enabled=false`) + F8 consolidado + documento de sonda
- La puerta se abre en 2 puntos (Config.cpp kDefaultIni + dllmain
GetBool×2): el tablero/amplificador/DialogSkipHook no arranca; InGameMenu vuelve a ser propietario de F8/INSERT (retroceso natural). Reversible (reactivar = voltear + desplegar). docs/reverse/FFX_F8_PROBE_CONSOLIDADO_2026-08-02.md(nuevo): F8 (Ondas 1-3 + cierre) + sonda ffx (Nivel 2) + cómo reactivar + elementos pendiente.- Implementación de Steam +
_isolated(copia de seguridad de191908); Lanzar errores de compilación 0. Concentración volver a F7. ### REVISIÓN
v2.224.0.3
v2.224.0.5BETAPATCH
Seymour2 ago 2026
F7: PARPADEO FIJO (causa raíz en el cable de la palanca) + sin números de pasos sin procesar + palanca de dificultad REAL
- PARPADEO (usuario RT2 — causa raíz con evidencia de registro): al confirmar que una fila cerró el menú (
CloseMenu→m.obj=0) PEROg_forceSubsystempermaneció ENCENDIDO — el juego se quedó atascado en el modo de menú (0x13407E4=1) sin menú dibujado = renderizado alterno = pantalla parpadeante (registro:open→ confirmar →close (force-gate off)solo en el 2º F7 →open...). Solución: el cable ahora borrag_forceSubsystemal confirmar (mismo comportamiento queg_nativeWantClose). - F7 alternar rebote (250 ms) en PresentTick: al mantener presionada la tecla F7 (o la tecla atascada) se alternaba el menú en cada borde = parpadeo.
- "Número donde no debería estar": Las filas RT_STEPPER mostraban
[0]sin formato antes de editar. Solución:g_rowEdited[]: el valor del paso a paso solo aparece DESPUÉS de L/R (alternar [ON]/[DESACTIVADO] permanece siempre visible). - Palanca de dificultad REAL (era un trozo): nuevo
F7_SetDifficultyLevel(0..5)(F7InLive) — estableceg_cfg.diffGlobal(hpMul 1000/1150/1300/1500/1750/2000 — x1.00..x2.00) +F7_SaveConfig(): la aplicación automática de inicio de batalla lo activa. - Puerta: Errores de versión 0 en la versión; Implementación de Steam +
_isolated(copia de seguridad de193746). RT2 pendiente: F7 → confirmar → el menú se cierra SIN parpadeo; sin inicial [0]; La dificultad se aplica en la batalla.
v2.224.1.0
v2.224.1.0BETAPATCH
Seymour2 ago 2026
F3.5 PARTE 2: ARRASTRE GIZMO en Aurora (arrastre el monstruo en el lienzo) + RE: Ventana T3 probada + alias decodificados
- Gizmo en noclip (
scenes.ts,?edit=1): haga clic para seleccionar el actor más cercano (selección de proyección:clipFromWorldMatrix+ w-divide), arrastre en el plano de tierra (desproyecte en el plano y del actor, FFX↔noclip conversión mediante matriz inversa), superposición (anillo amarillo + instrucciones), teclas S = guardar (POST/api/edits/<encId>(el punto final del concentrador) con el delta de ranura) y R = restablecer (volver a vainilla). Base vainilla por ranura almacenada ensetUpMonsters(deltas correctos incluso con un archivo auxiliar anterior). - ViewerShell: casilla de verificación "Gizmo 3D (arrastar sin lienzo)" en el panel de edición +
&edit=1/0en la vista previa de batalla URL + estado que muestra el estado del gizmo. - RE (3er pasada): 16B ventana T3 PROBADA en el controlador pppSclMove (0x75C090 =
FieldMap_AccumulateDoubleLayerDelta_C): lee los 4 flotadores ena2+16..+28(el T3record+0x10..+0x1Fventana) y se acumula ena1+160..+172. Alias decodificados: las 418 entradas pppSysProgTbl = 273 nombres únicos + 145 registros re (los "145 alias" del documento MAGIC = controladores repetidos, no nombres alternativos); el extractor ganófind_all_strings(368 cadenas en la región) + el campoisAlias. - Puerta: verificación de tipo sin clip limpia;
rsbuildOK; paquete461.7bf8f17f.jsimplementado en el directorio de servicio (contieneeditUpdate+ POST); Errores de compilación 0 de C#; Pruebas ViewerHub 17/17 PASS. - F3.5 COMPLETO: archivo auxiliar (parte 1) + gizmo (parte 2): el ciclo editar → ver → guardar → reabrir está cerrado. ### REVISIÓN
v2.224.1.0
v2.224.1.2BETAPATCH
Seymour2 ago 2026
F7 RT2 RONDA 2: "NADA SE ABRE" CORREGIDO (el cable estaba robando la confirmación) + Forzar Batalla sin número + borrar etiqueta de trucos + música para desbloquear submenús
- ERROR 4 (crítico: NO SE ABRE EL MENÚ): mi cable PumpHook consumió
g_ourClosedANTES de la bomba original;PollMenununca vio los submenús de confirmación → NUNCA se abrieron. Solución definitiva: el cable fue QUITADO: la bomba original (CloseMenu →DispatchConfirm→NativeMenu_OnEdge→ submenús/reapertura/apagado forzado) vuelve a funcionar intacta. - ERROR 3 (Forzar batalla con número): la fila era RT_STEPPER (0..250) — ahora RT_NONE (sin valor; el submenú FORCE hace el trabajo —
F7_MENU_FORCE). - ERROR 2 (Los trucos de batalla son confusos): renombrado a "Partido Invencible (depuración)": la palanca (0xD2A8F8+1) es la bandera del grupo invencible del juego.
- ERROR 1 (menú sin música): ahora se abre el submenú Música (que el error 4 impidió abrir): el usuario elige la pista en el submenú (
F7_MENU_MUSIC). - Palanca reubicada:
F7_LeverApplyahora es llamado porNativeMenu_OnEdge(casos ACT_AI_SWAP/ACT_BATTLE_CHEATS: acciones directas sin submenú; val deg_ourResult). - Puerta: Errores de versión 0 en la versión; Implementación de Steam +
_isolated(copia de seguridad de200713). RT2: Se abre Arena+, se abren los submenús Música/Fuerza/Dificultad, se aplica el cambio Grupo Invencible. ### PARCHE
v2.224.1.1
v2.224.1.3BETAPATCH
Seymour2 ago 2026
F7 RT2 RONDA 3: PISTA DE MÚSICA 0 = NINGUNA (pantalla de título silenciosa + CRASH entrando a la batalla)
- Error 1 (pantalla de título/introducción sin música):
music_lock: 0enf7_inlive.json(guardado por el submenú Música) —F7_MusicApplyLockaplicó la anulación de la pista 0 (silencio/fuera de contexto) en el arranque. - Error 2 (Alquimia personalizado FALLÓ al ingresar a la batalla):
music_battle: 0—F7_ApplyMusicBattle(aplicación automática de inicio de batalla) hizo queSetArenaBattleMusicPending(0)→ MusicHook aplicara la pista 0 → se bloqueó (registro: FALLA rva 0x4FB05E justo después de redactar). - Solución: la pista 0 se convierte en ninguna en ambas configuraciones (
F7_SetMusicLock/F7_SetMusicBattleTrack:<= 0 → -1) +f7_inlive.jsonlimpia (music_lock/music_battle= -1). - Puerta: Errores de versión 0 en la versión; Implementación de Steam +
_isolated(copia de seguridad de202945). RT2: música en la pantalla de título; El Alquimia personalizado entra en batalla sin fallas. ### PARCHE
v2.224.1.2
v2.224.1.4BETAPATCH
Seymour2 ago 2026
F7 RT2 RONDA 4: comentarios de vista previa + Personalizado Alquimia bloqueo INVESTIGADO (UpdateWindowTitle/DrawUITextElement)
- Error 2 (Vista previa "no hace nada"):
F7_MusicPreviewcon bloqueo-1(ninguno - estado de configuración ACTUAL) devuelto SIN JUGAR (el guardiatrack < 0). Solución: al confirmar la Vista previa con val<= 0se muestra el estado en pantalla "Ajuste a faixa (L/R) antes de la Vista previa"; con un valor válido se reproduce. (El flujo: L/R en "Música Lock" → confirmar en el paso a paso = vista previa — ya existía). - Error 1 (fallo al construir la batalla — PERSISTE): la FALLA (mismo RVA
0x4FB05E) asignada en IDA:FFX_System_UpdateWindowTitle(0x4FAE40) →DrawUITextElement(0x640810,void(ctx, text, x, y, slot)— dibuja el texto GUARDAR en el título de la ventana; calleeFFX_Save_SystemSaveGame) — el bloqueo está en el menú 2D ctx ("NoTexture"/ResolveTextureNameForUI). El contenedor compuesto está bien (24272 B vs 24080 vainilla - 192 B crecen con encabezado ajustado). Aislamiento pendiente (usuario): (a) ¿batalla normal sin componer → falla? (b) componer con 1 eón → falla? (c) ¿componer con el menú CERRADO antes de Iniciar → falla? - Puerta: Errores de versión 0 en la versión; Implementación de Steam +
_isolated(copia de seguridad de205601). ### PARCHE
v2.224.1.3
v2.224.1.5BETAPATCH
Seymour2 ago 2026
F7 RT2 RONDA 5: VISTA PREVIA CRASH CORREGIDA (sonda APAGADA = MMF 0xCD) + "Vista previa" se convierte en "Guardar + Abrir Alquimia personalizado"
- Vista previa CRASH (reproducida por el usuario — "Ingresar en Vista previa = falla AHORA"):
F7_MusicPreviewllamó al soundcmd a través de la sonda (ArenaPlus_MusicHookProbeSoundCmd→LabProbeSoundCmd→ MMFFFXProbeBlock_v1): la sonda está DESACTIVADA en implementación (.RT2OFF); el MMF existe pero los datos son 0xCD patrón (memoria liberada/no inicializada) →AV READ accessed=0x10CDCDCDdentro de los ganchos ffx. Solución: SEH (__try/__except) enF7_MusicPreview(el soundcmd nunca puede volver a bloquear el juego; solo anularlo) + la pista paso a paso confirma ahora GUARDA (no se reproduce). - UX (solicitud del usuario): el submenú Música "Vista previa" se convirtió en "Guardar + Abrir Alquimia personalizado" — Ingresar guarda la configuración (f7_inlive.json) + vuelve a abrir el menú nativo para Arena+ → Alquimia personalizado (el flujo estándar que FUNCIONA). La música permanece almacenada en la configuración (bloqueo/batalla) y se aplica en el contexto correcto (inicio de batalla), sin reproducción de prueba.
- Puerta: Errores de versión 0 en la versión; Implementación de Steam +
_isolated(copia de seguridad de214436). RT2: Ingresar en "Guardar + Abrir Alquimia personalizado" NO falla; configuración guardada; Se abre Alquimia personalizado. ### PARCHE
v2.224.1.4
v2.224.1.6BETAPATCH
Seymour2 ago 2026
i18n: literales sin formato migrados a {x:Estático} (StringsIntegrityTests puerta verde)
- F3.5 deuda de gizmo arreglada: la casilla de verificación "Gizmo 3D (arrastrar en el lienzo)" y la sugerencia ("Haz clic en un monstruo para seleccionar... S = guardar · R = reinicio") usaban literales sin formato en los atributos (
Content=/Text=) — la pruebaNoXamlHasRawHardcodedUiLiteraldetecta atributos. Migrado a{x:Static res:Strings.U_gizmo_3d_drag_on_canvas_1aa7857f}+U_click_monster_to_select_drag_hint_fe907a09(accesorios neutros EN + PT + Strings.cs). - Deuda de otro carril (MonsterAi):
MonsterAiPhaseRotationAdvanced_Window.axamltenía 2 literales sin formato ("Foco ativo" / "Limpar foco") — migró aU_active_focus_d59334a6/U_clear_focus_91699d35(la prueba es el árbitro de todo el proyecto). - Puerta:
StringsIntegrityTests3/3 PASS; construir 0 errores.
v2.224.1.5
v2.224.1.7BETAPATCH
Seymour2 ago 2026
Visualización de auroras: nombres de monstruos en la batalla (etiquetas + artilugio)
export const MONSTER_NAMESenmonster_studio.ts(284 nombres reales: "Petro", "Lasca"...).- scenes.ts: el modo de edición (
?edit=1) ahora dibuja etiquetas sobre TODOS los monstruos de batalla (nombre REAL en blanco; el seleccionado en amarillo) + la superposición del gizmo muestra el nombre del monstruo seleccionado (p. ej. "Flan oscuro (espacio 6)") en lugar de solo "espacio N". - Puerta: verificación de tipo sin clip limpia;
rsbuildOK; paquete461.0fe1690d.jsimplementado (contiene "Petro"/"Lasca"); parche versionado endocs/patches/noclip/(scenes.ts + monster_studio.ts).
v2.224.1.6
v2.224.1.8BETAPATCH
Seymour2 ago 2026
Aurora: la CÁMARA AURORA está de vuelta como la Aurora principal (vista previa de batalla retirada) + i18n PT→EN de los módulos Aurora
- Aurora Cámara REACTIVADA como catálogo "Aurora":
MenuItem_AurorayMenuItem_AuroraChamberahora abiertosAuroraChamber_Control(catálogo BIANCA + MapViewer + Abrir RealGame — la verdadera batalla). Nuevo ayudanteOpenAuroraChamber(). La vista previa de la batalla (noclip) se convierte en código heredado (entrada "aurora" deshabilitada en el catálogo; la descripción ViewerHub/aurora permanece congelada). - ModuleCatalogPolicy: Entrada
aurora-chamberreactivada ("Cámara Aurora");aurora(vista previa de la batalla) marcado 🚫 LEGACY (comentado). Se agregó despachocase "aurora-chamber". - i18n PT→EN de los módulos Aurora: el neutral (Strings.resx) tenía valores PT (el editor EN mostró PT) — fijo a EN: 12 claves existentes (AURORA·Mapas de batalla, Lugar seleccionado, Visualización, Edición, Sesión, Arena abierta en Aurora Cámara, Filtrar por campo..., Campo seleccionado, Exportar mapa/..., Selector de campo, overworld, MapViewer 3D) + 23 teclas nuevas (botones de cámara y explorador de campo: Re-escanear, Montar falta, Volver a montar todo, Abrir EditViewer, Abrir RealGame, Guardar posiciones, Agregar/Quitar monstruo, Exportar anclajes, Restaurar RealGame, Recargar batalla, Re-exportar y abrir, Volver a montar escena, Exportar carpeta, Guardar cámara, Guardar cámara parámetros, Publicar Scout, Actualizar marcadores, Publicar y abrir campo, Validar objeto visual, Abrir campo, Re-exportar, Navegador). EN en neutro + PT en satélite (verificado: ya está en PT) + accesorios Strings.cs.
- Puerta:
StringsIntegrityTests3/3 PASS; construir 0 errores.
v2.224.1.7
v2.224.1.9BETAPATCH
Seymour2 ago 2026
Corrección de error: abre RealGame (404) + mapa de Aurora al revés
- Error 1 — RealGame 404:
Aurora3DLauncher.BuildBattleUrl(utilizado por "Abrir RealGame" de la Cámara) inició un python http.server heredado en la raíz de noclip (Descargas), pero el noclip index.html está endist/, por lo que/index.htmldevolvió 404 ("página no encontrada"). Solución:BuildBattleUrlahora usaViewerHubService.BuildUrl("aurora", ...)(el StudioWebServer en proceso con el directorio de servicio noclip: el index.html correcto). Se eliminóEnsureViewerServer/IsPortListening(python heredado, retirado en F2). El MÓDULO (RealGame con monstruos) sigue funcionando; solo la PÁGINA de vista previa de la batalla es heredada. - Error 2: mapa al revés:
applyAssetOrientationenRuntimeTools/FFXMapViewerWeb/app.jsaplicórotation.x = Math.PI(π girar en X) parabtlmap(la arena de la Cámara Aurora): voltear el mapa. El mapa glTF ya está en Y. Solución:rotation.set(0,0,0)(sin giro) para todos: tierra abajo, cielo arriba. - Puerta: errores de compilación 0;
node --checkOK en app.js; el MapViewer se entrega directamente desde el repositorio (prefijo /mapa/); el app.js fijo ya está disponible).
v2.224.1.8
v2.224.1.10BETAPATCH
Seymour2 ago 2026
Corrección de error: {x:Estático} como contenido del elemento mostraba el literal sin formato (y fallaba al abrir el editor)
- Error: los 25 botones de los módulos Aurora (Cámara + Explorador de campo) que YO migraron a i18n usaban
{x:Static res:Strings.X}como elemento de contenido (<Button>{x:Static}</Button>). Avalonia no resuelve{x:Static}como contenido del elemento: muestra el literal sin formato ("{x:Estático res:Strings.U_...}") y puede fallar en tiempo de ejecución cuando se usa el botón (la razón por la que "el mapa falla al abrir el editor"). - Reparación: convirtió los 25 al atributo
Content="{x:Static res:Strings.X}"(el patrón correcto).{x:Static}solo se resuelve como un atributo (Content=,Text=,Header=,Watermark=,ToolTip.Tip=). - Puerta: errores de compilación 0;
StringsIntegrityTests3/3 PASS;node --checkOK.
v2.224.1.9
v2.224.1.11BETAPATCH
Seymour3 ago 2026
F7: panel de vidrio en submenú (ventana única) + componer CRASH fijo (forzar puerta antes del lanzamiento)
- Error 2 (UX: el usuario solicitó "una nueva ventana"):
F7Sub_DrawCb(dllmain ~11580) obtuvo el panel de vidrio grande (DrawMenuGlassPanel(NX(0.047f), NY(0.20f), NW(0.906f), NH(0.62f), F, 1)): el submenú Sonido ahora es una VENTANA (fondo + título + filas DENTRO), estilo de selección de composición. - Error 1 (accidente de inicio de batalla personalizado de Alquimia - causa raíz):
ArenaPlus_LaunchComboBattleFromPump(el MsBattleEncountExe) se ejecutó con forzar-puerta ENCENDIDO (g_forceSubsystem = 0fue solo DESPUÉS del lanzamiento): el juego entró en batalla con 0x13407E4=1 (modo de menú) → el inicio de batalla falló enUpdateWindowTitle→DrawUITextElement(rva 0x4FB05E — AV ESCRITURA 0xBD). Solución:g_forceSubsystem = 0+ 0x13407E4 puesto a cero DIRECTAMENTE ANTES deArenaPlus_LaunchComboBattleFromPump(Inicio + LaunchCached: el relanzamiento). - Puerta: Errores de versión 0 en la versión; Implementación de Steam +
_isolated(copia de seguridad de095551). RT2 pendiente: Alquimia personalizado → Construir + Lanzar → la batalla entra SIN fallas; Submenú de sonido = ventana única. ### INFRA (CI) ci.ymlejecutó CI en cualquier impulso amainycodexclaudiocodeffxeditor(la rama de trabajo donde los carriles se confirman constantemente): 2 trabajos en ejecutores de Windows ($0.010/min) agotaron la cuota gratuita de 3000 min/mes (Acciones $22.70).- Solución: presionar el gatillo ahora es solo
main(branches: [main]). CI todavía validamain(y PR paramain); la rama de trabajo no recibe ningún CI automático (validar localmente condotnet build). - Ahorro estimado: ~90 % de las acciones ejecutadas (reducir el costo de los minutos recurrentes). ### PARCHE
v2.224.1.10
v2.224.1.12BETAPATCH
Seymour3 ago 2026
LOG: rotación automática por conteo abierto (máximo 10, historial de `.old1..old9`)
OpenLog(dllmain ~173) ahora cuenta las aperturas (archivo%TEMP%\ffx-hooks.log.cnt); cada décima apertura, mueve el registro ACTUAL affx-hooks.log.oldN(acumula el historial de.old1..old9;.old1se sobrescribe después de 9 rotaciones) y reinicia el contador. El registro principal ya no acumula más de ~10 sesiones; el usuario elimina.old*según sea necesario.- Puerta: Errores de versión 0 en la versión; Implementación de Steam +
_isolated(copia de seguridad de102648). ### PARCHE
v2.224.1.11
v2.224.1.13BETAPATCH
Seymour2 ago 2026
Corrección de RealGame (batalla vs campo) + EditViewer siempre se abre + REGISTRO DE DEPURACIÓN regla general (Fases 1-4) + mapa de análisis del editor completo (Fase 5)
- RealGame corrección (la batalla regresa):
BuildBattleUrlpasó el extraQuery CON?aViewerHubService.BuildUrl(que ya agrega?) → URL se convirtió enindex.html??battle=...→ el noclipURLSearchParamsno leyóbattle→ solo el campo (mapa), sin batalla. Ahora el extraQuery está sin?→?battle=<encId>&map=&actors=1→ regresa la batalla con los monstruos. - EditViewer nunca "hace nada" nuevamente: el respaldo
RenderSceneahora abre la escena vacía (cuadrícula + superposición) incluso SIN anclajes cuando falla la exportación de glTF (anclajes previamente requeridos; sin ellos, el procesamiento devolvió un error y el botón no hizo nada). El registro captura el motivo de la exportación. - REGISTRO DE DEPURACIÓN: REGLA GENERAL (
FFXProjectEditor/Diagnostics/DebugLog.cs): asistente centralInfo/Warn/Errorcon[Conditional("DEBUG")](eliminado en la versión: cero gastos generales). Salida: depurador +%LOCALAPPDATA%\FFXProjectEditor\debug.log+work/editor-debug.log. Instrumentado: RealGame (generado URL), EditViewer (renderizado), SelectSceneByMapKey (bika00_10), ExportSceneGeometry (fallas), ViewerHub (BuildUrl/EnsureServer). - Regla permanente: agregada a
AGENTS.md+CLAUDE.md: cada módulo nuevo DEBE tener respuestas de depuración. Documentos:docs/ai/DEBUG_LOGGING_RULES.md(la regla) +docs/ai/DEBUG_LOGGING_MAP_2026-08-02.md(Fase 5: análisis del editor completo: ~51 módulos + infraestructura + límites; dónde/qué tablas de campos de depuración por dominio; prioridad de implementación; UI frente a registro). - Puerta i18n: 5 literales sin procesar de
MagicDllEditor_Control.axaml(flechas + información sobre herramientas Atrás/Adelante: deuda de otro carril) migrados a{x:Static}(la prueba es el árbitro de todo el proyecto). - Puerta: Errores de depuración + versión de versión 0; pruebas 20/20 PASS (StringsIntegrityTests 3/3 + ViewerHub 17/17).
- El gancho captura la salida estándar lab a través de una tubería (CreatePipe + STARTF_USESTDHANDLES: el trabajo de redacción lee el resultado y extrae las líneas ANTERIORES|) y dibuja el panel de puntos en el menú (panel de cristal izquierdo: el diseño que entrará en la batalla).
- Nuevo botón "Crear vista previa (diseño de bolinhas)" en Alquimia personalizado: compone SIN iniciar (el menú permanece abierto - estado "Vista previa pronto — diseño acima. Combate Último Alquimia p/ entrar.") → el usuario ve los puntos ANTES de ingresar → "Combate Último Alquimia" (existente) inicia el contenedor ya compuesto.
- Flujo: elige eones + escenario → Vista previa de compilación → ve el mapa (P derecha / monstruos izquierda / leva h) → Lucha última Alquimia → batalla.
- Errores de compilación 0 de Lab + ganchos ffx (con PolyHook) 1 113 600 B; LabDeploy a Steam (lab REAL + ganchos).
- RT2
Needs Testing: Alquimia personalizado → 4 eones → Vista previa de compilación → revisa el mapa en el panel izquierdo → Lucha contra el último Alquimia → lucha con el diseño mostrado. ## [Inédito] ### MENOR
v2.224.1.12
v2.224.1.14BETAPATCH
Seymour2 ago 2026
DEBUG LOG v2: 3+1 por área banderas + GLOBAL automático/dev/prod + UI Rastreador de eventos + WebView puente de consola + excepción GLOBAL + elemento de menú "Abrir registro de depuración"
- DebugLog v2 (
FFXProjectEditor/Diagnostics/DebugLog.cs): indicador GLOBAL (auto=Depuración→dev/Versión→prod;FFX_DEBUG_MODE=dev|prodfuerzas) + indicadores por área (debug_flags.json:0=OFF,1=ACTIVEregistra mientras se maneja el área,2=ALWAYSregistra cualquier error,3=FORCEDEBUGregistra INCLUSO en la versión). LOGOS SIEMPRE EN INGLÉS (fuera de i18n). Rotación de 5 MB +.old1..old9(alineado con el carril de gancho C++). - UI Evento Trazador:
Main_Windowintercepta TODOS los clics en los botones (AddHandler Button.ClickEvent) y registra automáticamente con el módulo activo (UiTracer); no se necesita registro por clic. - ActiveScope:
SetModuleactiva/desactiva el área del módulo abierto (el bandera 1 lo usa). - WebView puente de consola:
WebView2Hostinyecta un script que redirigeconsole.error/warn/logdel JS alojado (noclip/MapViewer) →WebMessageReceived→DebugLog(WebView.Console) — los errores del visor JS ahora aparecen en el registro. - Excepción GLOBAL:
AppDomain.CurrentDomain.UnhandledException+TaskScheduler.UnobservedTaskException→DebugLog.Error("Global", ...). - Menú: elemento "Abrir registro de depuración" en el menú lateral del selector de idioma (abre debug.log).
- TEST:
DebugLogTests(3/3 — escritura EN, marca de tiempo+área+formato de tipo, excepción con el tipo). - Documentos:
DEBUG_LOGGING_RULES.mdactualizado (modelo de bandera + EN + trazador + el manual mínimo requerido). - Puerta: Errores de depuración + versión de versión 0; pruebas 23/23 PASS (i18n 3/3 + ViewerHub 17/17 + DebugLog 3/3).
v2.224.1.13
v2.224.1.15BETAPATCH
Seymour3 ago 2026
Accidente de batalla personalizado de Alquimia: dibujo y selección de redacción deshabilitado DURANTE la redacción
- Mecanismo (confirmado en IDA): la FALLA (AV ESCRIBIR
accessed=0xBD) aterriza dentro deDrawUITextElement(0x640810, pc 0x6409A5) — elctx(a través deFFX_Menu2D_ResolveCaptureCtxCore) es nulo/dañado —UpdateWindowTitle(0x4FAE40) falla al dibujar el texto guardado. El bloqueo ocurre DURANTE la redacción (el corredor ArenaMultiBossLab), con nuestro menú (selección de redacción) abierto. - Solución:
ComposePick_Draw(el DrawCb de selección de redacción) ahora regresa antes deg_jobState == JOB_RUNNING: nuestro menú NO pone texto en cola en el menú 2D del juego durante la redacción (EncodeLabel/DrawStringcorrompió el grupo de texto/caché: caché-impacto → conjunto[cursor-1] sin verificación enlazada → identificador no válido). El menú se congela durante 1 o 2 segundos (la redacción es rápida) y luego vuelve a la normalidad. - PRIMER COMENTARIO DEL PORQUÉ: esta solución ya se incluye con un comentario del porqué (en inglés) en el código.
- Puerta: Errores de versión 0 en la versión; Implementación de Steam +
_isolated(copia de seguridad de140132). RT2 pendiente: Alquimia personalizado → Compilación + Lanzamiento → el bloqueo de redacción debería desaparecer. ### PARCHE
v2.224.1.14
v2.224.1.16BETAREVISION
Seymour3 ago 2026
REGLA DE COMENTARIOS DEL PORQUÉ para ganchos + primera pasada del PORQUÉ
- Nueva regla (CLAUDE.md): tocar un gancho → dejar el PORQUÉ en el código (en inglés) —
// WHY: ...(el fundamento, no el qué),// FIX <date>: ...(con el por qué),// KEY <date>: ...(RE información). Concentración en los puntos no evidentes (puerta, desplazamiento, orden crítica, colisión conjunto/ctx, decisión de arquitectura): sin spam, sin biblia básica. - Primera pasada del PORQUÉ: dllmain (flujo de confirmación del menú nativo: por qué se eliminó el cable; lanzamiento de redacción: puerta forzada antes de MsBattleEncountExe) + ArenaPlusComposePick (ComposePick_Draw deshabilitado durante la redacción: el bloqueo del grupo 2D).
- Puerta: Errores de versión 0 (los comentarios no cambian el comportamiento); sin implementación (REVISIÓN: documentación/comentario de código). ### PARCHE
v2.224.1.15
v2.224.1.18BETAPATCH
Lulu3 ago 2026
Editor Magia DLL: esquema `pppVertexApAt` descompuesto (4 campos reales) + limpieza de `pppMatrixLoc` (solo host) + DebugLog en el carril `Magic.Parse`/`Magic.Writer`
- Descomposición (IDA descompila 0x7583D0):
pppVertexApAtahora tiene 4 campos editables (model_indexu16@+4,vertex_countu8@+6,delay_framesu8@+7,order_modeu8@+8; ventana{4,5},editable=true). Aplicado afield_map.json+MagicFieldMapEmbeddedData.cs. - Limpieza honesta:
pppMatrixLoc(descompilar 0x734200) funciona solo en el estado del host (cero lecturas dea2/registro): los 3 camposparam_s32_64/68/72fueron compensaciones inventadas → eliminadas,payload_consumer=false,SEM_PAYLOAD(correcto). - No aplicado (hallazgo RE):
pppKeThRes32/48—a2+12es un puntero de recursos (constructor de cadena), no una perilla numérica; editar como u32 dañaría el puntero. Documentado. - DebugLog v2:
TryLoad(Magic.Parse) +TryGrowRecord(Magic.Writer) instrumentado conDebugLog.Info/Warn/Error(inglés, monolingüe). - Puerta: Errores de versión 0 en la versión; MagicDll pruebas 76/76 + StringsIntegrity 3/3 (79/79).
- El bloqueo (reproducido SIN componer): abra F7 + explorar el menú (después de una vista previa/batalla) → FALLO AV ESCRITURA
pc=0x2409A5accessed=0xBD(el MISMO que componer) —UpdateWindowTitle(0x4FAE40) se bloquea enDrawUITextElementcon el grupo de menú 2D/ctx dañado por nuestro menú (dibujando MUCHOS textos en cada fotograma: caché-impacto → conjunto[cursor-1] sin límite de verificación). - Solución (definitiva): gancho en
FFX_System_UpdateWindowTitle(0x4FAE40): con nuestro menú nativo activo (F7/submenu/componer seleccionar), el gancho devuelve 0: el juego NO dibuja el texto del título (cosmético) y no toca el grupo corrupto → no falla. El título continúa actualizándose cuando se cierra el menú. - Puerta: Errores de versión 0 en la versión; Implementación de Steam +
_isolated(copia de seguridad de144123). RT2: F7 abierto + abandonando la batalla → sin bloqueo. ### REVISIÓN
v2.224.1.17
v2.224.1.19BETAPATCH
Seymour3 ago 2026
EDICIÓN DE POSICIÓN EN VIVO (Parte 1): ventana "mapa de puntos" en el gancho (monstruos + jugadores)
- La ventana: en la selección de redacción (Alquimia personalizado), con la Vista previa de compilación realizada, presione E → ingresa al modo de edición de cuadrícula (el mapa de puntos de 16×8: cada bicho = un
P, el activo =X). - Interacción: las flechas mueven el cursor (el
Pdel bicho activo); TAB cambia bicho; ENTRAR guardamodules\arena_positions.json(la grilla de cada bicho gx/gy); Anular atrás. SavePositions/ResolvePositionsPath: el JSON en módulos (la cuadrícula de 16×8; el corredor de redacción lo leerá más tarde y aplicará el C#BattleArenaPositionWriteral contenedor, el enlace de la siguiente parte).- POR QUÉ (en código): el juego lee las posiciones de bicho de los anclajes del bloque 3 (
pos = bin + chunk3 + 16×a5): guardar la cuadrícula editada permite componer y aplicar la ubicación personalizada. - Puerta: Errores de versión 0 en la versión; Implementación de Steam +
_isolated(copia de seguridad de153130). RT2: E en selección de redacción (con vista previa) → se abre la ventana de puntos; mover + ENTRAR guarda el JSON. ### PARCHE
v2.224.1.18
v2.224.1.20BETAPATCH
Lulu3 ago 2026
Editor Magia DLL: ruta de navegación (atrás/adelante) movida fuera de la carpeta/campo dividido; ahora también aparece cuando llega a una hoja (elemento/campo)
- Antes: el botón Atrás solo aparecía en la vista de carpetas (
IsContainer); al llegar a un campo/hoja, desaparecía y no se podía regresar. - Ahora: la ruta de navegación (⬅ atrás · ➡ adelante · ruta) se muestra siempre cuando hay una selección (carpeta OU hoja), permitiendo la navegación hacia atrás/adelante desde cualquier elemento.
- Puerta: Errores de versión 0 en la versión; StringsIntegrityTests 3/3.
- Una ventana: en la selección de redacción (el Alquimia personalizado), con la Vista previa de compilación realizada, presione E → ingresa al modo de edición de cuadrícula (el mapa de puntos de 16×8: cada entidad = un
P, el activo =X). - Interacción: las flechas mueven el cursor (el
Pde la entidad activa); TAB alterna la entidad; ENTRAR guarda elmodules\arena_positions.json(la cuadrícula gx/gy de cada entidad); Anular vuelve atrás. SavePositions/ResolvePositionsPath: el JSON en módulos (la cuadrícula de 16×8; el corredor de redacción leerá más tarde y aplicará elBattleArenaPositionWriterC# en el contenedor; el enlace para la siguiente parte).- POR QUÉ (en código): el juego lee las posiciones de las entidades de los anclajes chunk3 del contenedor (
pos = bin + chunk3 + 16×a5). Guardar la cuadrícula editada permite que la redacción aplique el posicionamiento personalizado. - Puerta: Errores de versión 0 en la versión; implementar Steam +
_isolated(copia de seguridad153130). RT2: E en la selección de redacción (con vista previa) → se abre la ventana de puntos; mover + ENTRAR guarda el JSON. ### PARCHE
v2.224.1.19
v2.224.1.21BETAPATCH
Seymour3 ago 2026
ENLACE de edición de posición en vivo: el corredor de composición aplica la cuadrícula personalizada al contenedor
BattleComposeRunner(Parte 2 del posicionamiento en vivo): nuevoReadCustomPositionsJson(modRoot)(lee elarena_positions.jsonguardado en el gancho) +ApplyCustomPositions(...)(convierte la cuadrícula de 16×8 → X/Z REAL — X ±28, Z 30→46 — y se aplica a través deBattleArenaPositionWriter.WritePositions, preservando Y/W).- En redacción: si
arena_positions.jsonexiste, el corredor usa la cuadrícula personalizada (primeroactorCount= monstruos en MonsterLive; el resto = fiesta en PartyFront) en lugar del diseño automático de la cámara. Registro:[custom-positions] grid do hook aplicado em .... - Flujo completo (Parte 1 + 2): selección de redacción → Vista previa de compilación → E → mueve las
Ps (flechas/TAB) → ENTRAR guarda el JSON → Iniciar → componer aplica la cuadrícula personalizada al contenedor → la batalla comienza con la ubicación editada. - Puerta: lab (C#) errores de compilación 0; implementó
ArenaMultiBossLab.dllen el juego (copia de seguridad180311). RT2: edita la posición en el gancho → Iniciar → la batalla con la ubicación personalizada. ### PARCHE
v2.224.1.20
v2.224.1.26BETAPATCH
Lulu3 ago 2026
Magia DLL Editor: Fase 1 (clon) + Fase 2 (anulación mágica sin clip) + Fase 3 (vista previa 3D bloqueada integrada)
- Fase 1 — Botón Clonar: nuevo
CloneMagicCommand+TryCloneMagic(copia los bytes de trabajo con las ediciones a un nuevomagic_<id>.dll; copia de seguridad .bak; id validado). Botón "Clonar" en la barra de herramientas. - Fase 2 —
MagicOverrideService: sobrescribedata/FinalFantasyX/11/<id>.binen noclip con la copia de seguridad personalizada DLL (copia de seguridad básica.magic3d.bak; restaurar). noclip ya genera magia a través deBIN.parseMagicFile; no se necesita RE profundo. - Fase 3 — Vista previa 3D integrada: El botón "Vista previa" abre el WebView2Host (mini navegador) integrado en el editor, bloqueado para la magia que se está editando (anulación de
11/<id>.bin+ magia-estudio URL). Botón Cerrar (✕). - Puerta: Errores de versión 0 en la versión; MagicDll 76/76 + StringsIntegrity 3/3.
- Fase A — humanización del tipo REAL: el campo
DetailTextahora muestra SÓLO la descripción humana (sin[u16], desplazamiento, ancho): el tipo sin formato que viste desapareció. Aviso de solo lectura también en la vista de carpetas (las ranuras no editables como pppDrawMatrix muestran "Solo lectura" + motivo). - Fase B — investigación masiva de IDA (23 controladores descompilados): reclasificado 3 SEM_PAYLOAD → FECHADO con campos reales:
pppKeLnsLpSft(110 DLL, 2 flotadores de desplazamiento de lente),pppDrawHook(10 DLL, devolución de llamada),pppKeAcmCic(modo). Confirmado que el resto (KeShpTail*, KeDMat*, Matriz*, DrawMatrixWood) son solo host/stubs (sin descomposición), documentados. - Fase C — catálogo ampliado: +19 descripciones humanas (total ~94 códigos de operación) que cubren el nuevo FECHADO + host-solo SEM_PAYLOAD.
- Puerta: Errores de versión 0 en la versión; MagicDll 76/76 + StringsIntegrity 3/3 (79/79).
- Vista de campo rediseñada: un campo ahora muestra nombre + descripción humana + tipo legible (p. ej. "decimal (flotante)") + valor editable en una tarjeta. Desplazamiento y tipo sin formato (
u16) ocultos: el reproductor no los toca. - Borrar solo lectura: los campos no editables muestran un aviso de "Solo lectura" resaltado + el motivo (p. ej. "datos sin procesar; el editor no puede descomponerlos todavía").
- Catálogo de descripción humana (
MagicPppDescriptionCatalog.cs): ~60 códigos de operación ppp con lo que hacen en el lenguaje del reproductor (basado en la descompilación IDA + documentos RE). Se muestra en el DetailText de la tragamonedas. - Información sobre herramientas de tamaño de crecimiento: explica que 4B/8B/12B/16B = bytes adicionales de espacio (valores 1/2/3/4).
- Puerta: Errores de versión 0 en la versión; StringsIntegrity 3/3 + MagicDll 76/76 (79/79).
v2.224.1.25
v2.224.1.28BETAREVISION
Lulu4 ago 2026
Magia DLL: ¿Fase 4? RE profundo de la vista previa 3D (diseño sin clip asignado en la fuente)
- Nuevo documento:
docs/reverse/magic_dlls/NOCLIP_PREVIEW_LAYOUT_MAPPING_2026-08-03.md? asigna elparseMagicFile? ¿sniffMagic? RutaparseParticleDatade noclip.website (fuente REAL). - Veredicto: ediciones de campo confinadas a la ventana = SEGURO para vista previa (noclip re: lee los mismos desplazamientos; pasos fijos 0x28/0x10 sin cambios); crecimiento estructural en medio de un registro sin clip avanza = ROMPE vista previa; crecimiento seguro = extensión de lista basada en conteo en la cola + aumento de conteo.
- Advertencia de clonación: noclip solo representa los identificadores presentes en su
magicTable; id ¿fuera de la mesa?sniffMagicnulo? emisores vacíos (limitación sin clip, no anulación). - ¿Solo Doc/RE (REVISIÓN)? NINGÚN cambio de comportamiento. — MÚSICA CUSTOMMIX RESUELTA: pista 145 "Desafío" reproduciéndose en la batalla.** Carril Jarvis-HOOK. [anterior:
v2.224.1.26] - La victoria: después de 4 rutas fallidas (
SetArenaBattleMusicPending→ solo interceptores Arena+;PrepBattleTrack→ capa de motor, no FMOD;PlayTrackWithPreload→ establecerevent_indexpero no completótracks_array[].event_ptr),SwitchCrossfade(self, 145, 0, 1)lo desbloqueó - a través de IDA MCP enffxoficial.exe.i64(FFX.exe pid=49476). - Descubrimiento de claves (RE, confirmación
d4fdbc6c): el árbol de audio FFX tiene 3 capas:PlayTrackByIndex(0x7097E0) salta silenciosamente si estracks_array[track].event_ptr == 0;PlayTrackWithPreload(0x886980) solo configuraevent_indexen la subestructura del motor;SwitchCrossfade(0x7089F0, ruta B) es el ÚNICO que completaevent_ptra través deReadEventByRuntimeId→MapRuntimeIdToFevIndex(tabla0xB4F1C8) →EventSystem->GetEvent. - Se deben reproducir los controles que demuestran 145:
dword_B4F1C8[145] = 0x48(índice FEV 72, válido ≤181);unk_CEC164 = 0(la puerta de carga no se bloquea);IsValidTrackIndex(145) = true(145 ≤ 0xB5). - Corrección en
MusicHook_Shim: al anular, llame aSwitchCrossfade(overrideTrack, 0, 1)(desvanecer=0, load_flag=1) en lugar dePlayTrackWithPreload; prefiera el trampolíng_trampolineSwitch(salta la cuña, evita la recursividad). - RT2 confirmado por el usuario: "¡AHORA FUNCIONA LA PISTA 145! ¡ESTOY EN BATALLA CON LA MÚSICA NUEVA!" — El desafío se juega en CustomMix.
- Puerta: Errores de versión 0 en la versión; implementar Steam +
_isolated; se empujó el compromisod4fdbc6c.
v2.224.1.27
v2.224.1.30BETAPATCH
Seymour5 ago 2026
CustomMix Dinero: el costo de batalla NUNCA se cobra (error de condición de carrera) + la redacción nunca sobrescribe los contenedores de vainilla
- CustomMix Dinero:
ArenaPlusComposePick_Close()puso a cerog_pendingLaunchGilCostANTES de queLaunchComboBattleFromPumppudiera leerlo: Dinero se validó en el menú pero nunca se cargó (x3/x4/x5, desde que se implementó la redacción). La suma era correcta (p. ej. 325000G para Trio) perogilCost=0en el registro. Solución: se movió el cero deClose()aOpen()(restablecimiento de sesión abierta, no al cerrar). - Componer contenedores básicos sobrescritos (d5e56701): 5 escenarios de mapas cruzados (macalania_forest x3, remiem x3/x4/x5, bikanel x4) implementados en el contenedor de plantillas (
mcfr00_00,kino00_00,bika02_01) en lugar del operador dedicado (mcyt00_22,nagi05_23,nagi05_22): el motor cargó encuentros aleatorios en lugar del equipo compuesto. C#:ResolveOutputBattleIddevuelvecarrier.BattleId. C++: el pin de gancho usaroute.battleId(portador) para el nombre del encuentro. Contenedores de vainilla intactos. - Implementación: GANCHO DLL reconstruido + implementación de Steam. Puerta:
arena_plus_charge_gil.flag(activa). - ¿Fase 3? ID incrustado RE: comparando magic_0140 con magic_0141 (mismo tamaño, 22 diferencias), encontré que el ID hace NO existe como u32 LE en .datos? solo como 3 cadenas UTF-16LE ("magic_0140" / "magic_0140.dll") en compensaciones 0x07E3C6, 0x07E4B2, 0x07E4F2.
- ¿Fase 3?
MagicDllNameRewriter: reescribe las 3 cadenas con la nueva identificación enTryCloneMagic(4 dígitos cero-padded = misma longitud = sin desplazamiento). Validado contra el DLL REAL: 3 apariciones reescritas, tamaño delta = 0 (RT0 byte-faithful fuera de las cadenas). - ¿Fase 4?
MagicCommandAssociation: asocia una fila command.bin al clon configurandoAnim1Id = newId(cadena probada: command.Anim1Id ? magic_%04d.dll). EDITAR campo (no crecer) a través deAbility_Command.WriteList(conserva el grupo de texto). Limitación honesta: reemplaza el efecto visual de la habilidad original; una habilidad NUEVA (conservando la original) requeriría crecer (referencia:CommandGrowWriter.AppendElementWards). - Implementar: LAB integrado en
FFX\Mods\FFXProjectEditor-v2.224.1.29\. offline_ci: 8 fallos (¿todos los PhaseManager/batalla preexistente? NINGUNO de Magia/PPP).
v2.224.1.29
v2.224.1.31BETAPATCH
Seymour6 ago 2026
F7 Maratón: 6 errores + CustomMix Ultra + controlador
- 6 errores corregidos: pantalla negra al salir de F7 (0x13407E4 borrado en todos los caminos cercanos), música de desafío que se filtra en CADA batalla (F7_ApplyMusicBattle predeterminado=145 eliminado), FSM de doble entrada frente al menú (ClaimModal/ReleaseModal en los submenús de F7), retención de entrada de spam confirmar/cancelar (enfriamiento también al cancelar), elementos incorrectos Verdadero Pesadilla (ahora HP 3x, estadísticas ~2x, Prisa+Revitalia+Coraza+Escudo, sin Débil/Resistencia/Absorción), Forzar Batalla capturó Eones oscuros/Combinaciones (F7_SetSkipForceCapture) filtro).
- CustomMix Ultra Fase 1+2: Motor de composición C# (RunUltra — 1-8 monstruos, automático-diseño, desplegar) + Menú F7 integrado (Arena+ → CustomMix Ultra → COMPILACIÓN+Launch). Transportista zzzz00_240, token 0x00F000F0. 13 registros de depuración.
- Controlador en ComposePick: L2=editar cuadrícula, R2=cámara, R1=siguiente, L1=anterior mediante detección de bordes PadDir + respaldo del teclado. Etiquetas duales de PS+Xbox (L2-LT, R2-RT, L1-LB, R1-RB).
- Implementar: GANCHO DLL + Lab C# implementado en Steam. Planes: Monstruo AI Intercambio, Ultra Fases 3-4.
v2.224.1.30