Update 2.66
6/10/2026
v2.66.0BETAMINOR
Seymour
Blitzball ROSTER (60 players' stats/growth) NOW EDITABLE in the GAME FILE — `.ebp` ATEL-variable writer PROVEN (RT0 byte-identical + mutation-isolated)
- The first writer that edits the blitzball base in a GAME FILE, not the save. The 60 players' base stats + growth curves live INSIDE
bltz0002.ebpas ATEL variables0x126..0x12E(8 stats × 60 players × 4 floatsa,b,c,growthType; growth formula decoded:gt -1→1,0→a+b·Lv,1→a+b·Lv^c,2→a+b·Lv−c·Lv²,3→a+b·Lv+c·Lv²). New primitiveEvent_File.PatchEventDataElement(varId, idx, bytes)(FfxLib/Event/Event_File.AtelVar.cs): an in-place ATEL eventData-variable patcher, length-preserving via the existingScriptChunkOverridehook →Write()re-packs byte-identical except the edited slice. New read/write file-classFfxLib/Blitzball/BlitzballRoster_File.cs(decodes/edits the 60×8 growth) + gateTools/BlitzballRosterRt0.cs(--blitzball-roster-rt0). PROVEN: byte-exact read vs the FFXDataParser dump (player0 HP =70 + 30·Lv + 0.711·Lv²); no-edit Read→Write byte-identical (5,445,248 B); 480/480 growthType valid; a single-float patch isolated to the 4 target-element bytes at the predicted offset (@0x491680). RE (the missing piece): the variables' value-base =worker0_header + 0x30(robustly resolved, no hardcode). Honesty: ONLY stats/growth are file-data; names = string macro0x700+idx(writer exists, wiring pending), positions/technique-definitions/match-engine = EXE (IDA-pending), learned-techs/cost/contract/level/EXP = save (out of game-file scope). No UI yet (next =BlitzballRosterEditor). (NEW capability: first blitzball roster writer into a game file). Does not touch the save (CHAPPU/checksum), runtime, SIN, or other lanes; only ADDS new files + 1Program.csdispatch. Build 0 errors / 361 warnings;--blitzball-roster-rt0PASS (no-edit byte-identical + mutation isolated). Docs:docs/reverse/FFX_BLITZBALL_ROSTER_BASE_RE_2026-06-10.md+docs/ai/BLITZBALL_100PCT_EDITOR_CHECKLIST_2026-06-10.md
v2.65.3
v2.66.0.1BETAREVISION
Seymour
Blitzball: player names CONFIRMED editable (macrodic chunk 7) + in-lane accessor
- (code enters but behavior unchanged — accessor not yet consumed; RE/prep). Decoded the real
new_uspc/menu/macrodic.dcpand proved the 60 players' names = macro0x700+idx= chunk 7 (FFX charsetbyte−0x0F; 101 entries):0x702=Datto,0x703=Letty,0x704=Jassu,0x705=Botta,0x706=Keepa,0x707=Bickson…;0x700/0x701reference the renameable lead characters (Tidus/Wakka). → Already editable TODAY via theMacroExplorermodule (reads+writesmacrodic.dcpwith SafeWriter/undo/validation/round-trip). New read-only accessorFfxLib/Blitzball/BlitzballPlayerNames.cs(index↔macro0x700+idx,TryGetName) as prep for the futureBlitzballRosterEditorUI to show/edit the name inline. Does not touchMacroExplorer(text lane) or other lanes; only adds 1 file + docs. Build 0 errors / 361 warnings. Docs:docs/reverse/FFX_BLITZBALL_ROSTER_BASE_RE_2026-06-10.md §3+docs/ai/BLITZBALL_100PCT_EDITOR_CHECKLIST_2026-06-10.md
v2.66.0