A Java Swing desktop application for editing save files from the ARPG Chronicon by Bjorn Larsson. Contains full game data for version 1.54.0 embedded — 570 enchants, 908 items, and 47 artifacts.
- Open and edit any Chronicon
.charsave file - Item list colour-coded by quality tier (common, magic, rare, legendary)
- Four-tab detail view per item: Stats, Enchants, Sockets, All Fields
- Enchant picker with all 570 enchants from the game database, including max values
- Human-readable labels for every save field
- Quick-edit buttons for common operations
- Automatic
.bakbackup on first save - Timestamped manual backup option
- Raw JSON viewer for the underlying save file
- No external dependencies — single JAR, runs on any platform with Java 11+
- Java 11 or newer
- Chronicon save files (
.char) from version 1.54.0 or compatible
If you do not have Java installed, download it from Adoptium.
Download ChronicnEditor.jar from the releases page and run:
java -jar ChronicnEditor-v2.0.0.jar
Or pass a save file path directly as an argument:
java -jar ChronicnEditor-v2.0.0.jar "C:\Users\YourName\AppData\Roaming\Chronicon\character.char"
| Platform | Default path |
|---|---|
| Windows | %APPDATA%\Chronicon\ |
| macOS | ~/Library/Application Support/Chronicon/ |
| Linux | ~/.config/unity3d/Bjorn Larsson/Chronicon/ |
The project has no runtime dependencies. You can compile with plain javac or with Maven.
javac --release 11 \
src/main/java/com/chronicon/editor/SimpleJson.java \
src/main/java/com/chronicon/editor/CharFile.java \
src/main/java/com/chronicon/editor/GameData.java \
src/main/java/com/chronicon/editor/SaveEditor.java \
-d out
jar cfe ChronicnEditor.jar com.chronicon.editor.SaveEditor -C out .
mvn package
The output JAR will be at target/ChronicnEditor.jar.
src/main/java/com/chronicon/editor/
SimpleJson.java Minimal flat JSON parser for the .char container format
CharFile.java Binary parser and writer for the .char save format
GameData.java Embedded game database (enchants, items, artifacts) v1.54.0
SaveEditor.java Swing UI
The .char file is a flat JSON object. Each key maps to a hex-encoded binary blob representing one game subsystem.
{
"i": "<hex>", // inventory
"e": "<hex>", // equipped items
"b": "<hex>", // bags
"s": "<hex>", // skills
"st": "<hex>", // stats
...
}
Each binary blob decodes as follows.
Section header (16 bytes)
| Offset | Size | Description |
|---|---|---|
| 0 | 4 | Total size counter (u32 LE) |
| 4 | 4 | Item count (u32 LE) |
| 8 | 4 | Unknown field 1 (u32 LE) |
| 12 | 4 | Unknown field 2 (u32 LE) |
Per-item layout
Each item slot is stored as a u32 length prefix followed by an ASCII hex string representing the item binary. Between items (not after the last) there is a 16-byte separator: 8 bytes (f64 slot identifier) + 4 bytes (category marker) + 4 bytes (sentinel = 1).
Item binary
| Offset | Size | Description |
|---|---|---|
| 0 | 4 | Header A (u32 LE) |
| 4 | 4 | Field count (u32 LE) |
| 8+ | variable | Field records |
Field record
| Size | Description |
|---|---|
| 4 | Sentinel = 1 (u32 LE) |
| 4 | Key length (u32 LE) |
| key_len | Key string (UTF-8) |
| 4 | Value type: 0 = f64, 1 = string (u32 LE) |
| 8 or variable | Value: f64 LE for type 0, or u32 length + UTF-8 bytes for type 1 |
| Field | Description |
|---|---|
name |
Item name (string) |
id |
Base item ID, maps to the item database |
type |
Item slot type |
class |
Class restriction |
level |
Required level |
quality |
0 = common, 1 = magic, 2 = rare, 3 = legendary |
score |
Overall item score |
hp |
Health bonus |
mp |
Mana bonus |
dmg |
Damage bonus |
crit |
Critical hit chance |
attackspeed |
Attack speed modifier |
Each item can have up to 10 enchant slots, indexed 0 through 9.
| Field | Description |
|---|---|
enchant0 ... enchant9 |
Enchant ID stored as f64 |
enchant_value0 ... enchant_value9 |
Enchant value |
enchant_solid0 ... enchant_solid9 |
Non-zero if the slot is locked |
enchant_rune0 ... enchant_rune9 |
Rune slot |
| Field | Description |
|---|---|
socket_gem0 ... socket_gem5 |
Gem ID (-4 = empty) |
socket_type0 ... socket_type5 |
Socket type |
socket_val0 ... socket_val5 |
Socket value |
| Tier | Label |
|---|---|
| epic | Unique or set enchant |
| major | Primary combat stat |
| minor | Secondary utility stat |
The embedded game data includes all tier-specific value ranges. The enchant picker shows the maximum possible value for each enchant at the highest item tier.
| Button | Effect |
|---|---|
| Max Stats | Sets hp, mp, dmg, crit, attackspeed, score to maximum safe values |
| Quality 3 | Sets quality to 3 (legendary) |
| Max Level | Sets level to 100 |
| Clear Enchants | Zeros all enchant IDs and values |
| Max Enchants | Reads the current enchant ID in each slot and sets its value to the game-data maximum |
The editor modifies only the item sections (i, e, b, e1inv, e1art, wp). The stats section (st) and all other binary blobs are passed through unchanged. This avoids corrupting internal engine state that uses a different serialization layout.
A .bak copy of the original file is created automatically the first time you save. Additional timestamped backups can be created at any time using the Backup button.
Tested against save files from Chronicon 1.54.0. The file format has been stable across several minor versions. If a field is not present in an older save, it is skipped rather than written.
This save file editor uses game data (enchants, items, artifacts, and more) from the Chronicon 1.54.0 community data exports. Huge thanks to Bjorn Larsson, the developer of Chronicon, for making these data exports available and enabling community tools like this. Thanks also to the amazing Chronicon community.
This is an unofficial fan-made tool to help players those who have lost their save files to get back to their former glory.
MIT