King's Bounty Saved game Format

From ModdingWiki
Jump to: navigation, search

This format is used to save the whole game state for King's Bounty.

As the save files do not require re-insertion into group files, nor are compressed, yet maintain their own full copies of the game world, they provide good opportunity to distribute custom levels or maps.

Contents

File format

A save always takes exactly 20421 bytes.

0x000 - 0x00A	| name
0x00B   	| class
0x00C		| rank
0x00D		| spell power
0x00E		| max # of spells
0x00F - 0x01F	| is villain N caught
0x020 - 0x027	| is artifact N found
0x028 - 0x02B	| is continent N available
0x02C - 0x02F	| is orb N found
0x030 - 0x03D	| number of spells N
0x03E		| knows magic 
0x03F		| siege weapons
0x040		| current contract
0x041 - 0x045	| hero army
0x046		| Option: Delay (0-9) 
0x047		| difficulty
0x048		| Option: Sounds
0x049		| Option: Walk Beep
0x04A		| Option: Animation
0x04B		| Option: Show Army Size
0x04C		| hero continent
0x04D		| hero X			
0x04E		| hero Y
0x04F		| last X
0x050		| last Y
0x051		| boat X
0x052		| boat Y
0x053        	| boat continent (0xFF - no boat)
0x054		| mount mode (0x00 - boat, 0x04 - fly, 0x08 - horse)
0x055		| Option: CGA palette
0x056 - 0x069 	| spell sold in town N
0x070 - 0x074	| contract cycle (5 villains)
0x075		| last contract (starts as 0x04 to flip to 0x00 on first run)
0x076		| max contract (starts as 0x05)
0x077		| steps left (until end of day)
0x078 - 0x092	| castle owned by... (0x7F = no one, 0xFF = you, LOW 5 bits = villain)
0x093 - 0x0AC	| visited castle N
0x0AD - 0x0C6	| visited town N
0x0C7        	| scepter continent ('encrypted')
0x0C8		| scepter X ('encrypted')
0x0C9		| scepter Y ('encrypted')
0x0CA - 0x8C9	| fog of war (1bpp)
0x8CA - 0x94B	| garrison troops 
0x94C - 0x973	| followerF coords (2 bytes each, 5 per continent)
0x974 - 0x979	| map chests coords (2 bytes each, 1 per continent)
0x97a - 0x981	| orb chests coords (2 bytes each, 1 per continent)
0x982 - 0x991	| teleporter coords (2 bytes each, 2 per continent)
0x992 - 0x9E9	| dwelling coords (2 bytes each, 11 per continent)
0x9EA - 0xB01	| followerH coords (2 bytes each, 35 per continent)
0xB02 - 0xCA5	| followerH troops (3 bytes each)
0xCA6 - 0xE49  	| followerH numbers (3 bytes each)
0xE4A - 0xE75	| creature of dwelling N 
0xE76 - 0xEA1	| population of dwelling N
0xEA2		| scepter key (to XOR scepter coords with)
0xEA3 - 0xEA4	| base leadership
0xEA5 - 0xEA6	| leadership
0xEA7 - 0xEA8	| commission
0xEA9 -	0xEAA	| followers killed
0xEAB - 0xEB4	| hero army numbers
0xEB5 - 0xFB8   | garrison numbers 
0xFB9 - 0xFBA	| time stop ("free" steps left)
0xFBB - 0xFBC	| days left
0xFBD - 0xFBE	| score (never actually used)
0xFBF		| ? // unknown1, always "00"
0xFC0		| ? // unknown2, always "00"
0xFC1 - 0xFC4	| gold
0xFC5 - END 	| map dump

Notes

  • Player name is padded with spaces
  • There are 26 castles, 26 towns, 17 villains, 25 troops, 14 spells and 4 continents in the game.
  • Coordinates always take 2 bytes and always go in X, Y order.
  • Scepter coordinates are XORed with scepter key upon load/save.
  • Troop and villain indexes are in production order (as seen in .CC files).
  • Dwelling populations are kept in BYTEs, 250 being maximum possible value.
  • Hero and castle army numbers are kept in UINT16LEs, 5 per army.
  • Hostile followers only have 3 troops and their numbers are kept in BYTEs.
  • The mount mode is also an offset into hero's sprite-sheet.
  • The map is a complete dump in King's Bounty Map Format.

Coordinates

The game is consistent with it's map coordinate system, which goes in the bottom-to-top, left-to-right order. That means top left corner has coordinate X=0, Y=63.

Credits

Originally devised by the openkb project, with best regards to the modding community.

Personal tools
programming