I've been working on this project to extract various data from the game files, and I feel I've progressed pretty far with it.
It is initially based on Enigma's parsers, which I translated to what I feel is a pretty neat C++ implementation (praise the regexps), merged with CascLib to pull data directly from the game files instead of a loaded executable. I've added a bunch of code on top of that to generate human-readable data (i.e. one can easily obtain a JSON dump of any data file, dump power tags, or generate lists of items along with their stats).
The code is currently littered with small functions that do very specific tasks, and most of main() is commented out, I'm in the process of cleaning it up and adding more functionality.
Here's an example of what I generated with this:
http://ptr.d3planner.com/diff/
Repository:
https://github.com/d07RiV/SNOParser
It will only build in VS2013 due to lots of C++11 features (gcc might also work, but good luck building CascLib with it).
I'm currently a bit stuck on affixes, namely I'm trying to figure out which affixes can appear on an item. Items list specific affix groups, such as one that contains all str/dex/int bonuses, but it has all bonuses from 1-17 str to 825-1000. There are fields that probably represent item level requirement, but there is absolutely no difference between the 1xx_Str 17 (626-750) and 1xx_Str 18 (825-1000), so I have no idea how the game tells which one should appear on ancient items and which one shouldn't. It would seem that its yet another thing that's baked into the exe, or maybe isn't in the client at all (although then how does it know which stats to show in the mystic menu?).