Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 20 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,29 +15,31 @@ The desktop connector can currently:
- keep every non-squad index record behind a visibility gate until club scout knowledge can be mapped safely;
- validate signatures, object types, collection bounds and pointer chains before returning entities.

Version `0.1.4` supports FM26 `6000.0.52.8888375`, product `6000.0.52f1-fm26-05f1 (87a0370e9917)`, x64, executable SHA-256 `3653C97F9CCEC2BE28EDC4FAAE67304B5B6C26733F2F07DEA3E7C591D3B9FF73`.
Version `0.1.17` supports FM26 `6000.0.52.8888375`, product `6000.0.52f1-fm26-05f1 (87a0370e9917)`, x64, executable SHA-256 `3653C97F9CCEC2BE28EDC4FAAE67304B5B6C26733F2F07DEA3E7C591D3B9FF73`.

Live-memory tactic reading is disabled and cannot block squad/player connection. The user may choose one `.fmf` tactic file through the native Windows file picker. GlassScout validates and copies that file into local app data, then reports whether its format can be decoded. The current FM26 FMF container is recognized but not yet fully decoded, so no formation, role, duty or tactic-fit result is guessed.
The native FM26 reader is now split into the Layer 1 core modules: `process.rs`, `permissions.rs`, `memory.rs`, `scanner.rs`, `offsets.rs`, `structs.rs`, `parser.rs` and `validator.rs`. Data-domain and graphics modules are also present for players, clubs, nations, tactics, scout knowledge, face config parsing and logo resolution.

The verified live test indexed 35,874 player records in the active save: 38 managed-squad records were visibility-safe and 35,836 wider-save records remained hidden behind the knowledge gate. Age, attributes, form, contracts, wages, valuations, scout-knowledge links and FM26's own shortlist are not yet mapped safely for this exact build. GlassScout leaves those fields empty and explains the limitation. It does not read or return CA, PA or hidden attributes.
Live-memory tactic inspection cannot block squad/player connection. GlassScout detects the active FM26 tactic manager with read-only access; formation, phase roles, duties and instructions remain unavailable until their packed build-specific layout is validated. No formation or fit result is guessed.

The verified live test indexed 35,874 player records in the active save: 38 managed-squad records were visibility-safe and 35,836 wider-save records remained behind the knowledge gate. Managed-squad FM ID, name, date of birth, age, nationality, positional familiarity, preferred foot and 47 non-hidden attributes are mapped. Form, contract terms/expiry, wages, valuations, relationship-based scout knowledge, interest, attribute ranges, live tactic slots and FM26's own shortlist remain candidate or unmapped for this exact build. GlassScout leaves those fields empty until validation passes. It does not read or return CA, PA or hidden attributes.

GlassScout is live-game only. When the installed FM26 build has no verified entity map, the application shows a clean blocking connection state and does not substitute another data source.

## Desktop product surfaces

- Screenshot-matched command dashboard with active-club context, tactical board, recruitment pulse, department briefing and squad health.
- Squad Planner grouped by validated live FM26 position data.
- Tactical Board with a user-selected `.fmf` file, local app-data storage and honest parser status.
- Squad grouped by validated live FM26 position data.
- Tactical Board reserved for validated active-save formation, phase roles, duties and instructions.
- Recruitment Hub with visibility, interest, realism, financial, availability and risk fields that remain `Unknown` until real evidence exists.
- Player dossiers matching the supplied scouting-report structure without filling unsupported fields.
- Shortlist with add/remove, notes, filtering, sorting and comparison. Shortlist records store only player IDs and resolve against the newest live snapshot.
- Advanced diagnostics under Settings with the exact build fingerprint and entity-map status.
- Advanced diagnostics under Settings with the exact build fingerprint, schema-v2 field coverage and candidate/unmapped counts.
- Role DNA / Position Converter and transparent true-price estimation from visible attributes and performance.
- No alternate data flow, fake team, placeholder player or seeded database.

## Install the Windows test build

