Xeen Wiki
Xeen Wiki

Each saved game has a MAZE.CHR file which contains a certain number of character slots, each of which can hold one character's details. The default MAZE.CHR file holds enough slots for 30 characters, however only 23-24 are used depending on which game is running. Each slot ties directly to the graphic that should be used as that character's face graphic, and a lookup is done on the slot index to determine the face graphic file (FACExx.CHR) to use.

The MAZE.CHR file does not contain any information about which characters are currently "in" the party. Information about which slots make up the party is stored in the MAZE.PTY file.

The MAZE.CHR file is found in every saved game CC file and can be found starting at the offsets of 0x96A for Clouds/World of Xeen (both SAV and WOX files), 0xDE2 for Darkside, and 0x962 for Swords. It can also be found in Might and Magic III ".MM3" saves starting at offset 0x782.

If, for some reason, a saved game does not have a name, the MAZE.CHR file defaults to the name "Default Characters". Every character of a save's name overwrites this value, followed by a 0X00 character which tells the game to stop reading the data. (0x20 is used for spaces in names.)

File Format[]

The file contains a header which contains the save file name and an unknown value:

Offset Length Data type Name Description
0x00 28 bytes
(31 B, MM3)
ASCIIZ Save file name Starts as "Default Characters" on a new game
Every character is subsequently overwritten and the new name ends with a 0x00 character
Only the first 20 bytes (24 in MM3) can be changed in-game
0x1D 2 bytes uint16? Clouds/Darkside toggle? Defaults to 0x0000 for Clouds
Defaults to 0x0100 for Darkside
Doesn't seem to do anything regardless
Does not exist in Might and Magic III.

After the header rests a number of character entries, each of which is exactly 354 bytes in size for Xeen games or 303 bytes for Might and Magic III.

Each character slot consists of, in order:

Offset Length Data type Name Description
0x00 16 bytes ASCIIZ Character name Only the first 10 bytes are used - the last 6 bytes should always be null
0x10 1 byte byte Sex 0x00 = Male
0x01 = Female
0x11 1 byte byte Race 0x00 = Human
0x01 = Elf
0x02 = Dwarf
0x03 = Gnome
0x04 = Half-Orc
0x12 1 byte byte Save side Byte indicating which side of the world is in use (Clouds or Darkside)

Indicates Alignment in Might and Magic III:
0x00 = Good
0x01 = Neutral
0x02 = Evil
0x13 1 byte byte Class 0x00 = Knight
0x01 = Paladin
0x02 = Archer
0x03 = Cleric
0x04 = Sorcerer
0x05 = Robber
0x06 = Ninja
0x07 = Barbarian
0x08 = Druid
0x09 = Ranger
0x14 2 bytes attribute pair Attribute - Might The character's statistics, in a series of permanent and temporary (byte + byte) pairs
0x16 2 bytes attribute pair Attribute - Intellect
0x18 2 bytes attribute pair Attribute - Personality
0x1A 2 bytes attribute pair Attribute - Endurance
0x1C 2 bytes attribute pair Attribute - Speed
0x1E 2 bytes attribute pair Attribute - Accuracy
0x20 2 bytes attribute pair Attribute - Luck
0x22 1 byte byte AC temp The character's temporary AC bonus - their base AC isn't stored as it is calculated based on their attributes and equipment
0x23 2 bytes attribute pair Level The character's level
0x25 1 byte byte DB Day The character's birthday (Day of the year)
0x26 1 byte byte Temp age The amount of unnatural aging the character is suffering from
0x27 18 bytes byte * 18 Skills 0x00 = Thievery
0x01 = Arms Master
0x02 = Astrologer
0x03 = Bodybuilder
0x04 = Cartographer
0x05 = Crusader
0x06 = Direction Sense
0x07 = Linguist
0x08 = Merchant
0x09 = Mountaineer
0x0A = Navigator
0x0B = Pathfinder
0x0C = Prayer Master
0x0D = Prestidigation
0x0E = Swimming
0x0F = Tracking
0x10 = Spot Secret Doors
0x11 = Danger Sense
0x39 64 bytes bitfield Awards A bitfield where each bit represents an award the character can receive
0x79 39 bytes bitfield Spells A bitfield where each bit represents a spell the character could possess
0xA0 1 byte byte Lloyd's map The ID of the map the character's Lloyd's Beacon spell is set to
0xA1 1 byte byte Lloyd's X The X-coordinate of the map the character's Lloyd's Beacon spell is set to
0xA2 1 byte byte Lloyd's Y The Y-coordinate of the map the character's Lloyd's Beacon spell is set to
0xA3 1 byte byte Has spells
0xA4 1 byte byte Current spell
0xA5 1 byte byte Quick option
0xA6 36 bytes XeenItem * 9 Weapons XeenItem structures representing the weapons the character possesses
0xCA 36 bytes XeenItem * 9 Armor XeenItem structures representing the armor the character possesses
0xEE 36 bytes XeenItem * 9 Accessories XeenItem structures representing the accessories the character possesses
0x112 36 bytes XeenItem * 9 Misc XeenItem structures representing the miscellaneous items the character possesses
0x136 1 byte byte Lloyd's side A byte indicating which side of the world the character's Lloyd's Beacon spell is set to
0x137 2 bytes attribute pair Resistance - Fire The character's resistances, in a series of permanent and temporary (byte + byte) pairs
0x139 2 bytes attribute pair Resistance - Cold
0x13B 2 bytes attribute pair Resistance - Electricity
0x13D 2 bytes attribute pair Resistance - Poison
0x13F 2 bytes attribute pair Resistance - Energy
0x141 2 bytes attribute pair Resistance - Magic
0x143 16 bytes byte * 16 Conditions A byte for each condition, indicating how afflicted the character is. For example, a 'poisioned' value of 1 is relatively minor but will increase over time to a potentially fatal value - this is handled differently for each condition.

0x00 = Cursed
0x01 = Heart Broken
0x02 = Weak
0x03 = Poisoned
0x04 = Diseased
0x05 = Insane
0x06 = In Love
0x07 = Drunk
0x08 = Sleep
0x09 = Depressed
0x0A = Confused
0x0B = Paralyzed
0x153 2 bytes uint16? Unknown #1 Something to do with the current town?
0x155 1 byte byte? Unknown #2 Unknown
0x156 2 bytes uint16 Current HP The character's current amount of hit points
0x158 2 bytes uint16 Current SP The character's current amount of spell points
0x15A 2 bytes uint16 YB day The character's birth year
0x15C 4 bytes uint32 Experience The character's current amount of experience
0x160 1 byte byte Current adventuring spell Index to the last spell used while adventuring (i.e. not in combat)
0x161 1 byte byte Current combat spell Index to the last spell used while in combat

The player is given a total of 24 character slots in World of Xeen games and 20 in Might and Magic III (with the last 10 being Hirelings).

While there is room in the data file for six more party members in World of Xeen, the game does not acknowledge their existence. It's possible these extra slots were reserved for a Hireling system, as carry-over data from Might and Magic III exists in the party file for two more party members.

Forcing these extra characters into your party via hacking will cause the game to crash with an error message asking for a missing character face file ("char30.fac," for example), but it's possible they're fully functional character slots otherwise.