Actualización 2.207
2/8/2026
v2.207.0.0BETAMINOR
Seymour1 ago 2026
F5-L4: panel de script ATEL de alto nivel en el editor Monster AI (ejecución en seco con diferenciación)
MonsterAiEditor_DataModel.AtelScriptLab.cs(nuevo parcial): observableAtelScriptText/AtelScriptResult/AtelScriptDiffSummary/AtelScriptDiffLines+CompileAtelDryRun(): analiza/compila el script contra el monstruo SELECCIONADO (AiAutomation.PickCombatWorker/PickMainEntrypoint) y muestra la diferencia (AiScript_Diff.Compare, agregado/modificado/eliminado). Ejecución en seco: no se guarda nada (el guardado permanece en los canales existentes del editor). Errores procesables (sintaxis/emisión).MonsterAiAtelScriptLab_Window.axaml+.cs(nuevo): ventana con editor de scripts (Consolas), botón "Compilar (ejecución en seco)", resumen + diff ListBox. Se agregó el botón "Script ATEL (F5)" a la barra de herramientasMonsterAiEditor_Control.- Línea base: 332/332 PASS (329 + 3 de otro carril). ### MENOR ### MENOR
v2.206.0.0
v2.207.0.1BETAREVISION
Seymour1 ago 2026
F6: validación cruzada de estructuras de batalla/guardado (fahrenheit PS2 × nuestras compensaciones HD)
docs/reverse/PPP_FAHRENHEIT_STRUCTS_CROSSREF_F6_2026-08-01.md: inventario fahrenheit (PS2 ChrRam 0x1EC con estadísticas @0x68–0x77 y equipa @0x52/0x53; CtbEntry 4B + CtbBaseData tick_speed; save_impl/ply_save) frente al nuestro (HD MemoryChr con punteros de script +0xF78.., FfxSaveSphereGrid con protección de límites, cola HD CTB descompilada). Veredicto honesto: PS2 ≠ HD (el HD MemoryChr incluye el script/capa VM; PS2 ejecuta MIPS) — Las estadísticas de PS2 son candidatas de validación campo por campo frente al agregador HD (0x7B2DD0); CtbBaseData es una referencia semántica para la cola CTB; nada promocionado sin prueba HD. Sólo lectura: línea base 332/332 intacta. ### REVISIÓN ### MENOR
v2.207.0.0
v2.207.0.2BETAREVISION
Seymour1 ago 2026
F7: validación cruzada de los códecs ATEL (fahrenheit ↔ nuestro) — 3/3 validados
docs/reverse/PPP_FAHRENHEIT_CODEC_CROSSVALIDATION_F7_2026-08-01.md: F7-A nuestra sintaxis → su analizador (var x = 0;aceptado; su error EOF de lexer documentado: falla en la nueva línea final, lexer.cs:74); F7-B nuestro AiFile generado (324 instrucciones a través de AtelLangLab) → camina con su regla de recuperación (bit 0x80 = operando): cerrado exactamente, 0 códigos de operación fuera de su enumeración AtelOp; F7-C nuestro KnownOpcode (49) ⊆ su enumeración (123): Falta 0. Límites: su compilador NO emite bytes (AtelAssembler nunca se llama); la validación cubre dialecto/búsqueda/tabla, no el diseño completo del trabajador. Conclusión: ambos códecs hablan el mismo dialecto: nuestra semántica fija (v2.198.4.1) es la verdad ejecutable. Sólo lectura: línea base 332/332 intacta. ### REVISIÓN ### REVISIÓN
v2.207.0.1
v2.207.0.2BETAREVISION
Seymour1 ago 2026
Operación Demonio sesión 2: inventario completo del nuevo F8 (InGameMenu de FfxHooksDll)
docs/reverse/F8_UNX_INCONSISTENCY_REGISTER_2026-08-01.md(+45 líneas): el nuevo F8 = centralita de complementos de nuestro ecosistema (reimplementación de UnX sobre nuestra capa de gancho). Arquitectura asignada en dllmain.cpp: configuración de puertaingame_menu.flag/FFXHOOKS_ENABLE_INGAME_MENU/Aurora; infra = superposición AuroraD3D11 (presente vtable[8]); entrada = GetAsyncKeyState (encuesta en Presente) + subclase WndProc (WM_KEYDOWN/SYSKEYDOWN, rebote de 90/150 ms) - sin DirectInput, cero conflicto con la sonda (en contraste con el UnX heredado que fallaba en GetDeviceState); filas 0-2 = etiquetas de Aurora/detalle/actualización, 3+ = complementos (en ejecución/disco encendido/disco apagado/ausente); alternancia de complemento SÓLO LECTURA (puesta en escena a través del editor; descarga en vivo bloqueado); Actualización de 1,5 s; dibujo GDI puro en memDC.- Veredicto: el nuevo F8 NO escribe en la memoria del juego (cero escrituras - no hay Btl.battle_trigger/HP/.texto parche del UnX heredado) - las clases de compensación/ABI/guardar-corrupción no se aplican. Riesgos R-ING-01..05 (bajo): GetAsyncKeyState por cuadro en presente; Subclase WndProc frente a superposiciones de terceros (DiscordHook/SpecialK); F8/INSERT siempre consumido; 1,5 s de actualización de E/S; R-ING-05 (RT2 pendiente): Presente vtable[8] = mismo destino que UnX SK_BeginBufferSwap - coexistencia no probada. Puerta de bloqueo suave conocida ya documentada en el código: field_scout* x native_menu = titl00. sin cambios de comportamiento: la línea de base no se modifica.
v2.207.0.1
v2.207.0.3BETAREVISION
Seymour1 ago 2026
REGLA DE ORO IDA: tablas de destino de llamada ATEL verificadas en la base de datos canónica + comentarios de referencia cruzada + corrección de documento F2
- Verificación (sin nombre sin prueba): las direcciones fahrenheit (0x850050 Common, 0x842618 Batalla...) pertenecen al binario PS2 — la búsqueda en la base de datos canónica mostró nombres vacíos + dwords sin puntero → NO renombrado en HD. Las tablas HD reales ya tienen nombre:
AtelCallTargetsCommon@0xC50050,AtelCallTargetsBattle@0xC42618,AtelCallTargets@0x1328518(la denominación en Fahrenheit ya se aplica en otro carril: valida la nomenclatura, no las direcciones). - Comentarios de referencia cruzada aplicados en las 3 tablas HD (16B struct +0 init/+4 exec/+8 ret_float/+0xC ret_int; PS2 referencias con recuentos) — REGLA DE ORO cumplida.
docs/reverse/PPP_FAHRENHEIT_ATEL_IMPORT_2026-08-01.mdcorregido con la nota de verificación (direcciones PS2 = referencia del otro binario, no destinos de cambio de nombre HD). Línea de base 332/332 intacta. ### REVISIÓN ### REVISIÓN
v2.207.0.2
v2.207.0.4BETAREVISION
Seymour1 ago 2026
F6.1: verificación de estadísticas campo por campo PS2×HD en el agregador (0x7B2DD0) + comentario IDA
- Descompilación de
FFX_Battle_PoolActorByTargetType_structural(0x7B2DD0) — LECTURA/ESCRITURA del despachador con 346 casos de propiedad de actor. Casos 0x0A–0x13 acumulan 8 bytes enpad_0764[331..337/348](HDFFXBattleActorRecordregión +0x79B..) = bloque candidato de 8 estadísticas (fuerza/defensa/magia/magic_defense/agilidad/suerte/evasión/precisión). - Confirmado: Las compensaciones de PS2 (ChrRam +0x68..0x77) NO coinciden con HD (el registro HD es mucho más grande; el despachador indexa por CASE ID, no por compensación).
- REGLA DE ORO: comentario de referencia cruzada aplicado en el caso 0x0A (0x7B2F9D) en la base de datos canónica.
PPP_FAHRENHEIT_STRUCTS_CROSSREF_F6actualizado (§4b). PENDIENTE: fije el orden de 8 estadísticas (nombres de casos: trabajo futuro). Línea de base 332/332 intacta. ### REVISIÓN ### REVISIÓN
v2.207.0.3
v2.207.0.5BETAREVISION
Seymour1 ago 2026
F6.2: Mapa de caso COMPLETO del despachador 0x7B2DD0 + corrección de F6.1
- Corrección de la entrega anterior: el bloque candidato REAL de 8 estadísticas es 338..345 (casos 0x12C–0x135, 8 bytes contiguos) — no "331..337/348" (7B + 1B de otro bloque).
- Semántica de función REAL: PROMEDIO de la propiedad por tipo de objetivo (
total /= counteral final), no suma de estadísticas sin procesar. - Caso completo→mapa desplazado documentado (14 bloques: 331..337, 338..345, 346–351, 380–383, 426–434, 436–438, 483–508, 606–643, 674, 698/699, 82–93, 158–176, 326...) en el documento F6 §4b.
- REGLA DE ORO: Comentarios IDA aplicados (función 0x7B2DD0 + caso 0x0A 0x7B2F9D). ⚠️ MCP 13337 ocupado/guardando después de
set_func_cmt— verificar después de guardar; Vuelva a aplicarwork/_ida_set_comments.pysi es necesario. - Línea de base 332/332 intacta. ### REVISIÓN ### REVISIÓN
v2.207.0.4
v2.207.0.6BETAREVISION
Seymour1 ago 2026
Plan de conciliación F7/F8 (traspaso al carril Jarvis-HOOK)
docs/reverse/F7F8_RECONCILIATION_PLAN_2026-08-01.md(nuevo, ~250 líneas): consolidación final de los hallazgos de la Operación Demonio para el carril de los ganchos. P1 (probado): el nuevo F8 (panel de control, 56 filas, UnX/ProjectX) se eliminó de dllmain en la confirmación53d82b2a(27/07) y la compilación activa de las 09:05 no tiene panel de control; F8 volvió al panel de control InGameMenu (heredado); fuente recuperable (compilaciones blobsc66aa478/a14f8732/76887427/d9516135+RT2OFF/pre_magic_ppp_trace+ .obj). P2-P8: Contención de claves F7 (NativeMenu x LabMenu) y F8 (panel de control x InGameMenu), puertas duplicadas (ingame_menu_v2.flag), puerta field_scout x native_menu para verificar, ffx-hooks.ini falta en el directorio del juego, presente orden de desvío de vtable[8]. Mapa de recuperación de 6 pasos (git mostrar + 11 bloques de diferencias + vcxproj + config + lab compilación + puertas), arquitectura de destino con propietario de clave única (F7=NativeMenu RAM intacto; F8=tablero; InGameMenu=recurso alternativo), paridad UnX clasificada (puerto trucos/salto de diálogo/idioma mediante ganchos limpios; NUNCA parches .texto codificados 0x392930/0x30B040/Btl.battle_trigger/Morfeo-5s), 4 ondas con puertas (RT2 en _aislado, línea de base 283/283). sin cambios de comportamiento: la línea de base no se modifica.
v2.207.0.5
v2.207.0.7BETAREVISION
Seymour1 ago 2026
Conocimiento de la cuadrícula de esfera externa verificado (fahrenheit-crew Discord + FFXRando) + 2 pruebas de regresión de anclaje
docs/reverse/SPHERE_GRID_EXTERNAL_KNOWLEDGE_2026-08-01.md(nuevo): Hilo de Discord (Titan/Dragoon/peppy) verificado con nuestro RE: (1) Ancla idx = el nodo de control de la curva del enlace (nuestroAnchorNode;Validate()captura OOB;RemoveNodecorrige los anclajes: el enlace anclado en el nodo eliminado se vuelve recto 0xFFFF); (2) LOCK 3 = contenido 0x00 es el valor predeterminado del juego cuando no puede encontrar el nodo (sgelems.cs L215); nuestro flujo nunca lo emite (EmptyContent=0xFF + selector validado); (3) coherencia de encabezado↔estructuras (Dragoon) = lo que nuestro WriteLayout/Validate ya garantiza; (4) los límites son por cuadrícula ("por cuadrícula") = confirma nuestro RE (LpAbilityMapEngine estático 1024/1024/128 por cuadrícula); (5) FFXRando (nyterage/FFXRando, MIT, C++):SphereGridRandomizer.cppbaraja CONTENIDO únicamente (topología/recuentos preservados; NODE_NULL=omitir): valida la directiva Seguro Trasplantar (edición de contenido = seguro; nueva topología = riesgo, controlada por DeployPolicy).- 2 pruebas nuevas en
SphereGridAddNodeReproTests.cs(4/4 PASS en el área):RemoveNode_WithAnchorLinks_KeepsGraphValid(estándar vainilla tiene 411 enlaces curvos; quitar el nodo de anclaje mantiene la cuadrícula válida, no hay anclajes huérfanos, ida y vuelta OK) +Validate_CatchesOutOfRangeAnchor. No hay cambios en el comportamiento del producto. ### REVISIÓN
v2.207.0.6
v2.207.0.8BETAREVISION
Seymour1 ago 2026
Auditoría de escritura del editor Sphere Grid formalizada ("el secreto para no explotar")
docs/reverse/SPHERE_GRID_EDITOR_WRITE_AUDIT_2026-08-01.md(nuevo): SÍ, respuesta a "¿nuestro editor hace exactamente lo seguro?" — operación→mapa de bytes (arrastrar = pos + Unknown6 recalculado; contenido = 1 byte en dat1X + RedundantContent; clúster; agregar/eliminar nodo/enlace con reindexación completa; redireccionamiento de enlace) y los 7 invariantes aplicados porValidate()antes de CUALQUIER escritura: (1) recuentos de encabezado == tamaños de tabla reales; (2) Unknown6 == depósito espacial; (3) RedundantContent == contenido; (4) grupo <clusterCount; (5) Node1/Node2 < nodeCount; (6) AnchorNode 0xFFFF o < nodeCount; (7) contenido dentro del rango (0xFF=vacío). Ruta de escritura única: UI → constructor → COMPILACIÓN() (se lanza si no es válido) → WriteLayout → proyecto; No hay nada escrito sin validar. Trasplante seguro = byte local (recuentos conservados) = zona segura comprobada; nueva topología = cerrada por DeployPolicy hasta el RT2 limpio. Riesgos residuales: SphereGridAdapter escribe sphere.bin (archivo diferente), PanelGrowWriter extiende panel.bin. Ningún cambio de comportamiento. ### REVISIÓN
v2.207.0.7
v2.207.1.0BETAPATCH
Seymour2 ago 2026
F7 En vivo v2: DIFF de varias columnas (preajustes + BASE + AUTO + DÉBIL + RESIST + ABSORB selección múltiple), entrada numérica, HP hasta 10x, Música con vista previa/nombres reales/Guardar/Restablecer, pantalla negra arreglar, LabMenu → F6
- DIFF rediseñado (varias columnas): los ajustes preestablecidos se convirtieron en chips destacados en la parte superior (Desactivado/Hunter/Sombra de Sinh/Verdadero Pesadilla); columnas de lado a lado ESTADO BASE (HP..LCK - 9 estadísticas, ACC/EVA/LCK ahora también editables) / ESTADO AUTOMÁTICO (25 estados, casillas de verificación de selección múltiple) / DÉBIL / RESISTIR / ABSORBIR (5 elementos cada uno, selección múltiple); columna ACCIONES (Solicitar ahora/Guardar/Volver); L/R navega por columnas y filas U/D; Rango de HP de hasta 10x (100..10000) y estadísticas de hasta 5x (100..5000).
- Entrada numérica: Confirmar en una estadística BASE abre el modo de edición: escriba 0-9, Retroceso, Confirmar se aplica (fijado), Esc cancela (se vuelve "personalizado").
- Música: nuevas filas Vista previa (reproduce la pista Música Lock mediante anulación probada por lab+SOUNDCMD), Guardar (persiste en f7_inlive.json) y Restablecer (volver a los valores predeterminados: sin bloqueo/batalla/aleatorización/desvanecimiento); al confirmar en "Música Lock"/"Batalla Entrada" también se obtiene una vista previa; nombres reales para las 181 pistas (F7TrackName ahora delega en el paso de peatones
LabMusicRuntimeName: "Batalla Tema", "Electro Plano", "Crisis"...). - Solución de pantalla negra: el submenú→retorno del concentrador ahora usa la ruta de la bomba (
g_nativeWantSpawn) en lugar deSpawnMenu()directo;F7_DifficultyApplyNowobtuvo la validación de la lista de enemigos (verificación de rango) +__try/__except: nunca apaga la bomba en un contexto no válido (registros SEM-LISTA/LISTA-INVALIDA/EXCECAO). - El LabMenu heredado se trasladó a F6 (era F7/F8 dependiendo de InGameMenu): F7 ahora es exclusivo de FFX Editor En-EN VIVO; F8 es el InGameMenu (centralita enchufable).
- Nuevas API F7InLive:
F7_MusicPreview(track),F7_ResetMusic(),F7_StatusName(i)+ captadorGetArenaBattleMusicSoundCmdFn()en MusicHook. - Construir
-WithPolyHook -ReleasePASS; LabDeploy a Steam; RT2Needs Testing(columnas DIFF, edición numérica, vista previa audible, Aplicar en batalla). ### REVISIÓN
v2.207.0.8
v2.207.2.0BETAPATCH
Seymour1 ago 2026
editor de Sphere Grid: se eliminó lo que no tiene sentido con las nuevas certezas (código v5 muerto) + traspaso congelado para el carril Jarvis-HOOK
- Eliminado del editor:
SaveSquareToProject()(código inactivo: perdió su única persona que llama en la limpieza de SUPERMD;SaveToProjectcon la línea base re ya lo cubre) + alternativa de ruta de desarrollo inactivawork/nul_ward_pack/command.binenResolveCommandBinPath(el archivo no existe; el corpus lo cubre). El área del editor de Sphere Grid ahora está 100% libre de conceptos v5 (gancho/manifiesto/archivo auxiliar/cuadrado). docs/ai/HANDOFF_JARVIS-HOOK_SPHEREGRID_V5_FREEZE_2026-08-01.md(nuevo): instrucción para que el carril Jarvis-HOOK congele la pila v5 (SphereGridFullGridCompilerHook.{cpp,h}+SphereGridTrueNewNodeHook.{cpp,h}→legacy/) sin romper la fábrica de los otros ganchos; puntos de contacto principales dll (incluye L49-50, externos L97-98, L870-876 habilitado, instala 11900-11931, elimina 12168-12169); Criterio RT2 (pasada → eliminar; fallar → aislado lab); ffx-probe.dll NO es un gancho (conservar).- Validación: Errores de versión 0; SphereGrid prueba 4/4 PASS (con anclajes). Línea base del área intacta.
v2.207.1.0
v2.207.2.1BETAREVISION
Seymour2 ago 2026
Cierre de carril de Sphere Grid (traspaso + PORT_STATUS)
docs/ai/SESSION_HANDOFF.md: transferencia de cierre de carril: las 5 confirmaciones de la sesión (limpieza SUPERMD, bits de sphere.bin PROBADOS, análisis forense de fallas, auditoría de escritura 7 invariantes, eliminación de código v5 inactivo) + estado (editor 100% v5-gratuito, juego listo para la limpieza RT2) + Elementos pendiente (limpieza humana RT2, humo UI, congelación de pila v5 en el carril Jarvis-HOOK) + siguiente paso seguro.PORT_STATUS.md: actualización de cierre: estado del área consolidado; limpiar RT2Needs Testing. ### PARCHE
v2.207.2.0
v2.207.3.0BETAPATCH
Seymour2 ago 2026
correcciones de F7 In-Live: diseño AUTO (25 estados visibles), Force basado en ticks (sin Morfeo), puerta RT0 sin conexión
- Corrección de diseño: columna ESTADO AUTOMÁTICO con rowH 0.020: los 25 estados ahora caben en la pantalla (Prisa/Freno fueron recortados).
- Corrección de fuerza:
F7_ForceLastBattleahora programa por marcas (g_forceRepeatLeft+ ~10 fotogramas entre fuerzas, procesado enF7_TickMainThread): el hilo principalSleep(120)(tartamudeo ~1s con repetición 9) desapareció. - Puerta RT0 sin conexión:
RuntimeTools/FfxHooksDll/f7_config_rt0.ps1: valida el contratof7_inlive.json(24 claves, rangos de sujeción, máscaras de estado/elementos, ida y vuelta clave-valor) sin iniciar el juego. PASS. - COMPILAR PASS + LabDeploy para Steam (junto con 2.207.4.0). ### REVISIÓN
v2.207.2.1
v2.207.4.0BETAPATCH
Seymour2 ago 2026
pila de hooks de Sphere Grid v5 CONGELADA (heredada)
- Congelación ejecutada (transferencia
HANDOFF_JARVIS-HOOK_SPHEREGRID_V5_FREEZE_2026-08-01.md): los 4 archivos v5-pila (SphereGridFullGridCompilerHook.{cpp,h}+SphereGridTrueNewNodeHook.{cpp,h}) se movieron aRuntimeTools/FfxHooksDll/legacy/spheregrid_v5/;dllmain.cpplimpiado (incluye, externos,Enabled(), instalaciones, eliminaciones, llamadas de manejador de fallas) — cero referencias restantes;vcxproj+build_hooks.ps1limpiados. El sospechoso n.º 1 del accidente del0xc0000374(08-01, ganchos activos + rejilla limpia) fuera de la construcción. - VEH con falla GLOBAL ahora siempre armado (
FaultProbe VEH armed (global fault diagnosis)): se mantienen los diagnósticos de colisión, independientemente del gancho SG. - criterio RT2 mantenido: limpiar RT2 (guardado desechable, recuentos+1) PASS → eliminar banderas
legacy/spheregrid_v5/+sg_*+ manifiesto; FALLAR → atrás como aislado lab (FFXHOOKS_SG_861_LAB_OVERRIDE). - Construir
-WithPolyHook -ReleasePASS; LabDeploy a Steam. ### PARCHE
v2.207.3.0
v2.207.5.0BETAPATCH
Seymour2 ago 2026
corrección de pantalla negra del submenú DIFF: O_COUNT >0 simulado en el objeto de menú nativo
- Causa raíz (mi error v2.207.1.0): el DIFF de varias columnas establece
g_f7RowCount = 0(sin filas 1D) yF7Sub_SpawnMenuescribióO_COUNT = 0en el objeto del menú nativo: el tick de sorteo del juego vio el conteo 0 y nunca llamó a nuestro sorteo → submenú "abierto" pero invisible → pantalla negra (puerta forzada sin renderizado 3D y sin menú) → solo F7 (cierre forzado) regresó al juego. - Solución:
O_COUNT = g_f7RowCount > 0 ? g_f7RowCount : 8en generación (recuento falso 8 para DIFF; nuestro sorteo/entrada de varias columnas no usa O_COUNT). - Extra (diagnóstico de registro): el VEH GLOBAL capturó 2 AV reales en el arranque (
FAULT AV READ pc=0x796B11D7/0x796B3908 accessed=0x10CDCDCD— montón liberado; módulo 0x796B = probable fmodex llamando a una devolución de llamada FFX en rva 0x291488) — sospechoso #1 por el bloqueo inactivo del usuario ("el juego se cierra aleatoriamente mientras está inactivo"); Investiga0x291488en IDA la siguiente ronda. - Construya PASS + LabDeploy en Steam (15:32 → v4). ### PARCHE
v2.207.4.0
v2.207.6.0BETAPATCH
Seymour2 ago 2026
F7 DIFF: navegación espacial 2D verdadera (preajustes con L/R, Down a BASE, Up en la fila 0 para volver) + edición numérica desde cero + chip Custom
- Navegación arreglada (mapa mental del usuario): PRESETS ahora navega con L/R (chips horizontales) y Abajo va a la columna BASE; en columnas de datos, L/R cambia de columna y U/D mueve filas; Arriba en la fila BASE 0 vuelve a los ajustes preestablecidos. Antes: L/R cambiaba de columna incluso en los ajustes preestablecidos (tenías que ir de lado para "bajar").
- Edición numérica fija: ingresa con el campo puesto a cero (escriba el valor NUEVO desde cero, antes de que se acumule sobre el valor ACTUAL: escribir '0' se convirtió en 10000/máximo); sin dígitos + Confirmar = se mantiene actualizado; El marcador de posición
>> value _muestra lo ACTUAL hasta que se escribe; pie de página contextual ("escriba 0-9 / Retroceso / X aplicar / Esc cancelar"). - Chip "Personalizado" (quinto): visible y navegable: se vuelve ACTIVO con cualquier ajuste manual (alternar/editar) (antes: ningún chip encendido = confuso). Al seleccionarlo se mantienen los valores actuales. Apagado (vals[0]=0) = deshabilitado; personalizado (4) = habilitado al confirmar.
- Construye PASS + LabDeploy para Steam. ### PARCHE
v2.207.5.0