From 035621e420fade50627ecf93cc7ecba048cfda6f Mon Sep 17 00:00:00 2001 From: aerinon Date: Tue, 28 Sep 2021 14:57:17 -0600 Subject: [PATCH 1/7] Rupee bow forbids certain lobbies in HC in standard Allow a lobby in keydrop shuffle Key rule fix when bk isn't possible Added controller awareness to world traversal --- BaseClasses.py | 12 +++++++++--- DoorShuffle.py | 14 +++++++++----- Doors.py | 7 +++++-- KeyDoorShuffle.py | 2 +- Main.py | 2 +- RELEASENOTES.md | 3 +++ Rules.py | 6 +++++- 7 files changed, 33 insertions(+), 13 deletions(-) diff --git a/BaseClasses.py b/BaseClasses.py index b7c13f45..58530558 100644 --- a/BaseClasses.py +++ b/BaseClasses.py @@ -559,7 +559,7 @@ class CollectionState(object): queue.append((new_entrance, new_crystal_state)) # else those connections that are not accessible yet if self.is_small_door(connection): - door = connection.door + door = connection.door if connection.door.smallKey else connection.door.controller dungeon_name = connection.parent_region.dungeon.name key_logic = self.world.key_logic[player][dungeon_name] if door.name not in self.reached_doors[player]: @@ -573,7 +573,7 @@ class CollectionState(object): checklist[connection.name] = (connection, crystal_state) elif door.name not in self.opened_doors[player]: opened_doors = self.opened_doors[player] - door = connection.door + door = connection.door if connection.door.smallKey else connection.door.controller if door.name not in opened_doors: self.door_counter[player][1][dungeon_name] += 1 opened_doors.add(door.name) @@ -956,7 +956,12 @@ class CollectionState(object): @staticmethod def is_small_door(connection): - return connection and connection.door and connection.door.smallKey + return connection and connection.door and (connection.door.smallKey or + CollectionState.is_controlled_by_small(connection)) + + @staticmethod + def is_controlled_by_small(connection): + return connection.door.controller and connection.door.controller.smallKey def is_door_open(self, door_name, player): return door_name in self.opened_doors[player] @@ -1641,6 +1646,7 @@ class Door(object): self.bk_shuffle_req = False self.standard_restricted = False # flag if portal is not allowed in HC in standard self.lw_restricted = False # flag if portal is not allowed in DW + self.rupee_bow_restricted = False # flag if portal is not allowed in HC in standard+rupee_bow # self.incognitoPos = -1 # self.sectorLink = False diff --git a/DoorShuffle.py b/DoorShuffle.py index c70cc040..917f78bd 100644 --- a/DoorShuffle.py +++ b/DoorShuffle.py @@ -368,7 +368,8 @@ def choose_portals(world, player): if world.doorShuffle[player] in ['basic', 'crossed']: cross_flag = world.doorShuffle[player] == 'crossed' - bk_shuffle = world.bigkeyshuffle[player] + # key drops allow the big key in the right place in Desert Tiles 2 + bk_shuffle = world.bigkeyshuffle[player] or world.keydropshuffle[player] std_flag = world.mode[player] == 'standard' # roast incognito doors world.get_room(0x60, player).delete(5) @@ -415,6 +416,7 @@ def choose_portals(world, player): for dungeon, info in shuffled_info: outstanding_portals = list(dungeon_portals[dungeon]) hc_flag = std_flag and dungeon == 'Hyrule Castle' + rupee_bow_flag = hc_flag and world.retro[player] # rupee bow if hc_flag: sanc = world.get_portal('Sanctuary', player) sanc.destination = True @@ -424,14 +426,14 @@ def choose_portals(world, player): info.required_passage = {x: y for x, y in info.required_passage.items() if len(y) > 0} for target_region, possible_portals in info.required_passage.items(): candidates = find_portal_candidates(master_door_list, dungeon, need_passage=True, crossed=cross_flag, - bk_shuffle=bk_shuffle) + bk_shuffle=bk_shuffle, rupee_bow=rupee_bow_flag) choice, portal = assign_portal(candidates, possible_portals, world, player) portal.destination = True clean_up_portal_assignment(portal_assignment, dungeon, portal, master_door_list, outstanding_portals) dead_end_choices = info.total - 1 - len(portal_assignment[dungeon]) for i in range(0, dead_end_choices): candidates = find_portal_candidates(master_door_list, dungeon, dead_end_allowed=True, - crossed=cross_flag, bk_shuffle=bk_shuffle) + crossed=cross_flag, bk_shuffle=bk_shuffle, rupee_bow=rupee_bow_flag) possible_portals = outstanding_portals if not info.sole_entrance else [x for x in outstanding_portals if x != info.sole_entrance] choice, portal = assign_portal(candidates, possible_portals, world, player) if choice.deadEnd: @@ -443,7 +445,7 @@ def choose_portals(world, player): the_rest = info.total - len(portal_assignment[dungeon]) for i in range(0, the_rest): candidates = find_portal_candidates(master_door_list, dungeon, crossed=cross_flag, - bk_shuffle=bk_shuffle, standard=hc_flag) + bk_shuffle=bk_shuffle, standard=hc_flag, rupee_bow=rupee_bow_flag) choice, portal = assign_portal(candidates, outstanding_portals, world, player) clean_up_portal_assignment(portal_assignment, dungeon, portal, master_door_list, outstanding_portals) @@ -564,7 +566,7 @@ def disconnect_portal(portal, world, player): def find_portal_candidates(door_list, dungeon, need_passage=False, dead_end_allowed=False, crossed=False, - bk_shuffle=False, standard=False): + bk_shuffle=False, standard=False, rupee_bow=False): ret = [x for x in door_list if bk_shuffle or not x.bk_shuffle_req] if crossed: ret = [x for x in ret if not x.dungeonLink or x.dungeonLink == dungeon or x.dungeonLink.startswith('link')] @@ -576,6 +578,8 @@ def find_portal_candidates(door_list, dungeon, need_passage=False, dead_end_allo ret = [x for x in ret if not x.deadEnd] if standard: ret = [x for x in ret if not x.standard_restricted] + if rupee_bow: + ret = [x for x in ret if not x.rupee_bow_restricted] return ret diff --git a/Doors.py b/Doors.py index b0979a5d..a23f46f0 100644 --- a/Doors.py +++ b/Doors.py @@ -1490,8 +1490,11 @@ def create_doors(world, player): world.get_door('GT Petting Zoo SE', player).dead_end() world.get_door('GT DMs Room SW', player).dead_end() world.get_door("GT Bob\'s Room SE", player).passage = False - world.get_door('Desert Tiles 2 SE', player).bk_shuffle_req = True # key-drop note (todo) - world.get_door('Swamp Lobby S', player).standard_restricted = True # key-drop note (todo) + world.get_door('Desert Tiles 2 SE', player).bk_shuffle_req = True # key-drop note: allows this to be a portal + world.get_door('Swamp Lobby S', player).standard_restricted = True + world.get_door('PoD Mimics 2 SW', player).rupee_bow_restricted = True # bow statue + # enemizer logic could get rid of the following restriction + world.get_door('PoD Pit Room S', player).rupee_bow_restricted = True # so mimics 1 shouldn't be required # can't unlink from boss right now world.get_door('Hera Lobby S', player).dungeonLink = 'Tower of Hera' diff --git a/KeyDoorShuffle.py b/KeyDoorShuffle.py index a84fe5e8..945ad601 100644 --- a/KeyDoorShuffle.py +++ b/KeyDoorShuffle.py @@ -171,7 +171,7 @@ class PlacementRule(object): if loc.item and loc.item.bigkey: bk_blocked = True break - else: + elif len(self.check_locations_w_bk) > self.needed_keys_w_bk: def loc_has_bk(l): return (big_key_loc is not None and big_key_loc == l) or (l.item and l.item.bigkey) diff --git a/Main.py b/Main.py index 0db8af04..cfd79062 100644 --- a/Main.py +++ b/Main.py @@ -29,7 +29,7 @@ from Fill import sell_potions, sell_keys, balance_multiworld_progression, balanc from ItemList import generate_itempool, difficulties, fill_prizes, customize_shops from Utils import output_path, parse_player_names -__version__ = '0.5.1.2-u' +__version__ = '0.5.1.3-u' from source.classes.BabelFish import BabelFish diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 55a34c3f..dbfa2879 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -15,6 +15,9 @@ CLI: ```--bombbag``` # Bug Fixes and Notes. +* 0.5.1.3 + * Certain lobbies forbidden in standard when rupee bow is enabled + * Fixed issue with key logic * 0.5.1.2 * Allowed Blind's Cell to be shuffled anywhere if Blind is not the boss of Thieves Town * Remove unique annotation from a FastEnum that was causing problems diff --git a/Rules.py b/Rules.py index 42bfe2f2..9902347d 100644 --- a/Rules.py +++ b/Rules.py @@ -1942,7 +1942,11 @@ def add_key_logic_rules(world, player): key_logic = world.key_logic[player] for d_name, d_logic in key_logic.items(): for door_name, rule in d_logic.door_rules.items(): - add_rule(world.get_entrance(door_name, player), eval_small_key_door(door_name, d_name, player)) + door_entrance = world.get_entrance(door_name, player) + add_rule(door_entrance, eval_small_key_door(door_name, d_name, player)) + if door_entrance.door.dependents: + for dep in door_entrance.door.dependents: + add_rule(dep.entrance, eval_small_key_door(door_name, d_name, player)) for location in d_logic.bk_restricted: if not location.forced_item: forbid_item(location, d_logic.bk_name, player) From a23315f78398be136e4d4ea696c57e6b8b63721d Mon Sep 17 00:00:00 2001 From: aerinon Date: Tue, 5 Oct 2021 14:13:24 -0600 Subject: [PATCH 2/7] Disarm EG glitch on mirror in most modes Added a check flag for the disarm on most transitions so if can be armed when wanted --- DoorShuffle.py | 2 +- RELEASENOTES.md | 1 + Rom.py | 4 +++- asm/drhooks.asm | 5 +++++ asm/normal.asm | 5 +++-- asm/overrides.asm | 6 ++++++ 6 files changed, 19 insertions(+), 4 deletions(-) diff --git a/DoorShuffle.py b/DoorShuffle.py index 917f78bd..61da6443 100644 --- a/DoorShuffle.py +++ b/DoorShuffle.py @@ -2044,7 +2044,7 @@ class DROptions(Flag): Town_Portal = 0x02 # If on, Players will start with mirror scroll Map_Info = 0x04 Debug = 0x08 - # Rails = 0x10 # Unused bit now + Fix_EG = 0x10 # used to be Rails = 0x10 # Unused bit now OriginalPalettes = 0x20 # Open_PoD_Wall = 0x40 # No longer pre-opening pod wall - unused # Open_Desert_Wall = 0x80 # No longer pre-opening desert wall - unused diff --git a/RELEASENOTES.md b/RELEASENOTES.md index dbfa2879..9b9857fc 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -17,6 +17,7 @@ CLI: ```--bombbag``` * 0.5.1.3 * Certain lobbies forbidden in standard when rupee bow is enabled + * PoD EG disarmed when mirroring (except in nologic) * Fixed issue with key logic * 0.5.1.2 * Allowed Blind's Cell to be shuffled anywhere if Blind is not the boss of Thieves Town diff --git a/Rom.py b/Rom.py index 22f017e3..ae29e127 100644 --- a/Rom.py +++ b/Rom.py @@ -32,7 +32,7 @@ from source.classes.SFX import randomize_sfx JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = '11f4f494e999a919aafd7d2624e67679' +RANDOMIZERBASEHASH = '1b937c39f026f9a687391488b7386542' class JsonRom(object): @@ -688,6 +688,8 @@ def patch_rom(world, rom, player, team, enemized, is_mystery=False): dr_flags |= DROptions.OriginalPalettes if world.experimental[player]: dr_flags |= DROptions.DarkWorld_Spawns + if world.logic[player] != 'nologic': + dr_flags |= DROptions.Fix_EG # fix hc big key problems (map and compass too) diff --git a/asm/drhooks.asm b/asm/drhooks.asm index 86ae1ff1..1d3b485b 100644 --- a/asm/drhooks.asm +++ b/asm/drhooks.asm @@ -125,6 +125,11 @@ org $07a955 ; <- Bank07.asm : around 6564 (JP is a bit different) (STZ $05FC : S jsl BlockEraseFix nop #2 +org $02A0A8 +Mirror_SaveRoomData: +org $07A95B ; < bank_07.asm ; #_07A95B: JSL Mirror_SaveRoomData +jsl EGFixOnMirror + org $02b82a jsl FixShopCode diff --git a/asm/normal.asm b/asm/normal.asm index aabb24de..3bdf9622 100644 --- a/asm/normal.asm +++ b/asm/normal.asm @@ -73,8 +73,9 @@ TrapDoorFixer: rts Cleanup: - stz $047a - inc $11 + lda.l DRFlags : and #$10 : beq + + stz $047a + + inc $11 lda $ef rts diff --git a/asm/overrides.asm b/asm/overrides.asm index a041ae30..91029a8a 100644 --- a/asm/overrides.asm +++ b/asm/overrides.asm @@ -47,6 +47,12 @@ MirrorCheckOverride: rtl + lda.l DRScroll : rtl +EGFixOnMirror: + lda.l DRFlags : and #$10 : beq + + stz $047a + + jsl Mirror_SaveRoomData + rtl + BlockEraseFix: lda $7ef353 : and #$02 : beq + stz $05fc : stz $05fd From a4848c5baf39eb3d7333c5f502878587ce078065 Mon Sep 17 00:00:00 2001 From: aerinon Date: Thu, 21 Oct 2021 14:17:26 -0600 Subject: [PATCH 3/7] Baserom update --- RELEASENOTES.md | 1 + Rom.py | 2 +- data/base2current.bps | Bin 135928 -> 136122 bytes 3 files changed, 2 insertions(+), 1 deletion(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 9b9857fc..c2fdf20a 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -19,6 +19,7 @@ CLI: ```--bombbag``` * Certain lobbies forbidden in standard when rupee bow is enabled * PoD EG disarmed when mirroring (except in nologic) * Fixed issue with key logic + * Updated baserom * 0.5.1.2 * Allowed Blind's Cell to be shuffled anywhere if Blind is not the boss of Thieves Town * Remove unique annotation from a FastEnum that was causing problems diff --git a/Rom.py b/Rom.py index ae29e127..d8514556 100644 --- a/Rom.py +++ b/Rom.py @@ -32,7 +32,7 @@ from source.classes.SFX import randomize_sfx JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = '1b937c39f026f9a687391488b7386542' +RANDOMIZERBASEHASH = '1c59cec98ba4555db8eed1d2dea76497' class JsonRom(object): diff --git a/data/base2current.bps b/data/base2current.bps index 46dee4bec02691a6036774e7670b7a070e81727c..fca7a6ecdc7d2b97a0a85bb86dd89a16dfb4749c 100644 GIT binary patch delta 19407 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 z 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 WMR^R&#RoM=R0CX3I}ktI`sP2W$4vA9 delta 19318 zcmX`S30xD$`#8Ltg!>AJ7&#;?w}|2iA}C&nii)=)YEV=(sMHfLG8 zkcbg6SiBX%n|Rbzv|6myYPE{?YpS+dYvrBv|9*aGW}atec6R2Ondf=td7eGfzB=reEo-qT|S8Fofs>TkE|Ey*&#x!uSbF$vv-fEblSHe=;e;dlmiBau( zzLYYY<0<5X%U$%aitttFdmYb^?^Lx(c!28X5t6*)Y?tiwakgBBplTcRMfUv_y#UAw zyj-uB6Z?;_RVhPW#~d}ra9r##9E*s#e|uY(nrKpl_x6f{ftr}82nRT9NSFvzy~LyP z@FhhWf-4Vi#YHjCWT&p^h3Lh~;_%+o5_v}&h;gM)Zp$frSxX$~VI^p!y-KRLx01wC zI^@KHt9nP&<4L8yw>M%oP~na~xPzcVm9ej0-}^vLtb3r3D3wjTrq3ystu(V~sOK;D z*cWrUel+MvUBoq|3Wp9+{pI!=8-C*;~v|q zm*)__-(zpeiOllwkkS@{{{u^Gf9RH>EYK$vBLXVIE45n}NagL7tR+J#&-nO~_14rA zcV%dJ=ocO&U{9NPE+7IxYE1Jvb!f=tOrfTuzvbbUuAuG`LdY8&dujuc>eqFMY zN7xKTPPCcWEJ_wwp$|b1*sIyzG+I80xN}p#1dZn3d+Zc6-=oFhLRtHHP_8;Z#88xMF=86oO|D}aR} zX6^yU(ooM|<>6C|Dx$nFy!R&=SsWgtRuTW8IebwO15g=;=t97++{oBbFWF8N@rDWS z^}nDdBq~J6nA>Wi{U8EFq>R|rbXy)%cvfgf#`UR)IyEcKL6kZHSMYrB{ct;Pg5c-_ zeaV0GJ4Z8rX_0?*Y-zvB-oLnfNWEg0uRud%r*-jW6rDwl3#?6&` zqh4oUV_W6Kv}^1Vv~XcRv2SF#FIWM2at3u-7XN}xDpnKKjjUPtMm83XwhxpnKgWt} z=Y*JipII%psEGO>SkWk*JOfQUMp{cuXk@J%QST5+PMqjrM*&K889teURC(D+QGQOVWNvX(> z85&te`cDwII7(%0jqEmq?9WCPZQ8O2`YFX^oi>d_3Tau+4SlsN^%UDFd!%87Iyv#W zi_NZ*<->yxLkH|-!qd<=n(ngR>1Y#&J!Eqb8V`SW@LQGg6Wg1Fj@ceG*|;OJgJeW@ zTOBq?D&NDkEcZvP71#6`C_DRuJ_9Odzcx4tKlE96!iUFtQx&r8Ypj2PZp*xalnassiLm#AZy>*zD0@QVJhjc4eqPjW+{V?+IrKUlyc&i}zCA>wV+ zuu86tNh=iLcV+7+_NHtvJmna+wB$#$+0=yB0~T{1;+{PGvVnLjN1TPQ@6yMR@{A)*`qTpLR$is-ekIFf&4FnelAna$vmYin z`S&+n)BjZa9PKkv+05o^&ax$lZVTZ?r+DWxh#EF-Y<&oiIt?1=YLI7$t?UrAn~z#q z;9|-oAg>XfZ}`bcC_z&p{(i$MHE1@3>@6E1*AQ>7v#Bo*ry(BDeVy&a6h?x7gH3fj zDO~hPJme=e;clBgvo;nc$y7=7@HEK>RYq91zW1PtI9AE_{;DFhNFY_$$JVeJcOasx zW05=~?MJ<+KuzeLqkVZ;OUnr~c7G70%Giyb6rt_e@20*>W+`PK++Q#ht*~PkD{7;N z;qa7m0Dc($;2eWrh7K-+B#3){p)7Q6A@xM&P1X}H)T{-O&32$rIz&ogC5I_%31(vo z8n(Cfr7FV{y`qbbv90Sz%%9m)xeqdY42aSWILY0aDh!K1LOA&YAVlkk4 zmD>u{8LNIoqvu^Bt?d8(hs`d2I03J@M6bSnTfbK(CvLW|sc2bxuIiD9cXZTpBjvdy z8P%#Ga#ecb;#F<_H^mFkj1Xr>vd755daZJTRq0((S=l+gcj?cPg{9Qsgql2;x}-f) z*&(P;K__ilHH+40v1_;kVwg|l#C1ryPIY>DgcTuX`_B>B?Hb1a87(N2;-F~sk|*KC zvQyB>EpYaFsLw;n$<%XtK>;ZqMapLBZ2NbjO8-ViEZ^VgxmY#|nA~P7y+JMUPWRuw zua*%5SuGZ%eW1!nV)ebJnCR@HT*TYX!5wak@N{^~ZD8unN`3D+^(6kwm%Y6SfJ{0_ zCT=Ss=f)JtiS%>&Q*vSptIw#EJ!kc!&=Aj|ZZJd_hDCBsMTA%Ad-H5Ufz?~&grRMO zyB3#(cj*SjYf317cnReZo{Cr^_nkH|Pt!PPaPcXM2)^datJ;Q2|M!Qs!4Z*KuFxlu zBtR$gfr%AeJ~^1;0g{Jg|6GM$fJPhD%HC}!qHeHCm(-HS!sKUSv?Zn>DO-M%wNc%r zm1P2RprBMvG~8sj!I}KwOY2(MUbNNA|6kUMGBh_)Ou35K@GUFKE4>|}*b8JplMgc* zjfEI-{Vv+UsW0ASl&FY{s5Meq+|}W(6h$O5!;g@?t_6+!lgCuV2zZYl<+x5BE(8?u z9dz^*;-_Gwr%Z$hDlnDTA#$-TYj829JL7`e)sm~|rfl!nNFU7i7vi%tZ4BZ6-@ z5sVecnCEOr8Jx4MA`YFkqmNh-k|rp#DFR2KyVq#f3#d#mSUDT4Sl$HZctzl1nCBG` zHKm#@*Sf53oPy+K#^_fpPbVW}zcIf4MYiL`m#Q+rE4DX+{3XK|c6xbxBb`HZu%1ZN z>&3#K&EnLKdg5Z+OD}a8@!>goL8;8)I_q65`w1asGVXOY?Pqxg22T3h1KAU(8yg`> z>S`Revt74z0}Gc8Qp(c1Sb-mqnaoH9M#(W-l6Fkys0hy{5u5q(KMgbUN48Zq?MF5j zEu;>~9=OH--Cn7hh(*=Cxrp9AOdOdDDmDpZOZLltGP8Mr&Z8ao%MhzeYLeYFvsgJ2 zB0sU&ButLq7&^_&h5*uIf8(;ipH;63>wR`x9eI64p(jU|GU1@{F;!24%?P8E+o2QwrdORd*u* zv(vXMskol#kCb#SB4$XLEJdc@TQ2)r#R^L)!T^U}>yq7k!KNb8e=F0wQe+#mcFvqWPB|@cMY3CsEOr1XA~xM)NvVqHf;Yzn6MVbGDec)^=q=GRL(l+O_d~gj03Lro20C119z71c|!zMqK`i zV}fLi)sEPBT`$(V#)*Z3N@Dp{y_mSwHfu^W?llV#tM6iBlODuaoLgLZW>-i}O&;R! z^1}Fs*yvQN;~M-d&TwME6`rBo%!rM-Db2*&DmG)$6+H|CYHsQ-=#U&_H@?sl9E8!y z0~gy@nHo@MKB)m!%sQ#|6J;0AaHXcS!m3$QYGvG3L9-W7Iar*{j!hn+Js*W3J@Nsm z#Z_&8%j}Jg3=h!j3M;k=AYH+159}e`8+U~EFq1ugg4*O+xIcWA9Ds*IhiPHBHyk=m zh{wV?)5Zx>{r~!%qvRTKvFYafd@<3lnxz87#9P=fEp>Hx4SSH7Q-eflJxf=2=I?*S z=?t^G$m8yq-WBz6Daurm@;E59~F*knpa3pMTIj_8>pHw zM>3<{JhEv-DLEGvPLs(I>d-V>M$Y>`G~I^Iw>?r~tF>>MS3)j8=(=JX8rig|m|XaO z=wTbW2%)=*Y_&f(Va4R)|3j5FbjkmrdW1TWOaFhoEqmr?&WLdHCTpa5vo#7tr|9NB zujQK%Q7z8dv?7!w78+P_HsBMjW<78w-lCL8422c5qa+Ir=6}#hONKD+tL$HkKMVw9 zzs9A1lTNf0ru?lj^2Fw^mISRY(1m{`-B4lJS8eE5HP<*|Him~wdJZ~O=!H#5$eLh#zHizsK)94l1?!DEA3tc_Y{yk=5?6_&~M}% zvC)zKn;de<9iVz?$83sG$oeb+XLlAiyOxxd$jx6Yu8_+EIzAW3K3M{r#T;A9_%Dr% z3Q0$p1aymK)Ul?KF~&H|U+}bQ;>=6XBQ07&@pu)1xqx)kW{^iQjy;FNbNu&f z-O*6-%G3>i?25 zZG|4;;D&uTu$|ax0{}HL8*;pXInZ?fL%!A3^x#82p@(DU4Hd3B+!}mQXn2|u_sRpK zo*G^<*@d+)p9)dMMWJqEEG(Q?V(;I=ewO${ulbYkA#maRIG26bWjxvkCU-LZVD$A0G-o&7a8;JHe?7mU`@t?yJDkkEp~w zrOt<#1lY15Vrrd_8-rSwoEc2zj9oi(!KEf3|k)d!HZKhn;^2&nzPBJ&s!4&OL-r7X|x99<3UfTdQ`o zIvK+v=m~(bAHWO(vR_lz!NA4ClGbdvxe;_^w6V3lULCn88{Ds>5M>+sbyTD5P`{4D zwz_^Dowhpfj=Q!x?~a$YI`57zZBVgz4DJZ8EZ#hH*L1TiYWNVy(SJL)kQzR;%`42T zt7lX-PqlT7Y8c22H=Dd8%!)8_7??E}u3EA%V4jEhdjJxj3QZJaHPMDo-`P7qU+?MN4W;ru)o@O`T829QW_k}ZfPq}vXS)5sW zgS%kY6gXvRs7K5xt(?SkQf=n$k1%H!%v%~`2R$Qx-40upCJyCc3_q~P4%jRVrnzYn z#G34gpg--z4cN>N>rZ_M|1)DO!g|sjncdq<;DGeBr0`ksN-q z6F0WB%s7YI5WjsGBdkgD7iBBXn|T&oR7K1fWo`X?uV!j{k~Gs+xGI zDs*~>AOMyuc#j@>9lfpgVDRSQNhoz3=xK05EgV2FAD6HT;Y@p!q3dw(a(SJZt3Az zJPdzD0;`jOZ+30v3TJe5p+9Cl1E;T;Hf%?yZhZ))%Ns*!Z;_rg^Cs8I`{t)f7>94( zTIm=jl<4LxU@e@C&;?H;WqM-pEof!il1J=OGZvl ziV1ajC|jt%1S8H(MMBEr@Wj>16}n#PdWrr-cP~D;_~hc7i`I*uE<%3hM6|i)Wrjy* zoOmjv?6VwFOv}o23l#OXrT*NAJ3BK=oy#jGcv1a9gzeQ;m#Q!AhX*o;`=yFrz=42{ z0AzDx&ZBxmgJu0Bzm6kVY zsI(oM8~5C?7Mm-7lGe_d``o#f$%%*jtYC@975aGDY9M>-d4*mD+OOIphM~IJ93jSq z!q~T0nNVjy;wBBrVY~`p5QQX<{Ckc##ZYSITJ4GWYc``_^ffg2#>I_gtz-(czj_p> zN20AVDosKxyv82z;y#vVYk>Qmje(C~P;}2xi6+-WoZ?9Qe2rB)1Rii-R1BxU(^t$6yv0I9o%a)#(T5Wdgt~h99y*0>H2)s4+T-ZRNTgPasFU6l*-?MoPp+42X?5Sce#=&@$4nvSEy?ptxPV*!XQ+7vu zzBY9$ytX!W`0nkGbqi-bCdC!&if*Nt2&5M92zZ?}1^)-NUDskRKi5x0%o|mi@g{#b zY#kBd(MwtT!OcwlV;Whu(apz>nY`)N>4}fs1Y#2^aT40f8wbJN>%wQOxoO5N3rq^_ zf!fp_q!2o{x>ZU1KrQz(SospX{R};30o4ElYgf+%cB{->WpEr5(%lZmo08t=$GyU* za|G*gI;kly6~11#*m2!WbUFkK4rgTh;qGv4cJ!e0w^Di>O^6FwxzguYr>n({js}Qu zbou-I)bsFYcH+dD{gE{c_N!8#zttIUaXYypnv{*R1T=XLC2uc?CdtW63u!(3f?T4t z1I%UGO^VbT<@eeu<87={h~&a3IBb0au7f%21B2DynLV_}NWNA|`fGKhleU5k)Kp8-jDPAJ9uOLn1T7-aQi}V+P!m}#o09YLq3v?959aAun_ug80Rjy zBbNnhXT03qf^6H+@kRf_fPND^#HTrbBK<5%NqESgkLVI!lwOimB)ksv_3QG;KO1IAVRwrS@9qo2dACLM=Xtfuv zgQEbM&}bqP8wH?#JSt5>rJrFbnbHW!>5csh$r+{|^-MIJEsp7YRpni&J_`2=tAdaLBZQ?zjbm zHulGTVC=?80lV*rXcs__24$0gTqNx5hMuF)iE}m0V@8aC>WyOWO?N%SAM$DR1K!A| zD%^Be8w$NQjUH+r2Ml6*`}_PBF4r=!X^T5(cQ^9n91gP0aJfX@XE(7nG3dISgIU}e zcer!YP|i0`VbdmJz=V6o@zI*ged5!deUW`{HJyE@FT!p1@X4m74*1^`vJCpcq|F1D zXYB=~9bD)O^`-QGUQkG{0hrC&-lbzOvcPA5_dwX(F>>ia$7- z#mVAcj1d#d{|YcIZ*#gvdOw>y2%OB3*K1feo5g`%0qx<5&Eb;Zfq)#K8?+UW?aUKq zz&C&b9$H5n9Cv6(E#sS6#Bypo-LyOV;50x^VFX(M44(#?22BNlz#|znEjH>_ld1<~Iid_hdjFOo4Cd%}3QZJts|)t=-(OmrP-XZhWQACe9+^1x4Za zjy|>>uSmYt!N{SfFdKIP`4nX3sdJp#ga~K#xl=-lb@s3@H)vG&?p}@9=q?|Iiy6U= z-fuw57cMfE%=|YX_1J@!WnAPM<02^C5orNWV-P#xrXGbq<_ZTNf584WZM94;Ir)GM z21T0Yh}~i}tgY+AtXW&ES54$ZI_M_8^l;n~(>dU-~5=Lk~sY z_(&43AvJ5&9W|0qq{WqqETCNrD8PefY4ZS0 z2!L_06&Ir+AtP2|n^#L9h|B_Ta0Ixz5cxto;(Fe$xJbqKc!0vXabq9TbC7wu^sF0P zLc(d|f3J5!8|sk<{PUaG5PIs%ngD=EvTEXU=oSGkpb0p3e7TBe1Q_hZL}w$b^@C|! zf;rnoaQl`(=M@jlJS8447OsGGTXH;>@SmWo8k4*Lz|jhNA{@AN3_b#;ZH>d@ploY^ zaOUsor+hHjw3f*^pfU{xF$WtkcxHQrN=P7gA`F37wYnY^jALTdbhFmUbm^T< zgk5^aY~ERIhXglw{+7=-3i_W$)I8iMLXrc@?k@|WYhjP!QDCp)lK zUWWCYA5sOitH*q7NjcP!B#l8E{Lh#0LEd7wom zmSdQ9&PM34JK6u$D`fxeWsUAM9)THo|D|rWRJ(0ET)%rfUI-8FPFmz4>Ls~M_(Vvi zXgNWBsw}Qx4X4cq)UqO?q`RI^){BE)`yR+cCJ=J(BEZeJgSv~KmJmc_Z2krQIFlt|v zr^fWtm3%~Eoll|6@@M_kpf~MH{fkokQBy}f6>7a_{6%>k zuPA6v+(4>D2CNC|Xxp}tq%Ov2xpV%ap8TObU`q~?Pnb!w{?biN{;TEX%M$*3k!d8- z#GLBp?J^=p)hEBs6F2$K`xCz1M+lw&BzGeF*iKriTlaw;^5K8m?Y~|8dI(q!h~vmc z&4Er~kL`rIr=~Px-&qk~)&4*~N9hOpACz*G&Pql` zdchMo7^F;4Y75epc_^(CDUYG-j?#)!chwM;t?L=^>R7Nym4%Qks(h4|s#GYgRvkp? zDOD#*yHr1-v{&^HN?j}bE3|O2%#=_{Z=?(fARTB6hE&8=oJ^5+WWienenY=YTH6pt zOI2aMM7Zw2U}XOf0(bmN$5ENymO&)&01N0b4cPY;=ulev7;F$Q0GOqZ^_Ke z6>rMn#L5e*ii)e%%>Fvn_tnM4RjSGgPVCC8O=~viiZ_e5W^T~N4YWYAaJcUw#=Lp^ zhUF{QabneUfkIJQK*@_M4>6Gd-YSgZ(%(OaUkZIC^s!$Q3QDC?6ctn#b7I$JZdtQo z-=`<;B%yN~)l$lq#sKqK{pn3e@VdA}y^dRyqa_ z3Lg|UqHR0S>{z~O#r9V6N&aSAUu1uj? zo-1Cl97afW-T?M5>f=n6LZ9N?wu8kv_@H_6A2+cp#p@eHYc{VGZxV4wmR40&s4rc- z2v1BcfWu`1yJ+9=XdRp_+ZWEQ);Z|q3((-;wsSH?vAQXfK_y3b@8!gMC;P^Gj;?+KXFyQ_T_7ul`za--W>X#9S(-~Q>wPT7^_d&K(dDjLpUDYe_8aM9 zC8MhXD{+3VXA4ne!hm{o!YUm$o&^*D|q>dy{?dl~L>f^8o z{#!o&^>IVYiUZJ6cHBMHqg%62+LrnibJ0!g-nNUe@4FSyS5It9?KdjOf$Cf3OJVn0MQ#lU#gbpL?<-QQyvR+#sbuqZEGKkx8{%Bt)y z*p3or$6%;aB_?shE>rmUx*X49IBHut>8G7C?u0HtD#QBn8^d>ASM_1|*S8JAKt;!t zb=R4F1t$|I)mKcq_j9w~irY-m9_U{&nlsTC&aaq_OhXM7i|m&M;t^rmS41Z@Xs4~KL+W25oa#R=uuPjBTGq6A+I?okr2D$D z+pnoTuwJ_}Q=5da4vviGj=$3~;=(fw>-#xqIk7B6i}Wxx_U*(Ug0?s2ujwYOZI8)a z%~Hl=ba#h4{0axVFU;t!#fI{O{fG1$hOVg&oCWletpw|mGG=O8XpT^sfUfr-_=bA6q9e^$>T7H>p01$%>Wg@Q)o4@FNp}hAXTN#`$nc_0}01x#kXUNf#X>J?TkN zlM<@Z+)H(y%iicFc~zTM%YA*LExJ}x zrkxgT?sJ5==8|vXt{Vp15E3rg{xJz#ZqWbgme3v`8vd+_;_S_XE;au4>lb$Eau&eo znmEpc{%~E*aGx>$uc&M#<5s7lbJuGAsF}Q+W+vkBNX?*-7!D4qe8=sVS+P$yyndMj zJiSWPd00wJN(|$lRouMoD0G078X;!OM*B_`=eVV=teT{a3`U8O|@+ogg zUhbv&qYSdXKJskNoaU{oyxqK^^5mLp9e<b5XK<4Q_vN@Pyri2Z-&MbVU@Tin; z^ja3uuqj-o4R^aruGOx}x=M1PhmzuPbqfcSe)0oaUTNZFeQGk|KwjL1Mt zyFLnjUnh{1oT5&imYt$bHJzl+oTg4idSF(kLxwXmu3NtRS1{vw}{*6M}ZgeNk%Z?KDe z;kFYOg$?dvLZZ_XuWR)+izb;QB`(~na6jwE-7``L&#=DStj*uU`z*`pHx%xw&kGl4 zmemSSlpLLpLK9a0KrYZqk1j%X6Wett%v7Ex(K^@z7!L&vyB)SVmXn3L9Z=H{=;-8J zPL}9go!dGa#^Fx=BNeiZ@AIKAsk6-VZo{^+7P;zz*CVRvrlT?cYl;DKo`QR#apxq2SgWIeDFS15DUPIlOyd9J;3Q zn`Zd5UDKmWbhvJtz5H2e?ItpYO8uO1r!BWB7>~4XVQ;SlF--@`j_a0smDkt{q_tN2 z_850FN8B`ae6d;}rmr9?iVr+@Fd7eqy$6Tk1E8-lkR#d&#~Ih-xzJ!7j`xH2jUPsh z_AQ4)ean%}`K+3kjbcx-nQu0i8O+G(WoN`2&>gzJgj97Q&z>Vp%>h(D0CCuNC<0wx zBAUPA(_r}FFgwmX&?tiQ4$ttLbVbj!8Lf_{h41q%oNRG+U23crawT%@7I^Y-kkhQi zJ;#buKZ;_F%+JP|Z zND%VV6&(q5m{>!Z%C#6gd}JWL99}&#XnewT7CEAs#JRO)eUHS1x`oY%EzlE=M_9u1 z2-|>6?g)irzrci94&eAo6yy1O3rnESJP?tX=`hR`<%8@!jQaJfErdw7a>E9l-!Dbd(f`{{mN)5)d1=TxgvRIwLR%IM2B0!=VNJWW%fqP8Kb zh8205l9@c98Ck<-d77p%3eC70Hrvybf}qJYY>uaCI)Y}_us?a4W*}%j8mXsgCW4mL zurEDLvk=sYcax_-?J5SRJtz711S_z9N(^5E@(jd~juVFvYqfj*I#Q4S$g>pp9k#q_9 z4_b&&T1#=YT9zC@pCny$XGo{USClDTqN`W+)3SM zw+_gowCty**?=6WJBP~0*~-PbL{dH(Jp~s^p?x7aQ#TaA`{expo?NDFF`80%wnZh* z9A;|xfaU1YuLST1b|t9ApkS3 zRGU;<+n`0wJWY!joYFL-dN0#rCc1#!ri%fpvo)-LKgLN)wrOL^prIbwPF)%<)v&^* z3aCdol0hyFH=wXh=;P-h*ZF$LRfGHa%7-weaQ)13UEEB#sBNU3c+F#-FI2QCkR2)D z*k2sX1@=Eam%olLg=2dvXf)pfAD-8wqb0tWsQaoZFtT?^W1;yx5 zu2sJA1C5l(-a55SMC1h_Z;T%nT0&Y1U0dHT{lK`|X>?!-_Mj z@PY8pGi#?*AiHHl60dI1$Y1Ku@r?2A#Nms6Ca*+V){tO#NuxS%XH@cZl}z}&dReMP ze^uL*HMhR;Ff@?o+J1Ea)9o9yUQl;7NCH2Q&Id*(HZdL(NYxBv?Hc?!Z_mAos9n!s z{9pwsZiwH)XjjK6NF(&4$jOa^W|A@v7|=79Th$o1wY=8ORQxVqY!ospx0WBZPVKST z>J6olN!D0q+ybz^$nK#23eg(S;b6;^{X3jcE^Kw{aIxh|JD7Oxk-Nh{bFG6B$7#XP zd|ft-Xpff+H#Q^h<({$df_V5L+rJU$w;cTzH#0kmn)Z_ikcX|MjV5ni(l)87wMR^v z7U_}Uho*dc?bz@`-yPGns_l*sKh$&7bkMK|0q@Yya=ar5kbfgj6NQ~HB?8jFZ3g&l zACUj=7QH&Fk1a`++csoN+VpzW9TXdLg~=FxE($3<;-JKgQ@>21%hOy=StFx*Vw zQEfBKnH;jV=b-F7O56p%YQ0_OT!Rnfeaa_=rRq3 zUvBt0s!p2(AM%AeVc^Z#;cF(!Yl%~5^(eY%GYq9jLg$+zr=BQH!(0^F5ElixR%cJb z`LOcls9}-k^j4oz#xMS#(@3&d?2I{)DDrJ(B(P&EFL+`rC5N7*8M{otpY zLQlW59UfoZkV}eAzLwwN$*hHuxBiFEgo5vO2~tOWM`Fxwe+8UbUQY%Y*T|(oMu~O; zG=3MhBxEeDY0gGo;!<(dKb zBR!}tT^`Xk>dqk!J|8~5>*G4y2RXPcZl-9RPZY%O4M*DR$a`bgB>kjyk5XQliTs;1 zN^H7~nBM$8zX#IyP|#~PONd(8bXGugqOfwCD)^akC+SK#Qly32VJj5B6k`_e2ow=w zYhc1a1d5Q!yt*6U$ZE4fK}(V6LYN7^zc+N$oOH#dHUo+uu}?o}Yog7=Xcf;ENv%`K zJxm+l)0+S}otDa{f5^|)E>2J|BNE`qA7Tc6vqC|}Gg1|bY0o^R4OyX31tO1ZxOOw# z`-2}RA_Z!Gh;npUOH=fw#$^Q}&%c-yp4lAZef6=q%$>CKEzepTyc z8fPmX$M9gl{lSY+mFF;J)v%c@KcZ&Hi~lsnH2FimCBTp}kz+R&MJ0sk7TK!|VIT4Zn-Lo60gK=oA*{W>m=ih`{&hbre%d|RZm@>g zGC@hMfIEW$4qWF;Y@Sq*X122oGC9td95Ol0m*|G#`4?kM&IpCP5HJ@wz(o%#Qvxy_ zz`cxHRy)M*j1IMF9>UTa{{@d-zoAPQ`MYjbPN(V+4ud0p9ENAWRX;8rK;Ar97$e+@(%~pLRIpx%9bz$I0lf3$Xy>gr z1#6yCPsKtKdiJE?Kf?4LNoa~i-!cS8{z6ZaFY+Wgnwn93;8)~P%KYvKNBCrZG`d}z z;MblEdLSIR9K)5B0i6@k>?Wfzw7*OzNG;e7qGX$P{Gz$M2{_$uZUIaJ)yfEw8;RAew;H4Th_R1BbY`hfomhdlb6x?B}V13BgVP$$7k##ui8vE;uvZ2VJK3 zY=B9Rh4>hl`FJ3*9PN3m!k0m}Cxau|yLzkrb^gav(1k(}gMu!`FqtV1;O|4u&gecb z_nMr}3bCicj>Ay&q;a@c$jy^~zU`EC5PNPcw|4+12|EYC>~d;6X*clT1!I;m&$7?p zJwcL?zG>Bs9iLyXfTMmHitewgf4LACk=g#slO(Lw#VEmaOFHvkz690?^o77w6w@>X z#=^-@Z^!Y105dWa=)N@|E$I&0po=^6b@RT|Kk>&}T{|p~M`&Gl(dxIXKW6HN{m-c5 z&3#zw1ZEbT@yri}9It&gENa+HB^kjiSqPwLw}M=HO-g2?-}*Lbg-1>~v`bZ~_N5uch4H4wIMLXMGjH&%Z`F-y{tfQq!D;0SVa%<%%xm$t0nSr!V-1&0itW-qJ1p}{=Y z!oMgq3UqV!{o@8~H60J3=r>>d9^CUAfxa86`)v&F4DbCG?L4IrMfzp|geFwoE(iE&;Z>Tm$zNV4U=TE5T@PvAb!i4Sc z`AZZNx2MaAbXPjWJ?Fe|M`Y#1J;$hK;TtG?HQZ;d%dh=`c^{6P?R*^Y;$G!oB4Hw2 z_bSSvol-_J11CVut4QyV@zpk`re?3LVKL5(06IVT!>jP=u2E<=xS*RB`rLuUo22AZ zowS}`j9wmItn_3m;Of24xM0WLXJ!M>oQJjAp(6p@&3U$dBybZ+IyBCS_5`{aFu7NP zuZCB9qdm%GFs2qd4b;elA4`}Z$ax*>l!y6&KN08q15SD^^%ziws4k=&&_WI<6Ix*R zYZMA$2S2^m;wiB5&6vmzB}EuN02j1}{z2f?Amc|$*vPX-QHU_E0#04S0kTw0DY7xV zf0NGH*$C(SPT<*a%kTSe6SV%GE?Kzp(=9v7?({k9A%k75z~0xl*4O^2P{hoe_=z&& zRUW&ZGqGtUG7q9aD|T}N6``z3Y&dF}+sKi4fx6iSD*Z7Wt$UkQQRBjx`UiLcx?U|* zl)pGC)`sX+Sw~;AigiPHUVxe4(GO6bJxvjue&7o4P&U9ncMOH*|GA8jgn58)a`ZZ& zbN2T{vdF{(;gLcM|H(zX)#akl=H|!Vg?EWB3cF6aiG`;CT*fk^p~KsGUP~l@s{?GZ z)dHs$QM}e`X;A!jp!4E!Wq%07abjXDRJ;`o9Pil#*DbF(ZpN*4HuYR=vIpT}Z7P7* z-wr{aIemOP36F;H)-9YByWkP)^bPAPSPnXl$1BWzRzc0KfB#0u)lTTFLS@M+p^AtLrP22>wnfyap@O1}?=G+Fyz~)y_lFwN3^eg`>j_+zdP&r&ulI zE71|xrL?w9hN3?PNMfZT_^dhYPY3c9u)MBxQEq&Nl#gdhklDl#A+Jgwb!s+J=R zg%oCRW%~Pn)bK=Bt`WnTuvLG3Kab))jS;nDS19hw_Pi^UgAL@t^wUT;mA2R!c)||l z%XZBb$^|x1uA+*?Kf|Ci8iYHG+Jj))>9QxJ16^45tn4~^poV^i7!jQRjzFHl9q+KL%0gU(h8?Y75wde(hy`X6dED(joRplS;eMcbeB*wAJ@#4Aww2FO{T$cOSozL z`({4#cqE+vVF3z0JNRKpz&wU-U?yz@7xdTi+heRkgdez;-z@st$Mhcp|M(!lBcb!3 z{sZo|vbL{4BKs_i*ETyKH*>5w!yO3|{~YQ+J^mhPZE}pgN3E!Wdr5->hO~_pRYuPU z(+XJpr%?DqWw=1{t}^^!hsYYPnc~ycg+38MdE?Ge)_O-_G`#j_s8{Y7t9Dj_%%fv( zRZ7lbxxFw8e*JS&zx`@$KYoo0^%%*(Nq}@kA$Ifs8iHFO_-hbe19g8*7X)3^_b?0F zkGh}((TWsC9ZEiL22(3O_D6PTpO4XQOYO8MtYdL)@+OiQ4%0q%b42}M=%*v-JH)%6 zZrR&!y2mW@hfROC*{8-nc{^l26n)<6xFJhT68~QXXB*Sh8O8B?p7yraHng@t6opZs zqGA~>42QymrWHh`5}*`thKX~Q;Tv0!F_GS@>kti!+{t6EQe1dB_pI0}?)%$lD z`SO{4Dn<2J*9c4bH){AhGiFs;@lh|UtK6UN7}ou(1gPQ@X44^QxM=n%zz2N3n3c9G zap1VSDJ-ddyghLso|Q(+U$7d94(`0EHf-X09!dWry2X@dBxV2qWvGPWTn#_^>#Fh5 z!>0i%bE?a|vI#Rr{#&t9WwRX9ycFJ6`tI7uQotI;;sjwzWg=HJ@T^SJ@n+Dcr2qw~ z;Gk7UkRBRAQCoIYHnS5q$HIa+p;q%ZwzrLjYxtd5NR#On@#I1*oQj#_&i?xH+|&GK zIdP}JS2A^N136~VNfyo|Ig4Nc(6y$|0$HRY9hyO#Y7)E#s;_#Z*PEgvc09fqYU7mU zLlFQZ1CYsRC9Pz%IG+?Qfh#hGvkh+O2{azWS`%0lZFyvnd6g8KV3cNZ*L<#azooAv z`fOk{3jNmKCy|aAia-v`iWdoIADf?tO;*?{(S*HL$U*uFGG+xSwHxqd8@SMt60*<^ z4QoRQhoC35cLv4*zxn z9LfCVv$v_o$!y>inMjG$tWyf-v4Ksdf;fjsVo9|R^0X+^f_pxKKT%>K={N(|X?b6& zx(7SLkcrx}NksIQmQfRY~JW45q-T>^VXaQ;JyBjS`ZD)7tiVb3+Vs_HHhom6jC3md@| z*Wr-tWh9UX*WtK4zF(Vo>655PoweIX1eXhb@H@9~`0!15Pqwz;G+A~Fra{}9I(~9; zQZ$FlS Date: Thu, 21 Oct 2021 14:20:22 -0600 Subject: [PATCH 4/7] Bug fix for inaccessible region function (always used player 1's HC Ledge) --- DoorShuffle.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DoorShuffle.py b/DoorShuffle.py index 61da6443..3d3a6eda 100644 --- a/DoorShuffle.py +++ b/DoorShuffle.py @@ -1837,7 +1837,7 @@ def find_inaccessible_regions(world, player): queue.append(connect) world.inaccessible_regions[player].extend([r.name for r in all_regions.difference(visited_regions) if valid_inaccessible_region(r)]) if world.mode[player] == 'inverted': - ledge = world.get_region('Hyrule Castle Ledge', 1) + ledge = world.get_region('Hyrule Castle Ledge', player) if any(x for x in ledge.exits if x.connected_region.name == 'Agahnims Tower Portal'): world.inaccessible_regions[player].append('Hyrule Castle Ledge') logger = logging.getLogger('') From 12846df681731f8e51173f5b2425226a9677e75a Mon Sep 17 00:00:00 2001 From: aerinon Date: Thu, 21 Oct 2021 14:34:21 -0600 Subject: [PATCH 5/7] Accounted for bomb usage in Mire 2 (non-enemizer, of course) --- Rules.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Rules.py b/Rules.py index 9902347d..0d657844 100644 --- a/Rules.py +++ b/Rules.py @@ -304,7 +304,11 @@ def global_rules(world, player): set_rule(world.get_entrance('Mire Lobby Gap', player), lambda state: state.has_Boots(player) or state.has('Hookshot', player)) set_rule(world.get_entrance('Mire Post-Gap Gap', player), lambda state: state.has_Boots(player) or state.has('Hookshot', player)) set_rule(world.get_entrance('Mire Falling Bridge WN', player), lambda state: state.has_Boots(player) or state.has('Hookshot', player)) # this is due to the fact the the door opposite is blocked - set_rule(world.get_entrance('Mire 2 NE', player), lambda state: state.has_sword(player) or state.has('Fire Rod', player) or state.has('Ice Rod', player) or state.has('Hammer', player) or state.has('Cane of Somaria', player) or state.can_shoot_arrows(player)) # need to defeat wizzrobes, bombs don't work ... + set_rule(world.get_entrance('Mire 2 NE', player), lambda state: state.has_sword(player) or + (state.has('Fire Rod', player) and (state.can_use_bombs(player) or state.can_extend_magic(player, 9))) or # 9 fr shots or 8 with some bombs + (state.has('Ice Rod', player) and state.can_use_bombs(player)) or # freeze popo and throw, bomb to finish + state.has('Hammer', player) or state.has('Cane of Somaria', player) or state.can_shoot_arrows(player)) # need to defeat wizzrobes, bombs don't work ... + # byrna could work with sufficient magic set_rule(world.get_location('Misery Mire - Spike Chest', player), lambda state: (state.world.can_take_damage and state.has_hearts(player, 4)) or state.has('Cane of Byrna', player) or state.has('Cape', player)) set_rule(world.get_entrance('Mire Left Bridge Hook Path', player), lambda state: state.has('Hookshot', player)) set_rule(world.get_entrance('Mire Tile Room NW', player), lambda state: state.has_fire_source(player)) From 25be090f757461ded4c15c29125657cb7345c482 Mon Sep 17 00:00:00 2001 From: cassidy Date: Thu, 21 Oct 2021 17:02:56 -0400 Subject: [PATCH 6/7] Remove diggable light world portals in inverted --- Rom.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Rom.py b/Rom.py index d8514556..b32408d3 100644 --- a/Rom.py +++ b/Rom.py @@ -2306,6 +2306,12 @@ def set_inverted_mode(world, player, rom): write_int16(rom, snes_to_pc(0x02E8D5), 0x07C8) write_int16(rom, snes_to_pc(0x02E8F7), 0x01F8) rom.write_byte(snes_to_pc(0x08D40C), 0xD0) # morph proof + rom.write_byte(snes_to_pc(0x1BC428), 0x00) # remove diggable light world portals + rom.write_byte(snes_to_pc(0x1BC42A), 0x00) + rom.write_byte(snes_to_pc(0x1BC590), 0x00) + rom.write_byte(snes_to_pc(0x1BC5A1), 0x00) + rom.write_byte(snes_to_pc(0x1BC5B1), 0x00) + rom.write_byte(snes_to_pc(0x1BC5C7), 0x00) # the following bytes should only be written in vanilla # or they'll overwrite the randomizer's shuffles if world.shuffle[player] == 'vanilla': From 593355f8398db3e45a9aa679838c803860a93c8e Mon Sep 17 00:00:00 2001 From: aerinon Date: Thu, 21 Oct 2021 16:34:27 -0600 Subject: [PATCH 7/7] Quadrant glitch mistake reversion Fix for inverted diggable portals --- Main.py | 2 +- RELEASENOTES.md | 3 +++ Rom.py | 2 +- data/base2current.bps | Bin 136122 -> 136114 bytes 4 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Main.py b/Main.py index cfd79062..75fe9242 100644 --- a/Main.py +++ b/Main.py @@ -29,7 +29,7 @@ from Fill import sell_potions, sell_keys, balance_multiworld_progression, balanc from ItemList import generate_itempool, difficulties, fill_prizes, customize_shops from Utils import output_path, parse_player_names -__version__ = '0.5.1.3-u' +__version__ = '0.5.1.4-u' from source.classes.BabelFish import BabelFish diff --git a/RELEASENOTES.md b/RELEASENOTES.md index c2fdf20a..7098107e 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -15,6 +15,9 @@ CLI: ```--bombbag``` # Bug Fixes and Notes. +* 0.5.1.4 + * Revert quadrant glitch fix for baserom + * Fix for inverted * 0.5.1.3 * Certain lobbies forbidden in standard when rupee bow is enabled * PoD EG disarmed when mirroring (except in nologic) diff --git a/Rom.py b/Rom.py index b32408d3..5680714e 100644 --- a/Rom.py +++ b/Rom.py @@ -32,7 +32,7 @@ from source.classes.SFX import randomize_sfx JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = '1c59cec98ba4555db8eed1d2dea76497' +RANDOMIZERBASEHASH = '11daec4f3e1afc96cd044585dfba9df8' class JsonRom(object): diff --git a/data/base2current.bps b/data/base2current.bps index fca7a6ecdc7d2b97a0a85bb86dd89a16dfb4749c..a0d85faa0dc758ea3e0d3f04179760dc1e401269 100644 GIT binary patch delta 4440 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 YI9DR{9ZpXiAk36@)K1wIWY7ES|LBAu_y7O^