Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement