diff --git a/data/basepatch.bsdiff4 b/data/basepatch.bsdiff4 index 379eee80c6c0..a3e6ffceb158 100644 Binary files a/data/basepatch.bsdiff4 and b/data/basepatch.bsdiff4 differ diff --git a/worlds/alttp/Items.py b/worlds/alttp/Items.py index cb44f35d58f1..6921a6885714 100644 --- a/worlds/alttp/Items.py +++ b/worlds/alttp/Items.py @@ -98,8 +98,9 @@ def as_init_dict(self) -> typing.Dict[str, typing.Any]: 'Green Pendant': ItemData(IC.progression, 'Crystal', (0x04, 0x38, 0x62, 0x00, 0x69, 0x01), None, None, None, None, None, None, "the green pendant"), 'Blue Pendant': ItemData(IC.progression, 'Crystal', (0x02, 0x34, 0x60, 0x00, 0x69, 0x02), None, None, None, None, None, None, "the blue pendant"), 'Red Pendant': ItemData(IC.progression, 'Crystal', (0x01, 0x32, 0x60, 0x00, 0x69, 0x03), None, None, None, None, None, None, "the red pendant"), + 'Gold Power Star': ItemData(IC.progression, None, 0x69, 'a small victory', 'and the power star', 'star-struck kid', 'star for sale', 'see stars with shroom', 'mario powers up again', 'a Blue Power Star'), 'Triforce': ItemData(IC.progression, None, 0x6A, '\n YOU WIN!', 'and the triforce', 'victorious kid', 'victory for sale', 'fungus for the win', 'greedy boy wins game again', 'the Triforce'), - 'Power Star': ItemData(IC.progression, None, 0x6B, 'a small victory', 'and the power star', 'star-struck kid', 'star for sale', 'see stars with shroom', 'mario powers up again', 'a Power Star'), + 'Silver Power Star': ItemData(IC.filler, None, 0x6B, 'a small victory', 'and the power star', 'star-struck kid', 'star for sale', 'see stars with shroom', 'mario powers up again', 'a Power Star'), 'Triforce Piece': ItemData(IC.progression_skip_balancing, None, 0x6C, 'a small victory', 'and the thirdforce', 'triangular kid', 'triangle for sale', 'fungus for triangle', 'wise boy has triangle again', 'a Triforce Piece'), 'Crystal 1': ItemData(IC.progression, 'Crystal', (0x02, 0x34, 0x64, 0x40, 0x7F, 0x06), None, None, None, None, None, None, "a blue crystal"), 'Crystal 2': ItemData(IC.progression, 'Crystal', (0x10, 0x34, 0x64, 0x40, 0x79, 0x06), None, None, None, None, None, None, "a blue crystal"), diff --git a/worlds/alttp/Options.py b/worlds/alttp/Options.py index 097458611734..2ba7faa1f0dc 100644 --- a/worlds/alttp/Options.py +++ b/worlds/alttp/Options.py @@ -573,6 +573,11 @@ def gives_bottle_merchant_hint(self): return self.value in {0, 1} +class StarScams(Toggle): + """If on, Power Stars (used to indicate non-LTTP items) will all appear gold. + If off, only progression items appear gold, while non-progression items appear silver.""" + display_name = "Star Scams" + class EnemyShuffle(Toggle): """Randomize every enemy spawn. If mode is Standard, Hyrule Castle is left out (may result in visually wrong enemy sprites in that area.)""" @@ -779,6 +784,7 @@ class ALTTPOptions(PerGameCommonOptions): retro_caves: RetroCaves hints: Hints scams: Scams + star_scams: StarScams boss_shuffle: LTTPBosses pot_shuffle: PotShuffle enemy_shuffle: EnemyShuffle diff --git a/worlds/alttp/Rom.py b/worlds/alttp/Rom.py index 73a77b03f532..1f6a773ef401 100644 --- a/worlds/alttp/Rom.py +++ b/worlds/alttp/Rom.py @@ -4,7 +4,7 @@ import worlds.Files LTTPJPN10HASH: str = "03a63945398191337e896e5771f77173" -RANDOMIZERBASEHASH: str = "8704fb9b9fa4fad52d4d2f9a95fb5360" +RANDOMIZERBASEHASH: str = "528c9298ff37e6d13cb8c1d5b8bd8f79" ROM_PLAYER_LIMIT: int = 255 import io @@ -774,11 +774,17 @@ def write_to_rom(self, rom: LocalRom): 0x4D504, 0x4D507, 0x4D55E, 0x4D56A] -def get_nonnative_item_sprite(code: int) -> int: +def get_nonnative_item_sprite(code: int, advancement: bool) -> int: if 84173 >= code >= 84007: # LttP item in SMZ3 return code - 84000 - return 0x6B # set all non-native sprites to Power Star as per 13 to 2 vote at + # Set all non-native sprites to Power Star as per 13 to 2 vote at # https://discord.com/channels/731205301247803413/827141303330406408/852102450822905886 + # Use a gold Power Star for advancement items and a silver Power Star + # for non-advancement items, as per more recent discussions. + if advancement: + return 0x69 # Gold Power Star + else: + return 0x6B # Silver Power Star def patch_rom(world: MultiWorld, rom: LocalRom, player: int, enemized: bool): @@ -800,7 +806,8 @@ def patch_rom(world: MultiWorld, rom: LocalRom, player: int, enemized: bool): if location.item.trap: itemid = 0x5A # Nothing, which disguises else: - itemid = get_nonnative_item_sprite(location.item.code) + itemid = get_nonnative_item_sprite(location.item.code, + world.star_scams[player] or location.item.advancement) # Keys in their native dungeon should use the orignal item code for keys elif location.parent_region.dungeon: if location.parent_region.dungeon.is_dungeon_item(location.item): @@ -1776,7 +1783,8 @@ def write_custom_shops(rom, world, player): replacement_price_data = get_price_data(item['replacement_price'], item['replacement_price_type']) slot = 0 if shop.type == ShopType.TakeAny else index if item['player'] and world.game[item['player']] != "A Link to the Past": # item not native to ALTTP - item_code = get_nonnative_item_sprite(world.worlds[item['player']].item_name_to_id[item['item']]) + item_code = get_nonnative_item_sprite(world.worlds[item['player']].item_name_to_id[item['item']], + world.star_scams[player] or shop.region.locations[index].item.advancement) else: item_code = item_table[item["item"]].item_code if item['item'] == 'Single Arrow' and item['player'] == 0 and world.retro_bow[player]: