diff --git a/BaseClasses.py b/BaseClasses.py index 81f888ad..cbef228d 100644 --- a/BaseClasses.py +++ b/BaseClasses.py @@ -3530,7 +3530,7 @@ er_mode = {"vanilla": 0, "simple": 1, "restricted": 2, "full": 3, "lite": 4, "le # byte 1: LLLW WSSS (logic, mode, sword) logic_mode = {"noglitches": 0, "minorglitches": 1, "nologic": 2, "owglitches": 3, "majorglitches": 4} world_mode = {"open": 0, "standard": 1, "inverted": 2} -sword_mode = {"random": 0, "assured": 1, "swordless": 2, "vanilla": 3, "bombs": 4, "pseudo": 5, "assured_pseudo": 5, "byrna": 6, "somaria": 6, "cane": 6} +sword_mode = {"random": 0, "assured": 1, "swordless": 2, "swordless_hammer": 2, "vanilla": 3, "bombs": 4, "pseudo": 5, "assured_pseudo": 5, "byrna": 6, "somaria": 6, "cane": 6, "bees": 7} # byte 2: GGGD DFFH (goal, diff, item_func, hints) goal_mode = {"ganon": 0, "pedestal": 1, "dungeons": 2, "triforcehunt": 3, "crystals": 4, "trinity": 5} diff --git a/Rom.py b/Rom.py index cd09c253..912c0cab 100644 --- a/Rom.py +++ b/Rom.py @@ -1226,7 +1226,7 @@ def patch_rom(world, rom, player, team, enemized, is_mystery=False): #Set overflow items for progressive equipment rom.write_bytes(0x180090, - [difficulty.progressive_sword_limit if world.swords[player] != 'swordless' else 0, overflow_replacement, + [difficulty.progressive_sword_limit if world.swords[player] not in ['swordless', 'swordless_hammer', 'bees'] else 0, overflow_replacement, difficulty.progressive_shield_limit, overflow_replacement, difficulty.progressive_armor_limit, overflow_replacement, difficulty.progressive_bottle_limit, overflow_replacement]) @@ -1234,7 +1234,7 @@ def patch_rom(world, rom, player, team, enemized, is_mystery=False): #Work around for json patch ordering issues - write bow limit separately so that it is replaced in the patch rom.write_bytes(0x180098, [difficulty.progressive_bow_limit, overflow_replacement]) - if difficulty.progressive_bow_limit < 2 and world.swords[player] in ['swordless', 'pseudo', 'assured_pseudo']: + if difficulty.progressive_bow_limit < 2 and world.swords[player] in ['swordless', 'swordless_hammer', 'bees', 'pseudo', 'assured_pseudo']: rom.write_bytes(0x180098, [2, overflow_replacement]) # set up game internal RNG seed @@ -1346,15 +1346,35 @@ def patch_rom(world, rom, player, team, enemized, is_mystery=False): rom.write_byte(0x180029, 0x01) # Smithy quick item give # set swordless mode settings - if world.swords[player] == 'swordless': + if world.swords[player] in ['swordless', 'swordless_hammer']: rom.write_byte(0x18003F, 0x01) # hammer can harm ganon rom.initial_sram.set_swordless_curtains() # open curtains rom.write_byte(0x180041, 0x01) # swordless medallions (on pads) rom.write_byte(0x180043, 0xFF) # starting sword for link rom.write_byte(0x180044, 0x01) # hammer activates tablets + if world.swords[player] == 'swordless_hammer': + rom.write_byte(0x18002F, 0x07) # hammer on B elif world.swords[player] in ['pseudo', 'assured_pseudo']: rom.write_byte(0x18002F, 0x02) # pseudo-swords rom.write_byte(0x18003F, 0x01) # hammer can harm ganon + elif world.swords[player] == 'bees': + rom.write_byte(0x18002F, 0x06) # bee mode + rom.initial_sram.set_swordless_curtains() # open curtains + rom.write_byte(0x180041, 0x02) # swordless medallions (always) + + # Arrghus puff fixes + rom.write_byte(0x0F399E, 0x00) + rom.write_byte(0x06B3E6, 0x0D) + + # Kholdstare shell fix + rom.write_byte(0x06B123, 0x00) + + # Sidenexx fix + rom.write_byte(0x18CE61, [0x00, 0x00]) + rom.write_byte(0x18CE69, [0x00, 0x00]) + + rom.write_byte(0x036D7F, 0xFF) # remove hammer usage + rom.write_byte(0x043DB4, 0xFF) # remove powder usage elif world.swords[player] == 'bombs': rom.write_byte(0x18002F, 0x01) # special bombs rom.initial_sram.set_swordless_curtains() # open curtains diff --git a/Rules.py b/Rules.py index 751be02d..20465130 100644 --- a/Rules.py +++ b/Rules.py @@ -970,7 +970,7 @@ def default_rules(world, player): set_rule(world.get_entrance('Bomber Corner Water Drop', player), lambda state: state.has('Flippers', player)) set_rule(world.get_entrance('Bomber Corner Waterfall Water Drop', player), lambda state: state.has('Flippers', player)) - if world.swords[player] == 'swordless': + if world.swords[player] in ['swordless', 'swordless_hammer', 'bees']: swordless_rules(world, player) if world.swords[player] == 'bombs': bomb_mode_rules(world, player) diff --git a/resources/app/cli/args.json b/resources/app/cli/args.json index 915e911c..bad25891 100644 --- a/resources/app/cli/args.json +++ b/resources/app/cli/args.json @@ -45,7 +45,9 @@ "byrna", "somaria", "cane", - "vanilla" + "vanilla", + "bees", + "swordless_hammer" ] }, "goal": {