Merged in DR v1.4.1.11
This commit is contained in:
@@ -146,7 +146,7 @@ SETTINGSTOPROCESS = {
|
||||
},
|
||||
"generation": {
|
||||
"bps": "bps",
|
||||
"createspoiler": "create_spoiler",
|
||||
"spoiler": "spoiler",
|
||||
"createrom": "create_rom",
|
||||
"calcplaythrough": "calc_playthrough",
|
||||
"print_custom_yaml": "print_custom_yaml",
|
||||
|
||||
@@ -260,7 +260,7 @@ def get_randomize_able_sprites_ow(area_id, data_tables):
|
||||
req = data_tables.sprite_requirements[key]
|
||||
if isinstance(req, dict):
|
||||
continue
|
||||
if not req.static and req.can_randomize:
|
||||
if not req.static and req.can_randomize and not sprite.static:
|
||||
sprite_table[idx] = sprite
|
||||
return sprite_table
|
||||
|
||||
|
||||
@@ -29,6 +29,7 @@ def init_vanilla_sprites_ow():
|
||||
create_sprite(0x21b, EnemySprite.GreenKnifeGuard, 0x20, 0x1A, '', 0x09CB51)
|
||||
create_sprite(0x21b, EnemySprite.TutorialGuard, 0x2D, 0x25, '', 0x09CB54)
|
||||
create_sprite(0x21b, EnemySprite.TutorialGuard, 0x20, 0x29, '', 0x09CB57)
|
||||
create_sprite(0x21b, EnemySprite.TutorialGuard, 0x3C, 0x2A, '', 0x09CB5B)
|
||||
create_sprite(0x21d, EnemySprite.Apple, 0x0B, 0x06, '', 0x09CB5B, bonk=True)
|
||||
create_sprite(0x22b, EnemySprite.TutorialGuard, 0x09, 0x1E, '', 0x09CB5F)
|
||||
create_sprite(0x22b, EnemySprite.TutorialGuard, 0x0B, 0x1E, '', 0x09CB62)
|
||||
|
||||
@@ -687,7 +687,11 @@ def setup_required_overworld_groups(sheets):
|
||||
sheets[4].add_sprite_to_sheet([None, None, None, None], {0xF, 0x9F}) # Waterfall of wishing (pre/post-Aga)
|
||||
sheets[3].add_sprite_to_sheet([None, None, None, 14], {0x14, 0xA4}) # Graveyard (pre/post-Aga)
|
||||
sheets[1].add_sprite_to_sheet([None, None, 76, 0x3F], {0x1B, 0xAB}) # Hyrule Castle (pre/post-Aga)
|
||||
sheets[2].add_sprite_to_sheet([None, None, None, 0x3F], {}) # Hyrule Castle - rain state
|
||||
## group 0 set to 0x48 for tutortial guards
|
||||
## group 1 & 2 set for green knife guards (and probably normal green guard)
|
||||
## group 3 set for lightning gate
|
||||
sheets[2].add_sprite_to_sheet([0x48, 0x49, 0x13, 0x3F], {}) # Hyrule Castle - rain state
|
||||
|
||||
# Smithy/Race/Kak (pre/post-Aga)
|
||||
sheets[6].add_sprite_to_sheet([0x4F, 0x49, 0x4A, 0x50], {0x18, 0x22, 0x28, 0xA8, 0xB2, 0xB8})
|
||||
sheets[8].add_sprite_to_sheet([None, None, 18, None], {0x30, 0xC0}) # Desert (pre/post-Aga)
|
||||
|
||||
@@ -325,6 +325,7 @@ UwGeneralDeny:
|
||||
- [ 0x00c2, 5, [ "Wizzrobe", "Statue" ] ] # Wizzrobes can't spawn on pots
|
||||
- [ 0x00c5, 6, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Turtle Rock - Catwalk - Mini Helmasaur"
|
||||
- [ 0x00c5, 7, [ "Statue" ] ] #"Turtle Rock - Catwalk - Laser Eye (Left) 4"
|
||||
- [0x00c6, 5, ["Bumper"]]
|
||||
- [ 0x00cb, 0, [ "Wizzrobe", "Statue" ] ] # Wizzrobes can't spawn on pots
|
||||
- [ 0x00cb, 3, [ "RollerVerticalUp", "RollerVerticalDown", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Thieves' Town - Grand Room NW - Zol 1"
|
||||
- [ 0x00cb, 5, [ "RollerVerticalUp", "RollerVerticalDown", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Thieves' Town - Grand Room NW - Zol 2"
|
||||
@@ -419,10 +420,12 @@ OwGeneralDeny:
|
||||
- [0x03, 10, ["Gibo"]] # OldMan eating Gibo
|
||||
- [0x05, 11, ["Bumper", "AntiFairyCircle"]] # Blocks path to portal
|
||||
- [0x1e, 3, ["Beamos", "Bumper", "BigSpike", "AntiFairyCircle"]] # forbid a beamos here
|
||||
- [0x35, 8, ["RollerVerticalUp", "RollerVerticalDown"]] # blocks the dock
|
||||
- [0x40, 0, ["Beamos", "Bumper", "BigSpike", "AntiFairyCircle", "Thief"]]
|
||||
- [0x40, 7, ["Beamos", "Bumper", "BigSpike", "AntiFairyCircle", "Thief"]]
|
||||
- [0x40, 13, ["Beamos", "Bumper", "BigSpike", "AntiFairyCircle", "Thief"]]
|
||||
- [0x40, 14, ["Beamos", "Bumper", "BigSpike", "AntiFairyCircle", "Thief"]]
|
||||
- [0x40, 16, ["RollerVerticalUp", "RollerVerticalDown"]] # Ropa near back hole is really large as a roller
|
||||
- [0x55, 6, ["BigSpike"]]
|
||||
- [0x57, 5, ["RollerVerticalUp", "RollerVerticalDown"]]
|
||||
- [0x5e, 0, ["Gibo"]] # kiki eating Gibo
|
||||
|
||||
@@ -133,7 +133,6 @@ def bottom_frame(self, parent, args=None):
|
||||
made[k] = m.group(1) + m.group(2) + ' ' + m.group(4)
|
||||
successMsg += (made["rom"] % (YES if (guiargs.create_rom) else NO)) + "\n"
|
||||
successMsg += (made["playthrough"] % (YES if (guiargs.calc_playthrough) else NO)) + "\n"
|
||||
successMsg += (made["spoiler"] % (YES if (not guiargs.jsonout and guiargs.create_spoiler) else NO)) + "\n"
|
||||
successMsg += (made["enemizer"] % (YES if needEnemizer else NO)) + "\n"
|
||||
# FIXME: English
|
||||
successMsg += ("Seed%s: %s" % ('s' if len(seeds) > 1 else "", ','.join(str(x) for x in seeds)))
|
||||
|
||||
@@ -1340,18 +1340,24 @@ def do_limited_shuffle_exclude_drops(pool_def, avail, lw=True):
|
||||
|
||||
|
||||
def do_vanilla_connect(pool_def, avail):
|
||||
if pool_def['condition'] == 'shopsanity':
|
||||
if 'shopsanity' in pool_def['condition']:
|
||||
if avail.world.shopsanity[avail.player]:
|
||||
return
|
||||
elif pool_def['condition'] == 'pottery': # this condition involves whether caves with pots are shuffled or not
|
||||
if 'pottery' in pool_def['condition']: # this condition involves whether caves with pots are shuffled or not
|
||||
if avail.world.pottery[avail.player] not in ['none', 'keys', 'dungeon']:
|
||||
return
|
||||
elif pool_def['condition'] == 'takeany':
|
||||
if 'takeany' in pool_def['condition']:
|
||||
if avail.world.take_any[avail.player] == 'fixed':
|
||||
return
|
||||
elif pool_def['condition'] == 'bonk':
|
||||
if 'bonk' in pool_def['condition']:
|
||||
if avail.world.shuffle_bonk_drops[avail.player]:
|
||||
return
|
||||
if 'dropshuffle' in pool_def['condition']:
|
||||
if avail.world.dropshuffle[avail.player] not in ['none', 'keys']:
|
||||
return
|
||||
if 'enemy_drop' in pool_def['condition']:
|
||||
if avail.world.dropshuffle[avail.player] not in ['none', 'keys'] or avail.world.enemy_shuffle[avail.player] != 'none':
|
||||
return
|
||||
defaults = {**default_connections, **(inverted_default_connections if avail.inverted != avail.world.is_tile_swapped(0x1b, avail.player) else open_default_connections)}
|
||||
for entrance in pool_def['entrances']:
|
||||
if entrance in avail.entrances:
|
||||
@@ -1871,35 +1877,56 @@ modes = {
|
||||
'special': 'vanilla',
|
||||
'condition': '',
|
||||
'entrances': ['Mire Fairy', 'Archery Game', 'Fortune Teller (Dark)', 'Dark Sanctuary Hint',
|
||||
'Dark Lake Hylia Ledge Hint', 'Dark Lake Hylia Fairy', 'Dark Lake Hylia Shop',
|
||||
'East Dark World Hint', 'Kakariko Gamble Game', 'Long Fairy Cave',
|
||||
'Bush Covered House', 'Fortune Teller (Light)', 'Lost Woods Gamble',
|
||||
'Lake Hylia Fortune Teller', 'Lake Hylia Fairy', 'Bonk Fairy (Light)'],
|
||||
'Dark Lake Hylia Ledge Hint', 'Dark Lake Hylia Fairy', 'East Dark World Hint',
|
||||
'Kakariko Gamble Game', 'Bush Covered House', 'Fortune Teller (Light)',
|
||||
'Lost Woods Gamble', 'Lake Hylia Fortune Teller', 'Lake Hylia Fairy'],
|
||||
},
|
||||
'fixed_shops': {
|
||||
'special': 'vanilla',
|
||||
'condition': 'shopsanity',
|
||||
'entrances': ['Dark Death Mountain Shop', 'Dark Potion Shop', 'Dark Lumberjack Shop',
|
||||
'Dark World Shop', 'Red Shield Shop', 'Kakariko Shop', 'Capacity Upgrade',
|
||||
'Lake Hylia Shop'],
|
||||
'entrances': ['Dark Death Mountain Shop', 'Dark Potion Shop', 'Dark Lumberjack Shop', 'Dark World Shop',
|
||||
'Red Shield Shop', 'Kakariko Shop', 'Lake Hylia Shop', 'Dark Lake Hylia Shop'],
|
||||
},
|
||||
'fixed_takeanys': {
|
||||
'special': 'vanilla',
|
||||
'condition': 'takeany',
|
||||
'entrances': ['Desert Fairy', 'Light Hype Fairy', 'Dark Death Mountain Fairy',
|
||||
'Dark Lake Hylia Ledge Fairy', 'Bonk Fairy (Dark)'],
|
||||
'entrances': ['Desert Fairy', 'Light Hype Fairy', 'Dark Death Mountain Fairy', 'Dark Lake Hylia Ledge Fairy'],
|
||||
},
|
||||
'fixed_takeanys_enemy_drops_fairies': {
|
||||
'special': 'vanilla',
|
||||
'condition': ['takeany', 'enemy_drop'],
|
||||
'entrances': ['Bonk Fairy (Dark)'],
|
||||
},
|
||||
'fixed_pottery': {
|
||||
'special': 'vanilla',
|
||||
'condition': 'pottery',
|
||||
'entrances': ['Lumberjack House', 'Snitch Lady (West)', 'Snitch Lady (East)', 'Tavern (Front)',
|
||||
'Light World Bomb Hut', '20 Rupee Cave', '50 Rupee Cave', 'Hookshot Fairy',
|
||||
'Palace of Darkness Hint', 'Dark Lake Hylia Ledge Spike Cave',
|
||||
'Mire Hint']
|
||||
'20 Rupee Cave', '50 Rupee Cave', 'Palace of Darkness Hint',
|
||||
'Dark Lake Hylia Ledge Spike Cave', 'Mire Hint']
|
||||
},
|
||||
'fixed_enemy_drops_fairies': {
|
||||
'special': 'vanilla',
|
||||
'condition': 'enemy_drop',
|
||||
'entrances': ['Long Fairy Cave', 'Bonk Fairy (Light)']
|
||||
},
|
||||
'fixed_pots_n_bones_fairies': {
|
||||
'special': 'vanilla',
|
||||
'condition': ['pottery', 'enemy_drop'],
|
||||
'entrances': ['Hookshot Fairy']
|
||||
},
|
||||
'fixed_pots_n_bones': {
|
||||
'special': 'vanilla',
|
||||
'condition': ['pottery', 'dropshuffle'],
|
||||
'entrances': ['Light World Bomb Hut']
|
||||
},
|
||||
'fixed_shop_n_bones': {
|
||||
'special': 'vanilla',
|
||||
'condition': ['shopsanity', 'enemy_drop'],
|
||||
'entrances': ['Capacity Upgrade']
|
||||
},
|
||||
'fixed_bonk': {
|
||||
'special': 'vanilla',
|
||||
'condition': 'bonk',
|
||||
'condition': ['enemy_drop', 'bonk'],
|
||||
'entrances': ['Good Bee Cave']
|
||||
},
|
||||
'item_caves': { # shuffles shops/pottery if they weren't fixed in the last steps
|
||||
@@ -1908,15 +1935,15 @@ modes = {
|
||||
'Ice Rod Cave', 'Dam', 'Bonk Rock Cave', 'Library', 'Potion Shop', 'Mini Moldorm Cave',
|
||||
'Checkerboard Cave', 'Graveyard Cave', 'Cave 45', 'Sick Kids House', 'Blacksmiths Hut',
|
||||
'Sahasrahlas Hut', 'Aginahs Cave', 'Chicken House', 'Kings Grave', 'Blinds Hideout',
|
||||
'Waterfall of Wishing', 'Dark Death Mountain Shop', 'Good Bee Cave',
|
||||
'Waterfall of Wishing', 'Dark Death Mountain Shop', 'Dark Lake Hylia Shop',
|
||||
'Dark Potion Shop', 'Dark Lumberjack Shop', 'Dark World Shop',
|
||||
'Red Shield Shop', 'Kakariko Shop', 'Capacity Upgrade', 'Lake Hylia Shop',
|
||||
'Lumberjack House', 'Snitch Lady (West)', 'Snitch Lady (East)', 'Tavern (Front)',
|
||||
'Light World Bomb Hut', '20 Rupee Cave', '50 Rupee Cave', 'Hookshot Fairy',
|
||||
'Palace of Darkness Hint', 'Dark Lake Hylia Ledge Spike Cave',
|
||||
'Mire Hint', 'Desert Fairy', 'Light Hype Fairy', 'Dark Death Mountain Fairy',
|
||||
'Dark Lake Hylia Ledge Fairy', 'Bonk Fairy (Dark)',
|
||||
'Links House', 'Tavern North']
|
||||
'Palace of Darkness Hint', 'Dark Lake Hylia Ledge Spike Cave', 'Desert Fairy',
|
||||
'Light Hype Fairy', 'Dark Death Mountain Fairy', 'Dark Lake Hylia Ledge Fairy',
|
||||
'Bonk Fairy (Dark)', 'Good Bee Cave', 'Long Fairy Cave', 'Bonk Fairy (Light)',
|
||||
'Mire Hint', 'Links House', 'Tavern North']
|
||||
},
|
||||
'old_man_cave': { # have to do old man cave first so lw dungeon don't use up everything
|
||||
'special': 'old_man_cave_east',
|
||||
@@ -1962,35 +1989,56 @@ modes = {
|
||||
'special': 'vanilla',
|
||||
'condition': '',
|
||||
'entrances': ['Mire Fairy', 'Archery Game', 'Fortune Teller (Dark)', 'Dark Sanctuary Hint',
|
||||
'Dark Lake Hylia Ledge Hint', 'Dark Lake Hylia Fairy', 'Dark Lake Hylia Shop',
|
||||
'East Dark World Hint', 'Kakariko Gamble Game', 'Long Fairy Cave',
|
||||
'Bush Covered House', 'Fortune Teller (Light)', 'Lost Woods Gamble',
|
||||
'Lake Hylia Fortune Teller', 'Lake Hylia Fairy', 'Bonk Fairy (Light)'],
|
||||
'Dark Lake Hylia Ledge Hint', 'Dark Lake Hylia Fairy', 'East Dark World Hint',
|
||||
'Kakariko Gamble Game', 'Bush Covered House', 'Fortune Teller (Light)',
|
||||
'Lost Woods Gamble', 'Lake Hylia Fortune Teller', 'Lake Hylia Fairy'],
|
||||
},
|
||||
'fixed_shops': {
|
||||
'special': 'vanilla',
|
||||
'condition': 'shopsanity',
|
||||
'entrances': ['Dark Death Mountain Shop', 'Dark Potion Shop', 'Dark Lumberjack Shop',
|
||||
'Dark World Shop', 'Red Shield Shop', 'Kakariko Shop', 'Capacity Upgrade',
|
||||
'Lake Hylia Shop'],
|
||||
'entrances': ['Dark Death Mountain Shop', 'Dark Potion Shop', 'Dark Lumberjack Shop', 'Dark World Shop',
|
||||
'Red Shield Shop', 'Kakariko Shop', 'Lake Hylia Shop', 'Dark Lake Hylia Shop'],
|
||||
},
|
||||
'fixed_takeanys': {
|
||||
'special': 'vanilla',
|
||||
'condition': 'takeany',
|
||||
'entrances': ['Desert Fairy', 'Light Hype Fairy', 'Dark Death Mountain Fairy',
|
||||
'Dark Lake Hylia Ledge Fairy', 'Bonk Fairy (Dark)'],
|
||||
'entrances': ['Desert Fairy', 'Light Hype Fairy', 'Dark Death Mountain Fairy', 'Dark Lake Hylia Ledge Fairy'],
|
||||
},
|
||||
'fixed_takeanys_enemy_drops_fairies': {
|
||||
'special': 'vanilla',
|
||||
'condition': ['takeany', 'enemy_drop'],
|
||||
'entrances': ['Bonk Fairy (Dark)'],
|
||||
},
|
||||
'fixed_pottery': {
|
||||
'special': 'vanilla',
|
||||
'condition': 'pottery',
|
||||
'entrances': ['Lumberjack House', 'Snitch Lady (West)', 'Snitch Lady (East)', 'Tavern (Front)',
|
||||
'Light World Bomb Hut', '20 Rupee Cave', '50 Rupee Cave', 'Hookshot Fairy',
|
||||
'Palace of Darkness Hint', 'Dark Lake Hylia Ledge Spike Cave',
|
||||
'Mire Hint']
|
||||
'20 Rupee Cave', '50 Rupee Cave', 'Palace of Darkness Hint',
|
||||
'Dark Lake Hylia Ledge Spike Cave', 'Mire Hint']
|
||||
},
|
||||
'fixed_enemy_drops_fairies': {
|
||||
'special': 'vanilla',
|
||||
'condition': 'enemy_drop',
|
||||
'entrances': ['Long Fairy Cave', 'Bonk Fairy (Light)']
|
||||
},
|
||||
'fixed_pots_n_bones_fairies': {
|
||||
'special': 'vanilla',
|
||||
'condition': ['pottery', 'enemy_drop'],
|
||||
'entrances': ['Hookshot Fairy']
|
||||
},
|
||||
'fixed_pots_n_bones': {
|
||||
'special': 'vanilla',
|
||||
'condition': ['pottery', 'dropshuffle'],
|
||||
'entrances': ['Light World Bomb Hut']
|
||||
},
|
||||
'fixed_shop_n_bones': {
|
||||
'special': 'vanilla',
|
||||
'condition': ['shopsanity', 'enemy_drop'],
|
||||
'entrances': ['Capacity Upgrade']
|
||||
},
|
||||
'fixed_bonk': {
|
||||
'special': 'vanilla',
|
||||
'condition': 'bonk',
|
||||
'condition': ['enemy_drop', 'bonk'],
|
||||
'entrances': ['Good Bee Cave']
|
||||
},
|
||||
'item_caves': { # shuffles shops/pottery if they weren't fixed in the last steps
|
||||
@@ -1999,15 +2047,15 @@ modes = {
|
||||
'Ice Rod Cave', 'Dam', 'Bonk Rock Cave', 'Library', 'Potion Shop', 'Mini Moldorm Cave',
|
||||
'Checkerboard Cave', 'Graveyard Cave', 'Cave 45', 'Sick Kids House', 'Blacksmiths Hut',
|
||||
'Sahasrahlas Hut', 'Aginahs Cave', 'Chicken House', 'Kings Grave', 'Blinds Hideout',
|
||||
'Waterfall of Wishing', 'Dark Death Mountain Shop', 'Good Bee Cave',
|
||||
'Waterfall of Wishing', 'Dark Death Mountain Shop', 'Dark Lake Hylia Shop',
|
||||
'Dark Potion Shop', 'Dark Lumberjack Shop', 'Dark World Shop',
|
||||
'Red Shield Shop', 'Kakariko Shop', 'Capacity Upgrade', 'Lake Hylia Shop',
|
||||
'Lumberjack House', 'Snitch Lady (West)', 'Snitch Lady (East)', 'Tavern (Front)',
|
||||
'Light World Bomb Hut', '20 Rupee Cave', '50 Rupee Cave', 'Hookshot Fairy',
|
||||
'Palace of Darkness Hint', 'Dark Lake Hylia Ledge Spike Cave',
|
||||
'Mire Hint', 'Desert Fairy', 'Light Hype Fairy', 'Dark Death Mountain Fairy',
|
||||
'Dark Lake Hylia Ledge Fairy', 'Bonk Fairy (Dark)',
|
||||
'Links House', 'Tavern North'] # inverted links house gets substituted
|
||||
'Palace of Darkness Hint', 'Dark Lake Hylia Ledge Spike Cave', 'Desert Fairy',
|
||||
'Light Hype Fairy', 'Dark Death Mountain Fairy', 'Dark Lake Hylia Ledge Fairy',
|
||||
'Bonk Fairy (Dark)', 'Good Bee Cave', 'Long Fairy Cave', 'Bonk Fairy (Light)',
|
||||
'Mire Hint', 'Links House', 'Tavern North']
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -94,6 +94,7 @@ class DataTables:
|
||||
# _00FA81 is LW normal
|
||||
# _00FAC1 is LW post-aga
|
||||
# _00FB01 is DW
|
||||
# _00FA41 is rain state
|
||||
self.write_ow_sprite_data_to_rom(rom)
|
||||
for sprite, stats in self.enemy_stats.items():
|
||||
# write health to rom
|
||||
@@ -134,9 +135,11 @@ class DataTables:
|
||||
# calculate how big this table is going to be?
|
||||
# bytes = sum(1+len(x)*3 for x in self.ow_enemy_table.values() if len(x) > 0)+1
|
||||
# ending_byte = 0x09CB3B + bytes
|
||||
max_per_state = {0: 0x40, 1: 0x90, 2: 0x8D} # dropped max on state 2 to steal space for a couple extra sprites (Murahdahla)
|
||||
max_per_state = {0: 0x40, 1: 0x90, 2: 0x8B} # dropped max on state 2 to steal space for a couple extra sprites (Murahdahla, extra tutorial guard)
|
||||
|
||||
pointer_address = snes_to_pc(0x09C881)
|
||||
data_pointer = snes_to_pc(0x09CB3B) # was originally 0x09CB41 - stealing space for a couple extra sprites (Murahdahla)
|
||||
# currently borrowed 10 bytes, used 9 (2xMurah + TutorialGuard)
|
||||
data_pointer = snes_to_pc(0x09CB38) # was originally 0x09CB41 - stealing space for a couple extra sprites (Murahdahla, extra tutorial guard)
|
||||
empty_pointer = pc_to_snes(data_pointer) & 0xFFFF
|
||||
rom.write_byte(data_pointer, 0xff)
|
||||
cached_dark_world = {}
|
||||
|
||||
Reference in New Issue
Block a user