2022-09-29 14:16:59 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								import  Utils  
						 
					
						
							
								
									
										
										
										
											2022-09-30 00:36:30 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								from  worlds . Files  import  APDeltaPatch  
						 
					
						
							
								
									
										
										
										
											2022-09-29 14:16:59 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								from  . Aesthetics  import  generate_shuffled_header_data  
						 
					
						
							
								
									
										
										
										
											2022-09-30 00:36:30 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								from  . Levels  import  level_info_dict  
						 
					
						
							
								
									
										
										
										
											2022-09-29 14:16:59 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								from  . Names . TextBox  import  generate_goal_text ,  title_text_mapping ,  generate_text_box  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								USHASH  =  ' cdd3c8c37322978ca8669b34bc89c804 '  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								ROM_PLAYER_LIMIT  =  65535  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  hashlib  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  os  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  math  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								ability_rom_data  =  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    0xBC0003 :  [ [ 0x1F2C ,  0x7 ] ] ,  # Run         0x80 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    0xBC0004 :  [ [ 0x1F2C ,  0x6 ] ] ,  # Carry       0x40 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    0xBC0005 :  [ [ 0x1F2C ,  0x2 ] ] ,  # Swim        0x04 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    0xBC0006 :  [ [ 0x1F2C ,  0x3 ] ] ,  # Spin Jump   0x08 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    0xBC0007 :  [ [ 0x1F2C ,  0x5 ] ] ,  # Climb       0x20 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    0xBC0008 :  [ [ 0x1F2C ,  0x1 ] ] ,  # Yoshi       0x02 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    0xBC0009 :  [ [ 0x1F2C ,  0x4 ] ] ,  # P-Switch    0x10 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    #0xBC000A: [[]] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    0xBC000B :  [ [ 0x1F2D ,  0x3 ] ] ,  # P-Balloon   0x08 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    0xBC000D :  [ [ 0x1F2D ,  0x4 ] ] ,  # Super Star  0x10 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								item_rom_data  =  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    0xBC0001 :  [ 0x18E4 ,  0x1 ] ,  # 1-Up Mushroom 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    0xBC0002 :  [ 0x1F24 ,  0x1 ,  0x1F ] ,  # Yoshi Egg 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    0xBC0012 :  [ 0x1F26 ,  0x1 ,  0x09 ] ,  # Boss Token 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    0xBC000E :  [ 0x1F28 ,  0x1 ,  0x1C ] ,  # Yellow Switch Palace 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    0xBC000F :  [ 0x1F27 ,  0x1 ,  0x1C ] ,  # Green Switch Palace 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    0xBC0010 :  [ 0x1F2A ,  0x1 ,  0x1C ] ,  # Red Switch Palace 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    0xBC0011 :  [ 0x1F29 ,  0x1 ,  0x1C ] ,  # Blue Switch Palace 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    0xBC0013 :  [ 0x0086 ,  0x1 ,  0x0E ] ,  # Ice Trap 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    0xBC0014 :  [ 0x18BD ,  0x7F ,  0x18 ] ,  # Stun Trap 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								music_rom_data  =  [  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								]  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								level_music_ids  =  [  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								]  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  SMWDeltaPatch ( APDeltaPatch ) :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    hash  =  USHASH 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    game  =  " Super Mario World " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    patch_file_ending  =  " .apsmw " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    @classmethod 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  get_source_data ( cls )  - >  bytes : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  get_base_rom_bytes ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  LocalRom :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  __init__ ( self ,  file ,  patch = True ,  vanillaRom = None ,  name = None ,  hash = None ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . name  =  name 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . hash  =  hash 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . orig_buffer  =  None 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        with  open ( file ,  ' rb ' )  as  stream : 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-30 00:36:30 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            self . buffer  =  Utils . read_snes_rom ( stream ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-29 14:16:59 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  read_bit ( self ,  address :  int ,  bit_number :  int )  - >  bool : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        bitflag  =  ( 1  <<  bit_number ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  ( ( self . buffer [ address ]  &  bitflag )  !=  0 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  read_byte ( self ,  address :  int )  - >  int : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  self . buffer [ address ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  read_bytes ( self ,  startaddress :  int ,  length :  int )  - >  bytes : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  self . buffer [ startaddress : startaddress  +  length ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  write_byte ( self ,  address :  int ,  value :  int ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . buffer [ address ]  =  value 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  write_bytes ( self ,  startaddress :  int ,  values ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . buffer [ startaddress : startaddress  +  len ( values ) ]  =  values 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  write_to_file ( self ,  file ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        with  open ( file ,  ' wb ' )  as  outfile : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            outfile . write ( self . buffer ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  read_from_file ( self ,  file ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        with  open ( file ,  ' rb ' )  as  stream : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            self . buffer  =  bytearray ( stream . read ( ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								def  handle_ability_code ( rom ) :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Lock Abilities 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    #rom.write_byte(0xC581, 0x01) # No Stars 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    #rom.write_byte(0x62E6, 0x01) # No Star Music 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    #rom.write_byte(0xC300, 0x01) # No P-Balloons 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    #rom.write_byte(0xC305, 0x01) # No P-Balloons 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Run 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x5977 ,  bytearray ( [ 0x22 ,  0x10 ,  0xBA ,  0x03 ] ) )  # JSL $03BA10 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x597B ,  bytearray ( [ 0xEA ]  *  0x04 ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    RUN_SUB_ADDR  =  0x01BA10 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( RUN_SUB_ADDR  +  0x00 ,  bytearray ( [ 0xDA ] ) )              # PHX 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( RUN_SUB_ADDR  +  0x01 ,  bytearray ( [ 0x08 ] ) )              # PHP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( RUN_SUB_ADDR  +  0x02 ,  bytearray ( [ 0x90 ,  0x03 ] ) )        # BCC +0x03 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( RUN_SUB_ADDR  +  0x04 ,  bytearray ( [ 0xC8 ] ) )              # INY 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( RUN_SUB_ADDR  +  0x05 ,  bytearray ( [ 0xA9 ,  0x70 ] ) )        # LDA #70 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( RUN_SUB_ADDR  +  0x07 ,  bytearray ( [ 0xAA ] ) )              # TAX 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( RUN_SUB_ADDR  +  0x08 ,  bytearray ( [ 0xAD ,  0x2C ,  0x1F ] ) )  # LDA $1F2C 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( RUN_SUB_ADDR  +  0x0B ,  bytearray ( [ 0x89 ,  0x80 ] ) )        # BIT #80 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( RUN_SUB_ADDR  +  0x0D ,  bytearray ( [ 0xF0 ,  0x04 ] ) )        # BEQ +0x04 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( RUN_SUB_ADDR  +  0x0F ,  bytearray ( [ 0x8A ] ) )              # TXA 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( RUN_SUB_ADDR  +  0x10 ,  bytearray ( [ 0x8D ,  0xE4 ,  0x13 ] ) )  # STA $13E4 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( RUN_SUB_ADDR  +  0x13 ,  bytearray ( [ 0x8A ] ) )              # TXA 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( RUN_SUB_ADDR  +  0x14 ,  bytearray ( [ 0x28 ] ) )              # PLP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( RUN_SUB_ADDR  +  0x15 ,  bytearray ( [ 0xFA ] ) )              # PLX 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( RUN_SUB_ADDR  +  0x16 ,  bytearray ( [ 0x6B ] ) )              # RTL 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # End Run 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Purple Block Carry 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x726F ,  bytearray ( [ 0x22 ,  0x28 ,  0xBA ,  0x03 ] ) )  # JSL $03BA28 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x7273 ,  bytearray ( [ 0xEA ]  *  0x02 ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PURPLE_BLOCK_CARRY_SUB_ADDR  =  0x01BA28 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( PURPLE_BLOCK_CARRY_SUB_ADDR  +  0x00 ,  bytearray ( [ 0x08 ] ) )              # PHP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( PURPLE_BLOCK_CARRY_SUB_ADDR  +  0x01 ,  bytearray ( [ 0xAD ,  0x2C ,  0x1F ] ) )  # LDA $1F2C 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( PURPLE_BLOCK_CARRY_SUB_ADDR  +  0x04 ,  bytearray ( [ 0x89 ,  0x40 ] ) )        # BIT #40 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( PURPLE_BLOCK_CARRY_SUB_ADDR  +  0x06 ,  bytearray ( [ 0xF0 ,  0x09 ] ) )        # BEQ +0x09 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( PURPLE_BLOCK_CARRY_SUB_ADDR  +  0x08 ,  bytearray ( [ 0x28 ] ) )              # PLP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( PURPLE_BLOCK_CARRY_SUB_ADDR  +  0x09 ,  bytearray ( [ 0xAD ,  0x8F ,  0x14 ] ) )  # LDA $148F 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( PURPLE_BLOCK_CARRY_SUB_ADDR  +  0x0C ,  bytearray ( [ 0x0D ,  0x7A ,  0x18 ] ) )  # ORA $187A 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( PURPLE_BLOCK_CARRY_SUB_ADDR  +  0x0F ,  bytearray ( [ 0x80 ,  0x03 ] ) )        # BRA +0x03 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( PURPLE_BLOCK_CARRY_SUB_ADDR  +  0x11 ,  bytearray ( [ 0x28 ] ) )              # PLP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( PURPLE_BLOCK_CARRY_SUB_ADDR  +  0x12 ,  bytearray ( [ 0xA9 ,  0x01 ] ) )        # LDA #01 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( PURPLE_BLOCK_CARRY_SUB_ADDR  +  0x14 ,  bytearray ( [ 0x6B ] ) )              # RTL 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # End Purple Block Carry 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Springboard Carry 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0xE6DA ,  bytearray ( [ 0x22 ,  0x40 ,  0xBA ,  0x03 ] ) )  # JSL $03BA40 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0xE6DE ,  bytearray ( [ 0xEA ]  *  0x04 ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    SPRINGBOARD_CARRY_SUB_ADDR  =  0x01BA40 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SPRINGBOARD_CARRY_SUB_ADDR  +  0x00 ,  bytearray ( [ 0x48 ] ) )              # PHA 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SPRINGBOARD_CARRY_SUB_ADDR  +  0x01 ,  bytearray ( [ 0x08 ] ) )              # PHP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SPRINGBOARD_CARRY_SUB_ADDR  +  0x02 ,  bytearray ( [ 0xAD ,  0x2C ,  0x1F ] ) )  # LDA $1F2C 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SPRINGBOARD_CARRY_SUB_ADDR  +  0x05 ,  bytearray ( [ 0x89 ,  0x40 ] ) )        # BIT #40 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SPRINGBOARD_CARRY_SUB_ADDR  +  0x07 ,  bytearray ( [ 0xF0 ,  0x08 ] ) )        # BEQ +0x08 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SPRINGBOARD_CARRY_SUB_ADDR  +  0x09 ,  bytearray ( [ 0xA9 ,  0x0B ] ) )        # LDA #0B 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SPRINGBOARD_CARRY_SUB_ADDR  +  0x0B ,  bytearray ( [ 0x9D ,  0xC8 ,  0x14 ] ) )  # STA $14C8, X 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SPRINGBOARD_CARRY_SUB_ADDR  +  0x0E ,  bytearray ( [ 0x9E ,  0x02 ,  0x16 ] ) )  # STZ $1602, X 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SPRINGBOARD_CARRY_SUB_ADDR  +  0x11 ,  bytearray ( [ 0x28 ] ) )              # PLP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SPRINGBOARD_CARRY_SUB_ADDR  +  0x12 ,  bytearray ( [ 0x68 ] ) )              # PLA 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SPRINGBOARD_CARRY_SUB_ADDR  +  0x13 ,  bytearray ( [ 0x6B ] ) )              # RTL 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # End Springboard Carry 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Shell Carry 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0xAA66 ,  bytearray ( [ 0xAD ,  0x2C ,  0x1F ] ) )        # LDA $1F2C 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0xAA69 ,  bytearray ( [ 0x89 ,  0x40 ] ) )              # BIT #40 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0xAA6B ,  bytearray ( [ 0xF0 ,  0x07 ] ) )              # BEQ +0x07 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0xAA6D ,  bytearray ( [ 0x22 ,  0x60 ,  0xBA ,  0x03 ] ) )  # JSL $03BA60 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0xAA71 ,  bytearray ( [ 0xEA ]  *  0x02 ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    SHELL_CARRY_SUB_ADDR  =  0x01BA60 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SHELL_CARRY_SUB_ADDR  +  0x00 ,  bytearray ( [ 0x08 ] ) )              # PHP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SHELL_CARRY_SUB_ADDR  +  0x01 ,  bytearray ( [ 0xA9 ,  0x0B ] ) )        # LDA #0B 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SHELL_CARRY_SUB_ADDR  +  0x03 ,  bytearray ( [ 0x9D ,  0xC8 ,  0x14 ] ) )  # STA $14C8, X 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SHELL_CARRY_SUB_ADDR  +  0x06 ,  bytearray ( [ 0xEE ,  0x70 ,  0x14 ] ) )  # INC $1470 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SHELL_CARRY_SUB_ADDR  +  0x09 ,  bytearray ( [ 0xA9 ,  0x0B ] ) )        # LDA #08 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SHELL_CARRY_SUB_ADDR  +  0x0B ,  bytearray ( [ 0x8D ,  0x98 ,  0x14 ] ) )  # STA $1498 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SHELL_CARRY_SUB_ADDR  +  0x0E ,  bytearray ( [ 0x28 ] ) )              # PLP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SHELL_CARRY_SUB_ADDR  +  0x0F ,  bytearray ( [ 0x6B ] ) )              # RTL 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # End Shell Carry 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Yoshi Carry 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0xF309 ,  bytearray ( [ 0x22 ,  0x70 ,  0xBA ,  0x03 ] ) )  # JSL $03BA70 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0xF30D ,  bytearray ( [ 0xEA ]  *  0x06 ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    YOSHI_CARRY_SUB_ADDR  =  0x01BA70 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( YOSHI_CARRY_SUB_ADDR  +  0x00 ,  bytearray ( [ 0x08 ] ) )              # PHP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( YOSHI_CARRY_SUB_ADDR  +  0x01 ,  bytearray ( [ 0xAD ,  0x2C ,  0x1F ] ) )  # LDA $1F2C 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( YOSHI_CARRY_SUB_ADDR  +  0x04 ,  bytearray ( [ 0x89 ,  0x40 ] ) )        # BIT #40 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( YOSHI_CARRY_SUB_ADDR  +  0x06 ,  bytearray ( [ 0xF0 ,  0x0A ] ) )        # BEQ +0x0A 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( YOSHI_CARRY_SUB_ADDR  +  0x08 ,  bytearray ( [ 0xA9 ,  0x12 ] ) )        # LDA #12 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( YOSHI_CARRY_SUB_ADDR  +  0x0A ,  bytearray ( [ 0x8D ,  0xA3 ,  0x14 ] ) )  # STA $14A3 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( YOSHI_CARRY_SUB_ADDR  +  0x0D ,  bytearray ( [ 0xA9 ,  0x21 ] ) )        # LDA #21 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( YOSHI_CARRY_SUB_ADDR  +  0x0F ,  bytearray ( [ 0x8D ,  0xFC ,  0x1D ] ) )  # STA $1DFC 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( YOSHI_CARRY_SUB_ADDR  +  0x12 ,  bytearray ( [ 0x28 ] ) )              # PLP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( YOSHI_CARRY_SUB_ADDR  +  0x13 ,  bytearray ( [ 0x6B ] ) )              # RTL 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # End Yoshi Carry 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Climb 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x4D72 ,  bytearray ( [ 0x5C ,  0x88 ,  0xBA ,  0x03 ] ) )  # JML $03BA88 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x4D76 ,  bytearray ( [ 0xEA ]  *  0x03 ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    CLIMB_SUB_ADDR  =  0x01BA88 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( CLIMB_SUB_ADDR  +  0x00 ,  bytearray ( [ 0x08 ] ) )                    # PHP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( CLIMB_SUB_ADDR  +  0x01 ,  bytearray ( [ 0xAD ,  0x2C ,  0x1F ] ) )        # LDA $1F2C 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( CLIMB_SUB_ADDR  +  0x04 ,  bytearray ( [ 0x89 ,  0x20 ] ) )              # BIT #20 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( CLIMB_SUB_ADDR  +  0x06 ,  bytearray ( [ 0xF0 ,  0x09 ] ) )              # BEQ +0x09 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( CLIMB_SUB_ADDR  +  0x08 ,  bytearray ( [ 0xA5 ,  0x8B ] ) )              # LDA $8B 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( CLIMB_SUB_ADDR  +  0x0A ,  bytearray ( [ 0x85 ,  0x74 ] ) )              # STA $74 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( CLIMB_SUB_ADDR  +  0x0C ,  bytearray ( [ 0x28 ] ) )                    # PLP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( CLIMB_SUB_ADDR  +  0x0D ,  bytearray ( [ 0x5C ,  0x17 ,  0xDB ,  0x00 ] ) )  # JML $00DB17 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( CLIMB_SUB_ADDR  +  0x11 ,  bytearray ( [ 0x28 ] ) )                    # PLP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( CLIMB_SUB_ADDR  +  0x12 ,  bytearray ( [ 0x5C ,  0x76 ,  0xCD ,  0x00 ] ) )  # JML $00CD76 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # End Climb 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-11-11 05:50:29 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # Climb Rope 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0xDA33 ,  bytearray ( [ 0x22 ,  0x70 ,  0xBC ,  0x03 ] ) )  # JSL $03BC70 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    CLIMB_ROPE_SUB_ADDR  =  0x01BC70 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( CLIMB_ROPE_SUB_ADDR  +  0x00 ,  bytearray ( [ 0x08 ] ) )              # PHP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( CLIMB_ROPE_SUB_ADDR  +  0x01 ,  bytearray ( [ 0xAD ,  0x2C ,  0x1F ] ) )  # LDA $1F2C 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( CLIMB_ROPE_SUB_ADDR  +  0x04 ,  bytearray ( [ 0x89 ,  0x20 ] ) )        # BIT #20 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( CLIMB_ROPE_SUB_ADDR  +  0x06 ,  bytearray ( [ 0xF0 ,  0x07 ] ) )        # BEQ +0x07 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( CLIMB_ROPE_SUB_ADDR  +  0x08 ,  bytearray ( [ 0x28 ] ) )              # PLP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( CLIMB_ROPE_SUB_ADDR  +  0x09 ,  bytearray ( [ 0xA9 ,  0xB0 ] ) )        # LDA #B0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( CLIMB_ROPE_SUB_ADDR  +  0x0B ,  bytearray ( [ 0x85 ,  0x7D ] ) )        # STA $7D 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( CLIMB_ROPE_SUB_ADDR  +  0x0D ,  bytearray ( [ 0x80 ,  0x01 ] ) )        # BRA +0x01 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( CLIMB_ROPE_SUB_ADDR  +  0x0F ,  bytearray ( [ 0x28 ] ) )              # PLP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( CLIMB_ROPE_SUB_ADDR  +  0x10 ,  bytearray ( [ 0x6B ] ) )              # RTL 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # End Climb Rope 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-09-29 14:16:59 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    # P-Switch 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0xAB1A ,  bytearray ( [ 0x22 ,  0xA0 ,  0xBA ,  0x03 ] ) )  # JSL $03BAA0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0xAB1E ,  bytearray ( [ 0xEA ]  *  0x01 ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    P_SWITCH_SUB_ADDR  =  0x01BAA0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( P_SWITCH_SUB_ADDR  +  0x00 ,  bytearray ( [ 0x08 ] ) )              # PHP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( P_SWITCH_SUB_ADDR  +  0x01 ,  bytearray ( [ 0xAD ,  0x2C ,  0x1F ] ) )  # LDA $1F2C 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( P_SWITCH_SUB_ADDR  +  0x04 ,  bytearray ( [ 0x89 ,  0x10 ] ) )        # BIT #10 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( P_SWITCH_SUB_ADDR  +  0x06 ,  bytearray ( [ 0xF0 ,  0x04 ] ) )        # BEQ +0x04 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( P_SWITCH_SUB_ADDR  +  0x08 ,  bytearray ( [ 0xA9 ,  0xB0 ] ) )        # LDA #B0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( P_SWITCH_SUB_ADDR  +  0x0A ,  bytearray ( [ 0x80 ,  0x02 ] ) )        # BRA +0x02 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( P_SWITCH_SUB_ADDR  +  0x0C ,  bytearray ( [ 0xA9 ,  0x01 ] ) )        # LDA #01 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( P_SWITCH_SUB_ADDR  +  0x0E ,  bytearray ( [ 0x99 ,  0xAD ,  0x14 ] ) )  # STA $14AD 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( P_SWITCH_SUB_ADDR  +  0x11 ,  bytearray ( [ 0x28 ] ) )              # PLP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( P_SWITCH_SUB_ADDR  +  0x12 ,  bytearray ( [ 0x6B ] ) )              # RTL 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # End P-Switch 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Spin Jump 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x5645 ,  bytearray ( [ 0xAD ,  0x2C ,  0x1F ] ) )        # LDA $1F2C 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x5648 ,  bytearray ( [ 0x89 ,  0x08 ] ) )              # BIT #08 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x564A ,  bytearray ( [ 0xF0 ,  0x12 ] ) )              # BEQ +0x12 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x564C ,  bytearray ( [ 0x22 ,  0xB8 ,  0xBA ,  0x03 ] ) )  # JSL $03BAB8 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    SPIN_JUMP_SUB_ADDR  =  0x01BAB8 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SPIN_JUMP_SUB_ADDR  +  0x00 ,  bytearray ( [ 0x08 ] ) )              # PHP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SPIN_JUMP_SUB_ADDR  +  0x01 ,  bytearray ( [ 0x1A ] ) )              # INC 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SPIN_JUMP_SUB_ADDR  +  0x02 ,  bytearray ( [ 0x8D ,  0x0D ,  0x14 ] ) )  # STA $140D 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SPIN_JUMP_SUB_ADDR  +  0x05 ,  bytearray ( [ 0xA9 ,  0x04 ] ) )        # LDA #04 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SPIN_JUMP_SUB_ADDR  +  0x07 ,  bytearray ( [ 0x8D ,  0xFC ,  0x1D ] ) )  # STA $1DFC 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SPIN_JUMP_SUB_ADDR  +  0x0A ,  bytearray ( [ 0xA4 ,  0x76 ] ) )        # LDY #76 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SPIN_JUMP_SUB_ADDR  +  0x0C ,  bytearray ( [ 0x28 ] ) )              # PLP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SPIN_JUMP_SUB_ADDR  +  0x0D ,  bytearray ( [ 0x6B ] ) )              # RTL 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # End Spin Jump 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Spin Jump from Water 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x6A89 ,  bytearray ( [ 0x22 ,  0xF8 ,  0xBB ,  0x03 ] ) )  # JSL $03BBF8 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x6A8D ,  bytearray ( [ 0xEA ]  *  0x05 ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    SPIN_JUMP_WATER_SUB_ADDR  =  0x01BBF8 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SPIN_JUMP_WATER_SUB_ADDR  +  0x00 ,  bytearray ( [ 0x08 ] ) )              # PHP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SPIN_JUMP_WATER_SUB_ADDR  +  0x01 ,  bytearray ( [ 0xAD ,  0x2C ,  0x1F ] ) )  # LDA $1F2C 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SPIN_JUMP_WATER_SUB_ADDR  +  0x04 ,  bytearray ( [ 0x89 ,  0x08 ] ) )        # BIT #08 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SPIN_JUMP_WATER_SUB_ADDR  +  0x06 ,  bytearray ( [ 0xF0 ,  0x09 ] ) )        # BEQ +0x09 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SPIN_JUMP_WATER_SUB_ADDR  +  0x08 ,  bytearray ( [ 0x1A ] ) )              # INC 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SPIN_JUMP_WATER_SUB_ADDR  +  0x09 ,  bytearray ( [ 0x8D ,  0x0D ,  0x14 ] ) )  # STA $140D 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SPIN_JUMP_WATER_SUB_ADDR  +  0x0C ,  bytearray ( [ 0xA9 ,  0x04 ] ) )        # LDA #04 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SPIN_JUMP_WATER_SUB_ADDR  +  0x0E ,  bytearray ( [ 0x8D ,  0xFC ,  0x1D ] ) )  # STA $1DFC 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SPIN_JUMP_WATER_SUB_ADDR  +  0x11 ,  bytearray ( [ 0x28 ] ) )              # PLP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SPIN_JUMP_WATER_SUB_ADDR  +  0x12 ,  bytearray ( [ 0x6B ] ) )              # RTL 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # End Spin Jump from Water 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Spin Jump from Springboard 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0xE693 ,  bytearray ( [ 0x22 ,  0x0C ,  0xBC ,  0x03 ] ) )  # JSL $03BC0C 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0xE697 ,  bytearray ( [ 0xEA ]  *  0x01 ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    SPIN_JUMP_SPRING_SUB_ADDR  =  0x01BC0C 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SPIN_JUMP_SPRING_SUB_ADDR  +  0x00 ,  bytearray ( [ 0x08 ] ) )              # PHP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SPIN_JUMP_SPRING_SUB_ADDR  +  0x01 ,  bytearray ( [ 0xAD ,  0x2C ,  0x1F ] ) )  # LDA $1F2C 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SPIN_JUMP_SPRING_SUB_ADDR  +  0x04 ,  bytearray ( [ 0x89 ,  0x08 ] ) )        # BIT #08 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SPIN_JUMP_SPRING_SUB_ADDR  +  0x06 ,  bytearray ( [ 0xF0 ,  0x05 ] ) )        # BEQ +0x05 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SPIN_JUMP_SPRING_SUB_ADDR  +  0x08 ,  bytearray ( [ 0xA9 ,  0x01 ] ) )        # LDA #01 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SPIN_JUMP_SPRING_SUB_ADDR  +  0x0A ,  bytearray ( [ 0x8D ,  0x0D ,  0x14 ] ) )  # STA $140D 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SPIN_JUMP_SPRING_SUB_ADDR  +  0x0D ,  bytearray ( [ 0x28 ] ) )              # PLP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SPIN_JUMP_SPRING_SUB_ADDR  +  0x0E ,  bytearray ( [ 0x6B ] ) )              # RTL 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # End Spin Jump from Springboard 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Swim 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x5A25 ,  bytearray ( [ 0x22 ,  0xC8 ,  0xBA ,  0x03 ] ) )  # JSL $03BAC8 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x5A29 ,  bytearray ( [ 0xEA ]  *  0x04 ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    SWIM_SUB_ADDR  =  0x01BAC8 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SWIM_SUB_ADDR  +  0x00 ,  bytearray ( [ 0x48 ] ) )              # PHA 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SWIM_SUB_ADDR  +  0x01 ,  bytearray ( [ 0x08 ] ) )              # PHP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SWIM_SUB_ADDR  +  0x02 ,  bytearray ( [ 0xAD ,  0x2C ,  0x1F ] ) )  # LDA $1F2C 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SWIM_SUB_ADDR  +  0x05 ,  bytearray ( [ 0x89 ,  0x04 ] ) )        # BIT #04 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SWIM_SUB_ADDR  +  0x07 ,  bytearray ( [ 0xF0 ,  0x0C ] ) )        # BEQ +0x0C 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SWIM_SUB_ADDR  +  0x09 ,  bytearray ( [ 0x28 ] ) )              # PLP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SWIM_SUB_ADDR  +  0x0A ,  bytearray ( [ 0x68 ] ) )              # PLA 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SWIM_SUB_ADDR  +  0x0B ,  bytearray ( [ 0xDD ,  0x84 ,  0xD9 ] ) )  # CMP $D489, X 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SWIM_SUB_ADDR  +  0x0E ,  bytearray ( [ 0xB0 ,  0x03 ] ) )        # BCS +0x03 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SWIM_SUB_ADDR  +  0x10 ,  bytearray ( [ 0xBD ,  0x84 ,  0xD9 ] ) )  # LDA $D489, X 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SWIM_SUB_ADDR  +  0x13 ,  bytearray ( [ 0x80 ,  0x0A ] ) )        # BRA +0x0A 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SWIM_SUB_ADDR  +  0x15 ,  bytearray ( [ 0x28 ] ) )              # PLP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SWIM_SUB_ADDR  +  0x16 ,  bytearray ( [ 0x68 ] ) )              # PLA 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SWIM_SUB_ADDR  +  0x17 ,  bytearray ( [ 0xDD ,  0xBE ,  0xDE ] ) )  # CMP $DEBE, X 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SWIM_SUB_ADDR  +  0x1A ,  bytearray ( [ 0xB0 ,  0x03 ] ) )        # BCS +0x03 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SWIM_SUB_ADDR  +  0x1C ,  bytearray ( [ 0xBD ,  0xBE ,  0xDE ] ) )  # LDA $DEBE, X 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SWIM_SUB_ADDR  +  0x1F ,  bytearray ( [ 0x6B ] ) )              # RTL 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # End Swim 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Item Swim 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x59D7 ,  bytearray ( [ 0x22 ,  0xE8 ,  0xBA ,  0x03 ] ) )  # JSL $03BAE8 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x59DB ,  bytearray ( [ 0xEA ]  *  0x02 ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    SWIM_SUB_ADDR  =  0x01BAE8 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SWIM_SUB_ADDR  +  0x00 ,  bytearray ( [ 0x48 ] ) )              # PHA 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SWIM_SUB_ADDR  +  0x01 ,  bytearray ( [ 0x08 ] ) )              # PHP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SWIM_SUB_ADDR  +  0x02 ,  bytearray ( [ 0xAD ,  0x2C ,  0x1F ] ) )  # LDA $1F2C 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SWIM_SUB_ADDR  +  0x05 ,  bytearray ( [ 0x89 ,  0x04 ] ) )        # BIT #04 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SWIM_SUB_ADDR  +  0x07 ,  bytearray ( [ 0xF0 ,  0x0A ] ) )        # BEQ +0x0A 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SWIM_SUB_ADDR  +  0x09 ,  bytearray ( [ 0x28 ] ) )              # PLP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SWIM_SUB_ADDR  +  0x0A ,  bytearray ( [ 0x68 ] ) )              # PLA 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SWIM_SUB_ADDR  +  0x0B ,  bytearray ( [ 0xC9 ,  0xF0 ] ) )        # CMP #F0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SWIM_SUB_ADDR  +  0x0D ,  bytearray ( [ 0xB0 ,  0x02 ] ) )        # BCS +0x02 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SWIM_SUB_ADDR  +  0x0F ,  bytearray ( [ 0xA9 ,  0xF0 ] ) )        # LDA #F0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SWIM_SUB_ADDR  +  0x11 ,  bytearray ( [ 0x80 ,  0x08 ] ) )        # BRA +0x08 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SWIM_SUB_ADDR  +  0x13 ,  bytearray ( [ 0x28 ] ) )              # PLP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SWIM_SUB_ADDR  +  0x14 ,  bytearray ( [ 0x68 ] ) )              # PLA 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SWIM_SUB_ADDR  +  0x15 ,  bytearray ( [ 0xC9 ,  0xFF ] ) )        # CMP #FF 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SWIM_SUB_ADDR  +  0x17 ,  bytearray ( [ 0xB0 ,  0x02 ] ) )        # BCS +0x02 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SWIM_SUB_ADDR  +  0x19 ,  bytearray ( [ 0xA9 ,  0x00 ] ) )        # LDA #00 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SWIM_SUB_ADDR  +  0x1B ,  bytearray ( [ 0x6B ] ) )              # RTL 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # End Item Swim 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Yoshi 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x109FB ,  bytearray ( [ 0x22 ,  0x08 ,  0xBB ,  0x03 ] ) )  # JSL $03BB08 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x109FF ,  bytearray ( [ 0xEA ]  *  0x02 ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    YOSHI_SUB_ADDR  =  0x01BB08 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( YOSHI_SUB_ADDR  +  0x00 ,  bytearray ( [ 0x08 ] ) )              # PHP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( YOSHI_SUB_ADDR  +  0x01 ,  bytearray ( [ 0xAD ,  0x2C ,  0x1F ] ) )  # LDA $1F2C 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( YOSHI_SUB_ADDR  +  0x04 ,  bytearray ( [ 0x89 ,  0x02 ] ) )        # BIT #02 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( YOSHI_SUB_ADDR  +  0x06 ,  bytearray ( [ 0xF0 ,  0x06 ] ) )        # BEQ +0x06 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( YOSHI_SUB_ADDR  +  0x08 ,  bytearray ( [ 0x28 ] ) )              # PLP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( YOSHI_SUB_ADDR  +  0x09 ,  bytearray ( [ 0xB9 ,  0xA1 ,  0x88 ] ) )  # LDA $88A1, Y 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( YOSHI_SUB_ADDR  +  0x0C ,  bytearray ( [ 0x80 ,  0x04 ] ) )        # BRA +0x04 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( YOSHI_SUB_ADDR  +  0x0E ,  bytearray ( [ 0x28 ] ) )              # PLP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( YOSHI_SUB_ADDR  +  0x0F ,  bytearray ( [ 0xB9 ,  0xA2 ,  0x88 ] ) )  # LDA $88A2, Y 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( YOSHI_SUB_ADDR  +  0x12 ,  bytearray ( [ 0x9D ,  0x1C ,  0x15 ] ) )  # STA $151C, X 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( YOSHI_SUB_ADDR  +  0x15 ,  bytearray ( [ 0x6B ] ) )              # RTL 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # End Yoshi 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Baby Yoshi 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0xA2B8 ,  bytearray ( [ 0x22 ,  0x20 ,  0xBB ,  0x03 ] ) )  # JSL $03BB20 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0xA2BC ,  bytearray ( [ 0xEA ]  *  0x01 ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-11-11 05:50:29 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x1C05F ,  bytearray ( [ 0x22 ,  0x20 ,  0xBB ,  0x03 ] ) )  # JSL $03BB20 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x1C063 ,  bytearray ( [ 0xEA ]  *  0x01 ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-09-29 14:16:59 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    YOSHI_SUB_ADDR  =  0x01BB20 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( YOSHI_SUB_ADDR  +  0x00 ,  bytearray ( [ 0x08 ] ) )              # PHP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( YOSHI_SUB_ADDR  +  0x01 ,  bytearray ( [ 0x9C ,  0x1E ,  0x14 ] ) )  # STZ $141E 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( YOSHI_SUB_ADDR  +  0x04 ,  bytearray ( [ 0xAD ,  0x2C ,  0x1F ] ) )  # LDA $1F2C 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( YOSHI_SUB_ADDR  +  0x07 ,  bytearray ( [ 0x89 ,  0x02 ] ) )        # BIT #02 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( YOSHI_SUB_ADDR  +  0x09 ,  bytearray ( [ 0xF0 ,  0x05 ] ) )        # BEQ +0x05 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( YOSHI_SUB_ADDR  +  0x0B ,  bytearray ( [ 0x28 ] ) )              # PLP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( YOSHI_SUB_ADDR  +  0x0C ,  bytearray ( [ 0xA9 ,  0x35 ] ) )        # LDA #35 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( YOSHI_SUB_ADDR  +  0x0E ,  bytearray ( [ 0x80 ,  0x03 ] ) )        # BRA +0x03 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( YOSHI_SUB_ADDR  +  0x10 ,  bytearray ( [ 0x28 ] ) )              # PLP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( YOSHI_SUB_ADDR  +  0x11 ,  bytearray ( [ 0xA9 ,  0x70 ] ) )        # LDA #70 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( YOSHI_SUB_ADDR  +  0x13 ,  bytearray ( [ 0x6B ] ) )              # RTL 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # End Baby Yoshi 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Midway Gate 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x72E4 ,  bytearray ( [ 0x22 ,  0x38 ,  0xBB ,  0x03 ] ) )  # JSL $03BB38 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    MIDWAY_GATE_SUB_ADDR  =  0x01BB38 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( MIDWAY_GATE_SUB_ADDR  +  0x00 ,  bytearray ( [ 0x08 ] ) )              # PHP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( MIDWAY_GATE_SUB_ADDR  +  0x01 ,  bytearray ( [ 0xAD ,  0x2D ,  0x1F ] ) )  # LDA $1F2D 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( MIDWAY_GATE_SUB_ADDR  +  0x04 ,  bytearray ( [ 0x89 ,  0x01 ] ) )        # BIT #01 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( MIDWAY_GATE_SUB_ADDR  +  0x06 ,  bytearray ( [ 0xF0 ,  0x07 ] ) )        # BEQ +0x07 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( MIDWAY_GATE_SUB_ADDR  +  0x08 ,  bytearray ( [ 0x28 ] ) )              # PLP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( MIDWAY_GATE_SUB_ADDR  +  0x09 ,  bytearray ( [ 0xA9 ,  0x01 ] ) )        # LDA #01 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( MIDWAY_GATE_SUB_ADDR  +  0x0B ,  bytearray ( [ 0x85 ,  0x19 ] ) )        # STA $19 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( MIDWAY_GATE_SUB_ADDR  +  0x0D ,  bytearray ( [ 0x80 ,  0x01 ] ) )        # BRA +0x01 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( MIDWAY_GATE_SUB_ADDR  +  0x0F ,  bytearray ( [ 0x28 ] ) )              # PLP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( MIDWAY_GATE_SUB_ADDR  +  0x10 ,  bytearray ( [ 0x6B ] ) )              # RTL 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # End Midway Gate 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Mushroom 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x5156 ,  bytearray ( [ 0x22 ,  0x50 ,  0xBB ,  0x03 ] ) )  # JSL $03BB50 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x515A ,  bytearray ( [ 0xEA ]  *  0x04 ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    MUSHROOM_SUB_ADDR  =  0x01BB50 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( MUSHROOM_SUB_ADDR  +  0x00 ,  bytearray ( [ 0x08 ] ) )              # PHP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( MUSHROOM_SUB_ADDR  +  0x01 ,  bytearray ( [ 0xAD ,  0x2D ,  0x1F ] ) )  # LDA $1F2D 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( MUSHROOM_SUB_ADDR  +  0x04 ,  bytearray ( [ 0x89 ,  0x01 ] ) )        # BIT #01 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( MUSHROOM_SUB_ADDR  +  0x06 ,  bytearray ( [ 0xF0 ,  0x05 ] ) )        # BEQ +0x05 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( MUSHROOM_SUB_ADDR  +  0x08 ,  bytearray ( [ 0x28 ] ) )              # PLP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( MUSHROOM_SUB_ADDR  +  0x09 ,  bytearray ( [ 0xE6 ,  0x19 ] ) )        # INC $19 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( MUSHROOM_SUB_ADDR  +  0x0B ,  bytearray ( [ 0x80 ,  0x01 ] ) )        # BRA +0x01 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( MUSHROOM_SUB_ADDR  +  0x0D ,  bytearray ( [ 0x28 ] ) )              # PLP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( MUSHROOM_SUB_ADDR  +  0x0E ,  bytearray ( [ 0xA9 ,  0x00 ] ) )        # LDA #00 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( MUSHROOM_SUB_ADDR  +  0x10 ,  bytearray ( [ 0x85 ,  0x71 ] ) )        # STA $72 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( MUSHROOM_SUB_ADDR  +  0x12 ,  bytearray ( [ 0x64 ,  0x9D ] ) )        # STZ $9D 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( MUSHROOM_SUB_ADDR  +  0x14 ,  bytearray ( [ 0x6B ] ) )              # RTL 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # End Mushroom 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Take Damage 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x5142 ,  bytearray ( [ 0x22 ,  0x65 ,  0xBB ,  0x03 ] ) )  # JSL $03BB65 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x5146 ,  bytearray ( [ 0x60 ]  *  0x01 ) )             # RTS 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    DAMAGE_SUB_ADDR  =  0x01BB65 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( DAMAGE_SUB_ADDR  +  0x00 ,  bytearray ( [ 0x8D ,  0x97 ,  0x14 ] ) )  # STA $1497 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( DAMAGE_SUB_ADDR  +  0x03 ,  bytearray ( [ 0x80 ,  0xF4 ] ) )        # BRA -0x0C 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # End Take Damage 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Fire Flower Cycle 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x5187 ,  bytearray ( [ 0x22 ,  0x6A ,  0xBB ,  0x03 ] ) )  # JSL $03BB6A 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x518B ,  bytearray ( [ 0x60 ]  *  0x01 ) )             # RTS 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PALETTE_CYCLE_SUB_ADDR  =  0x01BB6A 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( PALETTE_CYCLE_SUB_ADDR  +  0x00 ,  bytearray ( [ 0xCE ,  0x9B ,  0x14 ] ) )  # DEC $149B 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( PALETTE_CYCLE_SUB_ADDR  +  0x03 ,  bytearray ( [ 0xF0 ,  0xEF ] ) )        # BEQ -0x11 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( PALETTE_CYCLE_SUB_ADDR  +  0x05 ,  bytearray ( [ 0x6B ] ) )              # RTL 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # End Fire Flower Cycle 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Pipe Exit 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x526D ,  bytearray ( [ 0x22 ,  0x70 ,  0xBB ,  0x03 ] ) )  # JSL $03BB70 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x5271 ,  bytearray ( [ 0x60 ,  0xEA ]  *  0x01 ) )       # RTS, NOP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PIPE_EXIT_SUB_ADDR  =  0x01BB70 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( PIPE_EXIT_SUB_ADDR  +  0x00 ,  bytearray ( [ 0x9C ,  0x19 ,  0x14 ] ) )  # STZ $1419 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( PIPE_EXIT_SUB_ADDR  +  0x03 ,  bytearray ( [ 0xA9 ,  0x00 ] ) )        # LDA #00 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( PIPE_EXIT_SUB_ADDR  +  0x05 ,  bytearray ( [ 0x85 ,  0x71 ] ) )        # STA $72 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( PIPE_EXIT_SUB_ADDR  +  0x07 ,  bytearray ( [ 0x64 ,  0x9D ] ) )        # STZ $9D 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( PIPE_EXIT_SUB_ADDR  +  0x09 ,  bytearray ( [ 0x6B ] ) )              # RTL 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # End Pipe Exit 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Cape Transform 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x5168 ,  bytearray ( [ 0x22 ,  0x7A ,  0xBB ,  0x03 ] ) )  # JSL $03BB7A 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x516C ,  bytearray ( [ 0xEA ]  *  0x01 ) )             # RTS, NOP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x516D ,  bytearray ( [ 0xF0 ,  0xD1 ] ) )              # BEQ -0x2F 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    CAPE_TRANSFORM_SUB_ADDR  =  0x01BB7A 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( CAPE_TRANSFORM_SUB_ADDR  +  0x00 ,  bytearray ( [ 0xA5 ,  0x19 ] ) )  # LDA $19 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( CAPE_TRANSFORM_SUB_ADDR  +  0x02 ,  bytearray ( [ 0x4A ] ) )        # LSR 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( CAPE_TRANSFORM_SUB_ADDR  +  0x03 ,  bytearray ( [ 0xD0 ,  0xDF ] ) )  # BNE -0x21 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( CAPE_TRANSFORM_SUB_ADDR  +  0x05 ,  bytearray ( [ 0x6B ] ) )        # RTL 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # End Cape Transform 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Fire Flower 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0xC5F7 ,  bytearray ( [ 0x22 ,  0x80 ,  0xBB ,  0x03 ] ) )  # JSL $03BB80 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    FIRE_FLOWER_SUB_ADDR  =  0x01BB80 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( FIRE_FLOWER_SUB_ADDR  +  0x00 ,  bytearray ( [ 0x08 ] ) )              # PHP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( FIRE_FLOWER_SUB_ADDR  +  0x01 ,  bytearray ( [ 0xAD ,  0x2D ,  0x1F ] ) )  # LDA $1F2D 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( FIRE_FLOWER_SUB_ADDR  +  0x04 ,  bytearray ( [ 0x89 ,  0x02 ] ) )        # BIT #02 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( FIRE_FLOWER_SUB_ADDR  +  0x06 ,  bytearray ( [ 0xF0 ,  0x07 ] ) )        # BEQ +0x07 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( FIRE_FLOWER_SUB_ADDR  +  0x08 ,  bytearray ( [ 0x28 ] ) )              # PLP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( FIRE_FLOWER_SUB_ADDR  +  0x09 ,  bytearray ( [ 0xA9 ,  0x03 ] ) )        # LDA #03 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( FIRE_FLOWER_SUB_ADDR  +  0x0B ,  bytearray ( [ 0x85 ,  0x19 ] ) )        # STA $19 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( FIRE_FLOWER_SUB_ADDR  +  0x0D ,  bytearray ( [ 0x80 ,  0x01 ] ) )        # BRA +0x01 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( FIRE_FLOWER_SUB_ADDR  +  0x0F ,  bytearray ( [ 0x28 ] ) )              # PLP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( FIRE_FLOWER_SUB_ADDR  +  0x10 ,  bytearray ( [ 0x6B ] ) )              # RTL 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # End Fire Flower 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Cape 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0xC598 ,  bytearray ( [ 0x22 ,  0x91 ,  0xBB ,  0x03 ] ) )  # JSL $03BB91 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    CAPE_SUB_ADDR  =  0x01BB91 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( CAPE_SUB_ADDR  +  0x00 ,  bytearray ( [ 0x08 ] ) )              # PHP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( CAPE_SUB_ADDR  +  0x01 ,  bytearray ( [ 0xAD ,  0x2D ,  0x1F ] ) )  # LDA $1F2D 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( CAPE_SUB_ADDR  +  0x04 ,  bytearray ( [ 0x89 ,  0x04 ] ) )        # BIT #04 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( CAPE_SUB_ADDR  +  0x06 ,  bytearray ( [ 0xF0 ,  0x07 ] ) )        # BEQ +0x07 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( CAPE_SUB_ADDR  +  0x08 ,  bytearray ( [ 0x28 ] ) )              # PLP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( CAPE_SUB_ADDR  +  0x09 ,  bytearray ( [ 0xA9 ,  0x02 ] ) )        # LDA #02 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( CAPE_SUB_ADDR  +  0x0B ,  bytearray ( [ 0x85 ,  0x19 ] ) )        # STA $19 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( CAPE_SUB_ADDR  +  0x0D ,  bytearray ( [ 0x80 ,  0x01 ] ) )        # BRA +0x01 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( CAPE_SUB_ADDR  +  0x0F ,  bytearray ( [ 0x28 ] ) )              # PLP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( CAPE_SUB_ADDR  +  0x10 ,  bytearray ( [ 0x6B ] ) )              # RTL 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # End Cape 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # P-Balloon 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0xC2FF ,  bytearray ( [ 0x22 ,  0xA2 ,  0xBB ,  0x03 ] ) )  # JSL $03BBA2 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0xC303 ,  bytearray ( [ 0xEA ]  *  0x06 ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    P_BALLOON_SUB_ADDR  =  0x01BBA2 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( P_BALLOON_SUB_ADDR  +  0x00 ,  bytearray ( [ 0x08 ] ) )              # PHP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( P_BALLOON_SUB_ADDR  +  0x01 ,  bytearray ( [ 0xAD ,  0x2D ,  0x1F ] ) )  # LDA $1F2D 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( P_BALLOON_SUB_ADDR  +  0x04 ,  bytearray ( [ 0x89 ,  0x08 ] ) )        # BIT #08 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( P_BALLOON_SUB_ADDR  +  0x06 ,  bytearray ( [ 0xF0 ,  0x0D ] ) )        # BEQ +0x0D 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( P_BALLOON_SUB_ADDR  +  0x08 ,  bytearray ( [ 0x28 ] ) )              # PLP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( P_BALLOON_SUB_ADDR  +  0x09 ,  bytearray ( [ 0xA9 ,  0x09 ] ) )        # LDA #09 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( P_BALLOON_SUB_ADDR  +  0x0B ,  bytearray ( [ 0x8D ,  0xF3 ,  0x13 ] ) )  # STA $13F3 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( P_BALLOON_SUB_ADDR  +  0x0E ,  bytearray ( [ 0xA9 ,  0xFF ] ) )        # LDA #FF 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( P_BALLOON_SUB_ADDR  +  0x10 ,  bytearray ( [ 0x8D ,  0x91 ,  0x18 ] ) )  # STA $1891 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( P_BALLOON_SUB_ADDR  +  0x13 ,  bytearray ( [ 0x80 ,  0x0B ] ) )        # BRA +0x0B 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( P_BALLOON_SUB_ADDR  +  0x15 ,  bytearray ( [ 0x28 ] ) )              # PLP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( P_BALLOON_SUB_ADDR  +  0x16 ,  bytearray ( [ 0xA9 ,  0x01 ] ) )        # LDA #01 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( P_BALLOON_SUB_ADDR  +  0x18 ,  bytearray ( [ 0x8D ,  0xF3 ,  0x13 ] ) )  # STA $13F3 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( P_BALLOON_SUB_ADDR  +  0x1B ,  bytearray ( [ 0xA9 ,  0x01 ] ) )        # LDA #01 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( P_BALLOON_SUB_ADDR  +  0x1D ,  bytearray ( [ 0x8D ,  0x91 ,  0x18 ] ) )  # STA $1891 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( P_BALLOON_SUB_ADDR  +  0x20 ,  bytearray ( [ 0x6B ] ) )              # RTL 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # End P-Balloon 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Star 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0xC580 ,  bytearray ( [ 0x22 ,  0xC8 ,  0xBB ,  0x03 ] ) )  # JSL $03BBC8 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0xC584 ,  bytearray ( [ 0xEA ]  *  0x01 ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    STAR_SUB_ADDR  =  0x01BBC8 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( STAR_SUB_ADDR  +  0x00 ,  bytearray ( [ 0x08 ] ) )              # PHP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( STAR_SUB_ADDR  +  0x01 ,  bytearray ( [ 0xAD ,  0x2D ,  0x1F ] ) )  # LDA $1F2D 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( STAR_SUB_ADDR  +  0x04 ,  bytearray ( [ 0x89 ,  0x10 ] ) )        # BIT #10 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( STAR_SUB_ADDR  +  0x06 ,  bytearray ( [ 0xF0 ,  0x08 ] ) )        # BEQ +0x08 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( STAR_SUB_ADDR  +  0x08 ,  bytearray ( [ 0x28 ] ) )              # PLP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( STAR_SUB_ADDR  +  0x09 ,  bytearray ( [ 0xA9 ,  0xFF ] ) )        # LDA #FF 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( STAR_SUB_ADDR  +  0x0B ,  bytearray ( [ 0x8D ,  0x90 ,  0x14 ] ) )  # STA $1490 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( STAR_SUB_ADDR  +  0x0E ,  bytearray ( [ 0x80 ,  0x06 ] ) )        # BRA +0x06 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( STAR_SUB_ADDR  +  0x10 ,  bytearray ( [ 0x28 ] ) )              # PLP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( STAR_SUB_ADDR  +  0x11 ,  bytearray ( [ 0xA9 ,  0x01 ] ) )        # LDA #01 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( STAR_SUB_ADDR  +  0x13 ,  bytearray ( [ 0x8D ,  0x90 ,  0x14 ] ) )  # STA $1490 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( STAR_SUB_ADDR  +  0x16 ,  bytearray ( [ 0x6B ] ) )              # RTL 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # End Star 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Star Timer 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x62E3 ,  bytearray ( [ 0x22 ,  0xE0 ,  0xBB ,  0x03 ] ) )  # JSL $03BBE0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    STAR_TIMER_SUB_ADDR  =  0x01BBE0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( STAR_TIMER_SUB_ADDR  +  0x00 ,  bytearray ( [ 0x08 ] ) )              # PHP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( STAR_TIMER_SUB_ADDR  +  0x01 ,  bytearray ( [ 0xAD ,  0x2D ,  0x1F ] ) )  # LDA $1F2D 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( STAR_TIMER_SUB_ADDR  +  0x04 ,  bytearray ( [ 0x89 ,  0x10 ] ) )        # BIT #10 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( STAR_TIMER_SUB_ADDR  +  0x06 ,  bytearray ( [ 0xF0 ,  0x07 ] ) )        # BEQ +0x07 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( STAR_TIMER_SUB_ADDR  +  0x08 ,  bytearray ( [ 0x28 ] ) )              # PLP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( STAR_TIMER_SUB_ADDR  +  0x09 ,  bytearray ( [ 0xA5 ,  0x13 ] ) )        # LDA $13 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( STAR_TIMER_SUB_ADDR  +  0x0B ,  bytearray ( [ 0xC0 ,  0x1E ] ) )        # CPY #1E 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( STAR_TIMER_SUB_ADDR  +  0x0D ,  bytearray ( [ 0x80 ,  0x05 ] ) )        # BRA +0x05 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( STAR_TIMER_SUB_ADDR  +  0x0F ,  bytearray ( [ 0x28 ] ) )              # PLP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( STAR_TIMER_SUB_ADDR  +  0x10 ,  bytearray ( [ 0xA5 ,  0x13 ] ) )        # LDA $13 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( STAR_TIMER_SUB_ADDR  +  0x12 ,  bytearray ( [ 0xC0 ,  0x01 ] ) )        # CPY #01 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( STAR_TIMER_SUB_ADDR  +  0x14 ,  bytearray ( [ 0x6B ] ) )              # RTL 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # End Star Timer 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								def  handle_yoshi_box ( rom ) :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0xEC3D ,  bytearray ( [ 0xEA ]  *  0x03 ) )  # NOP Lines that cause Yoshi Rescue Box normally 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x2B20F ,  bytearray ( [ 0x20 ,  0x60 ,  0xDC ] ) )  # JSR $05DC60 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    YOSHI_BOX_SUB_ADDR  =  0x02DC60 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( YOSHI_BOX_SUB_ADDR  +  0x00 ,  bytearray ( [ 0x08 ] ) )                    # PHP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( YOSHI_BOX_SUB_ADDR  +  0x01 ,  bytearray ( [ 0xAD ,  0x26 ,  0x14 ] ) )        # LDA $1426 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( YOSHI_BOX_SUB_ADDR  +  0x04 ,  bytearray ( [ 0xC9 ,  0x03 ] ) )              # CMP #03 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( YOSHI_BOX_SUB_ADDR  +  0x06 ,  bytearray ( [ 0xF0 ,  0x06 ] ) )              # BEQ +0x06 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( YOSHI_BOX_SUB_ADDR  +  0x08 ,  bytearray ( [ 0x28 ] ) )                    # PLP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( YOSHI_BOX_SUB_ADDR  +  0x09 ,  bytearray ( [ 0xB9 ,  0xD9 ,  0xA5 ] ) )        # LDA $A5B9, Y 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( YOSHI_BOX_SUB_ADDR  +  0x0C ,  bytearray ( [ 0x80 ,  0x08 ] ) )              # BRA +0x08 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( YOSHI_BOX_SUB_ADDR  +  0x0E ,  bytearray ( [ 0x28 ] ) )                    # PLP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( YOSHI_BOX_SUB_ADDR  +  0x0F ,  bytearray ( [ 0xDA ] ) )                    # PHX 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( YOSHI_BOX_SUB_ADDR  +  0x10 ,  bytearray ( [ 0xBB ] ) )                    # TYX 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( YOSHI_BOX_SUB_ADDR  +  0x11 ,  bytearray ( [ 0xBF ,  0x00 ,  0xC2 ,  0x7E ] ) )  # LDA $7EC200, X 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( YOSHI_BOX_SUB_ADDR  +  0x15 ,  bytearray ( [ 0xFA ] ) )                    # PLX 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( YOSHI_BOX_SUB_ADDR  +  0x16 ,  bytearray ( [ 0x60 ] ) )                    # RTS 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								def  handle_bowser_damage ( rom ) :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x1A509 ,  bytearray ( [ 0x20 ,  0x50 ,  0xBC ] ) )  # JSR $03BC50 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    BOWSER_BALLS_SUB_ADDR  =  0x01BC50 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( BOWSER_BALLS_SUB_ADDR  +  0x00 ,  bytearray ( [ 0x08 ] ) )                    # PHP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( BOWSER_BALLS_SUB_ADDR  +  0x01 ,  bytearray ( [ 0xAD ,  0x48 ,  0x0F ] ) )        # LDA $F48 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( BOWSER_BALLS_SUB_ADDR  +  0x04 ,  bytearray ( [ 0xCF ,  0xA1 ,  0xBF ,  0x03 ] ) )  # CMP $03BFA1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( BOWSER_BALLS_SUB_ADDR  +  0x08 ,  bytearray ( [ 0x90 ,  0x06 ] ) )              # BCC +0x06 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( BOWSER_BALLS_SUB_ADDR  +  0x0A ,  bytearray ( [ 0x28 ] ) )                    # PLP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( BOWSER_BALLS_SUB_ADDR  +  0x0B ,  bytearray ( [ 0xEE ,  0xB8 ,  0x14 ] ) )        # INC $14B8 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( BOWSER_BALLS_SUB_ADDR  +  0x0E ,  bytearray ( [ 0x80 ,  0x01 ] ) )              # BRA +0x01 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( BOWSER_BALLS_SUB_ADDR  +  0x10 ,  bytearray ( [ 0x28 ] ) )                    # PLP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( BOWSER_BALLS_SUB_ADDR  +  0x11 ,  bytearray ( [ 0x60 ] ) )                    # RTS 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								def  handle_level_shuffle ( rom ,  active_level_dict ) :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x37600 ,  bytearray ( [ 0x00 ]  *  0x800 ) )  # Duplicate Level Table 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x2D89C ,  bytearray ( [ 0x00 ,  0xF6 ,  0x06 ] ) )  # Level Load Pointer 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x20F46 ,  bytearray ( [ 0x00 ,  0xF6 ,  0x06 ] ) )  # Mid Gate Pointer 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x20E7B ,  bytearray ( [ 0x00 ,  0xF6 ,  0x06 ] ) )  # Level Name Pointer 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x21543 ,  bytearray ( [ 0x00 ,  0xF6 ,  0x06 ] ) )  # Also Level Name Pointer? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x20F64 ,  bytearray ( [ 0x00 ,  0xF6 ,  0x06 ] ) )  # Level Beaten Pointer 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ### Fix Translevel Check 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x2D8AE ,  bytearray ( [ 0x20 ,  0x00 ,  0xDD ] ) )        # JSR $DD00 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x2D8B1 ,  bytearray ( [ 0xEA ,  0xEA ,  0xEA ,  0xEA ,  0xEA ,  0xEA ] ) )  # NOP NOP NOP NOP NOP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x2D7CB ,  bytearray ( [ 0x20 ,  0x00 ,  0xDD ] ) )        # JSR $DD00 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x2D7CE ,  bytearray ( [ 0xEA ,  0xEA ,  0xEA ,  0xEA ,  0xEA ,  0xEA ] ) )  # NOP NOP NOP NOP NOP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x2DD00 ,  bytearray ( [ 0xDA ] ) )              # PHX 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x2DD01 ,  bytearray ( [ 0x08 ] ) )              # PHP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x2DD02 ,  bytearray ( [ 0xE2 ,  0x30 ] ) )        # SEP #30 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x2DD04 ,  bytearray ( [ 0xAE ,  0xBF ,  0x13 ] ) )  # LDX $13BF 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x2DD07 ,  bytearray ( [ 0xE0 ,  0x25 ] ) )        # CPX #25 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x2DD09 ,  bytearray ( [ 0x90 ,  0x04 ] ) )        # BCC $DD0F 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x2DD0B ,  bytearray ( [ 0xA2 ,  0x01 ] ) )        # LDX #01 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x2DD0D ,  bytearray ( [ 0x80 ,  0x02 ] ) )        # BRA $DD11 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x2DD0F ,  bytearray ( [ 0xA2 ,  0x00 ] ) )        # LDX #00 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x2DD11 ,  bytearray ( [ 0x86 ,  0x0F ] ) )        # STX $0F 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x2DD13 ,  bytearray ( [ 0x28 ] ) )              # PLP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x2DD14 ,  bytearray ( [ 0xFA ] ) )              # PLX 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x2DD15 ,  bytearray ( [ 0x60 ] ) )              # RTS 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ### End Fix Translevel Check 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ### Fix Snake Blocks 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x192FB ,  bytearray ( [ 0x20 ,  0x1D ,  0xBC ] ) )  # JSR $03BC1D 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    SNAKE_BLOCKS_SUB_ADDR  =  0x01BC1D 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SNAKE_BLOCKS_SUB_ADDR  +  0x00 ,  bytearray ( [ 0x08 ] ) )                    # PHP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SNAKE_BLOCKS_SUB_ADDR  +  0x01 ,  bytearray ( [ 0xAD ,  0xBF ,  0x13 ] ) )        # LDA $13BF 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SNAKE_BLOCKS_SUB_ADDR  +  0x04 ,  bytearray ( [ 0xC9 ,  0x20 ] ) )              # CMP #20 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SNAKE_BLOCKS_SUB_ADDR  +  0x06 ,  bytearray ( [ 0xF0 ,  0x05 ] ) )              # BEQ +0x05 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SNAKE_BLOCKS_SUB_ADDR  +  0x08 ,  bytearray ( [ 0x28 ] ) )                    # PLP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SNAKE_BLOCKS_SUB_ADDR  +  0x09 ,  bytearray ( [ 0xA9 ,  0x01 ] ) )              # LDA #01 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SNAKE_BLOCKS_SUB_ADDR  +  0x0B ,  bytearray ( [ 0x80 ,  0x03 ] ) )              # BRA +0x03 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SNAKE_BLOCKS_SUB_ADDR  +  0x0D ,  bytearray ( [ 0x28 ] ) )                    # PLP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SNAKE_BLOCKS_SUB_ADDR  +  0x0E ,  bytearray ( [ 0xA9 ,  0x00 ] ) )              # LDA #00 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( SNAKE_BLOCKS_SUB_ADDR  +  0x10 ,  bytearray ( [ 0x60 ] ) )                    # RTS 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ### End Fix Snake Blocks 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    for  level_id ,  level_data  in  level_info_dict . items ( ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  level_id  not  in  active_level_dict . keys ( ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            continue 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        tile_id  =  active_level_dict [ level_id ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        tile_data  =  level_info_dict [ tile_id ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  level_id  >  0x80 : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            level_id  =  level_id  -  0x50 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        rom . write_byte ( tile_data . levelIDAddress ,  level_id ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        rom . write_byte ( 0x2D608  +  level_id ,  tile_data . eventIDValue ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    for  level_id ,  tile_id  in  active_level_dict . items ( ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        rom . write_byte ( 0x37F70  +  level_id ,  tile_id ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								def  handle_collected_paths ( rom ) :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x1F5B ,  bytearray ( [ 0x22 ,  0x30 ,  0xBC ,  0x03 ] ) )  # JSL $03BC30 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x1F5F ,  bytearray ( [ 0xEA ]  *  0x02 ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    COLLECTED_PATHS_SUB_ADDR  =  0x01BC30 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( COLLECTED_PATHS_SUB_ADDR  +  0x00 ,  bytearray ( [ 0x08 ] ) )                    # PHP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( COLLECTED_PATHS_SUB_ADDR  +  0x01 ,  bytearray ( [ 0xAD ,  0x00 ,  0x01 ] ) )        # LDA $0100 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( COLLECTED_PATHS_SUB_ADDR  +  0x04 ,  bytearray ( [ 0xC9 ,  0x0B ] ) )              # CMP #0B 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( COLLECTED_PATHS_SUB_ADDR  +  0x06 ,  bytearray ( [ 0xD0 ,  0x04 ] ) )              # BNE +0x04 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( COLLECTED_PATHS_SUB_ADDR  +  0x08 ,  bytearray ( [ 0x22 ,  0xAD ,  0xDA ,  0x04 ] ) )  # JSL $04DAAD 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( COLLECTED_PATHS_SUB_ADDR  +  0x0C ,  bytearray ( [ 0x28 ] ) )                    # PLP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( COLLECTED_PATHS_SUB_ADDR  +  0x0D ,  bytearray ( [ 0xEE ,  0x00 ,  0x01 ] ) )        # INC $0100 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( COLLECTED_PATHS_SUB_ADDR  +  0x10 ,  bytearray ( [ 0xAD ,  0xAF ,  0x0D ] ) )        # LDA $0DAF 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( COLLECTED_PATHS_SUB_ADDR  +  0x13 ,  bytearray ( [ 0x6B ] ) )                    # RTL 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-12-02 00:25:02 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								def  handle_vertical_scroll ( rom ) :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x285BA ,  bytearray ( [ 0x22 ,  0x90 ,  0xBC ,  0x03 ] ) )  # JSL $03BC90 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    VERTICAL_SCROLL_SUB_ADDR  =  0x01BC90 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( VERTICAL_SCROLL_SUB_ADDR  +  0x00 ,  bytearray ( [ 0x4A ] ) )        # LSR 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( VERTICAL_SCROLL_SUB_ADDR  +  0x01 ,  bytearray ( [ 0x4A ] ) )        # LSR 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( VERTICAL_SCROLL_SUB_ADDR  +  0x02 ,  bytearray ( [ 0x4A ] ) )        # LSR 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( VERTICAL_SCROLL_SUB_ADDR  +  0x03 ,  bytearray ( [ 0x4A ] ) )        # LSR 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( VERTICAL_SCROLL_SUB_ADDR  +  0x04 ,  bytearray ( [ 0x08 ] ) )        # PHP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( VERTICAL_SCROLL_SUB_ADDR  +  0x05 ,  bytearray ( [ 0xC9 ,  0x02 ] ) )  # CMP #02 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( VERTICAL_SCROLL_SUB_ADDR  +  0x07 ,  bytearray ( [ 0xD0 ,  0x02 ] ) )  # BNE +0x02 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( VERTICAL_SCROLL_SUB_ADDR  +  0x09 ,  bytearray ( [ 0xA9 ,  0x01 ] ) )  # LDA #01 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( VERTICAL_SCROLL_SUB_ADDR  +  0x0B ,  bytearray ( [ 0x28 ] ) )        # PLP 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( VERTICAL_SCROLL_SUB_ADDR  +  0x0C ,  bytearray ( [ 0x6B ] ) )        # RTL 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-09-29 14:16:59 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								def  handle_music_shuffle ( rom ,  world ,  player ) :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    from  . Aesthetics  import  generate_shuffled_level_music ,  generate_shuffled_ow_music ,  level_music_address_data ,  ow_music_address_data 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    shuffled_level_music  =  generate_shuffled_level_music ( world ,  player ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    for  i  in  range ( len ( shuffled_level_music ) ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        rom . write_byte ( level_music_address_data [ i ] ,  shuffled_level_music [ i ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    shuffled_ow_music  =  generate_shuffled_ow_music ( world ,  player ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    for  i  in  range ( len ( shuffled_ow_music ) ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        for  addr  in  ow_music_address_data [ i ] : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            rom . write_byte ( addr ,  shuffled_ow_music [ i ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								def  handle_mario_palette ( rom ,  world ,  player ) :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    from  . Aesthetics  import  mario_palettes ,  fire_mario_palettes ,  ow_mario_palettes 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    chosen_palette  =  world . mario_palette [ player ] . value 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x32C8 ,  bytes ( mario_palettes [ chosen_palette ] ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x32F0 ,  bytes ( fire_mario_palettes [ chosen_palette ] ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x359C ,  bytes ( ow_mario_palettes [ chosen_palette ] ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								def  handle_swap_donut_gh_exits ( rom ) :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x2567C ,  bytes ( [ 0xC0 ] ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x25873 ,  bytes ( [ 0xA9 ] ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x25875 ,  bytes ( [ 0x85 ] ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x25954 ,  bytes ( [ 0x92 ] ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x25956 ,  bytes ( [ 0x0A ] ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x25E31 ,  bytes ( [ 0x00 ,  0x00 ,  0xD8 ,  0x04 ,  0x24 ,  0x00 ,  0x98 ,  0x04 ,  0x48 ,  0x00 ,  0xD8 ,  0x03 ,  0x6C ,  0x00 ,  0x56 ,  0x03 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                    0x90 ,  0x00 ,  0x56 ,  0x03 ,  0xB4 ,  0x00 ,  0x56 ,  0x03 ,  0x10 ,  0x05 ,  0x18 ,  0x05 ,  0x28 ,  0x09 ,  0x24 ,  0x05 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                    0x38 ,  0x0B ,  0x14 ,  0x07 ,  0xEC ,  0x09 ,  0x12 ,  0x05 ,  0xF0 ,  0x09 ,  0xD2 ,  0x04 ,  0xF4 ,  0x09 ,  0x92 ,  0x04 ] ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x26371 ,  bytes ( [ 0x32 ] ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								def  patch_rom ( world ,  rom ,  player ,  active_level_dict ) :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    local_random  =  world . slot_seeds [ player ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    goal_text  =  generate_goal_text ( world ,  player ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x2A6E2 ,  goal_text ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_byte ( 0x2B1D8 ,  0x80 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    intro_text  =  generate_text_box ( " Bowser has stolen all of Mario ' s abilities. Can you help Mario travel across Dinosaur land to get them back and save the Princess from him? " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x2A5D9 ,  intro_text ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Force all 8 Bowser's Castle Rooms 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_byte ( 0x3A680 ,  0xD4 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_byte ( 0x3A684 ,  0xD4 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_byte ( 0x3A688 ,  0xD4 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_byte ( 0x3A68C ,  0xD4 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_byte ( 0x3A705 ,  0xD3 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_byte ( 0x3A763 ,  0xD2 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_byte ( 0x3A800 ,  0xD1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_byte ( 0x3A83D ,  0xCF ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_byte ( 0x3A932 ,  0xCE ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_byte ( 0x3A9E1 ,  0xCD ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_byte ( 0x3AA75 ,  0xCC ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Prevent Title Screen Deaths 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_byte ( 0x1C6A ,  0x80 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Title Screen Text 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    player_name_bytes  =  bytearray ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    player_name  =  world . get_player_name ( player ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    for  i  in  range ( 16 ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        char  =  "   " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  i  <  len ( player_name ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            char  =  world . get_player_name ( player ) [ i ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        upper_char  =  char . upper ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  upper_char  not  in  title_text_mapping : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            for  byte  in  title_text_mapping [ " . " ] : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                player_name_bytes . append ( byte ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        else : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            for  byte  in  title_text_mapping [ upper_char ] : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                player_name_bytes . append ( byte ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x2B7F1 ,  player_name_bytes )  # MARIO A 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x2B726 ,  player_name_bytes )  # MARIO A 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x2B815 ,  bytearray ( [ 0xFC ,  0x38 ]  *  0x10 ) )  # MARIO B 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x2B74A ,  bytearray ( [ 0xFC ,  0x38 ]  *  0x10 ) )  # MARIO B 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x2B839 ,  bytearray ( [ 0x71 ,  0x31 ,  0x74 ,  0x31 ,  0x2D ,  0x31 ,  0x84 ,  0x30 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                        0x82 ,  0x30 ,  0x6F ,  0x31 ,  0x73 ,  0x31 ,  0x70 ,  0x31 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                        0x71 ,  0x31 ,  0x75 ,  0x31 ,  0x83 ,  0x30 ,  0xFC ,  0x38 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                        0xFC ,  0x38 ,  0xFC ,  0x38 ,  0xFC ,  0x38 ,  0xFC ,  0x38 ] ) )  # MARIO C 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x2B76E ,  bytearray ( [ 0xFC ,  0x38 ]  *  0x10 ) )  # MARIO C 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x2B79E ,  bytearray ( [ 0xFC ,  0x38 ]  *  0x05 ) )  # EMPTY 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x2B7AE ,  bytearray ( [ 0xFC ,  0x38 ]  *  0x05 ) )  # EMPTY 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x2B8A8 ,  bytearray ( [ 0xFC ,  0x38 ]  *  0x0D ) )  # 2 PLAYER GAME 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x2B85D ,  bytearray ( [ 0xFC ,  0x38 ]  *  0x0A ) )  # ERASE 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x2B88E ,  bytearray ( [ 0x2C ,  0x31 ,  0x73 ,  0x31 ,  0x75 ,  0x31 ,  0x82 ,  0x30 ,  0x30 ,  0x31 ,  0xFC ,  0x38 ,  0x31 ,  0x31 ,  0x73 ,  0x31 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                        0x73 ,  0x31 ,  0x7C ,  0x30 ,  0xFC ,  0x38 ,  0xFC ,  0x38 ,  0xFC ,  0x38 ] ) )  # 1 Player Game 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x2B6D7 ,  bytearray ( [ 0xFC ,  0x38 ,  0xFC ,  0x38 ,  0x16 ,  0x38 ,  0x18 ,  0x38 ,  0x0D ,  0x38 ,  0xFC ,  0x38 ,  0x0B ,  0x38 ,  0x22 ,  0x38 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                        0xFC ,  0x38 ,  0x19 ,  0x38 ,  0x18 ,  0x38 ,  0x1B ,  0x38 ,  0x22 ,  0x38 ,  0x10 ,  0x38 ,  0x18 ,  0x38 ,  0x17 ,  0x38 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                        0x0E ,  0x38 ,  0xFC ,  0x38 ,  0xFC ,  0x38 ] ) )  # Mod by PoryGone 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Title Options 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x1E6A ,  bytearray ( [ 0x01 ] ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x1E6C ,  bytearray ( [ 0x01 ] ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x1E6E ,  bytearray ( [ 0x01 ] ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Always allow Start+Select 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x2267 ,  bytearray ( [ 0xEA ,  0xEA ] ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Always bring up save prompt on beating a level 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  world . autosave [ player ] : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        rom . write_bytes ( 0x20F93 ,  bytearray ( [ 0x00 ] ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Starting Life Count 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x1E25 ,  bytearray ( [ world . starting_life_count [ player ] . value  -  1 ] ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Repurpose Bonus Stars counter for Boss Token or Yoshi Eggs 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x3F1AA ,  bytearray ( [ 0x00 ]  *  0x20 ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-12-10 22:14:04 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     # Delete Routine that would copy Mario position data over repurposed Luigi save data 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x20F9F ,  bytearray ( [ 0xEA ]  *  0x3D ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-29 14:16:59 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Prevent Switch Palaces setting the Switch Palace flags 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x6EC9A ,  bytearray ( [ 0xEA ,  0xEA ] ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x6EB1 ,  bytearray ( [ 0xEA ,  0xEA ] ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x6EB4 ,  bytearray ( [ 0xEA ,  0xEA ,  0xEA ] ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    handle_ability_code ( rom ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    handle_yoshi_box ( rom ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    handle_bowser_damage ( rom ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    handle_collected_paths ( rom ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-12-02 00:25:02 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    handle_vertical_scroll ( rom ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-09-29 14:16:59 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    # Handle Level Shuffle 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    handle_level_shuffle ( rom ,  active_level_dict ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Handle Music Shuffle 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  world . music_shuffle [ player ]  !=  " none " : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        handle_music_shuffle ( rom ,  world ,  player ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    generate_shuffled_header_data ( rom ,  world ,  player ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  world . swap_donut_gh_exits [ player ] : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        handle_swap_donut_gh_exits ( rom ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    handle_mario_palette ( rom ,  world ,  player ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Store all relevant option results in ROM 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_byte ( 0x01BFA0 ,  world . goal [ player ] . value ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-16 14:20:55 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  world . goal [ player ] . value  ==  0 : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        rom . write_byte ( 0x01BFA1 ,  world . bosses_required [ player ] . value ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        rom . write_byte ( 0x01BFA1 ,  0x7F ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-29 14:16:59 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    required_yoshi_eggs  =  max ( math . floor ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        world . number_of_yoshi_eggs [ player ] . value  *  ( world . percentage_of_yoshi_eggs [ player ] . value  /  100.0 ) ) ,  1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_byte ( 0x01BFA2 ,  required_yoshi_eggs ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    #rom.write_byte(0x01BFA3, world.display_sent_item_popups[player].value) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_byte ( 0x01BFA4 ,  world . display_received_item_popups [ player ] . value ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_byte ( 0x01BFA5 ,  world . death_link [ player ] . value ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_byte ( 0x01BFA6 ,  world . dragon_coin_checks [ player ] . value ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_byte ( 0x01BFA7 ,  world . swap_donut_gh_exits [ player ] . value ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    from  Main  import  __version__ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . name  =  bytearray ( f ' SMW { __version__ . replace ( " . " ,  " " ) [ 0 : 3 ] } _ { player } _ { world . seed : 11 } \0 ' ,  ' utf8 ' ) [ : 21 ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . name . extend ( [ 0 ]  *  ( 21  -  len ( rom . name ) ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rom . write_bytes ( 0x7FC0 ,  rom . name ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								def  get_base_rom_bytes ( file_name :  str  =  " " )  - >  bytes :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    base_rom_bytes  =  getattr ( get_base_rom_bytes ,  " base_rom_bytes " ,  None ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  not  base_rom_bytes : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        file_name  =  get_base_rom_path ( file_name ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-30 00:36:30 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        base_rom_bytes  =  bytes ( Utils . read_snes_rom ( open ( file_name ,  " rb " ) ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-29 14:16:59 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        basemd5  =  hashlib . md5 ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        basemd5 . update ( base_rom_bytes ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  USHASH  !=  basemd5 . hexdigest ( ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            raise  Exception ( ' Supplied Base Rom does not match known MD5 for US(1.0) release.  ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                            ' Get the correct game and version, then dump it ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        get_base_rom_bytes . base_rom_bytes  =  base_rom_bytes 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  base_rom_bytes 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-09-30 00:36:30 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-09-29 14:16:59 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								def  get_base_rom_path ( file_name :  str  =  " " )  - >  str :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    options  =  Utils . get_options ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  not  file_name : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        file_name  =  options [ " smw_options " ] [ " rom_file " ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  not  os . path . exists ( file_name ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        file_name  =  Utils . local_path ( file_name ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  file_name