From 940369d3ec9221583a3fea336b4e9e8d726ce6b4 Mon Sep 17 00:00:00 2001 From: aerinon Date: Fri, 9 Jul 2021 15:13:01 -0700 Subject: [PATCH 1/6] Rename fake boots to pseudo boots Doc updates --- BaseClasses.py | 2 +- CLI.py | 4 ++-- Main.py | 4 ++-- Mystery.py | 2 +- RELEASENOTES.md | 13 ++++++++++++- Rom.py | 2 +- resources/app/cli/args.json | 2 +- resources/app/cli/lang/en.json | 2 +- resources/app/gui/lang/en.json | 2 +- resources/app/gui/randomize/item/widgets.json | 2 +- source/classes/constants.py | 2 +- 11 files changed, 24 insertions(+), 13 deletions(-) diff --git a/BaseClasses.py b/BaseClasses.py index 7521bd6e..0e3e8af4 100644 --- a/BaseClasses.py +++ b/BaseClasses.py @@ -131,7 +131,7 @@ class World(object): set_player_attr('treasure_hunt_total', 0) set_player_attr('potshuffle', False) set_player_attr('pot_contents', None) - set_player_attr('fakeboots', False) + set_player_attr('pseudoboots', False) set_player_attr('shopsanity', False) set_player_attr('keydropshuffle', False) diff --git a/CLI.py b/CLI.py index 9b6e42fb..d87e1e2c 100644 --- a/CLI.py +++ b/CLI.py @@ -97,7 +97,7 @@ def parse_cli(argv, no_defaults=False): 'shuffle', 'door_shuffle', 'intensity', 'crystals_ganon', 'crystals_gt', 'openpyramid', 'mapshuffle', 'compassshuffle', 'keyshuffle', 'bigkeyshuffle', 'startinventory', 'triforce_pool_min', 'triforce_pool_max', 'triforce_goal_min', 'triforce_goal_max', - 'triforce_min_difference', 'triforce_goal', 'triforce_pool', 'shufflelinks', 'fakeboots', + 'triforce_min_difference', 'triforce_goal', 'triforce_pool', 'shufflelinks', 'pseudoboots', 'retro', 'accessibility', 'hints', 'beemizer', 'experimental', 'dungeon_counters', 'shufflebosses', 'shuffleenemies', 'enemy_health', 'enemy_damage', 'shufflepots', 'ow_palettes', 'uw_palettes', 'sprite', 'disablemusic', 'quickswap', 'fastmenu', 'heartcolor', 'heartbeep', @@ -144,7 +144,7 @@ def parse_settings(): "shuffleganon": True, "shuffle": "vanilla", "shufflelinks": False, - "fakeboots": False, + "pseudoboots": False, "shufflepots": False, "shuffleenemies": "none", diff --git a/Main.py b/Main.py index 9e8f1e7c..73b60974 100644 --- a/Main.py +++ b/Main.py @@ -27,7 +27,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.4.0.9-u' +__version__ = '0.4.0.10u' class EnemizerError(RuntimeError): @@ -90,7 +90,7 @@ def main(args, seed=None, fish=None): world.treasure_hunt_count = args.triforce_goal.copy() world.treasure_hunt_total = args.triforce_pool.copy() world.shufflelinks = args.shufflelinks.copy() - world.fakeboots = args.fakeboots.copy() + world.pseudoboots = args.pseudoboots.copy() world.rom_seeds = {player: random.randint(0, 999999999) for player in range(1, world.players + 1)} diff --git a/Mystery.py b/Mystery.py index 0fd85108..f82e64d2 100644 --- a/Mystery.py +++ b/Mystery.py @@ -143,7 +143,7 @@ def roll_settings(weights): ret.dungeon_counters = 'pickup' if ret.door_shuffle != 'vanilla' or ret.compassshuffle == 'on' else 'off' ret.shufflelinks = get_choice('shufflelinks') == 'on' - ret.fakeboots = get_choice('fakeboots') == 'on' + ret.pseudoboots = get_choice('pseudoboots') == 'on' ret.shopsanity = get_choice('shopsanity') == 'on' ret.keydropshuffle = get_choice('keydropshuffle') == 'on' ret.mixed_travel = get_choice('mixed_travel') if 'mixed_travel' in weights else 'prevent' diff --git a/RELEASENOTES.md b/RELEASENOTES.md index a4c5eace..d55904b8 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -12,8 +12,19 @@ Links house can now be shuffled in different ER settings. It will be limited to Thanks to qadan, cheuer, & compiling +## Pseudo Boots + +Thanks to Bonta. You can now start with pseudo boots that let you move fast, but have no other logical uses (bonking open things, hovering, etc) + +## Pendant/Crystal Indicator + +For accessibility, you now get a C or P indicator to the left of the magic bar on the HUD when instead a Crystal or Pendant. Requires ownership of the map of that dungeon for display. Thanks to kan. + # Bug Fixes and Notes. +* 0.4.0.10 + * Renamed to pseudoboots + * Some release note updates * 0.4.0.9 * Fixes for stats and P/C indicator (thanks Kara) * Swamp lobby fixes (thanks Catobat) @@ -38,7 +49,7 @@ Thanks to qadan, cheuer, & compiling * Chest turn tracking (not yet in credits) * Damaged and magic stats in credits (gt bk removed) * Fix for infinite bombs - * Fake boots option + * Pseudo boots option * Always allowed medallions for swordless (no option yet) * 0.4.0.7 * Reduce flashing option added diff --git a/Rom.py b/Rom.py index 64a32986..6c351828 100644 --- a/Rom.py +++ b/Rom.py @@ -1162,7 +1162,7 @@ def patch_rom(world, rom, player, team, enemized, is_mystery=False): rom.write_byte(0x18017E, 0x01) # Fairy fountains only trade in bottles # Starting equipment - if world.fakeboots[player]: + if world.pseudoboots[player]: rom.write_byte(0x18008E, 0x01) equip = [0] * (0x340 + 0x4F) diff --git a/resources/app/cli/args.json b/resources/app/cli/args.json index 874bc2f5..47bb3987 100644 --- a/resources/app/cli/args.json +++ b/resources/app/cli/args.json @@ -310,7 +310,7 @@ "action": "store_true", "type": "bool" }, - "fakeboots": { + "pseudoboots": { "action": "store_true", "type": "bool" }, diff --git a/resources/app/cli/lang/en.json b/resources/app/cli/lang/en.json index 6416e952..0ff910a9 100644 --- a/resources/app/cli/lang/en.json +++ b/resources/app/cli/lang/en.json @@ -262,7 +262,7 @@ "Keys are universal, shooting arrows costs rupees,", "and a few other little things make this more like Zelda-1. (default: %(default)s)" ], - "fakeboots": [ " Players starts with fake boots that allow dashing but no item checks (default: %(default)s"], + "pseudoboots": [ " Players starts with pseudo boots that allow dashing but no item checks (default: %(default)s"], "startinventory": [ "Specifies a list of items that will be in your starting inventory (separated by commas). (default: %(default)s)" ], "usestartinventory": [ "Toggle usage of Starting Inventory." ], "custom": [ "Not supported." ], diff --git a/resources/app/gui/lang/en.json b/resources/app/gui/lang/en.json index f4b8ca12..0d9e3836 100644 --- a/resources/app/gui/lang/en.json +++ b/resources/app/gui/lang/en.json @@ -189,7 +189,7 @@ "randomizer.item.hints": "Include Helpful Hints", "randomizer.item.retro": "Retro mode (universal keys)", - "randomizer.item.fakeboots": "Start with Fake Boots", + "randomizer.item.pseudoboots": "Start with Pseudo Boots", "randomizer.item.worldstate": "World State", "randomizer.item.worldstate.standard": "Standard", diff --git a/resources/app/gui/randomize/item/widgets.json b/resources/app/gui/randomize/item/widgets.json index 1f5eb19a..a6f10a14 100644 --- a/resources/app/gui/randomize/item/widgets.json +++ b/resources/app/gui/randomize/item/widgets.json @@ -5,7 +5,7 @@ "hints": { "type": "checkbox" }, - "fakeboots": { "type": "checkbox" } + "pseudoboots": { "type": "checkbox" } }, "leftItemFrame": { "worldstate": { diff --git a/source/classes/constants.py b/source/classes/constants.py index 14c70f79..04cbde2e 100644 --- a/source/classes/constants.py +++ b/source/classes/constants.py @@ -58,7 +58,7 @@ SETTINGSTOPROCESS = { "hints": "hints", "retro": "retro", "shopsanity": "shopsanity", - "fakeboots": "fakeboots", + "pseudoboots": "pseudoboots", "worldstate": "mode", "logiclevel": "logic", "goal": "goal", From 6f990aecc180d8c14701ef37ab3e72a644f49bec Mon Sep 17 00:00:00 2001 From: Catobat <69204835+Catobat@users.noreply.github.com> Date: Mon, 12 Jul 2021 01:28:52 +0200 Subject: [PATCH 2/6] More bomb door candidates --- DoorShuffle.py | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/DoorShuffle.py b/DoorShuffle.py index 588c2857..00e787b9 100644 --- a/DoorShuffle.py +++ b/DoorShuffle.py @@ -1704,25 +1704,14 @@ def smooth_door_pairs(world, player): remove_pair(door, world, player) if type_b == DoorKind.SmallKey: remove_pair(door, world, player) - elif type_a in [DoorKind.Bombable, DoorKind.Dashable] or type_b in [DoorKind.Bombable, DoorKind.Dashable]: + else: if valid_pair: - new_type = type_a - if type_a != type_b: - new_type = DoorKind.Dashable if type_a == DoorKind.Dashable or type_b == DoorKind.Dashable else DoorKind.Bombable - if type_a != new_type: - room_a.change(door.doorListPos, new_type) - if type_b != new_type: - room_b.change(partner.doorListPos, new_type) - add_pair(door, partner, world, player) - spoiler_type = 'Bomb Door' if new_type == DoorKind.Bombable else 'Dash Door' - world.spoiler.set_door_type(door.name + ' <-> ' + partner.name, spoiler_type, player) - counter = bombable_counts if new_type == DoorKind.Bombable else dashable_counts - counter[door.entrance.parent_region.dungeon] += 1 - else: + bd_candidates[door.entrance.parent_region.dungeon].append(door) + elif type_a in [DoorKind.Bombable, DoorKind.Dashable] or type_b in [DoorKind.Bombable, DoorKind.Dashable]: if type_a in [DoorKind.Bombable, DoorKind.Dashable]: room_a.change(door.doorListPos, DoorKind.Normal) remove_pair(door, world, player) - elif type_b in [DoorKind.Bombable, DoorKind.Dashable]: + else: room_b.change(partner.doorListPos, DoorKind.Normal) remove_pair(partner, world, player) elif valid_pair and type_a != DoorKind.SmallKey and type_b != DoorKind.SmallKey: From 0ade4c5795788b811662c377585c8d983723d6a7 Mon Sep 17 00:00:00 2001 From: Catobat <69204835+Catobat@users.noreply.github.com> Date: Mon, 12 Jul 2021 04:21:34 +0200 Subject: [PATCH 3/6] Counters no longer needed --- DoorShuffle.py | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/DoorShuffle.py b/DoorShuffle.py index 00e787b9..b3f8cb5e 100644 --- a/DoorShuffle.py +++ b/DoorShuffle.py @@ -1678,7 +1678,7 @@ def change_door_to_small_key(d, world, player): def smooth_door_pairs(world, player): all_doors = [x for x in world.doors if x.player == player] skip = set() - bd_candidates, dashable_counts, bombable_counts = defaultdict(list), defaultdict(int), defaultdict(int) + bd_candidates = defaultdict(list) for door in all_doors: if door.type in [DoorType.Normal, DoorType.Interior] and door not in skip and not door.entranceFlag: partner = door.dest @@ -1716,7 +1716,7 @@ def smooth_door_pairs(world, player): remove_pair(partner, world, player) elif valid_pair and type_a != DoorKind.SmallKey and type_b != DoorKind.SmallKey: bd_candidates[door.entrance.parent_region.dungeon].append(door) - shuffle_bombable_dashable(bd_candidates, bombable_counts, dashable_counts, world, player) + shuffle_bombable_dashable(bd_candidates, world, player) world.paired_doors[player] = [x for x in world.paired_doors[player] if x.pair or x.original] @@ -1753,15 +1753,15 @@ def stateful_door(door, kind): return False -def shuffle_bombable_dashable(bd_candidates, bombable_counts, dashable_counts, world, player): +def shuffle_bombable_dashable(bd_candidates, world, player): if world.doorShuffle[player] == 'basic': for dungeon, candidates in bd_candidates.items(): - diff = bomb_dash_counts[dungeon.name][1] - dashable_counts[dungeon] + diff = bomb_dash_counts[dungeon.name][1] if diff > 0: for chosen in random.sample(candidates, min(diff, len(candidates))): change_pair_type(chosen, DoorKind.Dashable, world, player) candidates.remove(chosen) - diff = bomb_dash_counts[dungeon.name][0] - bombable_counts[dungeon] + diff = bomb_dash_counts[dungeon.name][0] if diff > 0: for chosen in random.sample(candidates, min(diff, len(candidates))): change_pair_type(chosen, DoorKind.Bombable, world, player) @@ -1770,16 +1770,12 @@ def shuffle_bombable_dashable(bd_candidates, bombable_counts, dashable_counts, w remove_pair_type_if_present(excluded, world, player) elif world.doorShuffle[player] == 'crossed': all_candidates = sum(bd_candidates.values(), []) - all_bomb_counts = sum(bombable_counts.values()) - all_dash_counts = sum(dashable_counts.values()) - if all_dash_counts < 8: - for chosen in random.sample(all_candidates, min(8 - all_dash_counts, len(all_candidates))): - change_pair_type(chosen, DoorKind.Dashable, world, player) - all_candidates.remove(chosen) - if all_bomb_counts < 12: - for chosen in random.sample(all_candidates, min(12 - all_bomb_counts, len(all_candidates))): - change_pair_type(chosen, DoorKind.Bombable, world, player) - all_candidates.remove(chosen) + for chosen in random.sample(all_candidates, min(8, len(all_candidates))): + change_pair_type(chosen, DoorKind.Dashable, world, player) + all_candidates.remove(chosen) + for chosen in random.sample(all_candidates, min(12, len(all_candidates))): + change_pair_type(chosen, DoorKind.Bombable, world, player) + all_candidates.remove(chosen) for excluded in all_candidates: remove_pair_type_if_present(excluded, world, player) From b5aae926e71a5687f31d60fac1022d4761ba0010 Mon Sep 17 00:00:00 2001 From: aerinon Date: Tue, 13 Jul 2021 13:19:14 -0700 Subject: [PATCH 4/6] Minor baserom updates --- Main.py | 2 +- RELEASENOTES.md | 3 +++ Rom.py | 2 +- data/base2current.bps | Bin 136227 -> 136227 bytes 4 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Main.py b/Main.py index 73b60974..eb8380f3 100644 --- a/Main.py +++ b/Main.py @@ -27,7 +27,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.4.0.10u' +__version__ = '0.4.0.11u' class EnemizerError(RuntimeError): diff --git a/RELEASENOTES.md b/RELEASENOTES.md index d55904b8..cafdb92f 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -22,6 +22,9 @@ For accessibility, you now get a C or P indicator to the left of the magic bar o # Bug Fixes and Notes. +* 0.4.0.11 + * Some minor base rom fixes + * Improved distribution of bombable/dashable doors * 0.4.0.10 * Renamed to pseudoboots * Some release note updates diff --git a/Rom.py b/Rom.py index 6c351828..1bdf1a59 100644 --- a/Rom.py +++ b/Rom.py @@ -30,7 +30,7 @@ from EntranceShuffle import door_addresses, exit_ids JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = 'df3386b7a48d79950a1432b8bbaafde1' +RANDOMIZERBASEHASH = '669813697df6a132611f4c7a008ebaae' class JsonRom(object): diff --git a/data/base2current.bps b/data/base2current.bps index 2ef0bf7d96739707083688cc6cdd7ae30569487b..9d4ad8e3765029bdbeb086dd921deed9a10a87d3 100644 GIT binary patch delta 5204 zcmXAs30xD$_rP}&LIMH_hl0ovmRk-vL{w0@JU~P$=uZ&}Dku=VK|m$!1|tScmN3AA z0fHuofQTA3h}sBhA%KdeVnwai*1JEAm1?Wj{MX-q_cPylJ8wR-@6EoMd8;_aQXFGd zd0N@Lz%?&$WjH2Ijl&MtH>4&>=fqB{|3S$S2wN{2NyO;ZJCs(6@(JZDRxiFv+Ek8) z3@Gg|F`6Y-D#d8yiI%!0zOMsLwFl59F%W=+t-IO`7XcsO0Cxai&;#YbnK^t<=~W?W zh1Y-|xCP&X9B>w<(Y&1wk1DU$vi1B?<5w}bh$mF$H&vF4VkDlKWn%PSsH7!>H}D^t zE0_fx=}SQ(%%S_R(E;TjLNwbjA2Sk&(5p~E{~b(*2aFDZ2P#)aJ^;I6z40Z^+k48G zav^P;TtUORglH6IGV57?4k}YA+nu2iYdLrUlUW4Fg}<}Hfi-k7`3NfDR8y|YnQ>)C zSuHAm+VbkvaTy^-pFV4Gz@(|a{G@!9K^ayEQ%o~~7u1-32MVC&q}kv{7&j@^!~d3Y zuSkrJbhX4&@0dUMZ5CN9*ZsmYL54Kd5@lhXJTm?PKo+c0<>d@dH=50?POs$`&y?<%Tj97o#Vj zo#h}*=!!yt_JN> z{S$p0fL_(ng;gwbn_(qpiY8GsLaSBL312MOb;V2MVvN;(Rkpq4nam9)r1^sxs*LFE{M{%!oAH{>xCWhv<->e(uXvKJs$y#|-A+me;blQVHx*_Y1C$;-;l%H2Qas7YZ;HvR}^FU#%e||C3;%u-hiQOuk&um9}MD=DM`))DXgowvEtw z|7G9~f7-thOo3tLAs`fPFLwp@u(mt{Y=R%koxvG6<-jk14*xpf13aLMXggRAp-2HN zU}(j1Fi%xpkpax(*}8@jfhzthGD)@=PE-oO4p?~5lNwHb&=JJJO9zvughuHuAvXgM z!$(#gCy%q06KLW5dK>fdh!!Auvf!`* zvIx3W`6ZQRYsn?q+P1!{sAVIs7`+SIxDdc#Kl=RJT|s@nA&B7@mo#*(o6Ot`t3^&nj=2;l_*pt!uX=$h)!bx*TLx)D^qn%h(E{G!Pk0*!U;A&G<45*y0-5lb@&1Wt%d|Ok{x%+$Q8qK zuef1C*hYnZirZSZG)1)QaKmLJ8cV>7>vDJW4zGuQLN`|ET%9nFLmES;8gFmgWjdj~ zk$iWuP8!rV<`N>?JWqGn;ql+dG^1%op%=2lbmE8TeK*-oxUFV7FoUw1U1sd)55nIN zIW6gMTQYR4^#^lceC>?6{9+y9SdPDi(amsYgsv4i7yA{M)68jMor|({M-StH} zGPP1xoIz<3m<5;P%A>qWb8e(j;m&0X@7xJb6xPitVo%=#<#^NNRC zznKtz<=ah$?-(Zjm9Hk)m>-O6@S*K3f?FCK7&$8k<#~{3m;)9-Z9~xHSq?9S*;S-@ zvy|AjvEkjJ=rn?igq%apZUHoa)!BzNiuB0e!&bj8$1JT5)D|I20+s}j4w>bh`KKTg zCLO9P&08^8OKqWgyUtCboW41ER#!&!OMnL6i-Ru^r%k~FhbWH8_t@|F+PnXv>7 zMMc!~BTllc1RXRrIesU6v(+pUFIyj*={8Z};Rqkc`F#AT!Y=42ezP;TMx8aF`G<l^RarYe}SN9bT2W+b-SyK^hev6~3`EfBOd^i&>WvZ~~S%RyT%& zU2tCGEEAKN^>oM3n#PTSmROvAlkG6#KZkfn?MG0YZ_?4)8#gri<$n!v)Cf*Uhi3h0SNC43Wq*&%y{L5=hUm>q zJ2b0KyI$)(Ni!Dqw)Ua|Sl^6-jqpNqE5j$Rq9GAx$z9glsg}rcgKxpjIG){^i^FA0 zD>}1w{)@YIY&BI2W2%Q6rKtNkR~~s24TPDKMUDnyPLn7xuY*s;o`o#)HW zb@Cdg19YfG+0Q|rH7mLK=Thl^ApIO}K71ix4l?2FmLtGgb-!hd4o<61D}CrwY_-bP zX?jn2xS9C3il!}ifH3}3>MYg!HXjB!3Z1*UKoPv&B?MDdNhe|f2!T!A0+6iYp8P@s zZ0M+R0Qsu9s>3wSj41->KSdy1#gSQ4;%?RJvuprFs?Xx#-Wp9Wjjdlrg zM?63aTs#s7?!)SlBr11&HsTs=i4hwI_=Lv*{|T2eY2FDlqsR6qXFWEm3VO`a`?qqm zR(h{~E}UbJb(wZ&zvnLy!;tHKL8TX;aO(;IrtJ?nf+4N;-eyQ#oPMqrAo}%nJGtHG zOD}5JU(LM@Z;3?%e2pc!5!PJ4$z6cq<1)4YKcsLHG&K(JKWQ`*{I-B{Drc-w2ncIf zc0;{7Z$8n`nSBI7DtL8)H_m%&l#v=`hDN#Wva;~9Qe6=Bi-?+SvPgKA$Hn?G2Q#&( z=(2Kj67?l(5ze+D&OaT<;dXsr>j!U+p3bG#eevv5x45ye`lf3{g5&chBfWL2)-K27 ziUMa5T{7P0*KN6*Usrn;NjKxmj%qdYE-N`cTK%ZeGfQlt_T4Ch8+!$tsr{1@!r@;x zLyg|_a}_XPbdgPH-wu=S94CsH`4fw&N+i^A#UU%@hP|&(gfdm6n znkhnqk?_>*6(9i`>D+<2YP!w`P$|i(pWcIMFzya_%J%^h+>cz&s%nj%;E$Sg`%UoY zQl~F=#}TB%<~!jQs{*R7EuG-o6BN)8_~MSQSK$W9ujR<7jaN#G8+v)9r5nM#M(NyZ z1G_Qc)mF4YLI@Zbk9!SyhPckVu`EjCXs=LX#wwy_FX#PxMu=Jtz1CRX$~B^N7vw`Lb=xBz;!> zF5S5k{2UfiMQ=A4h+NVqs0!{5t?IJrcWFhu4ainX-S!41@dzQYMPb1s6g_yJT!81b zl?t`&er|UjJQ+0m!!RAbp<~p1G_}>bz zz2mJz5eTh&6ZK1D0cXHN_e8c&uOHhNz`aW`kT+gom%~LmS`hAYICnh6^zL=LtS7=J zJnmCiJiY|XgZ<;B?#FK_yL^F`rMK+17X*y5x;qm~wO>c+@z-vipm853`B9syHQacA zEtL%P->(a4zS;h{pVNp$$=BLjVy7A-T)HA$MnAXXVkC+*vbDteBB+JU)W>Qq^b55n zqcfgxWSgM)!8Cxv_6IA$N@#fCNTYc{r-!3d%K7%;W)KC_eklR3;Qe1#g7q-)ks~E9 zf3(n+>1~3wBN(V4kmORyBtRNFP#a}5?0n<``0)CpsnkEz^G6rGjmDIE;~~z+3T&_) z6T7(d2aw(gOzfWyQ_~!zPHYvO(!xcaa5Wq_@>mg=;yt4N>+NNc2Hi94ZpOsaxu#5v zjASd+jH$=^+B4gWMoU_47L(gs0&HL3KSgLORdJBMLc=$IP$H}ha_b!Jc zCoMH!9tDkGkgvYX|McR;;2`$uf+io{{%wX&VPX~TMXp|nK`(^B*9-{oY^vm_1l8=k zgK*h*QfW!b@tLJe z9h#F=pvozH+KLrS7l~3@knUz2X*<`jJ44tamKc$XRMJXR58G=}p|&ra#Y(`8#> z?`OV=@u~rl218_PVdR%UlVyttA!eB*@KEjfQa}fN@SVYZYTtnJQ#McAt$(L=)BpFA zd`Zw-QTALO8Bsd}B%20%NLOWb7bZ8-&WZtP!AQ66cpIhmW`h}YbN=p@1~vj{El5je zB$;IeP60sLT7&b(YnBo8&s)@E*5I`{D?8{~Kc@|@Q)^v7KYh}g^=fILC3SWCsq5T< zJz%Wy?UBz=pY;IufDJS8)L8&%bO7jd29v>LvB@y?5iek5#3-Jv?qsPueZdfe8M5U3 zr0jiG>b*h0#KPDr>(z6brMfZ#YzKfx{u>E`ft5Ni3Va4&Iq4Sz{sX+I>;Uu{F-nqe zkgLg?~OZ_MTxX>8I**CiF)Qs-{?ho?F@=~w}>>zKHg8zcG>Wdig zrUG333K96gk6!0&)cfQ9wlyJT< z72pHL;NKt{bi>UwPbc|=@^TGJ$Df!ny#g2Ugvz~*6=k9o68DS}G5QWFX^G%D{Fmkm zxX_Uv3u0h4-HYWgqebGXM%N8m|Srpry$oa1q9uq|WuYp*$=S zqvKu8anv^!4SxwDlPO#od=Z(bJKa^1ZS5C6WISNAZ_(0sc{LGwVM7s>5n${gkgQ zTozma-mCh8+v!$j<4R&emOEjH#*yW+U6ia)?OmF|aQJaV*$%`nXx$L!>KN$Qn3AV7 zUBu(qR-+eGZz8@0;5*gvNGa3Id`yWMqpK+zpp~kn@t@3DWPZ_8F~)4aTwfTakk5tD zn|*=5s$g@!0nn)ye3M9@d0<%Cb=ly$3&z#S*K)IW9Q?QS1L??5ea9->P7hUCDD0 z*SQgI1dBI+otwFXrvNx99!TS5=VWGO?$`xu-bxX*}*JQlvL5CAHemF`q?^_7kw9`;ox&I}3H{(xNPBKmjC9Ci+S z7u(<5`Q=`SiZR*<}+6GP*_+G$!Pwq(Vgd1!}Ne&ooTeA5leAb0D)AMbig$PFWonB+xRaJECLNUap zHbw!5hT+DLsY}UFA&szevC&F4_6`)>=ad$tDA#?vqq;Wh6SDs(c@Tb*E?s6g_p%Ty zZL&$JfB}0eaeH}GNUy?CAVT!~7Ow-NGCcx5zdpfnmT023kCH_t>QJHVGa@+rq0@QG zb#etPlr032ut&BAEUK#dijijcj^x8lRZi$0f30lxjK59I>*H-jq@}l3ycvCfb{CZr zVJGCV+neO`pu8&5VVQGzLV+!w>F+$k35tpU7ZF1Y(vdVR=?jjO_#p8vwJ9hVvZG(S6H)cq%R+z&kjp6KS zPfz>RTA`hRf}g0B%^#R_36$qA(H?hr_#Ux0ur~<0kQ1U6KR|zRlOKS*>Un?-YpeI0 zT1C7SK0y?;^~c+ip>2&XSOQno_yyArY6-_O{56bdf(OF1tw?Y5XJAG%qlI+FWNFFm z1=`!&3bbTug}f-8vLeWdiT}5%$#V0IQ*WEjo+6Y^*I=g4=Zj8Y_s*M*L5e zyZMMZ4kp${G13CHNiP=I$DZ*|<=LC~{24>o(U3xzUFX2qnKZ1(gXMLLK?J;9H{T}M z;e{|uN}4svh`eoef7M59Cdf!=Qt#{*Km%BH+fJAYlxFjc| ztaI-fXaeKwYeVwZ4cAC@Qk_nxu)%6%`a1o9zQxE{dD5BsX%{3Ha4mYdv8bx+vM9ae!}UHB^4Ub6&vAExwpx@ykQpZ7j1+o ze4$1@XV#khx3cii@X&3Y1^I7o4!a1btPSZHJxP$tspq;hk3pkWBtCz=;(2YFcp)< z#CSR*@}1DPX?9$BpHO|iqEFb@rWW>}FYEJUAv&Xu*8Z5$iBJDu5JS~=LOL`VXIFeAe|!e-BOA-`bBJfv^b$J78~9E5k3Rylx##SGW}0siNe$ z3vR%jIG)wH1BYv4%R4jo{D-@C>@rphS5}QR$WZrQR~~sC_b0={j4-%7ySxsW5F#h^ zhW(Po*r|%x&hx_FPF}-2fQ~jR2ifS;CM9QoZz}y2GRUTsLCy(t9{QwNiLOy7>%R)` zE=2k}S z;i_8%gdr4OQzxe{CF(k}P9R7*uh#$Cc~^}xM59d6C^ubH=3i8*v%`NCQE?^^hinOJ~K)WU6-Eg!F98}t7A4z{n&@7PF5mMZh1nY0qfJDf>=>}Y2(#;s_0FPUE zFch?Y-GVFt#x!Gu1_Pn$<~k4#XK3dDpz_vw0k91w|NJ*~tcbhC30TLK;67voQ`#Ew zhCgA{?em5oOzvPxA8DK~0c;hzM1*t;aIPm!$LTT$BZnqt%h$u^TcPGLTp_=R#8Z##qRef7!c{y%NaVKA z;NsgsGyR6hb)~p9nIHS2(X2bzQy72z1Gn%gx0;C zI#ZZKS6F{nG;8YWsUuv@4T}D}d*!y-9HgTe;XH!D_X3S?T(!-7EPTx4Ou@o?Q6LBo z-YcGS@`kd@8;me@7TtCN?gX>DGog6o^8`IkbNw`p^KiWnl_$;MwqG^@1P=aE8+hz` z`^Q0c0}`%SV`qV#X$W)a3UitG*p7>laI#>g1vU`Y%BBt=(Ie)%$PuFnzsGF(CMdpd zPc88F`$-@g>hC+!_Pax;2NNI-zJ9P1gu>0g7J=X3FTW;%ROmnDNa<^)B4-`)Fv8jq z43rZ{VzI;okO%Flgct-nr(CFfbaiSrb*yY#EW#%t0P=G{$iJVT*sf=eYWx*B3<^^w8LBQ$tL>#n=!d16eI<#_UrA z?HTO_6Gg4o%Zfu&a=#hd|KX(_Y<}bm7^>@!ZU7Jkk3X??G;+On_hKm0W1;ypHUHiP zMe;@dhv(0Shq37knk;zpiJuoQL5h2j$w?S=KnQ%}kO0r3o@|w%ij`9dm#>w{ic-G4 zLxcBPQla;6MJ$)4pYW^$1*LW=e{JvLbuD^Rg-`I&7czZ=$lo* z9a{e5Ka0N`8&D4Mf8gpkyGi2Y5Wh41vz}b5O8MtK@GTxv-Xk4#aMOE^HP{49ImV?4224Wmq*Fw+6F-J#Ydp@_nj?_j!O}oO_E* zgBBmYV+%Ki13r^@@Y&^sxNr%l z$|w)JS)ARDN2t~XOybEchXN->8#q~V<7Pa%Wud_&&O5s(r4vt+?}7av`9{WH4T&@u zB2RF3P8Fr@sD#T)6?{WapI`{RQmbpC5mRxpo@ ztMLPg#<6o{F`3jW5JJejqLIAB9Y3__9GcCaxKqF^a zf%7wxRulA(JJgd_;H4QeXa1Ezb{ou8kGOzAx=GSEYMH+Ub#?ozYv%wvz)14$Q!G%Q zn+xs&YkI<&a{$oj0MO|SLxv%fMJ`jH@Bjt|jD3sLod)VoZ!pR*^p84kl6AyfeRw`F zGM_OsbNU&dt*!_I`2cJu|62|g0CTl}IQR%aEa|fXYyfU*;R?`iz$i?-MkbOgqCqyJ zsQ6M#B6&6%pp3xzRH^!IG$^NmePl))a0OB7qj6v{&B?w%{Q$X-)N?J^D2>7B__9^g z&%T^j@6YXMF;Gv%0~Z=&U)Hs5Yc*pnzo=2O>hH?HPD8MSL`#2mk;8 From a123661eca76f635324c09f8e6a36c7f85a2c89c Mon Sep 17 00:00:00 2001 From: aerinon Date: Thu, 15 Jul 2021 10:32:25 -0700 Subject: [PATCH 5/6] Don't fix ugly smalls in vanilla --- DoorShuffle.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/DoorShuffle.py b/DoorShuffle.py index b3f8cb5e..2e6f8b44 100644 --- a/DoorShuffle.py +++ b/DoorShuffle.py @@ -100,8 +100,8 @@ def link_doors_main(world, player): analyze_portals(world, player) for portal in world.dungeon_portals[player]: connect_portal(portal, world, player) - - fix_big_key_doors_with_ugly_smalls(world, player) + if not world.doorShuffle[player] == 'vanilla': + fix_big_key_doors_with_ugly_smalls(world, player) if world.doorShuffle[player] == 'vanilla': for entrance, ext in open_edges: connect_two_way(world, entrance, ext, player) From 06486e88a2dbc200c99357c4fb0a16dc96d45b93 Mon Sep 17 00:00:00 2001 From: aerinon Date: Thu, 15 Jul 2021 10:33:04 -0700 Subject: [PATCH 6/6] Cutoff rug addition --- Rom.py | 2 +- asm/doortables.asm | 4 ++-- data/base2current.bps | Bin 136227 -> 136225 bytes 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Rom.py b/Rom.py index 1bdf1a59..5c61e5c2 100644 --- a/Rom.py +++ b/Rom.py @@ -30,7 +30,7 @@ from EntranceShuffle import door_addresses, exit_ids JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = '669813697df6a132611f4c7a008ebaae' +RANDOMIZERBASEHASH = '25dd18672e1234c85900f5b2155e7e4f' class JsonRom(object): diff --git a/asm/doortables.asm b/asm/doortables.asm index db1b6711..8ee0dd60 100644 --- a/asm/doortables.asm +++ b/asm/doortables.asm @@ -580,8 +580,8 @@ dw $00bc, $00a2, $00a3, $00c2, $001a, $0049, $0014, $008c ; Ice Many Pots, Swamp Waterfall, GT Gauntlet 3, Eastern Push Block, Eastern Courtyard, Eastern Map Valley ; Eastern Cannonball, HC East Hall dw $009f, $0066, $005d, $00a8, $00a9, $00aa, $00b9, $0052 -; HC West Hall, TR Dash Bridge, TR Hub, Pod Arena, GT Petting Zoo -dw $0050, $00c5, $00c6, $0009, $0003, $002a, $007d +; HC West Hall, TR Dash Bridge, TR Hub, Pod Arena, GT Petting Zoo, Ice Spike Cross +dw $0050, $00c5, $00c6, $0009, $0003, $002a, $007d, $005e dw $ffff ; dungeon tables diff --git a/data/base2current.bps b/data/base2current.bps index 9d4ad8e3765029bdbeb086dd921deed9a10a87d3..53bd7d8680aa4516815cb90e352fe3ea90cbc137 100644 GIT binary patch delta 53 zcmV-50LuTPs0g8`2(Ur{1l?dFpR+~*;rj@Z2Bx L+12*e5Zv);rj|NhAI=48}|`Ufs-%&A_8ANgH!#tQ~d$P N76@kAM>B8q$^myo7aITo