Update to v22 rom and logic.
This commit is contained in:
		
							parent
							
								
									aa909f2eaf
								
							
						
					
					
						commit
						2ef977b386
					
				| 
						 | 
				
			
			@ -26,7 +26,7 @@ class World(object):
 | 
			
		|||
        self.agahnim_fix_required = False
 | 
			
		||||
        self.swamp_patch_required = False
 | 
			
		||||
        self.sewer_light_cone = mode == 'standard'
 | 
			
		||||
        self.light_world_light_cone = mode == 'standard'  # to be changed for v22 ToDo
 | 
			
		||||
        self.light_world_light_cone = False
 | 
			
		||||
        self.dark_world_light_cone = False
 | 
			
		||||
 | 
			
		||||
    def get_region(self, regionname):
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										2
									
								
								Items.py
								
								
								
								
							
							
						
						
									
										2
									
								
								Items.py
								
								
								
								
							| 
						 | 
				
			
			@ -46,7 +46,7 @@ item_table = {'Bow': (True, False, False, 0x0B, 'You have\nchosen the\narcher cl
 | 
			
		|||
              'Flippers': (True, False, False, 0x1E, 'fancy a swim?', None, None, None, None, None),
 | 
			
		||||
              'Ice Rod': (True, False, False, 0x08, 'I\'m the cold\nrod. I make\nthings freeze!', None, None, None, None, None),
 | 
			
		||||
              'Titans Mitts': (True, False, False, 0x1C, 'Now you can\nlift heavy\nstuff!', None, None, None, None, None),
 | 
			
		||||
              'Ether': (True, False, False, 0x10, 'Zero Kelvin!\nAbsolute zero!\nFear the cold!', None, None, None, None, None),
 | 
			
		||||
              'Ether': (True, False, False, 0x10, 'This magic\ncoin freezes\neverything!', None, None, None, None, None),
 | 
			
		||||
              'Bombos': (True, False, False, 0x0F, 'Burn, baby,\nburn! Fear my\nring of fire!', None, None, None, None, None),
 | 
			
		||||
              'Quake': (True, False, False, 0x11, 'Maxing out the\nRichter scale\nis what I do!', None, None, None, None, None),
 | 
			
		||||
              'Bottle': (True, False, False, 0xFF, 'Now you can\nstore potions\nand stuff!', None, None, None, None, None),  # specific content written on creation
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										16
									
								
								Rom.py
								
								
								
								
							
							
						
						
									
										16
									
								
								Rom.py
								
								
								
								
							| 
						 | 
				
			
			@ -8,7 +8,7 @@ import hashlib
 | 
			
		|||
import logging
 | 
			
		||||
 | 
			
		||||
JAP10HASH = '03a63945398191337e896e5771f77173'
 | 
			
		||||
RANDOMIZERBASEHASH = 'de0100dc53a8e755a0fa9a3f15f1d100'
 | 
			
		||||
RANDOMIZERBASEHASH = 'ab6634609335a28e99bd915c7b1f3906'
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def patch_rom(world, rom, hashtable, quickswap=False, beep='normal', sprite=None):
 | 
			
		||||
| 
						 | 
				
			
			@ -178,6 +178,8 @@ def patch_rom(world, rom, hashtable, quickswap=False, beep='normal', sprite=None
 | 
			
		|||
    # assorted fixes
 | 
			
		||||
    write_byte(rom, 0x180030, 0x00)  # Disable SRAM trace
 | 
			
		||||
    write_byte(rom, 0x180036, 0x0A)  # Rupoor negative value
 | 
			
		||||
    if world.goal == 'pedestal':
 | 
			
		||||
        write_byte(rom, 0x18003E, 0x01)  # make ganon invincible
 | 
			
		||||
 | 
			
		||||
    # remove shield from uncle
 | 
			
		||||
    write_bytes(rom, 0x6D253, [0x00, 0x00, 0xf6, 0xff, 0x00, 0x0E])
 | 
			
		||||
| 
						 | 
				
			
			@ -190,10 +192,7 @@ def patch_rom(world, rom, hashtable, quickswap=False, beep='normal', sprite=None
 | 
			
		|||
 | 
			
		||||
    if world.swamp_patch_required:
 | 
			
		||||
        # patch swamp: Need to enable permanent drain of water as dam or swamp were moved
 | 
			
		||||
        rom = rom.replace(bytearray([0xAF, 0xBB, 0xF2, 0x7E, 0x29, 0xDF, 0x8F, 0xBB, 0xF2, 0x7E]), bytearray([0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA]))
 | 
			
		||||
        rom = rom.replace(bytearray([0xAF, 0xFB, 0xF2, 0x7E, 0x29, 0xDF, 0x8F, 0xFB, 0xF2, 0x7E]), bytearray([0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA]))
 | 
			
		||||
        rom = rom.replace(bytearray([0xAF, 0x16, 0xF2, 0x7E, 0x29, 0x7F, 0x8F, 0x16, 0xF2, 0x7E]), bytearray([0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA]))
 | 
			
		||||
        rom = rom.replace(bytearray([0xAF, 0x51, 0xF0, 0x7E, 0x29, 0xFE, 0x8F, 0x51, 0xF0, 0x7E]), bytearray([0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA]))
 | 
			
		||||
        write_byte(rom, 0x1800A1, 0x01)
 | 
			
		||||
 | 
			
		||||
    # set correct flag for hera basement item
 | 
			
		||||
    if world.get_location('[dungeon-L3-1F] Tower of Hera - Freestanding Key').item is not None and world.get_location('[dungeon-L3-1F] Tower of Hera - Freestanding Key').item.name == 'Small Key (Tower of Hera)':
 | 
			
		||||
| 
						 | 
				
			
			@ -285,7 +284,10 @@ def write_strings(rom, world):
 | 
			
		|||
    write_string_to_rom(rom, 'PyramidFairy', PyramidFairy_texts[random.randint(0, len(PyramidFairy_texts) - 1)])
 | 
			
		||||
    write_string_to_rom(rom, 'Sahasrahla2', Sahasrahla2_texts[random.randint(0, len(Sahasrahla2_texts) - 1)])
 | 
			
		||||
    write_string_to_rom(rom, 'Blind', Blind_texts[random.randint(0, len(Blind_texts) - 1)])
 | 
			
		||||
    write_string_to_rom(rom, 'Ganon1', Ganon1_texts[random.randint(0, len(Ganon1_texts) - 1)])
 | 
			
		||||
    if world.goal == 'pedestal':
 | 
			
		||||
        write_string_to_rom(rom, 'Ganon1', 'Why are you even here?\n You can\'t even hurt me!')
 | 
			
		||||
    else:
 | 
			
		||||
        write_string_to_rom(rom, 'Ganon1', Ganon1_texts[random.randint(0, len(Ganon1_texts) - 1)])
 | 
			
		||||
    write_string_to_rom(rom, 'TavernMan', TavernMan_texts[random.randint(0, len(TavernMan_texts) - 1)])
 | 
			
		||||
 | 
			
		||||
    altaritem = world.get_location('Altar').item
 | 
			
		||||
| 
						 | 
				
			
			@ -334,7 +336,7 @@ def patch_base_rom(rom):
 | 
			
		|||
    rom.extend(bytearray([0x00]*(2097152 - len(rom))))
 | 
			
		||||
 | 
			
		||||
    # load randomizer patches
 | 
			
		||||
    patches = json.load(open('romreset.json', 'r')) + json.load(open('base2current.json', 'r'))
 | 
			
		||||
    patches = json.load(open('base2current.json', 'r'))
 | 
			
		||||
    for patch in patches:
 | 
			
		||||
        if isinstance(patch, dict):
 | 
			
		||||
            for baseaddress, values in patch.items():
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										6
									
								
								Rules.py
								
								
								
								
							
							
						
						
									
										6
									
								
								Rules.py
								
								
								
								
							| 
						 | 
				
			
			@ -84,11 +84,11 @@ def global_rules(world):
 | 
			
		|||
    set_rule(world.get_entrance('South Hyrule Teleporter'), lambda state: state.has('Hammer') and state.can_lift_rocks() and state.has_Pearl())
 | 
			
		||||
    set_rule(world.get_entrance('Kakariko Teleporter'), lambda state: ((state.has('Hammer') and state.can_lift_rocks()) or state.can_lift_heavy_rocks()) and state.has_Pearl())
 | 
			
		||||
    set_rule(world.get_location('Haunted Grove'), lambda state: state.has('Shovel'))
 | 
			
		||||
    set_rule(world.get_location('Purple Chest'), lambda state: state.can_reach('Blacksmiths', 'Location'))
 | 
			
		||||
    set_rule(world.get_location('Purple Chest'), lambda state: state.can_reach('Blacksmiths', 'Location') and state.has_Mirror())  # ToDo check if can S&Q with chest to avoid mirror
 | 
			
		||||
 | 
			
		||||
    set_rule(world.get_location('Piece of Heart (Zoras River)'), lambda state: state.has('Flippers'))
 | 
			
		||||
    set_rule(world.get_entrance('Waterfall of Wishing'), lambda state: state.has('Flippers'))  # can be fake flippered into, but is in weird state inside that might prevent you from doing things. Can be improved in future Todo
 | 
			
		||||
    set_rule(world.get_location('Blacksmiths'), lambda state: state.can_lift_heavy_rocks() and state.has_Mirror() and state.can_reach('West Dark World'))
 | 
			
		||||
    set_rule(world.get_location('Blacksmiths'), lambda state: state.can_lift_heavy_rocks() and state.can_reach('West Dark World'))
 | 
			
		||||
    set_rule(world.get_location('Magic Bat'), lambda state: state.has('Magic Powder'))
 | 
			
		||||
    set_rule(world.get_location('Sick Kid'), lambda state: state.has('Bottle'))
 | 
			
		||||
    set_rule(world.get_location('Library'), lambda state: state.has_Boots())
 | 
			
		||||
| 
						 | 
				
			
			@ -388,7 +388,7 @@ def set_blacksmith_rules(world):
 | 
			
		|||
    blacksmith_entrance = world.get_region('Blacksmiths Hut').entrances[0]
 | 
			
		||||
    # some special handling if shuffled as we cannot use connected caves to take the smith up to death mountain
 | 
			
		||||
    if blacksmith_entrance.name == 'Hookshot Fairy':
 | 
			
		||||
        add_rule(world.get_location('Blacksmiths'), lambda state: state.has('Ocarina') and (state.has('Hammer') or state.has('Hookshot')))
 | 
			
		||||
        add_rule(world.get_location('Blacksmiths'), lambda state: state.has('Ocarina') and (state.has('Hookshot') or (state.has('Hammer') and state.has('Mirror'))))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def set_big_bomb_rules(world):
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
		Loading…
	
		Reference in New Issue