Download [GlassScout FM26 0.1.4 for Windows x64](https://github.com/TobiasTest22/GlassScout/releases/download/app-v0.1.4/GlassScout.FM26_0.1.4_x64-setup.exe).
Download [GlassScout FM26 0.1.17 for Windows x64](https://github.com/TobiasTest22/GlassScout/releases/download/app-v0.1.17/GlassScout.FM26_0.1.17_x64-setup.exe).

The NSIS setup installs GlassScout locally and uses Tauri's WebView2 bootstrapper when the required Windows web runtime is missing. The prerelease is not code-signed yet, so Windows SmartScreen may ask for confirmation.

Expand All @@ -57,6 +59,17 @@ Live FM26 inspection requires the Tauri desktop runtime:
npm run desktop:dev
```

The local, developer-only Mapping Lab is enabled explicitly and never in the normal product flow:

```powershell
$env:GLASSSCOUT_MAPPING_MODE = "1"
npm run desktop:dev
```

It captures bounded player/person/contract windows to the local app-data `mapping-lab` directory and produces JSON snapshot/diff evidence. It accepts only an indexed FM ID or an exact unique player name, never an arbitrary process address. Candidate offsets remain excluded from live product data until the schema-v2 confidence and validation gate passes.

For the 0.1.7 validation pass, FM ID `2000478798` (Elias Dale, GK) was captured under FM26's `Interested` and `Doubtful` recruitment filters. The generated comparison found `0` changed and `3072` unchanged bytes across the bounded player, person and contract windows. That is useful negative evidence: player interest is relationship-owned and must not be guessed from the player object. The local JSON snapshots and comparison remain in app data rather than the repository.

The standalone read-only process probe is:

```powershell
Expand Down
48 changes: 48 additions & 0 deletions docs/FM26_MAPPING_STATUS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# FM26 live-data mapping status

Validated against FM26 build `6000.0.52.8888375` (`6000.0.52f1-fm26-05f1`) and the active Madla IL save on 2 July 2026.

## Mapped and enabled

| Field | Source | Validation |
| --- | --- | --- |
| Player unique ID | Person entity UID | Matched the FM profile IDs for the managed squad |
| Name | Person name records | Matched FM squad and profile screens |
| Date of birth and age | Person date plus active-save date | Lars Sveingard resolves to 13 Aug 1995 and age 30, matching FM |
| Nationality | Person-to-nation relationship | Lars Sveingard resolves to Norway, matching FM |
| Position familiarity | 15-byte player position map | Corrected order includes ML and MR; matched FM positions |
| Visible attributes | 54-byte player attribute map | 1–100 storage converted to FM's displayed 1–20 values and checked against FM |
| Preferred foot | Left/right-foot storage | Exposed only as Left, Right or Both |
| Player portrait | FM unique ID | Resolves standard FM26 face/icon packs by UID; clean fallback when absent |
| FM26 role catalogue | Current-build `RoleID` metadata bitmasks | In-possession role masks, duties and out-of-possession role masks extracted from FM26 metadata |
| Player playable-role fit | Position familiarity plus visible attributes | Best/playable/secondary roles are scored from mapped FM26 role metadata, not default position labels |

Own-squad records are treated as fully known because FM exposes their player information to the manager. A visible-attribute role-evidence score may be calculated for them. It is not FM current ability or potential ability.

## Deliberately blocked

- Raw current ability and potential ability are not exposed or used.
- Dirtiness, consistency, important matches, injury proneness and versatility remain hidden.
- Wider-save player attributes remain hidden even though the entity records can be indexed.
- Wider-save players are not surfaced until the `GAME_SCOUTED_PERSON` / scout-manager relationship has been validated for this build.

## Still unmapped

| Field | Reason |
| --- | --- |
| Scout ranges, report confidence, last scouted and reliability | The scouting manager exists in memory, but its player-report collection and field semantics are not yet validated |
| Second nationality | The second-nation relationship is not yet identified |
| Form and match rating | Values are not stored directly in the player object and the match-stat relationship is not yet validated |
| Contract expiry, wage and squad status | Own-squad test data is amateur/N/A and no safely validated non-amateur relationship is available |
| Valuation and transfer value range | The current-build value relationship is not validated |
| Transfer/loan status and interest | The transfer and agent-interest relationships are not validated |
| Fitness/injury status | The condition/injury relationship is not validated; hidden injury proneness is intentionally blocked |
| Live tactic slot role/duty packet offset | Role/duty bitmask catalogues are mapped, but the per-slot tactic packet is only published when it validates against 11 live tactic slots and formation-compatible roles |

Unknown fields must remain `null` and display as **Unknown**.

## Active tactic

The native `TACTICS_MANAGER` and per-save tactic creator object are detected in the active FM26 process using read-only memory access. Formation and selected XI are decoded when the active tactic manager validates. FM26 role, duty and out-of-possession role metadata masks are now catalogued for this build.

GlassScout now scans candidate tactic packets for those real FM26 bitmasks. A role/duty packet is only published when all 11 role masks resolve and the majority are compatible with the live formation slots. If the packet does not validate, GlassScout still shows the formation/selected XI and keeps role/duty labels pending rather than inventing them.
14 changes: 2 additions & 12 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 1 addition & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "glassscout-fm26",
"version": "0.1.4",
"version": "0.1.17",
"private": true,
"scripts": {
"dev": "next dev",
Expand All @@ -16,7 +16,6 @@
"@base-ui/react": "^1.6.0",
"@fontsource-variable/inter": "^5.2.8",
"@tauri-apps/api": "^2.11.1",
"@tauri-apps/plugin-dialog": "^2.7.1",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"framer-motion": "^12.23.24",
Expand Down
Loading
Loading