A Dart translation of NFL2K5Tool, designed to read and modify NFL 2K5 game save files (rosters and franchise saves) for both Xbox and PlayStation 2.
Why Dart? Dart is a cross-platform language that can be run as a script (via the dart runtime) or can be natively compiled to Linux, Windows, Mac, iOS, Android, or Browser(JavaScript / wasm).
As the Windows operating system declines, I feel it's important to enable programs to move to other platforms more easily.
- Read Save Data: Extract player, coach, and schedule information from multiple formats.
- Modify Save Data: Apply changes made to your game saves.
- Platform Support: Handles both Xbox and PS2 save formats via
xbox_memory_unit_toolanddart_mymc. - Supported Formats:
- Xbox:
SAVEGAME.DAT(Raw data).zip(Compressed save bundle).bin/.img(Full XEMU Memory Unit images )
- PlayStation 2:
.max(Action Replay Max).psu(EMS Memory Adapter).ps2(Full PCSX2 Memory Card images)
- Xbox:
- Dart SDK (^3.10.8 or later)
-
Clone the repository:
git clone https://github.com/BAD-AL/nfl2k5tool_dart.git cd nfl2k5tool_dart -
Get dependencies:
dart pub get
-
Compile:
# compile Linux
dart compile exe bin/nfl2k5tool_dart.dart -o nfl2k5tool
# compile windows
dart compile exe bin/nfl2k5tool_dart.dart -o nfl2k5tool.exeNFL2K5Tool Dart provides robust support for a variety of save formats across platforms, making it easy to transfer data between emulators (Xemu, PCSX2), real hardware (via memory card tools), and community roster files.
- Raw Save Data (
SAVEGAME.DAT): Direct reading and writing of the core save data. The tool automatically signs the data and manages the companionEXTRAfile for authenticity. - Save Bundles (
.zip): Directly load and save to Xbox save bundles. This is the preferred format for sharing community rosters. - Memory Unit Images (
.bin,.img): Extract and export saves directly to/from Xbox Memory Unit images (XEMU).
- Action Replay Max (
.max): Import and export to the Action Replay Max format. - EMS Memory Adapter (
.psu): Support for the PSU format, widely used with PS2 Save Builder and various memory card adapters. - Memory Card Images (
.ps2): Import and export to PS2 memory card images, such as those used with the PCSX2 emulator.
One of the most powerful features of NFL2K5Tool Dart is the ability to convert saves between platforms. For example, you can load an Xbox roster and save it directly as a PS2 .max file:
dart bin/nfl2k5tool_dart.dart MyXboxRoster.dat -out:MyPs2Roster.maxThe tool automatically handles:
- Signing: Applies the correct Xbox (
HMAC-SHA1) or PS2 signature to the save data. - Metadata: Synthesizes necessary metadata (like
icon.sysorSaveMeta.xbx) when moving between platforms. - Structure: Packages the save correctly for the target format (MAX, PSU, ZIP, or Memory Image).
# compile Linux
dart compile exe bin/nfl2k5tool_dart.dart -o nfl2k5tool
# compile windows
dart compile exe bin/nfl2k5tool_dart.dart -o nfl2k5tool.exe
# use
nfl2k5tool [save_file] [data_to_apply.txt] [options]-appPrint appearance data.-stPrint Special teams players.-abPrint player abilities (speed, agility, ...).-audcAuto update the depth chart.-aupbpAuto update the play-by-play info for each player.-auphAuto update the photo for each player.-schPrint schedule.-faPrint Free Agents.-dcPrint draft class.-coachPrint coaches.-stdinRead data from standard in.-Key:<key>Specify a specific player/team key.-CoachKey:<key>Specify a Coach Key.-out:<file>Save modified save file to<file>.-helpShow the help message.
Print all player abilities from a save file:
dart bin/nfl2k5tool_dart.dart MyRoster.dat -abApply changes from a text file and save to a new file:
dart bin/nfl2k5tool_dart.dart MyRoster.zip input.txt -out:MyRoster_mod.zipApply changes, auto-update depth charts, and print abilities for all players (including draft/FA):
dart bin/nfl2k5tool_dart.dart MyRoster.zip input.txt -audc -dc -fa -abnfl2k5tool_dart is fully compatible with Dart/Flutter Web. Since the browser does not have a file system (dart:io), you should use the SaveSession class to handle byte buffers directly.
The library's "super power" is its ability to produce and consume structured CSV-like text, which makes it easy to integrate with UI tables or bulk-editing tools.
import 'dart:typed_data';
import 'package:nfl2k5tool_dart/nfl2k5tool_dart.dart';
void onFilePicked(Uint8List fileBytes) {
// 1. Initialize a session from bytes (handles Xbox/PS2 formats & signing)
SaveSession session = SaveSession.fromXboxZip(fileBytes);
GamesaveTool engine = session.engine;
// 2. Extract data as CSV-formatted strings
// Get all player abilities (Speed, Agility, etc.)
String playerCsv = engine.GetLeaguePlayers(true, false, false);
String modifiedCsv = myFunctionThatDoesStuff(playerCsv);
// 3. Apply modifications using InputParser
InputParser parser = InputParser(engine);
parser.ProcessText(modifiedCsv);
// 4. Export the modified save as bytes for download
Uint8List modifiedFile = session.exportToXboxZip();
// ... save via browser download or 'dart:io' stuff ...
}SaveSession: The entry point for loading and saving different formats (fromXboxZip,fromPs2Save,exportToPs2Max, etc.). It manages the platform-specific signing and metadata automatically.GamesaveTool: The core engine that performs byte-level operations. Use itsGet...methods to extract data as strings.InputParser: A high-level utility to process text.
- NFL2K5Tool (C#) - The original C# implementation.
- dart_mymc - PS2 Memory Card tool for Dart.
- xbox_memory_unit_tool - Xbox Memory Unit tool for Dart.
This project is open source. Refer to the original NFL2K5Tool for licensing details if not specified here.