Thanks! Because of how close I was, just for the fun of it I finished the unpacker (and won't release it as was asked though). Considering you posted the raw code I thought it would be fun to at least finish my work and have those also converted. For anyone who wants to play around with the decompresser I wrote in python for the binary stream I have put it
here on gist.github.com. Fair warning that its not recurse-safe and probably never will be. (your data structure uses nesting and I don't bother to prevent recursion issues. never had one be to large yet.)
Not going to bother with a compressor unless asked (and really anyone who knows enough code to use svalue.py should be able to add it easily...)
Its been far too long since I reverse engineered something! I was actually a little ways into figuring it out when you had posted. Mostly that you had a one byte "type" then the data, then next byte "type", and had got it reading the first thing it had found of a dict of <key,val>. I had abused your levelPacker.exe and the mono debugger to narrow down to only compressing specific things. As well as your TiltedEngine.dll was exposing all of its internal function names so I knew mostly what might be inside. Thanks for indulging in my fun, my brother bought it for me as a gift with the tag "we must storm the castle!" two days of play later I find myself poking around the level files... Hoping to see people with talent at map making create some awesome ones!
If for funsies you want a full copy of my (poorly written in a day or so) python unpacker I can PM you the info.
Also heads up for the level editor on why it wasn't working for me: apparently a conflict with a really old mono build I made long ago was mucking things up. mono-complete and libsdl2-2.0.0 was all I needed after fixing that.