"Cheating" is simple.
1) Pick a value to change.
2) Save the game.
3) Change only that value and as little else as possible.
4) Save in another slot.
5) Backup both saves. (just in case)
6) Open both of the char files in the save game folders with a hex editor.
7) Do a byte comparison on the two files and examine areas of change.
![Cool 8)](./images/smilies/icon_cool.gif)
Look for a change that matches what you did.
9) Edit that byte to whatever you want. (Don't forget about little endian on Intel processors, although that probably won't matter for anything except gold and exp maybe since everything else should be less than 256)
10) Save that file and reload.
I used this to "fix it" when I had just spent 3 skill points to learn a skill right before finding a guy to teach it.
I also like using this to try a different character type without rerstarting since I don't have time to replay games.
Also your inventory is stored in the save game and can be edited. To the guy who said it would be hard to edit in new spell scrolls, I seriously doubt it is. Just find a scroll in your inventory and look for an obvious byte referencing a spell. Eveything else I've looked at in the save file has been extremely straight forward and easy to mess with. (Unless I'm wrong and it really is obfuscated for some reason. But I had no trouble modding the stats on a weapon.)
A few decimal byte offsets:
attributes:
strength- 50
dexterity- 54
endurance- 58
speed- 62
intelligence- 66
wisdom- 70
perception- 74
concentration- 78
skills:
arcane, divination- 86
arcane, elemental- 90
armor, light- 94
cartography- 106
meditation- 122
pick locks- 136
spot hidden- 142
weapons, swords- 170
Max HP- 178
Max MP- 182
Current HP- 186
Current MP- 190
EXP- 194
Resistences- not stored (dynamically calculated)
The save file starts with your character name, so these offsets might change if you character name is longer. But I doubt it since a quick look seems to say it has a fixed-width string buffer.
Also, skills seem to be stored in the order they list in game dialogs, so I'm sure you can figure out the other offsets keeping in mind 4-byte ints.