banjo-kazooie/tools/progress_read.py
2022-07-15 17:09:41 -05:00

77 lines
2.8 KiB
Python

import argparse
import os
import re
import sys
import csv
import anybadge
# Read using `mips-linux-gnu-readelf -S`
overlay_sizes = {
'bk_boot' : (0x5BE0 - 0x1000),
'core1' : 0x034b70 + 0x003080,
'core2' : 0x0dc600,
'CC' : 0x0036b0,
'MMM' : 0x0055f0,
'GV' : 0x00a7e0,
'TTC' : 0x005fc0,
'MM' : 0x0034a0,
'BGS' : 0x00a2a0,
'RBB' : 0x009c60,
'FP' : 0x00b600,
'SM' : 0x0046d0,
'cutscenes' : 0x006f60,
'lair' : 0x00c8c0,
'fight' : 0x00af90,
'CCW' : 0x008760,
}
def RGB_to_hex(RGB):
''' [255,255,255] -> "#FFFFFF" '''
# Components need to be integers for hex to make sense
RGB = [int(x) for x in RGB]
return "#"+"".join(["0{0:x}".format(v) if v < 16 else
"{0:x}".format(v) for v in RGB])
def main(csv_name, version, overlay):
with open(csv_name, mode='r') as csv_file:
csv_reader = csv.DictReader(csv_file)
line_count = 0
total_func = 0
incomplete_func = 0
if overlay == 'total':
total_byte = sum(overlay_sizes.values())
else:
total_byte = overlay_sizes[overlay]
incomplete_byte = 0
for row in csv_reader:
if(row["version"] == version):
total_func += 1
if row['matching'] != 'yes':
incomplete_func += 1
incomplete_byte += int(row['length'])
done_byte = total_byte - incomplete_byte
done_func = total_func - incomplete_func
percent = ((done_byte/total_byte) * 100)
print("%s: bytes: %3.4f%% (%d/%d), nonstatic funcs: %3.4f%% (%d/%d)" % (overlay, percent, done_byte, total_byte,((done_func/total_func) *100), done_func, total_func ))
green = min(255, round(min(1, (percent / 100) * 2) * 224))
red = min(255, round(min(1, ((100 - percent) / 100) * 2) * 224))
color = RGB_to_hex([red, green, 0])
if overlay == 'total':
badge = anybadge.Badge("Banjo-Kazooie (us.v10)", "%3.4f%%" % (percent), default_color=color)
else:
badge = anybadge.Badge(overlay, "%3.4f%%" % (percent), default_color=color)
badge.write_badge('progress/progress_' + overlay + '.svg',overwrite=True)
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Create progress csv based on map file',
formatter_class=argparse.RawDescriptionHelpFormatter)
parser.add_argument('csv_name', type=str,
help="csv to read")
parser.add_argument('ver_str', type=str,
help="version")
parser.add_argument('overlay', type=str,
help="overlay name")
args = parser.parse_args()
main(args.csv_name, args.ver_str, args.overlay)