mirror of
https://github.com/izzy2lost/Diddy-Kong-Racing.git
synced 2026-06-19 01:16:26 -07:00
Improvements to a few scripts & renamed a couple files.
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,52 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
def add_custom_arguments(parser):
|
||||
group = parser.add_mutually_exclusive_group(required=False)
|
||||
# group.add_argument('-j', dest='version', action='store_const', const='jp',
|
||||
# help="Set version to JP.")
|
||||
# group.add_argument('-u', dest='version', action='store_const', const='us',
|
||||
# help="Set version to US.")
|
||||
# group.add_argument('-e', dest='version', action='store_const', const='eu',
|
||||
# help="Set version to EU.")
|
||||
# group.add_argument('-s', dest='version', action='store_const', const='sh',
|
||||
# help="Set version to SH.")
|
||||
|
||||
def apply(config, args):
|
||||
version = 'us_1.0' # Right now only us_1.0 is supported
|
||||
config['mapfile'] = f'build/' + version + '/dkr.map'
|
||||
config['myimg'] = f'build/' + version + '/dkr.z64'
|
||||
config['baseimg'] = find_baserom(version)
|
||||
config['makeflags'] = [f'']
|
||||
config['source_directories'] = ['src']
|
||||
|
||||
########################################################################################
|
||||
|
||||
from os import listdir
|
||||
from os.path import isfile, join
|
||||
|
||||
CRCS = {
|
||||
'us_1.0': (0x53D440E7, 0x7519B011)
|
||||
}
|
||||
|
||||
def get_filenames_from_directory(directory, extensions=None):
|
||||
if extensions is None:
|
||||
return [f for f in listdir(directory) if isfile(join(directory, f))]
|
||||
else:
|
||||
return [f for f in listdir(directory) if isfile(join(directory, f)) and f.endswith(extensions)]
|
||||
|
||||
def get_rom_crcs(romPath):
|
||||
with open(romPath, 'rb') as inFile:
|
||||
rom = inFile.read()
|
||||
crc1 = int.from_bytes(rom[0x10:0x14], "big")
|
||||
crc2 = int.from_bytes(rom[0x14:0x18], "big")
|
||||
return (crc1, crc2)
|
||||
|
||||
def find_baserom(version):
|
||||
romFiles = get_filenames_from_directory('baseroms/', ('.z64',))
|
||||
for romFilename in romFiles:
|
||||
romFilepath = 'baseroms/' + romFilename
|
||||
if get_rom_crcs(romFilepath) == CRCS[version]:
|
||||
return romFilepath
|
||||
raise Exception('Could not find a rom file for the version: "' + version + '"')
|
||||
|
||||
########################################################################################
|
||||
@@ -1,4 +1,4 @@
|
||||
from os import chdir, listdir, remove
|
||||
from os import chdir, listdir, remove, rename
|
||||
from os.path import dirname, isfile, isdir, join, realpath, exists
|
||||
|
||||
class FileUtil:
|
||||
@@ -43,6 +43,19 @@ class FileUtil:
|
||||
else:
|
||||
filenames += FileUtil.get_filenames_from_directory_recursive(join(directory, f), extensions, subDirectory + '/' + f)
|
||||
return filenames
|
||||
|
||||
@staticmethod
|
||||
def get_directories_from_directory_recursive(directory, extensions=None, subDirectory=''):
|
||||
filenames = []
|
||||
for f in listdir(directory):
|
||||
path = join(directory, f)
|
||||
if isdir(path):
|
||||
filenames.append(((subDirectory + '/') if subDirectory != '' else '') + f)
|
||||
if subDirectory == '':
|
||||
filenames += FileUtil.get_directories_from_directory_recursive(path, extensions, f)
|
||||
else:
|
||||
filenames += FileUtil.get_directories_from_directory_recursive(path, extensions, subDirectory + '/' + f)
|
||||
return filenames
|
||||
|
||||
@staticmethod
|
||||
def get_text_from_file(filename):
|
||||
@@ -63,7 +76,11 @@ class FileUtil:
|
||||
def write_bytes_to_file(filename, binary):
|
||||
with open(filename, 'wb') as outFile:
|
||||
outFile.write(binary)
|
||||
|
||||
|
||||
@staticmethod
|
||||
def rename_file(old_filename, new_filename):
|
||||
rename(old_filename, new_filename)
|
||||
|
||||
@staticmethod
|
||||
def delete_file(filename):
|
||||
remove(filename)
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
import sys
|
||||
|
||||
from file_util import FileUtil
|
||||
|
||||
ASM_DIR = './asm'
|
||||
LIB_ASM_DIR = './lib/asm'
|
||||
SRC_DIR = './src'
|
||||
LIB_SRC_DIR = './lib/src'
|
||||
|
||||
if len(sys.argv) < 2:
|
||||
print('Usage: rename_file.py old_symbol new_symbol')
|
||||
|
||||
oldSymbol = sys.argv[1]
|
||||
newSymbol = sys.argv[2]
|
||||
|
||||
def find_and_rename(directory, paths):
|
||||
for name in paths:
|
||||
path = directory + '/' + name
|
||||
if oldSymbol in path:
|
||||
newPath = path.replace(oldSymbol, newSymbol)
|
||||
print('Renamed "' + path + '" to "' + newPath + '"')
|
||||
try:
|
||||
FileUtil.rename_file(path, newPath)
|
||||
except FileNotFoundError:
|
||||
pass
|
||||
|
||||
asmDirectories = FileUtil.get_directories_from_directory_recursive(ASM_DIR)
|
||||
asmFiles = FileUtil.get_filenames_from_directory_recursive(ASM_DIR)
|
||||
libAsmDirectories = FileUtil.get_directories_from_directory_recursive(LIB_ASM_DIR)
|
||||
libAsmFiles = FileUtil.get_filenames_from_directory_recursive(ASM_DIR)
|
||||
srcFiles = FileUtil.get_filenames_from_directory_recursive(SRC_DIR)
|
||||
libSrcFiles = FileUtil.get_filenames_from_directory_recursive(LIB_SRC_DIR)
|
||||
|
||||
find_and_rename(ASM_DIR, asmDirectories + asmFiles)
|
||||
find_and_rename(LIB_ASM_DIR, libAsmDirectories + libAsmFiles)
|
||||
find_and_rename(SRC_DIR, srcFiles)
|
||||
find_and_rename(LIB_SRC_DIR, libSrcFiles)
|
||||
@@ -1,6 +1,7 @@
|
||||
import re
|
||||
import sys
|
||||
import argparse
|
||||
import time
|
||||
from file_util import FileUtil
|
||||
from score_display import ScoreDisplay
|
||||
|
||||
@@ -29,9 +30,9 @@ for folder in ASM_FOLDERS:
|
||||
BUILD_DIRECTORY = './build/us_1.0'
|
||||
SRC_DIRECTORY = './src'
|
||||
LIB_SRC_DIRECTORY = './lib/src'
|
||||
FUNCTION_REGEX = r'((?:[\/][*][*]+[\n])(?:[^\n]*\n)*?(?:.*[*][\/]))?(void|s64|s32|s16|s8|u64|u32|u16|u8|f32|f64)(?:\s|[*])*([0-9A-Za-z_]+)\s*[(][^)]*[)]\s*{'
|
||||
FUNCTION_REGEX = r'(\/[*][*!]+\n(?:.*\n)+?\s*[*]\/\n)?(void|s64|s32|s16|s8|u64|u32|u16|u8|f32|f64)(?:\s|[*])*?([0-9A-Za-z_]+)\s*[(][^)]*[)]\s*{'
|
||||
GLOBAL_ASM_REGEX = r'GLOBAL_ASM[(]".*(?=\/)\/([^.]+).s"[)]'
|
||||
WIP_REGEX = r'#if(.|\n)*?(GLOBAL_ASM[(]([^)]*)[)])(.|\n)*?#else(.|\n)*?#endif'
|
||||
WIP_REGEX = r'#if(?:.|\n)*?(GLOBAL_ASM[(][^)]*[)])(.|\n)*?#endif'
|
||||
|
||||
CODE_START = 0x80000400
|
||||
CODE_END = 0x800D75F4
|
||||
@@ -83,14 +84,13 @@ class ScoreFile:
|
||||
def read_file(self):
|
||||
with open(self.path, "r") as inFile:
|
||||
self.text = inFile.read()
|
||||
self.text = re.sub(WIP_REGEX, r"GLOBAL_ASM(\3)", self.text)
|
||||
self.text = re.sub(WIP_REGEX, r"GLOBAL_ASM(\1)", self.text)
|
||||
|
||||
def get_matches(self):
|
||||
matches = re.finditer(FUNCTION_REGEX, self.text, re.MULTILINE)
|
||||
for matchNum, match in enumerate(matches, start=1):
|
||||
groups = match.groups()
|
||||
self.functions.append(ScoreFileMatch(groups[0], groups[2]))
|
||||
|
||||
matches = re.finditer(GLOBAL_ASM_REGEX, self.text, re.MULTILINE)
|
||||
for matchNum, match in enumerate(matches, start=1):
|
||||
groups = match.groups()
|
||||
@@ -160,7 +160,7 @@ def main():
|
||||
scoreFiles.append(scoreFile)
|
||||
|
||||
|
||||
totalNumberOfFunctions = MAP_FILE.numFunctions
|
||||
totalNumberOfFunctions = totalNumberOfDecompiledFunctions + totalNumberOfGlobalAsms
|
||||
for asm_function in ASM_LABELS:
|
||||
if asm_function in MAP_FILE.functionSizes:
|
||||
totalSizeOfDecompiledFunctions += MAP_FILE.functionSizes[asm_function]
|
||||
|
||||
Reference in New Issue
Block a user