Added the stz $047a for pod eg glitch

Standard generation improvements (Bomb escape rework)
Vanilla+ER generation improvements
This commit is contained in:
aerinon
2020-05-22 13:45:00 -06:00
parent ae7ce076af
commit 2d8d4ebf4a
10 changed files with 36 additions and 21 deletions

View File

@@ -150,7 +150,7 @@ def vanilla_key_logic(world, player):
origin_list = list(entrances_map[builder.name])
find_enabled_origins(builder.sectors, enabled_entrances, origin_list, entrances_map, builder.name)
if len(origin_list) <= 0:
if len(origin_list) <= 0 or not pre_validate(builder, origin_list, world, player):
if last_key == builder.name or loops > 1000:
origin_name = world.get_region(origin_list[0], player).entrances[0].parent_region.name if len(origin_list) > 0 else 'no origin'
raise Exception('Infinite loop detected for "%s" located at %s' % (builder.name, origin_name))
@@ -373,7 +373,7 @@ def main_dungeon_generation(dungeon_builders, recombinant_builders, connections_
last_key = builder.name
loops += 1
else:
logging.getLogger('').info('%s: %s', world.fish.translate("cli","cli","generating.dungeon"), builder.name)
logging.getLogger('').info('%s: %s', world.fish.translate("cli", "cli", "generating.dungeon"), builder.name)
ds = generate_dungeon(builder, origin_list, split_dungeon, world, player)
find_new_entrances(ds, entrances_map, connections, potentials, enabled_entrances, world, player)
ds.name = name

View File

@@ -1228,15 +1228,16 @@ def identify_destination_sectors(accessible_sectors, reverse_d_map, dungeon_map,
if ent_name in split_list:
split_section = split_name
break
for r_name in split_dungeon_entrances[d_name][split_section]:
ent_sector = find_sector(r_name, dungeon_map[d_name].sectors)
if ent_sector in accessible_sectors and ent_name not in dead_entrances:
sector.destination_entrance = True
found_connections.add(ent_name)
accessible_sectors.add(sector)
accessible_overworld.add(region)
explored = False
break
if split_section:
for r_name in split_dungeon_entrances[d_name][split_section]:
ent_sector = find_sector(r_name, dungeon_map[d_name].sectors)
if ent_sector in accessible_sectors and ent_name not in dead_entrances:
sector.destination_entrance = True
found_connections.add(ent_name)
accessible_sectors.add(sector)
accessible_overworld.add(region)
explored = False
break
def calc_allowance_and_dead_ends(builder, connections_tuple):

View File

@@ -287,9 +287,12 @@ def generate_itempool(world, player):
if item in ['Progressive Bow', 'Bow'] and not found_bow:
found_bow = True
possible_weapons.append(item)
if item in ['Hammer', 'Bombs (10)', 'Fire Rod', 'Cane of Somaria', 'Cane of Byrna']:
if item in ['Hammer', 'Fire Rod', 'Cane of Somaria', 'Cane of Byrna']:
if item not in possible_weapons:
possible_weapons.append(item)
if item in ['Bombs (10)']:
if item not in possible_weapons and world.doorShuffle[player] != 'crossed':
possible_weapons.append(item)
starting_weapon = random.choice(possible_weapons)
placed_items["Link's Uncle"] = starting_weapon
pool.remove(starting_weapon)

View File

@@ -24,7 +24,7 @@ from Fill import distribute_items_cutoff, distribute_items_staleness, distribute
from ItemList import generate_itempool, difficulties, fill_prizes
from Utils import output_path, parse_player_names
__version__ = '0.1.0.3-u'
__version__ = '0.1.0.4-u'
class EnemizerError(RuntimeError):
pass

View File

@@ -1,6 +1,9 @@
# New Features
* Crossed Dungeon generation improvements
* Standard mode generation improvements
* Spoiler lists bosses (multiworld compatible)
* Bombs escape not valid for Crossed Dungeon
### Experimental features
@@ -9,13 +12,13 @@
# Bug Fixes
* Crossed Dungeon generation improvements
* Fix for Animated Tiles in crossed dungeon
* Stonewall hardlock no longer reachable from certain drops (Sewer Drop, some Skull Woods drops) that were previously possible
* No logic uses less key door logic
* Spoiler log encoding
* Enemizer settings made consistent with website
* Swamp flooded ladders in the basement now requires Flippers
* PoD EG Glitch gets killed on transitions (Only when DR is on)
##### In Progress

2
Rom.py
View File

@@ -22,7 +22,7 @@ from EntranceShuffle import door_addresses, exit_ids
JAP10HASH = '03a63945398191337e896e5771f77173'
RANDOMIZERBASEHASH = 'bd07845238de1ce060530a996378f867'
RANDOMIZERBASEHASH = '4fdf20e033770cf92786a790a020d2d5'
class JsonRom(object):

View File

@@ -839,21 +839,28 @@ def standard_rules(world, player):
copy_state.sweep_for_events()
return copy_state.has('Zelda Delivered', player)
def bomb_escape_rule():
loc = world.get_location("Link's Uncle", player)
return loc.item and loc.item.name == 'Bombs (10)'
def standard_escape_rule(state):
return state.can_kill_most_things(player) or bomb_escape_rule()
add_item_rule(world.get_location('Link\'s Uncle', player), uncle_item_rule)
# ensures the required weapon for escape lands on uncle (unless player has it pre-equipped)
for location in ['Link\'s House', 'Sanctuary', 'Sewers - Secret Room - Left', 'Sewers - Secret Room - Middle',
'Sewers - Secret Room - Right']:
add_rule(world.get_location(location, player), lambda state: state.can_kill_most_things(player))
add_rule(world.get_location('Secret Passage', player), lambda state: state.can_kill_most_things(player))
add_rule(world.get_location(location, player), lambda state: standard_escape_rule(state))
add_rule(world.get_location('Secret Passage', player), lambda state: standard_escape_rule(state))
escape_builder = world.dungeon_layouts[player]['Hyrule Castle']
for region in escape_builder.master_sector.regions:
for loc in region.locations:
add_rule(loc, lambda state: state.can_kill_most_things(player))
add_rule(loc, lambda state: standard_escape_rule(state))
if region.name in std_kill_rooms:
for ent in std_kill_rooms[region.name]:
add_rule(world.get_entrance(ent, player), lambda state: state.can_kill_most_things(player))
add_rule(world.get_entrance(ent, player), lambda state: standard_escape_rule(state))
set_rule(world.get_location('Zelda Pickup', player), lambda state: state.has('Big Key (Escape)', player))
set_rule(world.get_entrance('Hyrule Castle Throne Room N', player), lambda state: state.has('Zelda Herself', player))

View File

@@ -65,6 +65,7 @@ TrapDoorFixer:
rts
Cleanup:
stz $047a
inc $11
lda $ef
rts

View File

@@ -80,7 +80,7 @@ SpiralWarp: {
tax : lda $02802e, x : tay
jsl DecompDungAnimatedTiles
+
stz $047a
ply : plx : plb ; pull the stuff we pushed
lda $a2 : and #$0f ; this is the code we are hijacking
rtl

File diff suppressed because one or more lines are too long