I'm a little late to the party, but I've been working on these achievements. I use a mac most of the time, and I was having a hard time getting Super Meat Boy Stats to work under osx, so I wrote a little python script to get my total times for each area. I thought someone else might also find this useful:
http://pastebin.com/DmsHfPhU (and also copied below)
Use: python %script% %savegame.dat%
EDIT:
Here is my best guesses for each time, based on my own experience:
- Rare: 265
- Medium Rare: 445
- Medium: 515
- Medium Well: 500
- Well Done: 690-695 (I went from 697 to 688 when I got this)
I also updated the script to not include warp times, since people've said they've gotten these without even unlocking all the warps.
from sys import argv
import struct
totalDeathsOffset = 8
chapterInfoStart = 28
chapterInfoOffset = 12
levelOffset = 12
levelStart = 0x88
TheGuyWarpZoneStart = 0xF10
ZoneNames = ['Forest ',
'Hospital ',
'Salt Factor ',
'Hell ',
'Rapture ',
'The End ',
'Cotton Alley']
def maxLevelCount(zone):
if zone != 5:
return 20
else:
return 5
def maxWarpCount(zone):
if zone < 5:
return 12
else:
return 0
def toInt32(lst,offset):
s = lst[offset:offset+4]
return struct.unpack("<L",s)[0]
def getLevelInfo(save, zone, level, kind):
offset = 0
if kind == 2 and zone == 4 and level >= 3 and level <= 5:
offset = TheGuyWarpZoneStart + (level - 3)*levelOffset
else:
chapterOffset = 0
for i in range(zone):
chapterOffset += (maxLevelCount(i)*2+maxWarpCount(i))*levelOffset
levelOffset2 = (level + maxLevelCount(zone) * kind)*levelOffset
offset = levelStart + chapterOffset + levelOffset2
time = struct.unpack("<f", save[offset:offset+4])[0]
return time
def getLevels(save, zone, kind):
levels = []
if kind < 2:
for i in range(maxLevelCount(zone)):
levels.append(getLevelInfo(save, zone, i, kind))
else:
for i in range(maxWarpCount(zone)):
levels.append(getLevelInfo(save, zone, i, kind))
return levels
def readChapter(save, n):
offset = chapterInfoStart + (n * chapterInfoOffset)
data = struct.unpack("bbbbb", save[offset:offset+5])
lightLevels = getLevels(save, n, 0)
darkLevels = getLevels(save, n, 1)
warpLevels = getLevels(save, n, 2)
#print n, data
#print lightLevels
#print darkLevels
#print warpLevels
print "Total Time (", ZoneNames[n] ,"): ", sum(lightLevels)+ sum(darkLevels) #+sum(warpLevels)
def readstats(spath):
blist = []
with open(spath, "rb") as f:
blist = f.read()
totalDeaths = toInt32(blist, totalDeathsOffset)
print "Total Deaths:", totalDeaths
chapters = []
for i in range(7):
chapters.append(readChapter(blist, i))
def main():
if len(argv) > 1:
readstats(argv[1])
if __name__ == "__main__":
main()