35 lines
		
	
	
		
			900 B
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			35 lines
		
	
	
		
			900 B
		
	
	
	
		
			Python
		
	
	
	
from typing import BinaryIO, Optional, cast
 | 
						|
import Utils
 | 
						|
from worlds.Files import APDeltaPatch
 | 
						|
import os
 | 
						|
 | 
						|
USHASH = 'd4bf9e7bcf9a48da53785d2ae7bc4270'
 | 
						|
 | 
						|
 | 
						|
class ZillionDeltaPatch(APDeltaPatch):
 | 
						|
    hash = USHASH
 | 
						|
    game = "Zillion"
 | 
						|
    patch_file_ending = ".apzl"
 | 
						|
    result_file_ending = ".sms"
 | 
						|
 | 
						|
    @classmethod
 | 
						|
    def get_source_data(cls) -> bytes:
 | 
						|
        with open(get_base_rom_path(), "rb") as stream:
 | 
						|
            return read_rom(stream)
 | 
						|
 | 
						|
 | 
						|
def get_base_rom_path(file_name: Optional[str] = None) -> str:
 | 
						|
    options = Utils.get_options()
 | 
						|
    if not file_name:
 | 
						|
        file_name = cast(str, options["zillion_options"]["rom_file"])
 | 
						|
    if not os.path.exists(file_name):
 | 
						|
        file_name = Utils.user_path(file_name)
 | 
						|
    return file_name
 | 
						|
 | 
						|
 | 
						|
def read_rom(stream: BinaryIO) -> bytes:
 | 
						|
    """ reads rom into bytearray """
 | 
						|
    data = stream.read()
 | 
						|
    # I'm not aware of any sms header.
 | 
						|
    return data
 |