Update 2.224
6.8.2026
v2.224.0.0BETAMINOR
Seymour2. Aug. 2026
OPERATION DEMON WAVE 1+2: F8-DASHBOARD WIEDERHERGESTELLT + F7/F8-KEY-ARBITRATION
- F8 wiederhergestellt (Quelle bereits im Tree; Wire fehlte):
StartInGameMenuDashboard()+StartUnXBoosterHook()inInstallHooks(Gate[dashboard] enableddefault ON — zukDefaultIniin hinzugefügt Config.cpp);InGameMenuDashboard.cpp/UnXBoosterHook.cpp/Config.cppwieder zum vcxproj hinzugefügt ( war Config.cpp nie im Projekt — dasdashboard.enabled-Gate wurde nie gelesen). - Key-Arbitration (Wave 2): mit
dashboard.enabledgehören F8/INSERT dem DASHBOARD (ein Besitzer);InGameMenuProcessKeykonsumiert F8/INSERT ohne Toggle (Fallback mit Dashboard aus). F7 (NativeMenu/F7_LeverApply_LeverApply) UNBERÜHRT. - Legacy-UnX aus dem Deploy ENTFERNT (INC-002 — bewiesen 3/3-Crash):
unx.dll/dxgi.dll/dxgi.ini/dxgi.dll.055508/dinput8 - Copia.dllnachmodules\_unx_legacy_removed_20260802_*verschoben (reversibles Backup) in Steam UND_isolated. - Neue Defines in ffx\ffx_addresses.h:
RVA_FFX_DEBUG_FLAGS(0xD2A8F8),RVA_FFX_PERMANENT_SENSOR,RVA_FFX_BATTLE_PARTICIPATION/RVA_FFX_AP_EARN(0x1F10EA0/0x1F10EC4 aus UnX). Spielbarer Seymor OFF (Party-Struct-Adresse nicht validiert — RE ausstehend; Apply aus dem Booster entfernt). - Hooks-EN-Regel auf das Dashboard angewendet: „F8 schließen", „Ein/Aus", „Offen/Geschlossen"; Dashboard
Log→DashLog(OutputDebugStringA — dllmainLogist statisch). - ffx-hooks.ini-Modell erstellt bei
RuntimeTools/FfxHooksDll/ffx-hooks.ini(mit[dashboard] enabled=1). - Gate: Release-Build 0 Fehler; Dashboard-Strings im Binary (4/4); Steam +
_isolated-Deploy (Backups.bak_20260802_184354). RT2 ausstehend: F8 öffnet Dashboard, F7 intakt, Dashboard-Cheats funktionieren. ### MINOR
v2.223.1.0
v2.224.0.1BETAPATCH
Seymour2. Aug. 2026
OPERATION DEMON WAVE 3: DIALOG-SKIP sicher portiert (Hook, kein Patch)
DialogSkipHook.{h,cpp}(neu): sicherer Port des UnX-Legacy-Hardcoded-ret 8-Patches (RVA 0x30B040 —FFX_FmodVoice_ReadEventData@ 0x70B040, in IDA validiert): MinHook/PolyHook2 auf Ziel; mitinput.dialog_skip=1gibt es sofort 0 zurück (gleicher Effekt wie das , REVERSIBLE und konfig-gated).- Dashboard:
Dialog Skip (voices)-Eintrag im Input-Tab (input.dialog_skip, default off). - Wire:
InstallDialogSkipHook(g_base, LogLine)in InstallHooks (innerhalb des Dashboard-Gates). - Define:
RVA_FFX_FMODVOICE_READ_EVENT_DATA(0x30B040) in ffx\ffx_addresses.h. - Gate: Release-Build 0 Fehler; Strings im Binary; Steam +
_isolated-Deploy (Backup185543). RT2: mit dem Eintrag ON überspringen gesprochene Dialoge (kein Crash); OFF = Vanilla-Verhalten. ### MINOR
v2.224.0.0
v2.224.0.2BETAREVISION
Seymour2. Aug. 2026
OPERATION DEMON: Wave-4-Dokumentation abgeschlossen + RT2-Skript
run_f8_rt2.ps1(neu): Boot-Smoke + F8 (dashboard/F7/cheats/dialog skip) — erfordert geschlossenen Editor, Wegwerf-Save, Vorher/Nachher-Hashes.F8_UNX_INCONSISTENCY_REGISTER(Session 3): INC-002/005 + P1/P2/P5/P7 GELÖST; P3 teilweise (v2.flag bereits abwesend); nie-portiert dokumentiert (KillMeNow/auto-update/texture inject/sig-scan).- SESSION_HANDOFF + PORT_STATUS SESSION_HANDOFF PORT_STATUS: F8
Needs Testing— In-Game-RT2 ausstehend (Editor geschlossen). - Cleanup:
ingame_menu_v2.flagbereits nicht mehr im Deploy (P3 sauber bestätigt). ### PATCH
v2.224.0.1
v2.224.0.3BETAREVISION
Seymour2. Aug. 2026
OPERATION DEMON: Post-F8-Plan — Tier 2 via ffx-probe (§9) + RT2 Prüfung
- \
- F7F8_RECONCILIATION_PLAN §9: mit UnX aus dem Deploy kehrt vtable[9] (GetDeviceState) zu ffx-probe.dll zurück — die In-Process-Main-Thread-Probe (FORCEBATTLE/SETINPUT/SOUNDCMD/READ/WRITE/CALL — Tier 2: a_ability/arms_rate/Encounter Table/IA/Aurora-Kalibrierung). Aktueller Zustand: OFF im Deploy (
.RT2OFF); Loader vorhanden; Dashboard hat bereitsplugins.ffx_probe-Eintrag. run_f8_rt2.ps1: Probe-Heartbeat-Check (hooked=1), wenn die Probe aktiv ist.- Gate: nur Doc (REVISION); Deploy unberührt. ### REVISION
v2.224.0.2
v2.224.0.3BETAREVISION
Seymour2. Aug. 2026
PPP DISPATCH TABLE: CYCLE GESCHLOSSEN (Konsument + Haupt-Tabelle)
- Konsument BEWIESEN:
FFX_MagicHost_RelocatePppSection(0x7121D0) —a2 + 40*index(stride 40 = 0x28 im Code); Aufrufer übergeben&pppSysProgTbl(0x72a8eapush offset pppSysProgTbl→ 0xC3A500; 0x761b72). Der On-Disk-handler_table_indexjedes Tombola wird der Tabellen-Eintrags-Pointer; Runtime-Slot = 16B ([0]=index, [1]/[2]=relocated ptrs; count bei*(int16*)(record+0x26)) — passt zum pppSclMove-T3. - pppSysProgTbl @0xC3A500 = die HAUPT-Tabelle — „progtbl"-Layout (name@+0x00, fnMain@+0x08, fnExtra@+0x20), 418 Einträge (passt zum 2026-07-31-MAGIC-Doc); Tombola 0-11 = pppAccele..pppColor mit den Yonishi-Ranking-Handlern (pppSclMove T3 = 0x75C090 @ slot 6; pppScale = 0x75D0D0 @ slot 10; pppAngle = 0x75CF20 @ slot 9; pppSclAccele = 0x75B9F0 @ slot 2).
- Korrektur aus dem vorherigen Pass: 0xC3A500 ist KEIN Name-Vector (der 0xC3A4E0-Block = Debug-Strings END/CHR/MAP-G/MAT;
FFX_PppNameVector-Rename REVERTIERT). - 2026-07-31-MAGIC-Renames auf die KANONISCHE DB propagiert: 0x716D20→FFX_Render_PppProgramProcessor_2, 0x75B830→FFX_PppHandler_Accele, 0x75B900→FFX_PppHandler_Accele_SetFromGlobalQ, 0xC3E798→FFX_PppHostDispatchTable_AltQ, 0xC86080→FFX_PppKeyholeDispatchTable.
- Al Bhed-Fänger erhielt das progtbl-Layout + die Haupt-Tabelle: 5 Tabellen, 1191 Handler in
scripts/ppp_dispatch_table.json. Doc:docs/reverse/PPP_DISPATCH_TABLE_RECONCILED_2026-08-02.md(2. Pass). - C2 mit der vollen Kette: on-disk index → pppSysProgTbl + 40*index → Eintrag (name+fn). Als Nächstes: das 16B-Disk→Runtime-Slot-Fenster (T3) und die 145 Aliase. ### PATCH
v2.224.0.2
v2.224.0.4BETAPATCH
Seymour2. Aug. 2026
F8 DEAKTIVIERT (Gate `dashboard.enabled=false`) + konsolidiertes F8+probe-Doc
- Gate-Flip an 2 Stellen (Config.cpp kDefaultIni + dllmain
GetBool×2) — Dashboard/Booster/DialogSkipHook starten nicht; InGameMenu wird wieder F8/INSERT-Owner (natürlicher Fallback). Reversibel (reaktivieren = Flip + Deploy). docs/reverse/FFX_F8_PROBE_CONSOLIDADO_2026-08-02.md(neu): F8 (Waves 1-3 + close) + ffx-probe (Tier 2) + wie reaktivieren + ausstehende Punkte.- Steam +
_isolated-Deploy (Backup191908); Release-Build 0 Fehler. Fokus zurück auf F7. ### REVISION
v2.224.0.3
v2.224.0.5BETAPATCH
Seymour2. Aug. 2026
F7: FLICKER GEFIXT (Ursache im Lever-Wire) + keine rohen Stepper-Zahlen + ECHTER Difficulty-Hebel
- FLICKER (User-RT2 — Root-Cause mit Log-Beweis): Bestätigen einer Zeile schloss das Menü (
CloseMenu→m.obj=0) ABERg_forceSubsystemblieb AN — das Spiel blieb im Menü-Modus (0x13407E4=1) ohne gezeichnetes Menü = alternierendes Rendering = flackernder Bildschirm (Log:open→ confirm →close (force-gate off)nur beim 2. F7 →open...). Fix: das Wire löscht jetztg_forceSubsystembeim Bestätigen (gleiches Verhalten wieg_nativeWantClose). - F7 (250ms) in PresentTick — gedrückt gehaltenes F7 (oder hängende Taste) toggelte das Menü bei jeder Flanke = Flackern.
- „Zahl, wo sie nicht sein sollte": RT_STEPPER-Zeilen zeigten rohes RT_STEPPER
[0]vor dem Bearbeiten. Fix:g_rowEdited[]— der Stepper-Wert erscheint nur NACH L/R (Toggle [ON]/[OFF] bleibt immer sichtbar). - ECHTER Difficulty-Hebel (war ein Stub): neues
F7_SetDifficultyLevel(0..5)(F7InLive) — setztg_cfg.diffGlobal(hpMul 1000/1150/1300/1500/1750/2000 — x1.00..x2.00) +F7_SaveConfig()— der Auto-Apply beim Kampfstart greift es auf. - Gate: Release-Build 0 Fehler; Steam +
_isolated-Deploy (Backup193746). RT2 ausstehend: F7 → bestätigen → Menü schließt OHNE Flackern; kein initiales ; Difficulty greift im Kampf.
v2.224.1.0
v2.224.1.0BETAPATCH
Seymour2. Aug. 2026
F3.5 TEIL 2: DRAG-GIZMO in Aurora (Monster auf der Canvas ziehen) + RE: T3-Fenster bewiesen + Aliase entschlüsselt
- Gizmo in noclip (
scenes.ts,?edit=1): Klick wählt den nächsten Akteur (Projektions-Picking —clipFromWorldMatrix+ w-divide), Drag auf der Bodenebene (unproject auf der y-Ebene des Akteurs, FFX↔noclip-Konversion via Matrix-Inverse), Overlay (gelber Ring + Anweisungen), Tasten S = save (POST/api/edits/<encId>— der Hub-Endpoint — mit dem Slot-Delta) und R = reset (zurück zu Vanilla). Per-Slot-Vanilla-Basis insetUpMonstersgespeichert (korrekte Deltas auch mit vorherigem Sidecar). - ViewerShell: „3D-Gizmo (auf der Zeichenfläche ziehen)"-Checkbox im Edit-Panel +
&edit=1/0in der battle-preview-URL + Status, der den Gizmo-Zustand zeigt. - RE (3. Pass): 16B-T3 BEWIESEN im pppSclMove-Handler (0x75C090 =
FieldMap_AccumulateDoubleLayerDelta_C): liest die 4 Floats beia2+16..+28(das T3-record+0x10..+0x1F-Fenster) und akkumuliert ina1+160..+172. Aliase entschlüsselt: die 418 pppSysProgTbl-Einträge = 273 eindeutige Namen + 145 Re-Registrierungen (die „145 Aliase" des MAGIC-Docs = wiederholte Handler, keine alternativen Namen); der Al Bhed-Fänger erhieltfind_all_strings(368 Strings in der Region) + dasisAlias-Feld. - Gate: noclip typecheck sauber;
rsbuildOK; Bundle461.7bf8f17f.jsdeployed in den serve-dir (enthälteditUpdate+ POST); C#-Build 0 Fehler; ViewerHub-Tests 17/17 PASS. - F3.5 KOMPLETT: Sidecar (Teil 1) + Gizmo (Teil 2) — der Zyklus edit → see → save → reopen ist geschlossen. ### REVISION
v2.224.1.0
v2.224.1.2BETAPATCH
Seymour2. Aug. 2026
F7 RT2 RUNDE 2: „NOTHING OPENS" GEFIXT (das Wire stahl das Bestätigen) + Force Battle ohne Zahl + klares Cheat-Label + Untermenüs entsperren Musik
- BUG 4 (kritisch — KEIN MENÜ ÖFFNET SICH): mein PumpHook-Wire konsumierte
g_ourClosedVOR der ursprünglichen Pumpe —PollMenusah das Bestätigen nie → Untermenüs öffneten sich NIE. Definitiver Fix: das Wire wurde ENTFERNT — die ursprüngliche Pumpe (CloseMenu →DispatchConfirm→NativeMenu_OnEdge→ Untermenüs/reopen/force-off) läuft wieder intakt. - BUG 3 (Force Battle mit Zahl): die Zeile war RT_STEPPER (0..250) — jetzt RT_NONE (kein Wert; das FORCE-Untermenü übernimmt — RT_STEPPER RT_NONE
F7_MENU_FORCE). - BUG 2 (Battle Cheats verwirrend): umbenannt in „Party Invincible (debug)" — der Hebel (0xD2A8F8+1) ist das Party-Invincible-Flag des Spiels.
- BUG 1 (Menü ohne Musik): das Music-Untermenü (das Bug 4 am Öffnen hinderte) öffnet jetzt — der User wählt den Track im Untermenü (
F7_MENU_MUSIC). - Hebel verlagert:
F7_LeverApplywird jetzt vonNativeMenu_OnEdgeaufgerufen (ACT_AI_SWAP/ACT_BATTLE_CHEATS-Fälle — direkte Aktionen ohne Untermenü; val aus ACT_AI_SWAP ACT_BATTLE_CHEATSg_ourResult). - Gate: Release-Build 0 Fehler; Steam +
_isolated-Deploy (Backup200713). RT2: Arena+ öffnet, Music/Force/Difficulty-Untermenüs öffnen, Party-Invincible-Toggle greift. ### PATCH
v2.224.1.1
v2.224.1.3BETAPATCH
Seymour2. Aug. 2026
F7 RT2 RUNDE 3: MUSIK-TRACK 0 = NONE (stiller Titelbildschirm + CRASH beim Kampfeintritt)
- \
- Bug 1 (Titel/Intro ohne Musik):
music_lock: 0inf7_inlive.json(vom Music-Untermenü gespeichert) —F7_MusicApplyLockwendete den Track-0-Override (Stille/aus dem Kontext) beim Boot an. - Bug 2 (Custom-Mix-CRASH beim Kampfeintritt):
music_battle: 0—F7_ApplyMusicBattle(Auto-Apply beim Kampfstart) machteSetArenaBattleMusicPending(0)→ MusicHook wendete Track 0 an → Crash (Log: FAULT rva 0x4FB05E direkt nach compose). - Fix: Track 0 wird in beiden Settern none (
F7_SetMusicLock/F7_SetMusicBattleTrack:<= 0 → -1) +f7_inlive.jsonbereinigt (music_lock/music_battle= -1). - Gate: Release-Build 0 Fehler; Steam +
_isolated-Deploy (Backup202945). RT2: Titelbildschirm-Musik zurück; Custom Basteln tritt ohne Crash in den Kampf ein. ### PATCH
v2.224.1.2
v2.224.1.4BETAPATCH
Seymour2. Aug. 2026
F7 RT2 RUNDE 4: PREVIEW-Feedback + Custom-Mix-Crash UNTERSUCHT (UpdateWindowTitle/DrawUITextElement)
- Bug 2 (Preview „tut nichts"):
F7_MusicPreviewmit Lock-1(none — aktueller Konfig-Zustand) kehrte OHNE ABSPIELEN zurück (dertrack < 0-Bodyguard). Fix: Bestätigen von Preview mit val<= 0zeigt den On-Screen-Status „Stelle die Spur (L/R) vor der Vorschau ein"; mit gültigem val spielt es. (Der Flow: L/R auf „Music Lock" → bestätigen am Stepper = preview — existierte bereits.) - Bug 1 (Crash beim Bauen des Kampfes — BLEIBT): der FAULT (gleiche RVA
0x4FB05E) in IDA gemappt:FFX_System_UpdateWindowTitle(0x4FAE40) →DrawUITextElement(0x640810,void(ctx, text, x, y, slot)— zeichnet den SAVE-Text im Fenstertitel; CalleeFFX_Save_SystemSaveGame) — der Crash liegt im Menü-2D-ctx („NoTexture"/ResolveTextureNameForUI). Die komponierte Bin ist OK (24272 B vs 24080 Vanilla — 192 B Wachstum mit angepasstem Header). Isolation ausstehend (User): (a) normaler Kampf ohne compose → Crash? (b) compose mit 1 Aeon → Crash? (c) compose mit GESCHLOSSENEM Menü vor Launch → Crash? - Gate: Release-Build 0 Fehler; Steam +
_isolated-Deploy (Backup205601). ### PATCH
v2.224.1.3
v2.224.1.5BETAPATCH
Seymour2. Aug. 2026
F7 RT2 RUNDE 5: PREVIEW-CRASH BEHOBEN (Probe OFF = MMF 0xCD) + „Preview" wird zu „Speichern + Custom-Basteln öffnen"
- Preview-CRASH (vom User reproduziert — „Enter bei Vorschau = Absturz JETZT"):
F7_MusicPreviewrief den soundcmd via probe (ArenaPlus_MusicHookProbeSoundCmd→LabProbeSoundCmd→ MMFFFXProbeBlock_v1) — die probe ist OFF im Deploy (.RT2OFF) — die MMF existiert, aber die Daten sind das 0xCD-Muster (freigegebener/uninitialisierter Speicher) →AV READ accessed=0x10CDCDCDin ffx-hooks. Fix: SEH (__try/__except) inF7_MusicPreview(der soundcmd kann das Spiel nie wieder crashen — nur Override) + der Track-Stepper-Bestätigen speichert jetzt (spielt nicht). - UX (User-Anfrage): das Music-Untermenü „Preview" wurde „Speichern + Custom-Basteln öffnen" — Enter speichert die Konfig (f7_inlive.json) + öffnet das native Menü für Arena+ → Custom Basteln (der Standard-Flow, der FUNKTIONIERT). Die Musik bleibt in der Konfig gespeichert (lock/battle) und greift im richtigen Kontext (Kampfstart), ohne Probe-Wiedergabe.
- Gate: Release-Build 0 Fehler; Steam +
_isolated-Deploy (Backup214436). RT2: Enter auf „Speichern + Custom-Basteln öffnen" crasht NICHT; Konfig gespeichert; Custom Basteln öffnet. ### PATCH
v2.224.1.4
v2.224.1.6BETAPATCH
Seymour2. Aug. 2026
i18n: rohe Literale zu {x:Static} migriert (StringsIntegrityTests-Gate grün)
- F3.5-Gizmo-Schuld gefixt: die „Gizmo 3D (auf der Canvas ziehen)"-Checkbox und der Hinweis („Zum Auswählen und Ziehen ein Monster anklicken ... S = speichern · R = zurücksetzen") nutzten rohe Literale in Attributen (
Content=/Text=) — derNoXamlHasRawHardcodedUiLiteral-Test fängt Attribute ab. Migriert zu{x:Static res:Strings.U_gizmo_3d_drag_on_canvas_1aa7857f}+U_click_monster_to_select_drag_hint_fe907a09(neutral EN + PT + Strings.cs-Props). - Schulden einer anderen Lane (MonsterAi):
MonsterAiPhaseRotationAdvanced_Window.axamlhatte 2 rohe Literale („Foco ativo" / „Limpar foco") — migriert zuU_active_focus_d59334a6/U_clear_focus_91699d35(der Test ist der projektweite Schiedsrichter). - Gate:
StringsIntegrityTests3/3 PASS; Build 0 Fehler.
v2.224.1.5
v2.224.1.7BETAPATCH
Seymour2. Aug. 2026
Aurora-Visualisierung: Monsternamen im Kampf (Labels + Gizmo)
export const MONSTER_NAMESinmonster_studio.ts(284 echte Namen — „Raldo-Panzer", „Barnip-Panzer"...).- scenes.ts: der Edit-Modus (
?edit=1) zeichnet jetzt Labels über ALLE Kampfmonster (echter Name in Weiß; der ausgewählte in Gelb) + das Gizmo-Overlay zeigt den Namen des ausgewählten Monsters (z. B. „Teufelspudding (slot 6)") statt nur „slot N". - Gate: noclip typecheck sauber;
rsbuildOK; Bundle461.0fe1690d.jsdeployed (enthält „Raldo-Panzer"/„Barnip-Panzer"); Patch versioniert indocs/patches/noclip/(scenes.ts + monster_studio.ts).
v2.224.1.6
v2.224.1.8BETAPATCH
Seymour2. Aug. 2026
Aurora: die AURORA CHAMBER ist zurück als Haupt-Aurora (Battle-Preview ausgemustert) + i18n PT→EN der Aurora-Module
- Aurora Chamber REAKTIVIERT als Katalog-„Aurora":
MenuItem_AuroraundMenuItem_AuroraChamberöffnen jetztAuroraChamber_Control(BIANCA-Katalog + MapViewer + Open RealGame — der echte Kampf). NeuerOpenAuroraChamber()-Helper. Die Battle-Preview (noclip) wird Legacy-Code („aurora"-Eintrag im Katalog deaktiviert; die ViewerHub/aurora-Beschreibung bleibt eingefroren). - ModuleCatalogPolicy:
aurora-chamber-Eintrag reaktiviert („Aurora Chamber");aurora(Battle-Preview) als 🚫 LEGACY markiert (auskommentiert).case "aurora-chamber"-Dispatch hinzugefügt. - i18n PT→EN der Aurora-Module: das neutrale (Strings.resx) hatte PT-Werte (EN-Editor zeigte PT) — auf EN gefixt: 12 bestehende Keys (AURORA·Battle Maps, Selected place, Visualization, Editing, Session, Open arena in Aurora Chamber, Filter by field..., Selected field, Exports map/..., Field Picker, overworld, MapViewer 3D) + 23 neue Keys (Chamber and Field Explorer buttons: Re-scan, Mount missing, Remount all, Open EditViewer, Open RealGame, Save positions, Add/Remove monster, Export anchors, Restore RealGame, Reload battle, Re-export and open, Remount scene, Export folder, Save camera, Save camera params, Publish Scout, Update markers, Publish and open field, Validate visual, Open field, Re-export, Browser). EN im neutralen + PT im Satelliten (verifiziert: bereits in PT vorhanden) + Strings.cs-Props.
- Gate:
StringsIntegrityTests3/3 PASS; Build 0 Fehler.
v2.224.1.7
v2.224.1.9BETAPATCH
Seymour2. Aug. 2026
Bugfix: Open RealGame (404) + Aurora-Karte auf dem Kopf
- Bug 1 — RealGame 404:
Aurora3DLauncher.BuildBattleUrl(vom Chamber-„Open RealGame" genutzt) startete einen Legacy-python http.server an der noclip-Root (Downloads) — aber die noclip index.html liegt indist/, also gab/index.html404 („page not found"). Fix:BuildBattleUrlnutzt jetztViewerHubService.BuildUrl("aurora", ...)(den In-Process-StudioWebServer mit dem noclip-serve-dir — die korrekte index.html).EnsureViewerServer/IsPortListeningentfernt (Legacy-Python — in F2 ausgemustert). Das MODUL (RealGame mit Monstern) funktioniert weiter — nur die battle-preview-PAGE ist Legacy. - Bug 2 — Karte auf dem Kopf:
applyAssetOrientationinRuntimeTools/FFXMapViewerWeb/app.jswendeterotation.x = Math.PI(π-Flip auf X) fürbtlmap(die Aurora-Chamber-Arena) an — drehte die Karte um. Die Karten-glTF ist bereits Y-up. Fix:rotation.set(0,0,0)(kein Flip) für alle — Boden unten, Himmel oben. - Gate: Build 0 Fehler;
node --checkOK auf app.js; der MapViewer wird direkt aus dem Repo ausgeliefert (Präfix /map/) — die gefixte app.js wird bereits ausgeliefert.
v2.224.1.8
v2.224.1.10BETAPATCH
Seymour2. Aug. 2026
Bugfix: {x:Static} als Element-Inhalt zeigte das rohe Literal (und stürzte beim Öffnen des Editors ab)
- Bug: die 25 Buttons der Aurora-Module (Chamber + Field Explorer), die ich zu i18n migrierte, nutzten
{x:Static res:Strings.X}als Element-Inhalt (<Button>{x:Static}</Button>). Avalonia löst{x:Static}nicht als Element-Inhalt auf — es zeigt das rohe Literal („{x:Static res:Strings.U__...}") und kann beim Benutzen des Buttons zur Laufzeit crashen (der Grund für „Karte stürzt beim Öffnen des Editors ab"). - Fix: alle 25 in das Attribut
Content="{x:Static res:Strings.X}"konvertiert (das korrekte Muster).{x:Static}löst nur als Attribut auf (Content=,Text=,Header=,Watermark=,ToolTip.Tip=). - Gate: Build 0 Fehler;
StringsIntegrityTests3/3 PASS;node --checkOK.
v2.224.1.9
v2.224.1.11BETAPATCH
Seymour3. Aug. 2026
F7: Glas-Panel im Untermenü (ein Fenster) + Compose-Crash BEHOBEN (Force-Gate vor dem Start)
- Bug 2 (UX — User bat um „ein neues Fenster"):
F7Sub_DrawCb(dllmain ~11580) erhielt das große Glas-Panel (DrawMenuGlassPanel(NX(0.047f), NY(0.20f), NW(0.906f), NH(0.62f), F, 1)) — das Sound-Untermenü ist jetzt ein FENSTER (Hintergrund + Titel + Zeilen INNERHALB), compose-pick-Stil. - Bug 1 (Custom-Mix-Kampfstart-Crash — Ursache):
ArenaPlus_LaunchComboBattleFromPump(der MsBattleEncountExe) lief mit force-gate ON (g_forceSubsystem = 0war erst NACH dem Launch) — das Spiel trat mit 0x13407E4=1 (Menü-Modus) in den Kampf → der Kampfstart crashte inUpdateWindowTitle→DrawUITextElement(rva 0x4FB05E — AV WRITE 0xBD). Fix:g_forceSubsystem = 0+ 0x13407E4 direkt VORArenaPlus_LaunchComboBattleFromPumpgenullt (Launch + LaunchCached — der Relaunch). - Gate: Release-Build 0 Fehler; Steam +
_isolated-Deploy (Backup095551). RT2 ausstehend: Custom Basteln → Build + Launch → Kampf tritt OHNE Crash ein; Sound-Untermenü = ein Fenster. ### INFRA (CI) ci.ymlführte die CI bei jedem Push aufmainundcodexclaudiocodeffxeditor(dem Arbeits-Branch, in dem Lanes ständig committen) aus — 2 Jobs auf Windows-Runnern ($0.010/min) erschöpften das freie 3,000-min/Monat-Kontingent (Actions $22.70).- Fix: der Push-Trigger ist jetzt nur noch
main(branches: [main]). CI validiert weiterhinmain(und PRs aufmain); der Arbeits-Branch bekommt keine automatische CI (lokal mitdotnet build). - Geschätzte Einsparung: ~90% der Actions-Läufe (senkt die wiederkehrenden Minutenkosten). ### PATCH
v2.224.1.10
v2.224.1.12BETAPATCH
Seymour3. Aug. 2026
LOG: Auto-Rotation nach Öffnungszahl (max 10, `.old1..old9`-Historie)
OpenLog(dllmain ~173) zählt jetzt Öffnungen (Datei%TEMP%\ffx-hooks.log.cnt); bei jeder 10. Öffnung wird das aktuelle Log nachffx-hooks.log.oldNverschoben (akkumuliert.old1..old9-Historie;.old1wird nach 9 Rotationen überschrieben) und der Zähler zurückgesetzt. Das Haupt-Log akkumuliert nicht mehr als ~10 Sitzungen; der User löscht.old*nach Bedarf.- Gate: Release-Build 0 Fehler; Steam +
_isolated-Deploy (Backup102648). ### PATCH
v2.224.1.11
v2.224.1.13BETAPATCH
Seymour2. Aug. 2026
RealGame-Fix (Kampf vs Feld) + EditViewer öffnet immer + DEBUG-LOG-ALLGEMEINREGEL (Phasen 1-4) + Voll-Editor-Analyse-Map (Phase 5)
- RealGame-Fix (der Kampf kehrt zurück):
BuildBattleUrlübergab die extraQuery MIT?anViewerHubService.BuildUrl(das bereits?hinzufügt) → URL wurdeindex.html??battle=...→ die noclipURLSearchParamslasbattlenicht → nur das Feld (map), kein Kampf. Jetzt ist die extraQuery ohne?→?battle=<encId>&map=&actors=1→ der Kampf mit Monstern kehrt zurück. - EditViewer „tut nie wieder nichts": der
RenderScene-Fallback öffnet jetzt die leere Szene (Grid + Overlay) auch OHNE Anker, wenn der glTF-Export fehlschlägt (vorher waren Anker erforderlich — ohne sie gab Render einen Fehler zurück und der Button tat nichts). Das Log erfasst den Export-Grund. - DEBUG LOG — ALLGEMEINE REGEL (
FFXProjectEditor/Diagnostics/DebugLog.cs): zentralerInfo/Warn/Error-Helper mit[Conditional("DEBUG")](in Release entfernt — null Overhead). Ausgabe: Debugger +%LOCALAPPDATA%\FFXProjectEditor\debug.log+work/editor-debug.log. Instrumentiert: RealGame (generierte URL), EditViewer (render), SelectSceneByMapKey (bika00_10), ExportSceneGeometry (Fehler), ViewerHub (BuildUrl/EnsureServer). - Permanente Regel: zu
AGENTS.md+CLAUDE.mdhinzugefügt — jedes neue Modul MUSS Debug-Antworten haben. Docs:docs/ai/DEBUG_LOGGING_RULES.md(die Regel) +docs/ai/DEBUG_LOGGING_MAP_2026-08-02.md(Phase 5 — Voll-Editor-Analyse: ~51 Module + Infra + Grenzen; wo/welche Debug-Feldtabellen pro Domäne; Implementierungspriorität; UI vs Log). - i18n-Gate: 5 rohe Literale aus
MagicDllEditor_Control.axaml(Pfeile + Back/Forward-Tooltips — Schulden einer anderen lane) zu{x:Static}migriert (der Test ist der projektweite Schiedsrichter). - Gate: Debug + Release-Build 0 Fehler; Tests 20/20 PASS (StringsIntegrityTests 3/3 + ViewerHub 17/17).
- Der Hook erfasst das Lab-stdout via Pipe (CreatePipe + STARTF_USESTDHANDLES — der compose-Job liest die Ausgabe und extrahiert die PREV|-Zeilen) und STARTF_USESTDHANDLES zeichnet das Punkte-Panel im Menü (linkes Glas-Panel — das Layout, das in den Kampf geht).
- Neuer „Build Preview (layout bolinhas)"-Button in Custom Basteln: komponiert OHNE Launch (Menü bleibt offen — Status „Preview pronto — layout acima. Fight Last Basteln p/ entrar.") → der User sieht die Punkte VOR dem Eintritt → „Fight Last Basteln" (vorhanden) startet die bereits komponierte Bin.
- Flow: Äonen + Szenario wählen → Build Preview → Karte sehen (P rechts / Monster links / cam h) → Fight Last Basteln → Kampf.
- Lab-Build 0 Fehler + ffx-hooks (mit PolyHook) 1,113,600 B; LabDeploy auf Steam (echtes Lab + Hooks).
- RT2
Needs Testing: Custom Basteln → 4 Äonen → Build Preview → Karte im linken Panel prüfen → Fight Last Basteln → Kampf mit dem gezeigten Layout. ## [Unreleased] ### MINOR
v2.224.1.12
v2.224.1.14BETAPATCH
Seymour2. Aug. 2026
DEBUG LOG v2: 3+1 Flags pro Bereich + global auto/dev/prod + UI-Event-Tracer + WebView-Konsolen-Bridge + globale Exception + „Open debug log"-Menüpunkt
- DebugLog v2 (
FFXProjectEditor/Diagnostics/DebugLog.cs): GLOBALES Flag (auto=Debug→dev/Release→prod;FFX_DEBUG_MODE=dev|proderzwingt) + Per-Bereich-Flags (debug_flags.json:0=OFF,1=ACTIVEloggt, während der Bereich bearbeitet wird,2=ALWAYSloggt bei jedem Fehler,3=FORCEDEBUGloggt auch in Release). LOGS IMMER AUF ENGLISCH (außerhalb von i18n). 5MB-Rotation +.old1..old9(abgestimmt mit der C++-Hook-Lane). - UI-Event-Tracer:
Main_Windowfängt ALLE Button-Klicks ab (AddHandler Button.ClickEvent) und loggt automatisch mit dem aktiven Modul (UiTracer) — kein Per-Click-Logging nötig. - ActiveScope:
SetModuleaktiviert/deaktiviert den Bereich des offenen Moduls (Flag 1 nutzt es). - WebView-Konsolen-Bridge:
WebView2Hostinjiziert ein Skript, dasconsole.error/warn/logdes gehosteten JS (noclip/MapViewer) →WebMessageReceived→DebugLogumleitet (WebView.Console) — die Viewer-JS-Bugs landen jetzt im Log. - Globale Exception:
AppDomain.CurrentDomain.UnhandledException+TaskScheduler.UnobservedTaskException→DebugLog.Error("Global", ...). - Menü: „Open debug log"-Eintrag im Sprachauswahl-Flyout (öffnet die debug.log).
- Test:
DebugLogTests(3/3 — EN-Schreiben, Zeitstempel+Bereich+Typ-Format, Exception mit Typ). - Docs:
DEBUG_LOGGING_RULES.mdaktualisiert (Flag-Modell + EN + Tracer + das geforderte manuelle Minimum). - Gate: Debug + Release-Build 0 Fehler; Tests 23/23 PASS (i18n 3/3 + ViewerHub 17/17 + DebugLog 3/3).
v2.224.1.13
v2.224.1.15BETAPATCH
Seymour3. Aug. 2026
Custom-Mix-Compose-Crash: Compose-Pick-Zeichnung WÄHREND des Compose deaktiviert
- \
- Mechanismus (in IDA bestätigt): der FAULT (AV WRITE
accessed=0xBD) landet inDrawUITextElement(0x640810, pc 0x6409A5) — derctx(überFFX_Menu2D_ResolveCaptureCtxCore) ist null/beschädigt —UpdateWindowTitle(0x4FAE40) crasht beim Zeichnen des Speichertextes. Der Crash passiert WÄHREND des Compose (der ArenaMultiBossLab-Runner), bei geöffnetem Menü (Compose-Pick). - Fix:
ComposePick_Draw(der Compose-Pick-DrawCb) gibt jetzt frühzeitig zurück, wenng_jobState == JOB_RUNNING— unser Menü reiht während des Compose KEINEN Text in das 2D-Menü des Spiels ein (EncodeLabel/DrawStringkorrumpierten den Text-Pool/Cache: Cache-Hit → ohne Bounds-Check → ungültiges Handle). Das Menü friert 1–2s ein (Compose ist schnell) und kehrt danach zur Normalität zurück. - ERSTER WHY-KOMMENTAR — dieser Fix wird bereits mit dem Why-Kommentar (Englisch) im Code ausgeliefert.
- Gate: Release-Build 0 Fehler; Steam +
_isolated-Deploy (Backup140132). RT2 ausstehend: Custom Basteln → Build + Launch → der Compose-Crash sollte weg sein. ### PATCH
v2.224.1.14
v2.224.1.16BETAREVISION
Seymour3. Aug. 2026
WHY-KOMMENTAR-REGEL für Hooks + 1. WHY-Durchgang
- \
- Neue Regel (CLAUDE.md): einen Hook anfassen → das WHY im Code hinterlassen (auf Englisch) —
// WHY: ...(das Warum, nicht das Was),// FIX <date>: ...(mit dem Warum),// KEY <date>: ...(RE-Einsicht). Fokus auf die nicht-offensichtlichen Stellen (Gate, Offset, kritische Reihenfolge, Pool/ctx-Kollision, Architekturentscheidung) — kein Spam, keine Grundlagen-Bibel. - 1. WHY-Durchgang: dllmain (Bestätigungsfluss des nativen Menüs — warum der Draht entfernt wurde; Compose-Launch — Force-Gate vor ) + MsBattleEncountExe (ArenaPlusComposePick_Draw während des Compose deaktiviert — der 2D-Pool-Crash).
- Gate: Release-Build 0 Fehler (Kommentare ändern das Verhalten nicht); kein Deploy (REVISION — Doc/Code-Kommentar). ### PATCH
v2.224.1.15
v2.224.1.18BETAPATCH
Lulu3. Aug. 2026
Magic-DLL-Editor: `pppVertexApAt`-Schema zerlegt (4 echte Felder) + `pppMatrixLoc`-Aufräumung (nur Host) + DebugLog in `Magic.Parse`/`Magic.Writer`
- \
- Zerlegung (IDA-Decompile 0x7583D0):
pppVertexApAthat jetzt 4 editierbare Felder (model_indexu16@+4,vertex_countu8@+6,delay_framesu8@+7,order_modeu8@+8; Fenster{4,5},editable=true). Angewendet auffield_map.json+MagicFieldMapEmbeddedData.cs. - Ehrliche Aufräumung:
pppMatrixLoc(Decompile 0x734200) arbeitet nur auf Host-Zustand (nulla2/record) — die 3 Felderparam_s32_64/68/72waren erfundene Offsets → entfernt,payload_consumer=false,SEM_PAYLOAD(korrekt). - Nicht angewendet (RE-Erkenntnis):
pppKeThRes32/48—a2+12ist ein Ressourcen-Zeiger (Chain-Builder), kein Zahlenregler; das Bearbeiten als u32 würde den Zeiger korrumpieren. Dokumentiert. - DebugLog v2:
TryLoad(Magic.Parse) +TryGrowRecord(Magic.Writer) mitDebugLog.Info/Warn/Errorinstrumentiert (Englisch, einsprachig). - Gate: Release-Build 0 Fehler; MagicDll-Tests 76/76 + StringsIntegrity 3/3 (79/79).
- Der Crash (OHNE Compose reproduziert): F7 öffnen + Menü durchblättern (nach einem Preview/Kampf) → FAULT AV WRITE
pc=0x2409A5accessed=0xBD(das GLEICHE wie beim Compose) —UpdateWindowTitle(0x4FAE40) crasht inDrawUITextElementmit dem durch unser Menü beschädigten 2D-Menü-Pool/ctx (zeichnet JEDEN Frame viele Texte: Cache-Hit → ohne Bounds-Check). - Fix (endgültig): Hook auf
FFX_System_UpdateWindowTitle(0x4FAE40) — bei aktivem nativem Menü (F7/Untermenü/Compose-Pick) gibt der Hook 0 zurück — das Spiel zeichnet den Titeltext NICHT (kosmetisch) und fasst den beschädigten Pool nicht an → kein Crash. Der Titel wird wieder aktualisiert, wenn das Menü schließt. - Gate: Release-Build 0 Fehler; Steam +
_isolated-Deploy (Backup144123). RT2: F7 öffnen + Kampf verlassen → kein Crash. ### REVISION
v2.224.1.17
v2.224.1.19BETAPATCH
Seymour3. Aug. 2026
LIVE-POSITIONS-EDIT (Teil 1): „Punkt-Karte"-Fenster im Hook (Monster + Spieler)
- \
- Das Fenster: im Compose-Pick (Custom Basteln), nach abgeschlossenem Build-review, E drücken → wechselt in den Raster-Edit-Modus (die 16×8-Punkt-Karte — jedes Monster = ein
P, das aktive =X). - Interaktion: Pfeile bewegen den Cursor (das
P); TAB wechselt das Monster; ENTER speichertmodules\arena_positions.json(das Raster gx/gy jedes Monster); Nicht zurück. SavePositions/ResolvePositionsPath: das JSON in modules (das 16×8-Raster — der Compose-Runner liest es später und wendet den C#-BattleArenaPositionWriterauf die bin an — der Link zum nächsten Teil).- WHY (im Code): das Spiel liest die Monster-Positionen aus den chunk3-Ankern des bin (
pos = bin + chunk3 + 16×a5) — das Speichern des bearbeiteten Rasters lässt Compose die benutzerdefinierte PPlatzierung anwenden. - Gate: Release-Build 0 Fehler; Steam +
_isolated-Deploy (Backup153130). RT2: E im Compose-Pick (mit Preview) → das Punkt-Fenster öffnet sich; bewegen + ENTER speichert das JSON. ### PATCH
v2.224.1.18
v2.224.1.20BETAPATCH
Lulu3. Aug. 2026
Magic-DLL-Editor: Breadcrumb (zurück/vor) außerhalb der getrennten Ordner/Feld-Ansicht verschoben — erscheint jetzt auch, wenn man ein Blatt (Item/Feld) erreicht
- \
- Vorher: der Zurück-Button erschien nur in der Ordneransicht (
IsContainer); beim Erreichen eines Felds/Blatts verschwand er — und man konnte nicht zurück. - Jetzt: das Breadcrumb (⬅ zurück · ➡ vor · Pfad) wird immer angezeigt, wenn eine Auswahl existiert (Ordner ODER Blatt), sodass die Navigation zurück/vor von jedem Element möglich ist.
- Gate: Release-Build 0 Fehler; StringsIntegrityTests 3/3.
- Ein Fenster: im Compose-Pick (dem Custom Basteln), mit abgeschlossenem Build-review, E drücken → wechselt in den Raster-Edit-Modus (die 16×8-Punkt-Karte — jede Entität = ein
P, die aktive =X). - Interaktion: Pfeile bewegen den Cursor (das
Pder aktiven Entität); TAB wechselt die Entität; ENTER speichertmodules\arena_positions.json(das Raster gx/gy jeder Entität); Nicht geht zurück. SavePositions/ResolvePositionsPath: das JSON in modules (das 16×8-Raster — der Compose-Runner liest es später und wendet den C#-BattleArenaPositionWriterauf die bin an — der Link für den nächsten Teil).- WHY (im Code): das Spiel liest die Entitätspositionen aus den chunk3-Ankern des bin (
pos = bin + chunk3 + 16×a5) — das Speichern des bearbeiteten Rasters lässt Compose die benutzerdefinierte Positionierung anwenden. - Gate: Release-Build 0 Fehler; Deploy Steam +
_isolated(Backup153130). RT2: E im Compose-Pick (mit Preview) → das Punkt-Fenster öffnet sich; bewegen + ENTER speichert das JSON. ### PATCH
v2.224.1.19
v2.224.1.21BETAPATCH
Seymour3. Aug. 2026
Live-Positions-Edit-LINK: der Compose-Runner wendet das benutzerdefinierte Raster auf die bin an
- \
BattleComposeRunner(Teil 2 der Live-Positionierung): neuesReadCustomPositionsJson(modRoot)(liest das im Hook gespeichertearena_positions.json) +ApplyCustomPositions(...)(konvertiert das 16×8-Raster → echte X/Z — X ±28, Z 30→46 — und wendet es überBattleArenaPositionWriter.WritePositionsan, unter Beibehaltung von Y/W).- Im Compose: wenn
arena_positions.jsonexistiert, verwendet der Runner das benutzerdefinierte Raster (ersteactorCount= Monster in MonsterLive; der Rest = Party in PartyFront) statt des Kamera-Auto-Layouts. Log:[custom-positions] grid do hook aplicado em .... - Vollständiger Ablauf (Teil 1 + 2): Compose-Pick → Build-review → E → die
Ps bewegen (feile/TAB) → ENTER speichert das JSON → Launch → Compose wendet das benutzerdefinierte Raster auf die bin an → der Kampf startet mit der bearbeiteten Platzierung. - Gate: Lab (C#)-Build 0 Fehler;
ArenaMultiBossLab.dllim Spiel deployed (Backup180311). RT2: Position im Hook bearbeiten → Launch → der Kampf mit der benutzerdefinierten PPlatzierung. ### PATCH
v2.224.1.20
v2.224.1.26BETAPATCH
Lulu3. Aug. 2026
Magic-DLL-Editor: Phase 1 (Klonen) + Phase 2 (noclip-Magic-Override) + Phase 3 (eingebettete gesperrte 3D-Vorschau)
- Phase 1 — Clone-Button: neuer
CloneMagicCommand+TryCloneMagic(kopiert die Arbeitsbytes mit Edits in eine neuemagic_<id>.dll; .bak-Backup; validierte id). „Clone"-Button in der Toolbar. - Phase 2 —
MagicOverrideService: überschreibtdata/FinalFantasyX/11/<id>.binin noclip mit der benutzerdefinierten DLL (Vanilla-.magic3d.bak-Backup; Wiederherstellung). noclip rendert Magic bereits überBIN.parseMagicFile— kein tiefes RE nötig. - Phase 3 — Eingebettete 3D-Vorschau: „Preview"-Button öffnet den eingebetteten WebView2Host (Mini-Browser) im Editor, gesperrt auf die bearbeitete Magic (Override von
11/<id>.bin+ Magic-Studio-URL). Schließen-Button (✕). - Gate: Release-Build 0 Fehler; MagicDll 76/76 + StringsIntegrity 3/3.
- Phase A — echte Typ-Humanisierung: das Feld
DetailTextzeigt jetzt NUR die menschliche Beschreibung (kein[u16], kein Offset, keine Breite) — der rohe Typ, den du gesehen hast, ist weg. Read-only-Hinweis auch in der Ordneransicht (nicht editierbare Tombola wie pppDrawMatrix zeigen „Read-only" + Grund). - Phase B — Massen-IDA-Recherche (23 Handler dekompiliert): 3 SEM_PAYLOAD → FECHADO mit echten Feldern umklassifiziert:
pppKeLnsLpSft(110 DLLs, 2 Lens-Shift-Floats),pppDrawHook(10 DLLs, Callback),pppKeAcmCic(Modus). Den Rest bestätigt (KeShpTail*, KeDMat*, Matrix*, DrawMatrixWood) als host-only/Stubs (keine Zerlegung) — dokumentiert. - Phase C — erweiterter Katalog: +19 menschliche Beschreibungen (insgesamt ~94 Opcodes) für das neue FECHADO + host-only SEM_PAYLOAD.
- Gate: Release-Build 0 Fehler; MagicDll 76/76 + StringsIntegrity 3/3 (79/79).
- Feldansicht neu gestaltet: ein Feld zeigt jetzt Name + menschliche Beschreibung + lesbaren Typ (z. B. „decimal (float)") + editierbaren Wert in einer Karte. Offset und roher Typ (
u16) ausgeblendet — der Spieler fasst sie nicht an. - Klares Read-only: nicht editierbare Felder zeigen einen hervorgehobenen „Read-only"-Hinweis + den Grund (z. B. „raw data — the editor can't decompose it yet").
- Katalog menschlicher Beschreibungen (
MagicPppDescriptionCatalog.cs): ~60 ppp-Opcodes mit dem, was sie in Spielersprache tun (basierend auf IDA-Decompile + RE-Docs). Angezeigt im DetailText des Tombola. - Grow-Size-Tooltip: erklärt, dass 4B/8B/12B/16B = zusätzliche Bytes Platz (1/2/3/4 Werte) sind.
- Gate: Release-Build 0 Fehler; StringsIntegrity 3/3 + MagicDll 76/76 (79/79).
v2.224.1.25
v2.224.1.28BETAREVISION
Lulu4. Aug. 2026
Magic-DLL: Phase 4 — tiefes RE der 3D-Vorschau (noclip-Layout an der Quelle kartiert)
- \
- Neues Doc:
docs/reverse/magic_dlls/NOCLIP_PREVIEW_LAYOUT_MAPPING_2026-08-03.md— kartiert den PfadparseMagicFile?sniffMagic?parseParticleDatavon noclip.website (echte Quelle). - Urteil: Feld-Edits auf das Fenster beschränkt = SICHER für die Vorschau (noclip liest dieselben Offsets erneut; feste Strides 0x28/0x10 unverändert); strukturelles Grow mitten in einem Record, über das noclip hinwegschreitet = BRICHT die Vorschau; sicheres Grow = zählergesteuerte Listen-Erweiterung am Ende + Zähler-Erhöhung.
- Clone-Einschränkung: noclip rendert nur ids, die in seiner
magicTablevorhanden sind; id außerhalb der Tabelle →sniffMagicnull → leere Emitter (noclip-Limitation, nicht der Override). - Nur Doku/RE (REVISION) ? KEINE Verhaltensänderung. — CUSTOMMIX-MUSIK GELÖST: track 145 "Challenge" spielt im Kampf.** Lane Jarvis-HOOK. [previous:
v2.224.1.26] - Der Sieg: nach 4 fehlgeschlagenen Routen (
SetArenaBattleMusicPending→ nur Arena+-Interceptor;PrepBattleTrack→ Engine-Ebene, nicht FMOD;PlayTrackWithPreload→ setzteevent_index, füllte abertracks_array[].event_ptr),SwitchCrossfade(self, 145, 0, 1)entsperrte es — via IDA MCP aufffxoficial.exe.i64(FFX.exe pid=49476). - Schlüssel-Erkenntnis (RE, Commit
d4fdbc6c): der FFX-Audio-Baum hat 3 Ebenen —PlayTrackByIndex(0x7097E0) überspringt still, wenntracks_array[track].event_ptr == 0;PlayTrackWithPreload(0x886980) setzt nurevent_indexin der Engine-Unterstruktur;SwitchCrossfade(0x7089F0, Pfad B) ist die EINZIGE, dieevent_ptrbefüllt viaReadEventByRuntimeId→MapRuntimeIdToFevIndex(Tabelle0xB4F1C8) →EventSystem->GetEvent. - Checks, die beweisen, dass 145 spielen sollte:
dword_B4F1C8[145] = 0x48(FEV-Index 72, gültig ≤181);unk_CEC164 = 0(Lade-Gate blockiert nicht);IsValidTrackIndex(145) = true(145 ≤ 0xB5). - Fix in
MusicHook_Shim: beim OverrideSwitchCrossfade(overrideTrack, 0, 1)aufrufen (fade=0, load_flag=1) stattPlayTrackWithPreload; Trampolineg_trampolineSwitchbevorzugen (überspringt den Shim, vermeidet Rekursion). - RT2 vom Benutzer bestätigt: „JETZT FUNKTIONIERT TRACK 145! ICH BIN MIT DER NEUEN MUSIK IM KAMPF!" — Challenge spielt in CustomMix.
- Gate: Release-Build 0 Fehler; Deploy Steam +
_isolated; Commitd4fdbc6cgepusht.
v2.224.1.27
v2.224.1.30BETAPATCH
Seymour5. Aug. 2026
CustomMix Knete: Kampfkosten NIE abgebucht (Race-Condition-Bug) + Compose überschreibt nie mehr Vanilla-Bins
- \
- CustomMix-Gil:
ArenaPlusComposePick_Close()nullteg_pendingLaunchGilCost, BEVORLaunchComboBattleFromPumpes lesen konnte — die Knete wurde im Menü validiert, aber nie abgebucht (x3/x4/x5, seit Compose implementiert wurde). Die Summe war korrekt (z. B. 325000G für Trio), aber z. B.gilCost=0im Log. Fix: das Nullsetzen vonClose()nachOpen()verschoben (Session-Open-Reset, nicht beim Schließen). - Compose überschrieb Vanilla-Bins (d5e56701): 5 Cross-Map-Szenarien (macalania_forest x3, remiem x3/x4/x5, bikanel x4) wurden in die Template-Bin (
mcfr00_00,kino00_00,bika02_01) statt in den dedizierten Carrier (mcyt00_22,nagi05_23,nagi05_22) — die Engine lud Zufallsbegegnungen statt des komponierten Teams. C#:ResolveOutputBattleIdgibtcarrier.BattleIdzurück. C++: Der Hook-Pin verwendetroute.battleId(Carrier) für den Begegnungsnamen. Vanilla-Bins intakt. - Deploy: Hook-DLL neu gebaut + Steam-Deploy. Gate:
arena_plus_charge_gil.flag(aktiv). - Phase 3 — eingebettete id-RE: Vergleich magic_0140 vs magic_0141 (gleiche Größe, 22 Diffs) ergab, dass die id NICHT als u32 LE in .data existiert → nur als 3 UTF-16LE Strings („magic_0140“ / „magic_0140.dll“) an den Offsets 0x07E3C6, 0x07E4B2, 0x07E4F2.
- Phase 3 —
MagicDllNameRewriter: schreibt die 3 Strings inTryCloneMagicauf die neue id um (4-stellig nullaufgefüllt = gleiche Länge = kein Offset-Shift). Gegen die echte DLL validiert: 3 Vorkommen umgeschrieben, Größen-Delta = 0 (RT0 byte-treu außerhalb der Strings). - Phase 4 —
MagicCommandAssociation: verbindet eine command.bin-Zeile mit dem Klon, indemAnim1Id = newIdgesetzt wird (bewiesene Kette: command.Anim1Id → magic_%04d.dll). Feld-EDIT (kein Grow) viaAbility_Command.WriteList(erhält den Text-Pool). Ehrliche Einschränkung: ersetzt den visuellen Effekt der ursprünglichen Fähigkeit; eine NEUE Fähigkeit (die das Original erhält) würde Grow erfordern (Referenz:CommandGrowWriter.AppendElementWards). - Deploy: LAB-Build in
FFX\Mods\FFXProjectEditor-v2.224.1.29\. offline_ci: 8 Fehler (alle PhaseManager/Kampf vorbestehend — KEINER von Magic/PPP).
v2.224.1.29
v2.224.1.31BETAPATCH
Seymour6. Aug. 2026
F7-Marathon: 6 Bugs + CustomMix Ultra + Controller
- 6 Bugs behoben: schwarzer Bildschirm beim F7-Exit (0x13407E4 in allen Close-Pfaden gelöscht), Challenge-Musik leckt bei JEDEM Kampf (F7_ApplyMusicBattle-Default=145 entfernt), Doppel-Input-FSM vs. Menü (ClaimModal/ReleaseModal in F7-Untermenüs), Input-Spam beim Halten von Bestätigen/Abbrechen (Cooldown auch auf Abbrechen), True Nightmare falsche Elemente (jetzt HP 3x, Stats ~2x, Haste+Regen+Protect+Shell, kein Weak/Resist/Absorb), Force Battle erfasste Dark Aeons/Combos (F7_SetSkipForceCapture-Filter).
- CustomMix Ultra Phase 1+2: Compose-Engine C# (RunUltra — 1–8 Monster, Auto-Layout, Deploy) + F7-Menü integriert (Arena+ → CustomMix Ultra → Build+Launch). Carrier zzzz00_240, Token 0x00F000F0. 13 Debug-Logs.
- Controller in ComposePick: L2=Grid bearbeiten, R2=Kamera, R1=nächste, L1=vorherige via PadDir-Kantenerkennung + Tastatur-Fallback. PS+Xbox-Doppellabels (L2-LT, R2-RT, L1-LB, R1-RB).
- Deploy: Hook-DLL + Lab-C# auf Steam deployed. Pläne: Monster-AI-Swap, Ultra-Phasen 3–4.
v2.224.1.30