mirror of
https://github.com/zeldaret/oot.git
synced 2024-11-25 09:45:02 +00:00
115 lines
3.4 KiB
Python
115 lines
3.4 KiB
Python
|
import os
|
||
|
|
||
|
def ReadAllLines(fileName):
|
||
|
lineList = list()
|
||
|
with open(fileName) as f:
|
||
|
lineList = f.readlines()
|
||
|
|
||
|
return lineList
|
||
|
|
||
|
def GetFiles(path):
|
||
|
files = []
|
||
|
|
||
|
for r, d, f in os.walk(path):
|
||
|
for file in f:
|
||
|
if '.s' in file:
|
||
|
files.append(os.path.join(r, file))
|
||
|
|
||
|
return files
|
||
|
|
||
|
def GetNonMatchingSize(path):
|
||
|
size = 0
|
||
|
|
||
|
asmFiles = GetFiles(path)
|
||
|
|
||
|
for asmFilePath in asmFiles:
|
||
|
asmLines = ReadAllLines(asmFilePath)
|
||
|
|
||
|
for asmLine in asmLines:
|
||
|
if (asmLine.startswith("/*")):
|
||
|
size += 4
|
||
|
|
||
|
return size
|
||
|
|
||
|
|
||
|
mapFile = ReadAllLines("build/z64.map")
|
||
|
src = 0
|
||
|
code = 0
|
||
|
boot = 0
|
||
|
ovl = 0
|
||
|
asm = 0
|
||
|
|
||
|
for line in mapFile:
|
||
|
lineSplit = list(filter(None, line.split(" ")))
|
||
|
|
||
|
if (len(lineSplit) == 4 and lineSplit[0].startswith(".")):
|
||
|
section = lineSplit[0]
|
||
|
size = int(lineSplit[2], 16)
|
||
|
objFile = lineSplit[3]
|
||
|
|
||
|
if (section == ".text"):
|
||
|
if (objFile.startswith("build/src")):
|
||
|
src += size
|
||
|
elif (objFile.startswith("build/asm")):
|
||
|
asm += size
|
||
|
|
||
|
if (objFile.startswith("build/src/code") or objFile.startswith("build/src/libultra_code")):
|
||
|
code += size
|
||
|
elif (objFile.startswith("build/src/boot") or objFile.startswith("build/src/libultra_boot")):
|
||
|
boot += size
|
||
|
elif (objFile.startswith("build/src/overlays")):
|
||
|
ovl += size
|
||
|
|
||
|
nonMatchingASM = GetNonMatchingSize("asm/non_matchings")
|
||
|
nonMatchingASMBoot = GetNonMatchingSize("asm/non_matchings/boot")
|
||
|
nonMatchingASMCode = GetNonMatchingSize("asm/non_matchings/code") + GetNonMatchingSize("asm/non_matchings/libultra_code")
|
||
|
nonMatchingASMOvl = GetNonMatchingSize("asm/non_matchings/overlays")
|
||
|
|
||
|
codeSize = 1004128 # 1.00mb
|
||
|
bootSize = 36752
|
||
|
#ovlSize = 3727584 # 3.727mb
|
||
|
ovlSize = 2812000 # .text section only
|
||
|
libultraSize = 40816 # This is temp
|
||
|
audioSize = 0 # This is temp
|
||
|
handwritten = 0 # This is temp
|
||
|
|
||
|
src -= nonMatchingASM
|
||
|
code -= nonMatchingASMCode
|
||
|
boot -= nonMatchingASMBoot
|
||
|
ovl -= nonMatchingASMOvl
|
||
|
asm += nonMatchingASM
|
||
|
#print(nonMatchingASM)
|
||
|
|
||
|
#asm = asm - (libultra_size + audio_size + handwritten - boot_size - code_size - ovl_size)
|
||
|
#asm = asm - (libultra_size + audio_size + handwritten)
|
||
|
#asm = -(libultra_size + audio_size + handwritten - boot_size - code_size - ovl_size)
|
||
|
#asm += codeSize
|
||
|
#asm += bootSize
|
||
|
#asm += ovlSize
|
||
|
#asm -= src
|
||
|
|
||
|
total = src + asm
|
||
|
srcPct = 100 * src / total
|
||
|
asmPct = 100 * asm / total
|
||
|
codePct = 100 * code / codeSize
|
||
|
bootPct = 100 * boot / bootSize
|
||
|
ovlPct = 100 * ovl / ovlSize
|
||
|
compiled_bytes = total
|
||
|
bytesPerHeartPiece = compiled_bytes / 80
|
||
|
|
||
|
print(str(total) + " total bytes of decompilable code\n")
|
||
|
print(str(src) + " bytes of code in src " + str(srcPct) + "%\n")
|
||
|
#print(str(asm) + " bytes of code in asm " + str(asmPct) + "%\n")
|
||
|
print(str(boot) + "/" + str(bootSize) + " bytes of code in boot " + str(bootPct) + "%\n")
|
||
|
print(str(code) + "/" + str(codeSize) + " bytes of code in code " + str(codePct) + "%\n")
|
||
|
print(str(ovl) + "/" + str(ovlSize) + " bytes of code in overlays " + str(ovlPct) + "%\n")
|
||
|
print("------------------------------------\n")
|
||
|
|
||
|
heartPieces = int(src / bytesPerHeartPiece)
|
||
|
rupees = int(((src % bytesPerHeartPiece) * 100) / bytesPerHeartPiece)
|
||
|
|
||
|
if (rupees > 0):
|
||
|
print("You have " + str(heartPieces) + "/80 heart pieces and " + str(rupees) + " rupee(s).\n")
|
||
|
else:
|
||
|
print("You have " + str(heartPieces) + "/80 heart pieces.\n")
|