Update 2.209
2.8.2026
v2.209.0.0BETAMINOR
Seymour1. Aug. 2026
Aurora × noclip: 3D-Battle-Bridge (der Editor rendert jetzt das ECHTE Spielfeld mit der editierten Formation)
- Entdeckung: noclips
parseEncounter(bin.ts:2494) verwendet EXAKT unserBattle_File-Layout (script@0x4, monster ids i16@+0xC, float32 16B-Positionen) —0e/<id>.binist byte-identisch mitbtl_*.bin(Hash-Beweis: 0e/0002 == bjyt02_00). EncounterIndexBridge(FfxLib/Battle): SHA-256 battleId↔encounterId-Index — 614/858 Battles matchen (azit03_00→0e/00EF, klyt00_00→0e/001E, mihn00_00→0e/002F); 244 Unmatched ehrlich gemeldet.Aurora3DLauncher+ "🐉 View battle in 3D (noclip)"-Button in Aurora Chamber: überschreibt0e/<encId>.binmit dem AKTUELLEN btl (.aurora3d.bak-Vanilla-Backup, "↩️ Restore 3D"-Button) und öffnetindex.html?battle=<encId>#ffx/b<mapIndex>(mapIndex aus EncounterTable battlefield&0xFF) — der noclip-native-PS2-Render zeigt die editierte Formation/Positionen.- Additiver noclip-Patch (scenes.ts
selectEncounter, ~20 Zeilen):?battle=-Param erzwingt die exakte Encounter (überspringt Gewichtsauswahl); dist neu gebaut + im 8769-Serve-Dir aktualisiert (im served Bundle verifiziert). - Gates:
--filter AuroraOverlayEnrichment9/9 PASS; volle Suite 357/357 PASS;Aurora3DLinkLab --override azit03_00copy=True/restore=True; HTTP-E2E: 8769 serviert den Override byte-für-byte. Doc:docs/reverse/FFX_AURORA_NOCLIP_3D_BATTLE_BRIDGE_2026-08-01.md. - Phase 2 (next): Drag/Kamera in noclip → POST an den Editor (AuroraDragBridge-Muster) → in bin schreiben → neu laden. Per-Feld-Visual-Smoke ausstehend. ### PATCH
v2.208.0.1
v2.209.1.0BETAPATCH
Seymour1. Aug. 2026
Aurora: Viewer IM Editor (WebView2) + RealGame/EditViewer-Bezeichnungen + Battle-Vorschau ohne Spielmenü
- Eingebettet: Aurora Chamber erhielt eine
WebView2Host-Spalte — „Renderizar EditViewer" und „🐉 Ver no RealGame (ingame)" öffnen jetzt INNERHALB des Editors (kein Browser); ⟳ Reload-Viewer-Button;EmbeddedReloadRequestedlädt nach dem Speichern automatisch neu. - Aktionen oben: fixierte ActionBar (Renderizar EditViewer · Ver no RealGame · Restaurar · Salvar posições · +/- monster · Exportar âncoras) — nichts mehr im Scroll versteckt.
- UI-Umbenennung:
noclip→ RealGame (ingame);MapViewer→ EditViewer (Texte, Status, Banner). - Kein Spielmenü: fixierte
battle-preview-Szenenbeschreibung im noclip-FFX-Katalog — URL?battle=<encId>&map=<mapIndex>#ffx/battle-previewlöst immer direkt nach FFX auf (mapIndex muss nicht unter den 55 katalogisierten sein); dist neu gebaut + im ausgelieferten Bundle verifiziert (battle-preview+get("battle")vorhanden). - Auto-Sync: SaveDraggedPositions/SaveCameraShots/SaveCameraFloats/AddMonster/RemoveMonster wenden den RealGame-Override erneut an + laden den Viewer neu (gespeicherte Position erscheint im Spiel ohne erneutes Klicken).
- Gates: volle Suite 359/359 PASS; Release-Build 0 Fehler; ausgeliefertes Bundle verifiziert. ### MINOR
v2.209.0.0
v2.209.2.0BETAPATCH
Seymour1. Aug. 2026
Aurora UI/UX: sauberes Dashboard + dedizierte Pop-up-Viewer
- Dashboard: Hauptbildschirm ist jetzt die Kartenauswahl — Liste mit Badges ([ gLTF ] [ N tex ] [ N/N Submeshes ] [ STUB ] [ map-only ], tonfarben), Premium-Dunkel-Karte für den Ort (#16121F-Hintergrund + weißer Text), Aktionen an EINEM Ort (unter der Karte: Renderizar EditViewer · 🐉 Ver no RealGame · 💾 Salvar posições · ➕/➖ Monster · Exportar âncoras · ↩️ Restaurar) — Button-Duplizierung entfernt.
- Pop-ups (neue Architektur): dediziertes
AuroraViewerWindow(WebView2) für EditViewer (Rohbearbeitung) und RealGame (nur lesen) — sie interagieren NICHT miteinander; Karten-/Kampfwechsel im Dashboard schließt alle Fenster automatisch (verhindert das Bearbeiten von Monstern auf der falschen Karte / Leaks). - Sidebar-Overlay: das schwebende Viewer-Panel wurde eine einklappbare Sidebar (❮ Hide → 58px-Streifen) — blockiert die 3D-Ansicht nicht mehr.
- Große Texte → [?] mit Tooltip (HonestyBanner in den „?"-Button-Tooltip verschoben).
- Gates: volle Suite 360/360 PASS · Release-Build 0 Fehler ·
node --checkOK. ### PATCH
v2.209.1.0
v2.209.3.0BETAPATCH
Seymour2. Aug. 2026
Custom Mix / Arena+ freigegeben: Lab-Pfad behoben + ArenaMultiBossLab ins Spiel ausgerollt + vanilla-root konfiguriert
- Lab-Pfad-Fix (
ArenaPlusComposePick.cppResolveLabExe): Kandidat..\data\modules\tools\ArenaMultiBossLab\ArenaMultiBossLab.exehinzugefügt — das Projekt-Tools-Muster (data\modules\tools, wo SinScaleInject liegt). Vorher suchte der Hook nur inmodules\tools\...— das Lab wurde nie gefunden → CreateProcess schlug fehl → Custom Mix komponierte im Spiel nie etwas. - Lab im Spiel deployed:
ArenaMultiBossLabgebaut (Release, 0 Fehler/0 Warnungen) und (exe+dll+deps+recipes) nachdata\modules\tools\ArenaMultiBossLab\kopiert. - Vanilla-Root konfiguriert:
modules\config\arena_plus_compose_vanilla_btl.txterstellt, das aufFFX Extracted\FFX\ffx_ps2\ffx\master\jppc\battle\btlzeigt (Config-Txts waren vorher leer →--vanilla-root ""→ Lab schlug fehl). Mod-Root-Standard OK ({gameRoot}\data\mods\...\btlexistiert). - v6-Rollback absorbiert: HEADs dllmain ist bereits der v5-Zustand (DrawString
0x9016B0-Crash im DIFF — die neue Navigation wird mit verfügbarer IDA wieder eingeführt). Hinweis im 2.207.6.0-Changelog-Eintrag. - RT2
Needs Testing(Custom Basteln): F7 → Arena+ → Custom Basteln → Äonen wählen → Launch → komponierter Kampf (z. B. Bikanel + 4 Dark Aeons, battle_id bika02_01). Relaunch nutzt das vom 1. Launch erstellte Manifest. ### PATCH
v2.209.2.0
v2.209.4.0BETAPATCH
Seymour2. Aug. 2026
SIN freigegeben: SinScaleInject-Pfad behoben (data\modules\tools) + Roster-Verzeichnis behoben + Macalania/Thunder-Roster aus git wiederhergestellt + Tool ausgerollt
- Exe-Pfad-Fix (
SinCurseHook.cpp):{DLL_DIR}\tools\SinScaleInject\→..\data\modules\tools\SinScaleInject\SinScaleInject.exe(Projekt-Tools-Muster — vorher schlug CreateProcessA fehl und SIN lief nie im Spiel). - Roster-Verzeichnis-Fix (
SinScaleInject/Program.cs): Standard jetzt{gameRoot}\data\modules\tools\SinScaleInject\data\rosters(warmodules\tools\...— eine Ebene daneben). - Rosters aus git wiederhergestellt (Commit
eb2e93ed):spira-sin-area-rosters/mitmacalania_all/bosses/field/woods.csv+thunder_plains.csv(monster_id,role,note,allowed_presetsmit UNI-001..006-Allowlist) + README. - Im Spiel deployed:
SinScaleInjectgebaut (Release, 0 Fehler) und nachdata\modules\tools\SinScaleInject\kopiert + Roster nachdata\modules\tools\SinScaleInject\data\rosters\. - RT2
Needs Testing(SIN): Gebietswechsel mitsin_curse.flag→ SinScaleInject läuft (LogSinCurseHook SinScaleInject SUCCESS) → Gebietsmonster mit skalierten HP/Stats (T) +[UNI]-Kernelnamen + ATEL-Handler in AiFile → Kampf. - ffx-hooks mit dem SIN-Pfad-Fix: Build bereit, Deploy ausstehend (Spiel war beim Commit offen — deployen, wenn geschlossen). ### PATCH
v2.209.3.0
v2.209.5.0BETAPATCH
Seymour2. Aug. 2026
Custom Mix/Arena+-Bossmusik freigegeben: Heartbeat-Gate blockiert den MusicHook nicht mehr
- Das Problem: MusicHook (der den Kampfmusik-Override anwendet) wurde vom
WaitForProbeHeartbeat-Gate blockiert — der ffx-probe-Heartbeat steigt nie (Probe ohne gehocktem GetDeviceState) →MusicHook install skipped: ffx-probe heartbeat gate failed→ Arena+-Musik wurde nie abgespielt. - Die Musik:
ARENA_PLUS_MUSIC_TRACK_DEFAULT 145 = "Challenge"(Boss-Kampf-Track — alle Arena+-F7-Zeilen: Dark Aeons + Der Richter; Override viaarena_plus_music_<row>.txt/FFXHOOKS_ARENAPLUS_MUSIC_TRACK_<N>). - Fix: das Gate ist jetzt nicht blockierend — wartet 10s auf die Probe (wenn sie antwortet, aktiviert sich auch der zusätzliche SOUNDCMD) und installiert MusicHook auch ohne Heartbeat (Override via FFXHooksBlock + Kampf-Eintritts-Hooks Prep/PlayTrackWithPreload/SwitchCrossfade funktionieren ohne die Probe; nur der SOUNDCMD-Trigger degradiert — WARN im Log).
- RT2
Needs Testing: Custom Basteln → Launch → der komponierte Kampf sollte Challenge (145) statt des gemeinsamen Kampfthemas spielen. - Notiert als offen: ffx-probe-Heartbeat steigt nie (dinput8 66.560 vom 07-19) — untersuchen, warum GetDeviceState nicht gehockt ist (betrifft SOUNDCMD/FORCEBATTLE via Probe; Musik hängt nicht mehr davon ab). ### MINOR
v2.209.4.0
v2.209.6.0BETAPATCH
Seymour2. Aug. 2026
Custom-Mix-Musik ohne Stille/Leak + Wiederherstellung zusammengesetzter Bins (überschreibt Kanonicals niemals dauerhaft)
- Stille-/Leak-Fix (MusicHook.cpp
MusicPlayWithPreload_Shim): bei degradiertem SOUNDCMD (kein Probe-Heartbeat) unterdrückte der Shim die Vanilla-Musik und verließ sich darauf, dass soundcmd den Override abspielt → Kampf in Stille + Override leckte in den nächsten PlayTrack (die „gewünschte" Musik lief beim Verlassen). Jetzt, ohne soundcmd: ersetzt den Track und spielt die Vanilla-Musik (keine Stille, kein Leak); mit soundcmd: behält das Lab-Rezept (unterdrücken + Rezept). - Wiederherstellung der komponierten Bin auf dem normalen Custom-Mix-Pfad:
ArmDeferredFileRestorewar nur auf dem 781D60-Pfad (Cross-Map) aktiviert — der normale Pfad (z. B. komponierte bika02_01) ließ die Bin dauerhaft im Mod-Root zurück (überschrieb die kanonischen Gebietskämpfe). Jetzt aktiviert auch der normale Pfad die Wiederherstellung (~30s). - Boot-Wiederherstellung (
ArenaPlus_RestorePendingComposeOnBoot): wenn eine vorherige Sitzung vor der verzögerten Wiederherstellung (~30s) geschlossen wurde, stellt der Boot die Kanonische aus.spiraforge.bakwieder her (liestbattle_idaus dem gameRootcompose_last.json) — die Komposition bleibt nie dauerhaft. - Build PASS + LabDeploy auf Steam.
- RT2
Needs Testing: Custom Basteln → Launch → komponierter Kampf mit der richtigen Musik (keine Stille) → ~30s später wird die kanonische Bin wiederhergestellt → Gebiets-Zufallsbegegnungen wieder normal; Spiel vor 30s schließen → nächster Boot stellt wieder her. ### PATCH
v2.209.5.0
v2.209.7.0BETAPATCH
Seymour2. Aug. 2026
Custom-Mix-Musik: soundcmd-Callback nur gesetzt, wenn die Probe aktiv ist (kein soundcmd → Shim ersetzt den Track und spielt den Vanilla-Titel)
- Warum der 2.209.6.0-Fix nicht reichte:
g_arenaSoundCmdFnwar nicht null (der dllmain setzteArenaPlus_MusicHookProbeSoundCmd, als der Hook installiert wurde) — er scheiterte nur zur Laufzeit (kein Probe-Heartbeat) → der Shim sah den Callback → nutzte den Lab-Pfad (suppress + recipe) → soundcmd scheiterte → Stille + Leak blieb. - Fix: der dllmain hält jetzt
probeAlive = FFXHOOKS_SKIP_PROBE_WAIT || WaitForProbeHeartbeat(10000)und setzt den soundcmd-Callback nur, wenn die Probe lebt (3 Install-Punkte). Probe tot → Callback null → derPlayTrackWithPreload-Shim ersetzt den Track und spielt die Vanilla → Challenge (145) spielt im Composed-Battle, keine Stille, kein Leak bis zum Exit. - Idle-Crash-Urteil (in IDA via MCP 13337 untersucht): der fmodex-AV ist vorbestehend —
AsyncTask_InvokeCallbackThunk(0x691480) ruft(*(this+4))(*(this+8))mit this+4/this+8 = freigegebener Heap (0x10CDCDCD); der Thunk-Pointer lebt in Tabelle0xB46FA0(Audio-Region). Keiner unserer Hooks berührt diesen Pfad (AsyncTask/0x691480/0xB46FA0) — die AVs stammen aus der Zeit vor F7. Der globale VEH fängt und loggt ihn (Diagnose). Fix = herausfinden, wer den Audio-AsyncTask freigibt (separater Fokus). - Build PASS + LabDeploy zu Steam (20:09). ### MINOR
v2.209.6.0
v2.209.8.0BETAPATCH
Seymour2. Aug. 2026
Boot-Wiederherstellung behoben (echtes Manifest unter `modules\compose_last.json`) + zusammengesetztes Test-Bin wiederhergestellt + unterstützte Custom-Mix-Szenarien bestätigt
- Boot-Restore behoben: das echte Manifest wird vom Lab bei
modules\compose_last.json(modulrelativ) geschrieben — der Boot-Restore suchte nur im gameRoot → ein unterbrochenes Session-Composed-Bin blieb auf der Platte. Jetzt sucht er in der Reihenfolge:modules\compose_last.json→{gameRoot}\compose_last.json→{gameRoot}\mods\Spira Reforge\arena\compose_last.json. - Disk-Cleanup: das Composed-Bin des Tests
bika02_01.bin(19:37) wurde auf Vanilla wiederhergestellt (.spiraforge.bakvom 09/06/2024, 24,016 Bytes) — per Größe/Zeitstempel bestätigt. - Custom Basteln unterstützte Szenarien (via Lab --compose dry-run verifiziert): bikanel (bika02_01), macalania_forest/open/open2 (mcfr00_00/mcyt00_00/mcyt00_21), remiem (kino00_00), cavern/cavern_alt (nagi05_50/24/25). Mushroom Rock ist KEIN unterstütztes Szenario (compose fällt auf cavern zurück — deshalb „öffnete" das x4 dort nicht). x3/x4 (3-4 Akteure) composieren perfekt auf unterstützten Szenarien (dry-run bewiesen: 4 Tombola, chunk2/chunk3 ok).
- Build PASS + LabDeploy zu Steam. ### PATCH
v2.209.7.0