Sphere grid planner for Final Fantasy X.
  • C# 69.4%
  • HTML 16.9%
  • CSS 11.9%
  • JavaScript 1.8%
Find a file
2026-05-07 21:17:22 +02:00
.claude Initial commit 2026-05-07 21:00:31 +02:00
FFX.SphereGrid.Core Initial commit 2026-05-07 21:00:31 +02:00
FFX.SphereGrid.Data Initial commit 2026-05-07 21:00:31 +02:00
FFX.SphereGrid.Desktop Initial commit 2026-05-07 21:00:31 +02:00
FFX.SphereGrid.Extractor Initial commit 2026-05-07 21:00:31 +02:00
Saves Initial commit 2026-05-07 21:00:31 +02:00
.gitignore Initial commit 2026-05-07 21:00:31 +02:00
CLAUDE.md Added README.md and updated CLAUDE.md 2026-05-07 21:17:22 +02:00
FFX.SphereGrid.slnx Initial commit 2026-05-07 21:00:31 +02:00
goal-grid.md Initial commit 2026-05-07 21:00:31 +02:00
goal-spheregrid.json Initial commit 2026-05-07 21:00:31 +02:00
grid-extractor.md Initial commit 2026-05-07 21:00:31 +02:00
grid-jppc02-jppc10.txt Initial commit 2026-05-07 21:00:31 +02:00
node_types.txt Initial commit 2026-05-07 21:00:31 +02:00
README.md Added README.md and updated CLAUDE.md 2026-05-07 21:17:22 +02:00
save-reader.md Initial commit 2026-05-07 21:00:31 +02:00
savestate.json Initial commit 2026-05-07 21:00:31 +02:00
stat_maxing.md Initial commit 2026-05-07 21:00:31 +02:00

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.Wpf 10.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

  1. Launch the desktop app.
  2. 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.
  3. (Optional) Click Load Goal Grid and select goal-spheregrid.json from the repo root to enable goal-comparison coloring and the sphere recap.
  4. 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.