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('ganonstower_vanilla', True)
|
||||||
set_player_attr('sewer_light_cone', self.mode[player] == 'standard')
|
set_player_attr('sewer_light_cone', self.mode[player] == 'standard')
|
||||||
set_player_attr('initial_overworld_flags', [0] * 0x80)
|
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_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_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'])
|
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:
|
while len(queue) > 0:
|
||||||
next_region = queue.popleft()
|
next_region = queue.popleft()
|
||||||
visited_regions.add(next_region)
|
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:
|
for ent in next_region.entrances:
|
||||||
parent = ent.parent_region
|
parent = ent.parent_region
|
||||||
if parent and parent.type is not RegionType.Dungeon and parent not in queue and parent not in visited_regions:
|
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 = {
|
indirect_connections = {
|
||||||
'Turtle Rock Ledge': 'Turtle Rock',
|
'Turtle Rock Ledge': 'Turtle Rock',
|
||||||
#'Big Bomb Shop': 'Pyramid Fairy',
|
'Big Bomb Shop': 'Pyramid Crack',
|
||||||
#'East Dark World': 'Pyramid Fairy',
|
#'East Dark World': 'Pyramid Fairy',
|
||||||
'Pyramid Area': 'Pyramid Fairy', # HC Ledge/Courtyard
|
'Pyramid Area': 'Pyramid Crack', # HC Ledge/Courtyard
|
||||||
#'Dark Desert': 'Pyramid Fairy',
|
#'Dark Desert': 'Pyramid Fairy',
|
||||||
#'Misery Mire Area': 'Pyramid Fairy', # Desert/Checkerboard Ledge
|
#'Misery Mire Area': 'Pyramid Fairy', # Desert/Checkerboard Ledge
|
||||||
#'West Dark World': 'Pyramid Fairy',
|
#'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):
|
for player in range(1, world.players + 1):
|
||||||
create_regions(world, player)
|
create_regions(world, player)
|
||||||
create_dungeon_regions(world, player)
|
|
||||||
create_owedges(world, player)
|
|
||||||
if world.logic[player] in ('owglitches', 'nologic'):
|
if world.logic[player] in ('owglitches', 'nologic'):
|
||||||
create_owg_connections(world, player)
|
create_owg_connections(world, player)
|
||||||
|
create_dungeon_regions(world, player)
|
||||||
|
create_owedges(world, player)
|
||||||
create_shops(world, player)
|
create_shops(world, player)
|
||||||
create_doors(world, player)
|
create_doors(world, player)
|
||||||
create_rooms(world, player)
|
create_rooms(world, player)
|
||||||
@@ -213,7 +213,6 @@ def main(args, seed=None, fish=None):
|
|||||||
set_rules(world, player)
|
set_rules(world, player)
|
||||||
|
|
||||||
district_item_pool_config(world)
|
district_item_pool_config(world)
|
||||||
|
|
||||||
for player in range(1, world.players + 1):
|
for player in range(1, world.players + 1):
|
||||||
if world.shopsanity[player]:
|
if world.shopsanity[player]:
|
||||||
sell_potions(world, 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]):
|
if should_be_bunny(sanc_region, world.mode[player]):
|
||||||
rom.write_bytes(0x13fff2, [0x12, 0x00])
|
rom.write_bytes(0x13fff2, [0x12, 0x00])
|
||||||
|
|
||||||
if not world.is_bombshop_start(player):
|
lh_name = 'Links House' if not world.is_bombshop_start(player) else 'Big Bomb Shop'
|
||||||
lh_name = 'Links House'
|
|
||||||
else:
|
|
||||||
lh_name = 'Big Bomb Shop'
|
|
||||||
links_house = world.get_region(lh_name, player)
|
links_house = world.get_region(lh_name, player)
|
||||||
if should_be_bunny(links_house, world.mode[player]):
|
if should_be_bunny(links_house, world.mode[player]):
|
||||||
rom.write_bytes(0x13fff0, [0x04 if lh_name == 'Links House' else 0x1C, 0x01])
|
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:
|
with open('%s' % outfilename, "wb") as zspr_file:
|
||||||
zspr_file.write(write_buffer)
|
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):
|
def write_sprite(rom, sprite):
|
||||||
if not sprite.valid:
|
if not sprite.valid:
|
||||||
return
|
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)']
|
'Pyramid', 'Spiral Cave (Top)', 'Fairy Ascension Cave (Drop)']
|
||||||
bunny_accessible_locations = ['Link\'s Uncle', 'Sahasrahla', 'Sick Kid', 'Lost Woods Hideout', 'Lumberjack Tree',
|
bunny_accessible_locations = ['Link\'s Uncle', 'Sahasrahla', 'Sick Kid', 'Lost Woods Hideout', 'Lumberjack Tree',
|
||||||
'Checkerboard Cave', 'Potion Shop', 'Spectacle Rock Cave', 'Pyramid',
|
'Checkerboard Cave', 'Potion Shop', 'Spectacle Rock Cave', 'Pyramid',
|
||||||
'Hype Cave - Generous Guy', 'Peg Cave', 'Bumper Cave Ledge', 'Dark Blacksmith Ruins',
|
'Hype Cave - Generous Guy', 'Peg Cave', 'Bumper Cave Ledge',
|
||||||
'Spectacle Rock', 'Bombos Tablet', 'Ether Tablet', 'Purple Chest', 'Blacksmith',
|
'Frog', 'Missing Smith', 'Dark Blacksmith Ruins', 'Purple Chest', 'Pyramid Crack', 'Big Bomb',
|
||||||
'Missing Smith', 'Pyramid Crack', 'Big Bomb', 'Master Sword Pedestal', 'Bottle Merchant', 'Sunken Treasure', 'Desert Ledge',
|
'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',
|
'Kakariko Shop - Left', 'Kakariko Shop - Middle', 'Kakariko Shop - Right',
|
||||||
'Lake Hylia Shop - Left', 'Lake Hylia Shop - Middle', 'Lake Hylia Shop - Right',
|
'Lake Hylia Shop - Left', 'Lake Hylia Shop - Middle', 'Lake Hylia Shop - Right',
|
||||||
'Potion Shop - Left', 'Potion Shop - Middle', 'Potion Shop - Right',
|
'Potion Shop - Left', 'Potion Shop - Middle', 'Potion Shop - Right',
|
||||||
|
|||||||
Reference in New Issue
Block a user