Various fixes found from full compare of DR Unstable
This commit is contained in:
@@ -121,7 +121,7 @@ class World(object):
|
||||
set_player_attr('ganonstower_vanilla', True)
|
||||
set_player_attr('sewer_light_cone', self.mode[player] == 'standard')
|
||||
set_player_attr('initial_overworld_flags', [0] * 0x80)
|
||||
set_player_attr('fix_trock_doors', self.shuffle[player] != 'vanilla' or ((self.mode[player] == 'inverted') != 0x05 in self.owswaps[player][0]))
|
||||
set_player_attr('fix_trock_doors', self.shuffle[player] != 'vanilla' or self.is_tile_swapped(0x05, player))
|
||||
set_player_attr('fix_skullwoods_exit', self.shuffle[player] not in ['vanilla', 'simple', 'restricted', 'dungeonssimple'] or self.doorShuffle[player] not in ['vanilla'])
|
||||
set_player_attr('fix_palaceofdarkness_exit', self.shuffle[player] not in ['vanilla', 'simple', 'restricted', 'dungeonssimple'])
|
||||
set_player_attr('fix_trock_exit', self.shuffle[player] not in ['vanilla', 'simple', 'restricted', 'dungeonssimple'])
|
||||
|
||||
@@ -1838,7 +1838,7 @@ def find_inaccessible_regions(world, player):
|
||||
while len(queue) > 0:
|
||||
next_region = queue.popleft()
|
||||
visited_regions.add(next_region)
|
||||
if next_region.name == 'Dark Sanctuary Hint': # special spawn point in cave
|
||||
if world.mode[player] == 'inverted' and next_region.name == 'Dark Sanctuary Hint': # special spawn point in cave
|
||||
for ent in next_region.entrances:
|
||||
parent = ent.parent_region
|
||||
if parent and parent.type is not RegionType.Dungeon and parent not in queue and parent not in visited_regions:
|
||||
|
||||
@@ -2296,9 +2296,9 @@ one_way_ledges = {
|
||||
|
||||
indirect_connections = {
|
||||
'Turtle Rock Ledge': 'Turtle Rock',
|
||||
#'Big Bomb Shop': 'Pyramid Fairy',
|
||||
'Big Bomb Shop': 'Pyramid Crack',
|
||||
#'East Dark World': 'Pyramid Fairy',
|
||||
'Pyramid Area': 'Pyramid Fairy', # HC Ledge/Courtyard
|
||||
'Pyramid Area': 'Pyramid Crack', # HC Ledge/Courtyard
|
||||
#'Dark Desert': 'Pyramid Fairy',
|
||||
#'Misery Mire Area': 'Pyramid Fairy', # Desert/Checkerboard Ledge
|
||||
#'West Dark World': 'Pyramid Fairy',
|
||||
|
||||
5
Main.py
5
Main.py
@@ -158,10 +158,10 @@ def main(args, seed=None, fish=None):
|
||||
|
||||
for player in range(1, world.players + 1):
|
||||
create_regions(world, player)
|
||||
create_dungeon_regions(world, player)
|
||||
create_owedges(world, player)
|
||||
if world.logic[player] in ('owglitches', 'nologic'):
|
||||
create_owg_connections(world, player)
|
||||
create_dungeon_regions(world, player)
|
||||
create_owedges(world, player)
|
||||
create_shops(world, player)
|
||||
create_doors(world, player)
|
||||
create_rooms(world, player)
|
||||
@@ -213,7 +213,6 @@ def main(args, seed=None, fish=None):
|
||||
set_rules(world, player)
|
||||
|
||||
district_item_pool_config(world)
|
||||
|
||||
for player in range(1, world.players + 1):
|
||||
if world.shopsanity[player]:
|
||||
sell_potions(world, player)
|
||||
|
||||
60
Rom.py
60
Rom.py
@@ -812,10 +812,7 @@ def patch_rom(world, rom, player, team, enemized, is_mystery=False):
|
||||
if should_be_bunny(sanc_region, world.mode[player]):
|
||||
rom.write_bytes(0x13fff2, [0x12, 0x00])
|
||||
|
||||
if not world.is_bombshop_start(player):
|
||||
lh_name = 'Links House'
|
||||
else:
|
||||
lh_name = 'Big Bomb Shop'
|
||||
lh_name = 'Links House' if not world.is_bombshop_start(player) else 'Big Bomb Shop'
|
||||
links_house = world.get_region(lh_name, player)
|
||||
if should_be_bunny(links_house, world.mode[player]):
|
||||
rom.write_bytes(0x13fff0, [0x04 if lh_name == 'Links House' else 0x1C, 0x01])
|
||||
@@ -1968,61 +1965,6 @@ def dump_zspr(basesprite, basepalette, baseglove, outfilename, author_name, spri
|
||||
with open('%s' % outfilename, "wb") as zspr_file:
|
||||
zspr_file.write(write_buffer)
|
||||
|
||||
# .zspr file dumping logic copied with permission from SpriteSomething:
|
||||
# https://github.com/Artheau/SpriteSomething/blob/master/source/meta/classes/spritelib.py#L443 (thanks miketrethewey!)
|
||||
def dump_zspr(basesprite, basepalette, baseglove, outfilename, author_name, sprite_name):
|
||||
palettes = basepalette
|
||||
# Add glove data
|
||||
palettes.extend(baseglove)
|
||||
HEADER_STRING = b"ZSPR"
|
||||
VERSION = 0x01
|
||||
SPRITE_TYPE = 0x01 # this format has "1" for the player sprite
|
||||
RESERVED_BYTES = b'\x00\x00\x00\x00\x00\x00'
|
||||
QUAD_BYTE_NULL_CHAR = b'\x00\x00\x00\x00'
|
||||
DOUBLE_BYTE_NULL_CHAR = b'\x00\x00'
|
||||
SINGLE_BYTE_NULL_CHAR = b'\x00'
|
||||
|
||||
write_buffer = bytearray()
|
||||
|
||||
write_buffer.extend(HEADER_STRING)
|
||||
write_buffer.extend(struct.pack('B', VERSION)) # as_u8
|
||||
checksum_start = len(write_buffer)
|
||||
write_buffer.extend(QUAD_BYTE_NULL_CHAR) # checksum
|
||||
sprite_sheet_pointer = len(write_buffer)
|
||||
write_buffer.extend(QUAD_BYTE_NULL_CHAR)
|
||||
write_buffer.extend(struct.pack('<H', len(basesprite))) # as_u16
|
||||
palettes_pointer = len(write_buffer)
|
||||
write_buffer.extend(QUAD_BYTE_NULL_CHAR)
|
||||
write_buffer.extend(struct.pack('<H', len(palettes))) # as_u16
|
||||
write_buffer.extend(struct.pack('<H', SPRITE_TYPE)) # as_u16
|
||||
write_buffer.extend(RESERVED_BYTES)
|
||||
# sprite.name
|
||||
write_buffer.extend(sprite_name.encode('utf-16-le'))
|
||||
write_buffer.extend(DOUBLE_BYTE_NULL_CHAR)
|
||||
# author.name
|
||||
write_buffer.extend(author_name.encode('utf-16-le'))
|
||||
write_buffer.extend(DOUBLE_BYTE_NULL_CHAR)
|
||||
# author.name-short
|
||||
write_buffer.extend(author_name.encode('ascii'))
|
||||
write_buffer.extend(SINGLE_BYTE_NULL_CHAR)
|
||||
write_buffer[sprite_sheet_pointer:sprite_sheet_pointer +
|
||||
4] = struct.pack('<L', len(write_buffer)) # as_u32
|
||||
write_buffer.extend(basesprite)
|
||||
write_buffer[palettes_pointer:palettes_pointer +
|
||||
4] = struct.pack('<L', len(write_buffer)) # as_u32
|
||||
write_buffer.extend(palettes)
|
||||
|
||||
checksum = (sum(write_buffer) + 0xFF + 0xFF) % 0x10000
|
||||
checksum_complement = 0xFFFF - checksum
|
||||
|
||||
write_buffer[checksum_start:checksum_start +
|
||||
2] = struct.pack('<H', checksum) # as_u16
|
||||
write_buffer[checksum_start + 2:checksum_start +
|
||||
4] = struct.pack('<H', checksum_complement) # as_u16
|
||||
|
||||
with open('%s' % outfilename, "wb") as zspr_file:
|
||||
zspr_file.write(write_buffer)
|
||||
|
||||
def write_sprite(rom, sprite):
|
||||
if not sprite.valid:
|
||||
return
|
||||
|
||||
7
Rules.py
7
Rules.py
@@ -1691,9 +1691,10 @@ def set_bunny_rules(world, player, inverted):
|
||||
'Pyramid', 'Spiral Cave (Top)', 'Fairy Ascension Cave (Drop)']
|
||||
bunny_accessible_locations = ['Link\'s Uncle', 'Sahasrahla', 'Sick Kid', 'Lost Woods Hideout', 'Lumberjack Tree',
|
||||
'Checkerboard Cave', 'Potion Shop', 'Spectacle Rock Cave', 'Pyramid',
|
||||
'Hype Cave - Generous Guy', 'Peg Cave', 'Bumper Cave Ledge', 'Dark Blacksmith Ruins',
|
||||
'Spectacle Rock', 'Bombos Tablet', 'Ether Tablet', 'Purple Chest', 'Blacksmith',
|
||||
'Missing Smith', 'Pyramid Crack', 'Big Bomb', 'Master Sword Pedestal', 'Bottle Merchant', 'Sunken Treasure', 'Desert Ledge',
|
||||
'Hype Cave - Generous Guy', 'Peg Cave', 'Bumper Cave Ledge',
|
||||
'Frog', 'Missing Smith', 'Dark Blacksmith Ruins', 'Purple Chest', 'Pyramid Crack', 'Big Bomb',
|
||||
'Spectacle Rock', 'Bombos Tablet', 'Ether Tablet', 'Blacksmith',
|
||||
'Master Sword Pedestal', 'Bottle Merchant', 'Sunken Treasure', 'Desert Ledge',
|
||||
'Kakariko Shop - Left', 'Kakariko Shop - Middle', 'Kakariko Shop - Right',
|
||||
'Lake Hylia Shop - Left', 'Lake Hylia Shop - Middle', 'Lake Hylia Shop - Right',
|
||||
'Potion Shop - Left', 'Potion Shop - Middle', 'Potion Shop - Right',
|
||||
|
||||
Reference in New Issue
Block a user