- C# 69.4%
- HTML 16.9%
- CSS 11.9%
- JavaScript 1.8%
| .claude | ||
| FFX.SphereGrid.Core | ||
| FFX.SphereGrid.Data | ||
| FFX.SphereGrid.Desktop | ||
| FFX.SphereGrid.Extractor | ||
| Saves | ||
| .gitignore | ||
| CLAUDE.md | ||
| FFX.SphereGrid.slnx | ||
| goal-grid.md | ||
| goal-spheregrid.json | ||
| grid-extractor.md | ||
| grid-jppc02-jppc10.txt | ||
| node_types.txt | ||
| README.md | ||
| save-reader.md | ||
| savestate.json | ||
| stat_maxing.md | ||
FFX Sphere Grid Planner & Tracker
A Windows desktop app for planning and tracking a maxed-out Final Fantasy X HD Remaster Standard Sphere Grid. Loads your live save file, compares the current state against a "perfect grid" target, and reports the exact spheres needed to finish.
Built with WPF + Blazor Hybrid (
BlazorWebView) on .NET 10.
Features
- Interactive SVG rendering of all 860 nodes and 881 edges (zoom + pan)
- Auto-loads from your FFX save file and live-refreshes whenever the game writes (
FileSystemWatcher) - Per-character activation tracking for all 7 party members
- Goal grid mode — colors every node by status (
done/ready/wrong-activated/wrong-pending) against a target layout - Path planner — Dijkstra-based shortest path from a character's current node to any target
- Sphere recap — exact counts of Clear Spheres, mutator spheres (Strength / Magic / HP / …), and activation spheres (Power / Mana / Speed / Fortune / Ability) still required
- Stat-category filters + "hide completed" view
- Bundled precomputed goal grid (
goal-spheregrid.json) following the standard stat-maxing guide
Prerequisites
- Windows 10/11
- .NET 10 SDK (preview — the project pins
Microsoft.AspNetCore.Components.WebView.Wpf10.0.0-preview) - WebView2 runtime (ships with modern Windows; otherwise install WebView2 Evergreen)
- A copy of FFX HD Remaster on PC for save-file integration (optional — the grid still renders without it)
Build & Run
dotnet build FFX.SphereGrid.slnx
dotnet run --project FFX.SphereGrid.Desktop
State persists to %UserProfile%\.ffxplanner\state.json.
Using the App
- Launch the desktop app.
- In the Save File panel, the FFX save folder
(
Documents\SQUARE ENIX\FINAL FANTASY X&X-2 HD Remaster\Final Fantasy X) is auto-detected. Pick a slot and click Watch Save File — the grid updates in real time as you save in-game. - (Optional) Click Load Goal Grid and select
goal-spheregrid.jsonfrom the repo root to enable goal-comparison coloring and the sphere recap. - Click a character to make them active. Without planning mode, clicking a node sets that character's current position. Toggle Plan Path and click a node to compute the shortest route from the active character.
Solution Layout
| Project | Target | Role |
|---|---|---|
FFX.SphereGrid.Core |
net10.0 |
Domain models (SphereNode, PlaythroughState, SphereClassifier) and Dijkstra |
FFX.SphereGrid.Data |
net10.0 |
JSON repositories, embedded spheregrid.json / clusters.json / nodetypes.json, binary SaveFileReader, goal-grid loader |
FFX.SphereGrid.Desktop |
net10.0-windows (WinExe, WPF) |
BlazorWebView UI, services, SVG canvas, JS pan/zoom interop |
FFX.SphereGrid.Extractor |
net10.0 (Exe) |
One-shot console tool: build dataset from FFXDataParser output, read save files, generate goal grids |
Extractor Commands
The FFX.SphereGrid.Extractor console produces and inspects all data
artifacts. Run from the project directory:
# Parse FFXDataParser text output into spheregrid.json + clusters.json
dotnet run --project FFX.SphereGrid.Extractor -- extract grid-jppc02-jppc10.txt FFX.SphereGrid.Data
# Parse the panel.bin TypeCode catalog into nodetypes.json
dotnet run --project FFX.SphereGrid.Extractor -- parsetypes node_types.txt FFX.SphereGrid.Data
# Decode an FFX save file to JSON for inspection
dotnet run --project FFX.SphereGrid.Extractor -- readsave "<save-folder>\ffx_001" savestate.json
# Generate a save-aware goal grid (preserves existing +4 nodes to minimize Clear Spheres)
dotnet run --project FFX.SphereGrid.Extractor -- goalgen FFX.SphereGrid.Data\spheregrid.json goal-spheregrid.json --save savestate.json
Data Provenance
The static grid dataset is extracted from the game files via FFXDataParser:
jppc/menu/abmap/dat02.dat— Standard grid layout (positions, clusters, edges)jppc/menu/abmap/dat10.dat— Standard grid node contents (type + label per index)panel.bin(READ_ABILITIES section) — 127-entry TypeCode catalog
Extraction details in grid-extractor.md.
The save-file format (offsets, bitmasks, node table) is documented in save-reader.md.
The goal grid heuristic and stat-maxing targets are in stat_maxing.md and goal-grid.md.
Architecture and domain model details are in CLAUDE.md.
Status
Most of the build order in CLAUDE.md is done. Remaining: manual sphere-inventory editor, multi-character simultaneous planning, and Expert Sphere Grid support.