48 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			48 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | import os | ||
|  | 
 | ||
|  | import bsdiff4 | ||
|  | 
 | ||
|  | from ..Rom import get_base_rom_bytes | ||
|  | 
 | ||
|  | 
 | ||
|  | def apply_basepatch(base_rom_bytes: bytes) -> bytes: | ||
|  |     with open(os.path.join(os.path.dirname(__file__), "basepatch.bsdiff4"), "rb") as basepatch: | ||
|  |         delta: bytes = basepatch.read() | ||
|  |     return bsdiff4.patch(base_rom_bytes, delta) | ||
|  | 
 | ||
|  | 
 | ||
|  | def create_basepatch() -> None: | ||
|  |     from .asar import close as asar_close, geterrors as asar_errors, getprints as asar_prints, \ | ||
|  |         getwarnings as asar_warnings, init as asar_init, patch as asar_patch | ||
|  | 
 | ||
|  |     os.add_dll_directory(os.path.dirname(__file__)) | ||
|  |     print("Initializing Asar library") | ||
|  |     asar_init() | ||
|  | 
 | ||
|  |     print("Opening base ROM") | ||
|  |     old_rom_data: bytes = get_base_rom_bytes() | ||
|  | 
 | ||
|  |     print("Patching base ROM") | ||
|  |     result, new_rom_data = asar_patch(os.path.join(os.path.dirname(__file__), "basepatch.asm"), old_rom_data) | ||
|  | 
 | ||
|  |     warnings = asar_warnings() | ||
|  |     print("\nWarnings: " + str(len(warnings))) | ||
|  |     for w in warnings: | ||
|  |         print(w) | ||
|  | 
 | ||
|  |     if result: | ||
|  |         print("Success") | ||
|  |         for p in asar_prints(): | ||
|  |             print(p) | ||
|  |         asar_close() | ||
|  |         delta: bytes = bsdiff4.diff(old_rom_data, new_rom_data) | ||
|  |         with open(os.path.join(os.path.dirname(__file__), "basepatch.bsdiff4"), "wb") as f: | ||
|  |             f.write(delta) | ||
|  |     else: | ||
|  |         errors = asar_errors() | ||
|  |         print("\nErrors: " + str(len(errors))) | ||
|  |         for error in errors: | ||
|  |             print(error) | ||
|  |         asar_close() | ||
|  |         raise RuntimeError("Asar errors while trying to create basepatch for Lufia II Ancient Cave.") |