From 46ccfedcdcd35ad9a3bce5669977a8b7e8afced7 Mon Sep 17 00:00:00 2001 From: aerinon Date: Wed, 2 Jun 2021 10:51:21 -0600 Subject: [PATCH 1/6] Blind Attic hint in crossed Hint default change to False, moved GUI checkbox --- CLI.py | 4 +-- Rom.py | 15 +++++++-- Utils.py | 29 ++++++------------ asm/drhooks.asm | 6 ++++ asm/overrides.asm | 7 +++++ data/base2current.bps | Bin 133035 -> 133067 bytes resources/app/gui/lang/en.json | 4 +-- .../gui/randomize/gameoptions/widgets.json | 4 --- resources/app/gui/randomize/item/widgets.json | 5 ++- source/classes/constants.py | 2 +- 10 files changed, 43 insertions(+), 33 deletions(-) diff --git a/CLI.py b/CLI.py index 9c15e4cb..ce230037 100644 --- a/CLI.py +++ b/CLI.py @@ -179,9 +179,7 @@ def parse_settings(): "names": "", "securerandom": False, - # Hints default to TRUE - "hints": True, - "no_hints": False, + "hints": False, "disablemusic": False, "quickswap": False, "heartcolor": "red", diff --git a/Rom.py b/Rom.py index 2227cbe9..60b40ab6 100644 --- a/Rom.py +++ b/Rom.py @@ -27,7 +27,7 @@ from EntranceShuffle import door_addresses, exit_ids JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = 'f8f1b851b091d50af2b87283ea79ed90' +RANDOMIZERBASEHASH = '56cf37536facb8e6b19d2ce516436f66' class JsonRom(object): @@ -2026,7 +2026,7 @@ def write_strings(rom, world, player, team): if world.doorShuffle[player] in ['crossed']: attic_hint = world.get_location("Thieves' Town - Attic", player).parent_region.dungeon.name this_hint = 'A cracked floor can be found in ' + attic_hint + '.' - if hint_locations[0] == 'telepathic_tile_thieves_town_upstairs': + if world.intensity[player] < 2 and hint_locations[0] == 'telepathic_tile_thieves_town_upstairs': tt[hint_locations.pop(1)] = this_hint else: tt[hint_locations.pop(0)] = this_hint @@ -2115,6 +2115,17 @@ def write_strings(rom, world, player, team): bombos_text = 'Some Hot Air' if bombositem is None else hint_text(bombositem, True) if bombositem.pedestal_hint_text is not None else 'Unknown Item' tt['tablet_bombos_book'] = bombos_text + # attic hint + if world.doorShuffle[player] in ['crossed']: + attic_hint = world.get_location("Thieves' Town - Attic", player).parent_region.dungeon.name + tt['blind_not_that_way'] = f'{attic_hint} is too bright for my eyes' + # see tagalog.asm tables at 957,967 or Follower_HandleTrigger in JPDASM + # also the baserom table at org $09A4C2 in hooks.asm (Escort text) + rom.write_byte(0x04a4be, 0xac) # change the room to blind's room + rom.write_byte(0x04a526, 0xb8) # y coordinate, shifted down + rom.write_byte(0x04a529, 0x19) # x tile shifted right a few tiles + rom.write_byte(0x04a52e, 0x06) # follower set to blind maiden + # inverted spawn menu changes if world.mode[player] == 'inverted': tt['menu_start_2'] = "{MENU}\n{SPEED0}\n≥@'s house\n Dark Chapel\n{CHOICE3}" diff --git a/Utils.py b/Utils.py index 06ccca62..cf3db3fb 100644 --- a/Utils.py +++ b/Utils.py @@ -294,29 +294,18 @@ def update_deprecated_args(args): if args: argVars = vars(args) truthy = [1, True, "True", "true"] - # Hints default to TRUE + # Hints default to FALSE # Don't do: Yes # Do: No if "no_hints" in argVars: - src = "no_hints" - if isinstance(argVars["hints"], dict): - tmp = {} - for idx in range(1, len(argVars["hints"]) + 1): - tmp[idx] = argVars[src] not in truthy # tmp = !src - args.hints = tmp # dest = tmp - else: - args.hints = args.no_hints not in truthy # dest = !src - # Don't do: No - # Do: Yes - if "hints" in argVars: - src = "hints" - if isinstance(argVars["hints"], dict): - tmp = {} - for idx in range(1, len(argVars["hints"]) + 1): - tmp[idx] = argVars[src] not in truthy # tmp = !src - args.no_hints = tmp # dest = tmp - else: - args.no_hints = args.hints not in truthy # dest = !src + if args.no_hints in truthy: + if isinstance(argVars["hints"], dict): + tmp = {} + for idx in range(1, len(argVars["hints"]) + 1): + tmp[idx] = False + args.hints = tmp + else: + args.hints = False # Spoiler defaults to TRUE # Don't do: Yes diff --git a/asm/drhooks.asm b/asm/drhooks.asm index 6739de34..2824771e 100644 --- a/asm/drhooks.asm +++ b/asm/drhooks.asm @@ -173,6 +173,12 @@ JSL RainPrevention : NOP #2 org $1edabf ; <- sprite_energy_ball.asm : 86-7 Sprite_EnergyBall (LDA.b #$10 : LDX.b #$00) JSL StandardAgaDmg + +org $09a681 ; < - similar to talalong.asm : 1157 (JSL Main_ShowTextMessage) +JSL BlindsAtticHint : NOP #2 +org $1cfd69 +Main_ShowTextMessage: + ; These two, if enabled together, have implications for vanilla BK doors in IP/Hera/Mire ; IPBJ is common enough to consider not doing this. Mire is not a concern for vanilla - maybe glitched modes ; Hera BK door back can be seen with Pot clipping - likely useful for no logic seeds diff --git a/asm/overrides.asm b/asm/overrides.asm index 8f78bb5d..4ab5d3ca 100644 --- a/asm/overrides.asm +++ b/asm/overrides.asm @@ -148,3 +148,10 @@ StandardAgaDmg: LDA.b #$10 ; hurt him! + RTL ; A is zero if the AND results in zero and then Agahnim's invincible! +; note: this skips both maiden dialog triggers if the hole is open +BlindsAtticHint: + CMP.w #$0122 : BNE + + LDA $7EF0CA : AND.w #$0100 : BEQ + + SEP #$20 : RTL ; skip the dialog box if the hole is already open + + SEP #$20 : JML Main_ShowTextMessage + diff --git a/data/base2current.bps b/data/base2current.bps index 97c703b32d372808a204f8aa3af275183f0d3004..974762d1e3c6e359c0ae44064cf873a071890b28 100644 GIT binary patch delta 757 zcmWNLYe-XZ7{<^4oHMs_rP&3emH&C!oPn)O(4-3%eK0EtyFdm@sIc`Rx)-A7%$;n> zJZF2^j?*r#I^h)4I)u%dt{Z7ltRRZ0)(wiXc_gb(w$7*b{XOsVK0H0V?g_8!FGlpU z$kKAT6a`6gL7V)Rx=EoP*{eN6r5aqm>kPM~UN3&6E zu6V*Ox`>$mLS4G&C-n*2KjE6XDMK`=XmOjjlVm9T#XFi*GTTp1jjE~!mwHs~s0T;+ z5?iJXY65IO?_hK9_Xh6@>Sap6f57XLD6Z3)a(`MlLR*;FG>PUAUe?6Skm!qK^9&ze zE#QC7i>B+c@fLLbFk}|qdbvrED7^i&4et^pjQ0taH3Ys6Z+|Q-M&Z_?aX-D%H=#VV zB#ADGz*gW$NvndobxRsc8qpQ**b+WZ;%eXsNiQCT!m+%vl0jC-J9;$|jT6GRNZ=ut z3YR#&&Aa_QG!6z-o^Fd6p>VL}1FPkoEuUK+s}Jq`XRZKR$8ykKxG`o%LHW(tOtjPi z%$%r(H!&_3Fkaoq-U_t|^Uf9}2qm8v*&NZ~z6#8I@l4=0FlpEW^Aj5^uR$y-YzgTI z#om`Q*?=F2f6Lc09amv}l`BA?n7MD&ubyLKd^5Nc>?~H~FNp{2%-t)G8X{H&vye5; zXSn@P&q`V%Mpe4~p;`HTwGbW0SmQHiHX42Au3?*E4y>CuG7|cotIo??ikuQUiB@Q(2CZ5LOnUQFyIvBFly#f5JqP zwNN!-nz`#}J9p1oc5WNx5DzbwofBZ=H}IkYJ-?&Nf`iSKvE66?1AOpL1ONa4 delta 735 zcmW-bZ%7ky7{~8-yKUFBrlv6|>!&v7qS7)Wv9eUGtfZi{7rmIh2*Q%Y{!wCg>ZLO3 z&OOa*F7Z!ZImKKYF^!g%iB=#gXav~|i2_B>GK&7$)vM?G{qT7no>x5G&ePsxM8ynG zB*-bKi6noD@>|VA4YJD)eU*mHye*r9UQ#GZR*b6}kyl>oy_|rup(#sks1Apt5_gZw)Xtq&d&xERj@6Qn8zdELh_>gpKj2`T7ZRP^|gqmg7Z__^c7 zqGGB$Y;=58u@*_=l)IT6e3dNl@d2fXBh%lr&spg|2U3m!GmS z!%HNJLwIvJvs9uQ$Vw+(Bj7(34JW;FzOVkDU{VEu(djT#p>J%XAZc*kH5=X`NEq)C zth)$Y1HY!Dl6QCANSdpqb~xvie(NI9DiJsYI8xH9MNMsz)@meLyWL^k^(5W`93cgZ zNsu#RPQBF4(tKHmR-*8b@X7D$=YpV_3${7(-a*43M z_$kf+_h({J7L3kV5G((fS%x;904BUw%f~U*r+{(L?>n;9PnZc?FF`2ryvW9iW!J9( z6Dd}?+`t%d5v0uSw|0S8yut3F38kPjcA*rvh~LsP824SsI#lf<(6FU*=a=@aV!#L; zvutR-$Ty3p3z(-Z1Eu~%1?NNB93OV37D`x2PYi1goT>GM#&^cR0Z!ra7E(A1tpn_LS7-rU}<|xEPKp>4tWvJB9J6 z7q>x+vIPa;jj|ef;JcDTUh%`;`8YB?AI{FlEsHu|$306-t Date: Wed, 2 Jun 2021 11:15:22 -0600 Subject: [PATCH 2/6] Beemizer stuff --- CLI.py | 1 - ItemList.py | 14 +++++++++----- Main.py | 2 +- Mystery.py | 2 +- RELEASENOTES.md | 8 ++++++++ resources/app/cli/args.json | 5 +++++ resources/app/gui/lang/en.json | 7 +++++++ resources/app/gui/randomize/item/widgets.json | 6 ++++++ source/classes/constants.py | 3 ++- 9 files changed, 39 insertions(+), 9 deletions(-) diff --git a/CLI.py b/CLI.py index ce230037..18692950 100644 --- a/CLI.py +++ b/CLI.py @@ -74,7 +74,6 @@ def parse_cli(argv, no_defaults=False): parser.add_argument('--customitemarray', default={}, help=argparse.SUPPRESS) # included for backwards compatibility - parser.add_argument('--beemizer', default=defval(settings["beemizer"]), type=lambda value: min(max(int(value), 0), 4)) parser.add_argument('--multi', default=defval(settings["multi"]), type=lambda value: min(max(int(value), 1), 255)) parser.add_argument('--securerandom', default=defval(settings["securerandom"]), action='store_true') parser.add_argument('--teams', default=defval(1), type=lambda value: max(int(value), 1)) diff --git a/ItemList.py b/ItemList.py index 2ba05043..4f65c2ac 100644 --- a/ItemList.py +++ b/ItemList.py @@ -306,6 +306,10 @@ def generate_itempool(world, player): pool.append(slot['item']) items = ItemFactory(pool, player) + if world.shopsanity[player]: + for potion in ['Green Potion', 'Blue Potion', 'Red Potion']: + p_item = next(item for item in items if item.name == potion and item.player == player) + p_item.priority = True # don't beemize one of each potion world.lamps_needed_for_dark_rooms = lamps_needed_for_dark_rooms @@ -337,11 +341,11 @@ def generate_itempool(world, player): for hp in adv_heart_pieces: hp.advancement = True - beeweights = {0: {None: 100}, - 1: {None: 75, 'trap': 25}, - 2: {None: 40, 'trap': 40, 'bee': 20}, - 3: {'trap': 50, 'bee': 50}, - 4: {'trap': 100}} + beeweights = {'0': {None: 100}, + '1': {None: 75, 'trap': 25}, + '2': {None: 40, 'trap': 40, 'bee': 20}, + '3': {'trap': 50, 'bee': 50}, + '4': {'trap': 100}} def beemizer(item): if world.beemizer[item.player] and not item.advancement and not item.priority and not item.type: choice = random.choices(list(beeweights[world.beemizer[item.player]].keys()), weights=list(beeweights[world.beemizer[item.player]].values()))[0] diff --git a/Main.py b/Main.py index 919ba67f..bc621f7c 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.5-u' +__version__ = '0.4.0.6-u' class EnemizerError(RuntimeError): diff --git a/Mystery.py b/Mystery.py index 271e8194..6d0189f0 100644 --- a/Mystery.py +++ b/Mystery.py @@ -209,7 +209,7 @@ def roll_settings(weights): ret.shufflepots = get_choice('pot_shuffle') == 'on' - ret.beemizer = int(get_choice('beemizer')) if 'beemizer' in weights else 0 + ret.beemizer = get_choice('beemizer') if 'beemizer' in weights else '0' inventoryweights = weights.get('startinventory', {}) startitems = [] diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 5f392a15..06bda972 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -1,5 +1,9 @@ # New Features +## Maiden Hint for Theives Town Attic + +In crossed dungeon mode, if you bring the maiden to the boss room when the attic is not bombed (and thus no light in the room), she mentions the dungeon where you can find the cracked floor. + ## Shuffle Links House Links house can now be shuffled in different ER settings. It will be limited to the Light World (or Dark World in inverted) if Crossed or Insanity shuffle is not one. It it also limited if door shuffle settings allow the Sanctuary to be in the dark world. (This is prevent having no Light World spawn points in Open modes) This setting is ignored by standard mode. THe CLI parameter is --shufflelinks @@ -10,6 +14,10 @@ Thanks to qadan, cheuer, & compiling # Bug Fixes and Notes. +* 0.4.0.6 + * Hints now default to off + * The maiden gives you a hint to the attic if you bring her to the unlit boss room + * Beemizer support and fix for shopsanity * 0.4.0.5 * Insanity - less restrictions on exiting (all modes) * Fix for simple bosses shuffle diff --git a/resources/app/cli/args.json b/resources/app/cli/args.json index 45f0e808..a41adb17 100644 --- a/resources/app/cli/args.json +++ b/resources/app/cli/args.json @@ -159,6 +159,11 @@ "7", "6", "5", "4", "3", "2", "1", "0", "random" ] }, + "beemizer": { + "choices": [ + "4", "3", "2", "1", "0" + ] + }, "openpyramid": { "action": "store_true", "type": "bool" diff --git a/resources/app/gui/lang/en.json b/resources/app/gui/lang/en.json index 303e91cb..aa6cd6dc 100644 --- a/resources/app/gui/lang/en.json +++ b/resources/app/gui/lang/en.json @@ -234,6 +234,13 @@ "randomizer.item.weapons.swordless": "Swordless", "randomizer.item.weapons.vanilla": "Vanilla", + "randomizer.item.beemizer": "Beemizer", + "randomizer.item.beemizer.0": "No Bee Traps", + "randomizer.item.beemizer.1": "25% Bee Traps", + "randomizer.item.beemizer.2": "40% Traps, 20% Refills", + "randomizer.item.beemizer.3": "50% Traps, 50% Refills", + "randomizer.item.beemizer.4": "100% Bee Traps", + "randomizer.item.itempool": "Item Pool", "randomizer.item.itempool.normal": "Normal", "randomizer.item.itempool.hard": "Hard", diff --git a/resources/app/gui/randomize/item/widgets.json b/resources/app/gui/randomize/item/widgets.json index 043a29ed..1871dcaf 100644 --- a/resources/app/gui/randomize/item/widgets.json +++ b/resources/app/gui/randomize/item/widgets.json @@ -58,6 +58,12 @@ "swordless", "vanilla" ] + }, + "beemizer": { + "type": "selectbox", + "options": [ + "0", "1", "2", "3", "4" + ] } }, "rightItemFrame": { diff --git a/source/classes/constants.py b/source/classes/constants.py index 5c8f3ce3..c0e95861 100644 --- a/source/classes/constants.py +++ b/source/classes/constants.py @@ -69,7 +69,8 @@ SETTINGSTOPROCESS = { "timer": "timer", "progressives": "progressive", "accessibility": "accessibility", - "sortingalgo": "algorithm" + "sortingalgo": "algorithm", + "beemizer": "beemizer" }, "entrance": { "openpyramid": "openpyramid", From c81865b33f12756a224e1914317ee9f23761f544 Mon Sep 17 00:00:00 2001 From: aerinon Date: Wed, 2 Jun 2021 13:28:33 -0600 Subject: [PATCH 3/6] Remove cap upgrades for hard/expert Replace cap upgrades with red rupees in shopsanity --- ItemList.py | 55 +++++++++++++++++++++++++++++------------------------ Rom.py | 3 +++ 2 files changed, 33 insertions(+), 25 deletions(-) diff --git a/ItemList.py b/ItemList.py index 4f65c2ac..62648862 100644 --- a/ItemList.py +++ b/ItemList.py @@ -303,7 +303,11 @@ def generate_itempool(world, player): if shop.region.name in shop_to_location_table: for index, slot in enumerate(shop.inventory): if slot: - pool.append(slot['item']) + item = slot['item'] + if shop.region.name == 'Capacity Upgrade' and world.difficulty[player] != 'normal': + pool.append('Rupees (20)') + else: + pool.append(item) items = ItemFactory(pool, player) if world.shopsanity[player]: @@ -556,30 +560,31 @@ def customize_shops(world, player): shopkeeper = random.choice([0xC1, 0xA0, 0xE2, 0xE3]) shop.shopkeeper_config = shopkeeper # handle capacity upgrades - randomly choose a bomb bunch or arrow bunch to become capacity upgrades - if not found_bomb_upgrade and len(possible_replacements) > 0: - choices = [] - for shop, idx, loc, item in possible_replacements: - if item.name in ['Bombs (3)', 'Bombs (10)']: - choices.append((shop, idx, loc, item)) - if len(choices) > 0: - shop, idx, loc, item = random.choice(choices) - upgrade = ItemFactory('Bomb Upgrade (+5)', player) - shop.add_inventory(idx, upgrade.name, randomize_price(upgrade.price), 6, - item.name, randomize_price(item.price), player=item.player) - loc.item = upgrade - upgrade.location = loc - if not found_arrow_upgrade and len(possible_replacements) > 0: - choices = [] - for shop, idx, loc, item in possible_replacements: - if item.name == 'Arrows (10)' or (item.name == 'Single Arrow' and not world.retro[player]): - choices.append((shop, idx, loc, item)) - if len(choices) > 0: - shop, idx, loc, item = random.choice(choices) - upgrade = ItemFactory('Arrow Upgrade (+5)', player) - shop.add_inventory(idx, upgrade.name, randomize_price(upgrade.price), 6, - item.name, randomize_price(item.price), player=item.player) - loc.item = upgrade - upgrade.location = loc + if world.difficulty[player] == 'normal': + if not found_bomb_upgrade and len(possible_replacements) > 0: + choices = [] + for shop, idx, loc, item in possible_replacements: + if item.name in ['Bombs (3)', 'Bombs (10)']: + choices.append((shop, idx, loc, item)) + if len(choices) > 0: + shop, idx, loc, item = random.choice(choices) + upgrade = ItemFactory('Bomb Upgrade (+5)', player) + shop.add_inventory(idx, upgrade.name, randomize_price(upgrade.price), 6, + item.name, randomize_price(item.price), player=item.player) + loc.item = upgrade + upgrade.location = loc + if not found_arrow_upgrade and len(possible_replacements) > 0: + choices = [] + for shop, idx, loc, item in possible_replacements: + if item.name == 'Arrows (10)' or (item.name == 'Single Arrow' and not world.retro[player]): + choices.append((shop, idx, loc, item)) + if len(choices) > 0: + shop, idx, loc, item = random.choice(choices) + upgrade = ItemFactory('Arrow Upgrade (+5)', player) + shop.add_inventory(idx, upgrade.name, randomize_price(upgrade.price), 6, + item.name, randomize_price(item.price), player=item.player) + loc.item = upgrade + upgrade.location = loc change_shop_items_to_rupees(world, player, shops_to_customize) balance_prices(world, player) diff --git a/Rom.py b/Rom.py index 60b40ab6..2efd0008 100644 --- a/Rom.py +++ b/Rom.py @@ -1600,6 +1600,9 @@ def write_custom_shops(rom, world, player): loc_item = world.get_location(retro_shops[shop.region.name][index], player).item else: loc_item = ItemFactory(item['item'], player) + if (not world.shopsanity[player] and shop.region.name == 'Capacity Upgrade' + and world.difficulty[player] != 'normal'): + continue # skip cap upgrades except in normal/shopsanity item_id = loc_item.code price = int16_as_bytes(item['price']) replace = ItemFactory(item['replacement'], player).code if item['replacement'] else 0xFF From 7442d662118ff7c5610c423e6623fa219b6d6bd6 Mon Sep 17 00:00:00 2001 From: aerinon Date: Thu, 3 Jun 2021 13:56:57 -0600 Subject: [PATCH 4/6] Old Man House bunny spawn Cutoff bounding box implemented Added a couple more lobby possibilities --- DoorShuffle.py | 13 ++++++++++++- Doors.py | 4 ++-- RELEASENOTES.md | 9 ++++++--- Rom.py | 5 ++++- asm/doortables.asm | 29 +++++++++++++++++++++++++++++ asm/dr_lobby.asm | 3 ++- asm/overrides.asm | 41 +++++++++++++++++------------------------ data/base2current.bps | Bin 133067 -> 133179 bytes 8 files changed, 72 insertions(+), 32 deletions(-) diff --git a/DoorShuffle.py b/DoorShuffle.py index 75bad2b8..be46bd74 100644 --- a/DoorShuffle.py +++ b/DoorShuffle.py @@ -443,10 +443,16 @@ def choose_portals(world, player): if not hc_south.entranceFlag: world.get_room(0x61, player).delete(6) world.get_room(0x61, player).change(4, DoorKind.NormalLow) + else: + world.get_room(0x61, player).change(4, DoorKind.DungeonEntrance) + world.get_room(0x61, player).change(6, DoorKind.CaveEntranceLow) sanctuary_door = world.get_door('Sanctuary S', player) if not sanctuary_door.entranceFlag: world.get_room(0x12, player).delete(3) world.get_room(0x12, player).change(2, DoorKind.NormalLow) + else: + world.get_room(0x12, player).change(2, DoorKind.DungeonEntrance) + world.get_room(0x12, player).change(3, DoorKind.CaveEntranceLow) hera_door = world.get_door('Hera Lobby S', player) if not hera_door.entranceFlag: world.get_room(0x77, player).change(0, DoorKind.NormalLow2) @@ -580,7 +586,12 @@ def assign_portal(candidates, possible_portals, world, player): world.get_room(old_door.roomIndex, player).change(old_door.doorListPos, old_door_kind) portal.change_door(candidate) if candidate.name not in ['Hyrule Castle Lobby S', 'Sanctuary S']: - new_door_kind = DoorKind.DungeonEntranceLow if candidate.layer or candidate.pseudo_bg else DoorKind.DungeonEntrance + if candidate.name == 'Swamp Hub S': + new_door_kind = DoorKind.CaveEntranceLow + elif candidate.layer or candidate.pseudo_bg: + new_door_kind = DoorKind.DungeonEntranceLow + else: + new_door_kind = DoorKind.DungeonEntrance world.get_room(candidate.roomIndex, player).change(candidate.doorListPos, new_door_kind) candidate.entranceFlag = True return candidate, portal diff --git a/Doors.py b/Doors.py index eb824fb1..cc13826e 100644 --- a/Doors.py +++ b/Doors.py @@ -496,7 +496,7 @@ def create_doors(world, player): create_door(player, 'Swamp Hammer Switch SW', Intr).dir(So, 0x37, Left, High).small_key().pos(2), create_door(player, 'Swamp Hammer Switch WN', Nrml).dir(We, 0x37, Top, High).pos(0), create_door(player, 'Swamp Hub ES', Nrml).dir(Ea, 0x36, Bot, High).pos(4), - create_door(player, 'Swamp Hub S', Nrml).dir(So, 0x36, Mid, High).pos(5), # .portal(Z, 0x22, 1), couldn't figure this out + create_door(player, 'Swamp Hub S', Nrml).dir(So, 0x36, Mid, High).pos(5).portal(Z, 0x22, 1), create_door(player, 'Swamp Hub WS', Nrml).dir(We, 0x36, Bot, High).pos(3), create_door(player, 'Swamp Hub WN', Nrml).dir(We, 0x36, Top, High).small_key().pos(2), create_door(player, 'Swamp Hub Hook Path', Lgcl), @@ -981,7 +981,7 @@ def create_doors(world, player): create_door(player, 'TR Lava Dual Pipes SW', Nrml).dir(So, 0x14, Left, High).pos(4).portal(Z, 0x22), create_door(player, 'TR Lava Island WS', Nrml).dir(We, 0x14, Bot, High).small_key().pos(1), create_door(player, 'TR Lava Island ES', Nrml).dir(Ea, 0x14, Bot, High).pos(6), - create_door(player, 'TR Lava Escape SE', Nrml).dir(So, 0x14, Right, High).small_key().pos(0), + create_door(player, 'TR Lava Escape SE', Nrml).dir(So, 0x14, Right, High).small_key().pos(0).portal(X, 0x22), create_door(player, 'TR Lava Escape NW', Nrml).dir(No, 0x14, Left, High).pos(2), create_door(player, 'TR Pokey 2 EN', Nrml).dir(Ea, 0x13, Top, High).pos(1), create_door(player, 'TR Pokey 2 Top to Bottom Barrier - Blue', Lgcl), diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 06bda972..8097eff2 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -17,7 +17,11 @@ Thanks to qadan, cheuer, & compiling * 0.4.0.6 * Hints now default to off * The maiden gives you a hint to the attic if you bring her to the unlit boss room - * Beemizer support and fix for shopsanity + * Beemizer support and fix for shopsanity + * Capacity upgrades removed in hard/expert item difficulties + * Swamp Hub added to lobby shuffle with ugly cave entrance. + * TR Lava Escape added to lobby shuffle. + * Hyrule Main Lobby and Sanctuary can now have a more visible outside exit, and rugs modified to be fully clipped. * 0.4.0.5 * Insanity - less restrictions on exiting (all modes) * Fix for simple bosses shuffle @@ -59,8 +63,7 @@ Thanks to qadan, cheuer, & compiling # Known Issues * Shopsanity Issues - * Hints for items in shops can be misleading - * Capacity upgrades present in hard/expert item pools + * Hints for items in shops can be misleading (ER) * Forfeit in Multiworld not granting all shop items * Potential keylocks in multi-entrance dungeons * Incorrect vanilla key logic for Mire diff --git a/Rom.py b/Rom.py index 2efd0008..64745298 100644 --- a/Rom.py +++ b/Rom.py @@ -27,7 +27,7 @@ from EntranceShuffle import door_addresses, exit_ids JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = '56cf37536facb8e6b19d2ce516436f66' +RANDOMIZERBASEHASH = 'fef56e6629ee9fe1de52b7842beb333d' class JsonRom(object): @@ -683,6 +683,9 @@ def patch_rom(world, rom, player, team, enemized, is_mystery=False): if should_be_bunny(links_house, world.mode[player]): rom.write_bytes(0x13fff0, [0x04, 0x01]) + old_man_house = world.get_region('Old Man House', player) + if should_be_bunny(old_man_house, world.mode[player]): + rom.write_bytes(0x13fff4, [0xe4, 0x00]) # patch doors if world.doorShuffle[player] == 'crossed': diff --git a/asm/doortables.asm b/asm/doortables.asm index dbbdb3c4..e427fd48 100644 --- a/asm/doortables.asm +++ b/asm/doortables.asm @@ -572,6 +572,33 @@ InroomStairsY: dw $0058, $0148, $0198, $0190 +org $27E000 +CutoffRooms: +; Room, quad, y max, x max, x min +dw $00bc, $0007, $0009, $0003 ; TT Alcove +dw $00a2, $0007, $000b, $0000 ; Mire Bridge Left & Right +dw $00a3, $0009, $0008, $0004 ; Mire Bent Bridge +dw $00c2, $0007, $0008, $0000 ; Mire Hub +;dw $00c2, $0004, $0008, $0004 ; Mire Hub +dw $001a, $0007, $0008, $0004 ; Pod Falling & Harmless +dw $0049, $0004, $0008, $0004 ; SW Star Pits +dw $0014, $0009, $0008, $0004 ; TR Lava Escape & TR Dual Pipes +dw $008c, $0009, $0008, $0004 ; Bob's Room & GT Big Chest + +dw $009f, $0009, $000a, $0002 ; Ice Many Pots +dw $0066, $0009, $0008, $0000 ; Swamp Waterfall +dw $005d, $0007, $000b, $0000 ; GT Gauntlet 3 +dw $00a8, $0007, $0008, $0004 ; Eastern Push Block +dw $00a9, $0009, $0009, $0003 ; Eastern Courtyard +dw $00aa, $0009, $0009, $0003 ; Eastern Map Valley +dw $00b9, $0008, $000b, $0000 ; Eastern Cannonball +dw $0052, $0008, $000a, $0003 ; HC East Hall - affects both doors + +dw $0050, $0009, $000a, $0002 ; HC West Hall +dw $00c5, $0008, $0008, $0000 ; TR Dash Bridge +dw $00c6, $0007, $0008, $0004 ; TR Hub +dw $ffff + ; dungeon tables ; HC HC EP DP AT SP PD MM SW IP TH TT TR GT org $27f000 @@ -675,4 +702,6 @@ org $27fff0 LinksHouseDarkWorld: dw $ffff SanctuaryDarkWorld: +dw $ffff +OldManDarkWorld: dw $ffff \ No newline at end of file diff --git a/asm/dr_lobby.asm b/asm/dr_lobby.asm index 1cac9d10..15ee435c 100644 --- a/asm/dr_lobby.asm +++ b/asm/dr_lobby.asm @@ -3,7 +3,8 @@ CheckDarkWorldSpawn: LDA.l DRFlags : AND #$0200 : BEQ + ; skip if the flag isn't set LDA.l $7EF357 : AND #$00FF : BNE + ; moon pearl? LDA.l LinksHouseDarkWorld : CMP $A0 : BEQ ++ - LDA.l SanctuaryDarkWorld : CMP $A0 : BNE + + LDA.l SanctuaryDarkWorld : CMP $A0 : BEQ ++ + LDA.l OldManDarkWorld : CMP $A0 : BNE + ++ SEP #$30 : LDA #$17 : STA $5D INC $02E0 : LDA.b #$40 : STA !DARK_WORLD : REP #$30 + RTL diff --git a/asm/overrides.asm b/asm/overrides.asm index 4ab5d3ca..40d48e5c 100644 --- a/asm/overrides.asm +++ b/asm/overrides.asm @@ -84,32 +84,24 @@ SuctionOverworldFix: stz $49 + rtl -; TT Alcove, Mire bridges, pod falling, SW torch room, TR Pipe room, Bob's Room, Ice Many Pots, Mire Hub -; swamp waterfall, Gauntlet 3, Eastern Push block -CutoffRooms: -db $bc, $a2, $1a, $49, $14, $8c, $9f, $c2 -db $66, $5d, $a8 -; Don't forget CutoffRoomCount!!! +!CutoffTable = "$27E000" CutoffEntranceRug: - pha : phx - lda.l DRMode : beq .norm - lda $04 : cmp #$000A : beq + - cmp #$000C : bne .norm - + lda $a0 : sep #$20 : ldx #$0000 - - cmp.l CutoffRooms, x : beq .check - inx : cpx #$000B : !blt - ; CutoffRoomCount is here! - rep #$20 - .norm plx : pla : lda $9B52, y : sta $7E2000, x ; what we wrote over -rtl + PHA : PHX + LDA.l DRMode : BEQ .norm + LDA $04 : cmp #$000A : BEQ + ; only affect A & C objects + cmp #$000C : BNE .norm + + LDX #$0000 : LDA !CutoffTable, x + - CMP.W $A0 : BEQ .check + TXA : !ADD #$0008 : TAX : LDA !CutoffTable, x : CMP.w #$FFFF : BNE - + .norm PLX : PLA : LDA $9B52, y : STA $7E2000, x ; what we wrote over +RTL .check - rep #$20 - lda $0c : cmp #$0006 : !bge .skip - lda $0e : cmp #$0008 : !bge .skip - cmp #$0004 : !blt .skip - bra .norm -.skip plx : pla : rtl - + LDA $0c : CMP.l !CutoffTable+2, x : !BGE .skip + LDA $0e : CMP.l !CutoffTable+4, x : !BGE .skip + CMP.l !CutoffTable+6, x : !BLT .skip + BRA .norm +.skip PLX : PLA : RTL StoreTempBunnyState: LDA $5D : CMP #$1C : BNE + @@ -131,7 +123,7 @@ RainPrevention: LDA.l BlockSanctuaryDoorInRain : BEQ .done ;flagged LDA $A0 : CMP #$0012 : BNE + ;we're in the sanctuary LDA.l $7EF3CC : AND #$00FF : CMP #$0001 : BEQ .done ; zelda is following - LDA $00 : CMP #$02A1 : BNE .done + LDA $00 : AND #$00FF : CMP #$00A1 : BNE .done ; position is a1 PLA : LDA #$0008 : RTL + LDA.l BlockCastleDoorsInRain : AND #$00FF : BEQ .done ;flagged LDX #$FFFE @@ -150,6 +142,7 @@ StandardAgaDmg: ; note: this skips both maiden dialog triggers if the hole is open BlindsAtticHint: + REP #$20 CMP.w #$0122 : BNE + LDA $7EF0CA : AND.w #$0100 : BEQ + SEP #$20 : RTL ; skip the dialog box if the hole is already open diff --git a/data/base2current.bps b/data/base2current.bps index 974762d1e3c6e359c0ae44064cf873a071890b28..7d08f3676288ec72e609ef9a010805d031647f73 100644 GIT binary patch delta 1220 zcmW-beM}Q~9L9gYyK8&2MNkoo8S>-J1Dp!`p4>TxTA$&8HFfZYgzN_Ys*MfP!AMM(CC`7 ze8k%g2ACW5K#6lrz2|=wg5hxg$cx?LtU1r}Sc_x~5d%zXv@{_^sY-{m0}M~F_i)!x zJV~ao`0h|aiJ$OCTdtyD66`nD?TN1Wi@c94_tCaJ<8SnY6&Is%aw;jQ-VsalJ zf1*+inq8x^k7`hx{T;K({2EEGP~5e-+E2Zgc-4;aXc#-35^1e3*Iql+-bJOe{Sgvn zg=lUW8!1s9;e(YmzkSQJ}FyT-5P7f!1Oxkc`51ym2ITVNxeY z+e@1@5`_l&Kf7vstp@C~8qJQa_wb(1S~csfWI6` zhWYr%5eB;C7b6qkoMV`c>CxC{u$3n<>!5#YUZ;M--Zl3CprqLaE?FqGiI|NODr#FX z8--5c?1$^qZ(t#Qc9ow7ilrs_@k!JnJYA8)is$gE+{#)2`cYhwr^EXm*n-*2z50n-99;cYi`uoZEHsG_$eE1mOR;I%%_?fa1rsCD346%17-ak5H z!s;V#>($Jn&$f`ILd2W$+0g}>k{mYW*g)_y(18d*0-ve|06+tX5Hb!{IQH(Y_fue+ zN@+lWwPJD987@ZjaA!oj*P|}S5qR;DB>8ndk;uzNo~60ow&b_`&RTN{7c63sW@Nrz^m12HCjk&X<_nlw?sfKNfHoJl(5CnRF|{B zBWs?zpgs_}a@dub**2vVH#{pMH^1$`k$&+`+L^fT7CSug$~5@fwlY=kEa zaV4d$Nx;38&H5@pM#Ahg-GTf7xAJ;!ASVkhrzv5Prbeh(43o$->ax(h7`BpBp)Fuu z0uLDzP8_^aeK?-I37WK-#bqzS&matr?drY-;pV>6!ux@-b@1}4WZ}TPE^hpbUBng7 o%yiBRLLiI^K=>ujC}M?eK6lYfXW(WH96Lhil(p^J;c963A7|qFwg3PC delta 1117 zcmW-bdrVVj7{Zgq1PBdi`arh^2#ll}F)zvq45C(k98 zx?!fqa$wBO$t{IP=B%mTbZZ_w(5E45>S3W6S_t^G@ICn{35T&oISj{ze5xD5FNCi` zUV(78kgW2_V4fgGjA$k4-S$p1^a){O?{9{0$JfvON<4=M%e8-=n2(Y-F z(F$w+6s0=Ano`}%NF|+U1??Z3$krXmt1#5=uYF^bKpK&#Eiqgkc&a4!Oy5jh)nM^= z|GO!?%o_?sxmOK*aeO~+1ZdKKs9PgO-@mH@?D7n~+The=uk1sH8Jbsn6<{o!5BE}F zOzD*YmO%d11_NK^P4E$>YImHe%FteQcAns?MM5coEpBH3-+53S=_1^b25&0##c{_B zTnE4f3-LQYvh)*(q<^(|gW@{J@ip&sP?XbKdnB*9hn_a)>euOUrJWfw8<`E)MqF1} zX|u-CkFdqclcxT5#kG)e+`AATTENmz+WXQk3Mu%?LSk#yXSYjPo}?>2(9=~cPt)~m z=8J&7$l?UVq)KTtHg>C{kmcAWWY=c~VeW5$gX7)V4{fqM>ymgqGYAHGKI`1+{b9?8#&M&10hxwjKi}}SgSckof z8t4+17Q^8dBSx{)a&tQB=)lNA{XDW;s)v5mPXi!km^mhmGj?6TXgzn@ehH%px(Dk5 zdot%Smz~w=rhsS|O;U>SqxpXizsLDs#^(b}6vLSZxWfi? z_5AF~Nu5YD__>GX*e)AxVR$9*k$byr?x>8>8kGajKTM+KR?WKB6su-%N-t{cMe%cU z?teB&`f*u~=%VOK94|f-BTJ7(&V6ki5mPO;@&dL?L1SDh7KYxiI=3RXl=&KVh|j_x z{#s0eUK|ih;dY$2q#=kJT(^`SUe)X{&FHqDEhmj!(?-Fu^t@bK#MEwE#$mO~E`>rN zS3puhaWTgoJOLFXNkAx*apkI^-s=2wLi1xAq-OJSR}zik0LQJ=lP%hQ+`95RsY^2p z4XY=jRm~fJFnu!bOlZkQ+@ETALLE|UwM7F*1$rU6$I}!Bw`M309`rCpv)epE4%|V> zY?bTJaR27PRI)MjCYP8G$H;^d Date: Thu, 3 Jun 2021 14:05:26 -0600 Subject: [PATCH 5/6] Full clipping of rug on marked rooms --- Rom.py | 2 +- asm/doortables.asm | 31 ++++++++----------------------- asm/overrides.asm | 8 ++++---- data/base2current.bps | Bin 133179 -> 133119 bytes 4 files changed, 13 insertions(+), 28 deletions(-) diff --git a/Rom.py b/Rom.py index 64745298..9b06ec57 100644 --- a/Rom.py +++ b/Rom.py @@ -27,7 +27,7 @@ from EntranceShuffle import door_addresses, exit_ids JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = 'fef56e6629ee9fe1de52b7842beb333d' +RANDOMIZERBASEHASH = '47e937d11855bc775587fe2a7acfa3a3' class JsonRom(object): diff --git a/asm/doortables.asm b/asm/doortables.asm index e427fd48..db1b6711 100644 --- a/asm/doortables.asm +++ b/asm/doortables.asm @@ -574,29 +574,14 @@ dw $0058, $0148, $0198, $0190 org $27E000 CutoffRooms: -; Room, quad, y max, x max, x min -dw $00bc, $0007, $0009, $0003 ; TT Alcove -dw $00a2, $0007, $000b, $0000 ; Mire Bridge Left & Right -dw $00a3, $0009, $0008, $0004 ; Mire Bent Bridge -dw $00c2, $0007, $0008, $0000 ; Mire Hub -;dw $00c2, $0004, $0008, $0004 ; Mire Hub -dw $001a, $0007, $0008, $0004 ; Pod Falling & Harmless -dw $0049, $0004, $0008, $0004 ; SW Star Pits -dw $0014, $0009, $0008, $0004 ; TR Lava Escape & TR Dual Pipes -dw $008c, $0009, $0008, $0004 ; Bob's Room & GT Big Chest - -dw $009f, $0009, $000a, $0002 ; Ice Many Pots -dw $0066, $0009, $0008, $0000 ; Swamp Waterfall -dw $005d, $0007, $000b, $0000 ; GT Gauntlet 3 -dw $00a8, $0007, $0008, $0004 ; Eastern Push Block -dw $00a9, $0009, $0009, $0003 ; Eastern Courtyard -dw $00aa, $0009, $0009, $0003 ; Eastern Map Valley -dw $00b9, $0008, $000b, $0000 ; Eastern Cannonball -dw $0052, $0008, $000a, $0003 ; HC East Hall - affects both doors - -dw $0050, $0009, $000a, $0002 ; HC West Hall -dw $00c5, $0008, $0008, $0000 ; TR Dash Bridge -dw $00c6, $0007, $0008, $0004 ; TR Hub +; TT Alcove, Mire Bridge Left & Right, Mire Bent Bridge, Mire Hub +; Pod Falling & Harmless, SW Star Pits, TR Lava Escape & TR Dual Pipes, Bob's Room & GT Big Chest +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 dw $ffff ; dungeon tables diff --git a/asm/overrides.asm b/asm/overrides.asm index 40d48e5c..f9842866 100644 --- a/asm/overrides.asm +++ b/asm/overrides.asm @@ -93,13 +93,13 @@ CutoffEntranceRug: cmp #$000C : BNE .norm + LDX #$0000 : LDA !CutoffTable, x - CMP.W $A0 : BEQ .check - TXA : !ADD #$0008 : TAX : LDA !CutoffTable, x : CMP.w #$FFFF : BNE - + INX #2 : LDA !CutoffTable, x : CMP.w #$FFFF : BNE - .norm PLX : PLA : LDA $9B52, y : STA $7E2000, x ; what we wrote over RTL .check - LDA $0c : CMP.l !CutoffTable+2, x : !BGE .skip - LDA $0e : CMP.l !CutoffTable+4, x : !BGE .skip - CMP.l !CutoffTable+6, x : !BLT .skip + LDA $0c : CMP #$0004 : !BGE .skip + LDA $0e : CMP #$0008 : !BGE .skip + CMP.l #$0004 : !BLT .skip BRA .norm .skip PLX : PLA : RTL diff --git a/data/base2current.bps b/data/base2current.bps index 7d08f3676288ec72e609ef9a010805d031647f73..cf03abefe0079ba3423365dc823669ba215f3e10 100644 GIT binary patch delta 1180 zcmW-bdrVVj7{=f4oc8nxm5YL+csanNmP9O0rkfER!^O*Fb(!KcNJZvMx-FZRIE{m^ z*rPT~dg!-uET95<7FuP+oo!VF@e(H8G%J6&nJrtr%&3vT$A+@F=vncf_x(Lj-uKCK zUg9-3-;s~T-3v~&?(FksUR4WF6N8NE@9g(1Y9b!PDfG2kz}F&lUcEkU4MK(L%=m~7 z<*GEXJqP8h$6ot*7rLa5@7OyRZ6t@HCcdN&>lGw;NGLi39VEX*Gq|WkoQ`z$Sv137 zj7nmre+0+JPSVw!`*YZ;PjQ&DS6C}H1sQCjOvMWO^50%ymZA&C0o8|%5SiQx&;z$j z*PDT+K6o&OVNHwBr`sCmM#Xzg;BrCEGdGpUNSEQ zp;aQ&up`r5?GQ+HtuYyUKAVGmHnWBn-UE5d+1i(f>UE2~!?ZV6vrPdZgNTe`h=~{l z6umhS+Rio3KX;T7mJtyYqr7(7s8463tRIk^UH+tB)ZMYzy2*xtq(xIZ9lX1`U9aeb zsPv%Q*DJ=8R?%qll>A9Hclu&F&eoklk~(W{ISg)R&E1+GV-F4PyJ9*~2C`5I2@jZ% zM;#tWKzTa|PPwReXJgl1f<650_LZ@E_z&Af06N<(JF?{J!!p5BD3fsvmL++Hyda}=<7$CyFRax&(o*gWTZy+~^W(ZHdG^JHd@S56sY}Di{n$*|l zfBaHxpIDGjTX}U zN`9s@P$wCr#b`QNJZxH2vDxKf=)49YzoR{34pPn3+f0*!f0IJDiw};t5BMX=cP#$N zV(H*5MxMeoikB@VP3zcd8L7VE#rjQoxC>h01YCxxumV!x3pfs2p%mJ{4*@s_?|>D0 z;RhH8EabrFa}VT9^rnv{zwIF7D@Iy4j?;69<#>7Go(6?M9Lq8Y>2&hC_`tEUf}`rL z(UpmEiUFm`OIegGTRCJHqok0|fZB2mdp3p~MOW8{)O;kR&SZC7sNFdo_d|fQ?A!kw zegzG7m-pO2=-s}9@~TkzDzpZpkK}KELS0!_xpadGuf|nc;PMjCG;K&5n^-H;@LJFU yL!imhHI&UJ6xW72uc3$Y666i#59?0BX=uOl`Uej~K@B;1{>+n4-d`B+?fM^6Qu=EE delta 1258 zcmW-bYfKbZ7>3W8z0JZZP;X#B1{6m~K%kO})+(Pktki zT{+Oa^laby{R553KPrpi2?9ndcXa1)n*JpEK39bpyWYIBXkRfHqp1=%Phkp(v8HWX2%_b@@0!b#zu)rm| zo}x(YBvDCwkgltM$Y-?fDA=*hO(0q&cH~=E|Mm)LS?`Mgs=;TmPgyqN>;psejTWHB z*{2PgMM&vCJzahgICwY~yj~c|pS` z0`&;n8f6{VQf<7t??SIW75UAwo`Y0&6`COHn~5Wh)I5QDS=}6cR*A&Dj}j_kFWkx# zWF58jFhgw+WQuxMNL>o3(*ll1Y%*WTQn<3g5`%1?q$3BD8iMox1fumq!|Or2eo^CN z)tedu?J}TJFh|HHt!UIC8&ab{dyn*H&zA(1k2xS)#Nzldhn`V&E&#>Z+yA}E>F;MU zz4)Dx=!MA_S(2~pG{|~tSoo{g;pHN6D`#PBTLo9 z22K1hmxxb|%!EaFV1$NtMID(4vkqZ2x!=IgMz!S_*~ojHYqam7yG%a->KtBVXNr~e z5=L=ijiU>rDC#htJGwUY1{M=C>RcpHt?rpm%c&l5YybNLp7_8`W24-?BugH&Qity}CT2 zzfsCXF2C-rb+}2L2cP1f)EV$H9#z-F6ujs$owNJB+FC+QYocsHFQz zIQ=pAGhNfT;?W^OTy>y{yOR0Ai7mQH(X2E-USz27T>>Ux20GBHWh4Ng4VcBWy*0Mo zr7bQ!n66n8=s~_z7Il=JEH$%7CEnSrEg}E`cH(oj02E7i*mkMa>C$ZYr4H!{+aoR{ zSs855#%ArXKw?ZR>upN<=p_4{)SCEQmmuIG!viOtK9-=%d!t!dFt#QtjW0YKEWHzq zbMg7-g3Rw>Sf&Kuz8i+zuY(1HVaVzZt`3MdjWFKhHNvklOdl6{*cI0bJo|E>FeUNx zy_XyIC!m|4!Cds_2 L?(N&`ZEgPpT$(2$ From c45dab6a7c7fdaad63deb3aa69195c0d8012801b Mon Sep 17 00:00:00 2001 From: aerinon Date: Fri, 4 Jun 2021 16:37:20 -0600 Subject: [PATCH 6/6] Bee trap pricing --- Items.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Items.py b/Items.py index 59b8bdc6..808a0740 100644 --- a/Items.py +++ b/Items.py @@ -165,7 +165,7 @@ item_table = {'Bow': (True, False, None, 0x0B, 200, 'You have\nchosen the\narche 'Map (Ganons Tower)': (False, True, 'Map', 0x72, 10, 'A tightly folded map rests here', 'and the map', 'cartography kid', 'map for sale', 'a map to shrooms', 'map boy navigates again', 'a map to Ganon\'s Tower'), 'Small Key (Universal)': (False, True, None, 0xAF, 100, 'A small key for any door', 'and the key', 'the unlocking kid', 'keys for sale', 'unlock the fungus', 'key boy opens door again', 'a small key'), 'Nothing': (False, False, None, 0x5A, 1, 'Some Hot Air', 'and the Nothing', 'the zen kid', 'outright theft', 'shroom theft', 'empty boy is bored again', 'nothing'), - 'Bee Trap': (False, False, None, 0xB0, 0, 'We will sting your face a whole lot!', 'and the sting buddies', 'the beekeeper kid', 'insects for sale', 'shroom pollenation', 'bottle boy has mad bees again', 'friendship'), + 'Bee Trap': (False, False, None, 0xB0, 50, 'We will sting your face a whole lot!', 'and the sting buddies', 'the beekeeper kid', 'insects for sale', 'shroom pollenation', 'bottle boy has mad bees again', 'friendship'), 'Red Potion': (False, False, None, 0x2E, 150, 'Hearty red goop!', 'and the red goo', 'the liquid kid', 'potion for sale', 'free samples', 'bottle boy has red goo again', 'a red potion'), 'Green Potion': (False, False, None, 0x2F, 60, 'Refreshing green goop!', 'and the green goo', 'the liquid kid', 'potion for sale', 'free samples', 'bottle boy has green goo again', 'a green potion'), 'Blue Potion': (False, False, None, 0x30, 160, 'Delicious blue goop!', 'and the blue goo', 'the liquid kid', 'potion for sale', 'free samples', 'bottle boy has blue goo again', 'a blue potion'),