mirror of
https://github.com/MarioSpore/Grinch-AP.git
synced 2025-10-21 20:21:32 -06:00
turn weapons into boolean swordless
This commit is contained in:
@@ -80,7 +80,7 @@ def KholdstareDefeatRule(state, player: int):
|
||||
state.has('Fire Rod', player) or
|
||||
(
|
||||
state.has('Bombos', player) and
|
||||
(state.has_sword(player) or state.world.swords[player] == 'swordless')
|
||||
(state.has_sword(player) or state.world.swordless[player])
|
||||
)
|
||||
) and
|
||||
(
|
||||
@@ -89,7 +89,7 @@ def KholdstareDefeatRule(state, player: int):
|
||||
(
|
||||
state.has('Fire Rod', player) and
|
||||
state.has('Bombos', player) and
|
||||
state.world.swords[player] == 'swordless' and
|
||||
state.world.swordless[player] and
|
||||
state.can_extend_magic(player, 16)
|
||||
)
|
||||
)
|
||||
@@ -113,7 +113,7 @@ def AgahnimDefeatRule(state, player: int):
|
||||
|
||||
|
||||
def GanonDefeatRule(state, player: int):
|
||||
if state.world.swords[player] == "swordless":
|
||||
if state.world.swordless[player]:
|
||||
return state.has('Hammer', player) and \
|
||||
state.has_fire_source(player) and \
|
||||
state.has('Silver Bow', player) and \
|
||||
|
||||
@@ -45,11 +45,9 @@ def parse_arguments(argv, no_defaults=False):
|
||||
Requires the moon pearl to be Link in the Light World
|
||||
instead of a bunny.
|
||||
''')
|
||||
parser.add_argument('--swords', default=defval('random'), const='random', nargs='?', choices= ['random', 'assured', 'swordless', 'vanilla'],
|
||||
parser.add_argument('--swordless', action='store_true',
|
||||
help='''\
|
||||
Select sword placement. (default: %(default)s)
|
||||
Random: All swords placed randomly.
|
||||
Assured: Start game with a sword already.
|
||||
Toggles Swordless Mode
|
||||
Swordless: No swords. Curtains in Skull Woods and Agahnim\'s
|
||||
Tower are removed, Agahnim\'s Tower barrier can be
|
||||
destroyed with hammer. Misery Mire and Turtle Rock
|
||||
@@ -57,7 +55,6 @@ def parse_arguments(argv, no_defaults=False):
|
||||
Ether and Bombos Tablet can be activated with Hammer
|
||||
(and Book). Bombos pads have been added in Ice
|
||||
Palace, to allow for an alternative to firerod.
|
||||
Vanilla: Swords are in vanilla locations.
|
||||
''')
|
||||
parser.add_argument('--goal', default=defval('ganon'), const='ganon', nargs='?',
|
||||
choices=['ganon', 'pedestal', 'bosses', 'triforcehunt', 'localtriforcehunt', 'ganontriforcehunt', 'localganontriforcehunt', 'crystals', 'ganonpedestal'],
|
||||
@@ -401,7 +398,7 @@ def parse_arguments(argv, no_defaults=False):
|
||||
for player in range(1, multiargs.multi + 1):
|
||||
playerargs = parse_arguments(shlex.split(getattr(ret, f"p{player}")), True)
|
||||
|
||||
for name in ['logic', 'mode', 'swords', 'goal', 'difficulty', 'item_functionality',
|
||||
for name in ['logic', 'mode', 'swordless', 'goal', 'difficulty', 'item_functionality',
|
||||
'shuffle', 'crystals_ganon', 'crystals_gt', 'open_pyramid', 'timer',
|
||||
'countdown_start_time', 'red_clock_time', 'blue_clock_time', 'green_clock_time',
|
||||
'mapshuffle', 'compassshuffle', 'keyshuffle', 'bigkeyshuffle', 'startinventory',
|
||||
|
||||
@@ -279,7 +279,7 @@ def generate_itempool(world, player: int):
|
||||
itempool.extend(itemdiff.bottles)
|
||||
itempool.extend(itemdiff.basicbow)
|
||||
itempool.extend(itemdiff.basicarmor)
|
||||
if world.swords[player] != 'swordless':
|
||||
if not world.swordless[player]:
|
||||
itempool.extend(itemdiff.basicsword)
|
||||
itempool.extend(itemdiff.basicmagic)
|
||||
itempool.extend(itemdiff.basicglove)
|
||||
@@ -335,7 +335,7 @@ def generate_itempool(world, player: int):
|
||||
possible_weapons = []
|
||||
for item in pool:
|
||||
if item in ['Progressive Sword', 'Fighter Sword', 'Master Sword', 'Tempered Sword', 'Golden Sword']:
|
||||
if not found_sword and world.swords[player] != 'swordless':
|
||||
if not found_sword:
|
||||
found_sword = True
|
||||
possible_weapons.append(item)
|
||||
if item in ['Progressive Bow', 'Bow'] and not found_bow:
|
||||
@@ -548,7 +548,7 @@ def get_pool_core(world, player: int):
|
||||
timer = world.timer[player]
|
||||
goal = world.goal[player]
|
||||
mode = world.mode[player]
|
||||
swords = world.swords[player]
|
||||
swordless = world.swordless[player]
|
||||
retro = world.retro[player]
|
||||
logic = world.logic[player]
|
||||
|
||||
@@ -619,7 +619,7 @@ def get_pool_core(world, player: int):
|
||||
|
||||
if want_progressives():
|
||||
pool.extend(diff.progressivebow)
|
||||
elif (swords == 'swordless' or logic == 'noglitches') and goal != 'icerodhunt':
|
||||
elif (swordless or logic == 'noglitches') and goal != 'icerodhunt':
|
||||
swordless_bows = ['Bow', 'Silver Bow']
|
||||
if difficulty == "easy":
|
||||
swordless_bows *= 2
|
||||
@@ -627,33 +627,11 @@ def get_pool_core(world, player: int):
|
||||
else:
|
||||
pool.extend(diff.basicbow)
|
||||
|
||||
if swords == 'swordless':
|
||||
if swordless:
|
||||
pool.extend(diff.swordless)
|
||||
elif swords == 'vanilla':
|
||||
swords_to_use = diff.progressivesword.copy() if want_progressives() else diff.basicsword.copy()
|
||||
world.random.shuffle(swords_to_use)
|
||||
|
||||
place_item('Link\'s Uncle', swords_to_use.pop())
|
||||
place_item('Blacksmith', swords_to_use.pop())
|
||||
place_item('Pyramid Fairy - Left', swords_to_use.pop())
|
||||
if goal != 'pedestal':
|
||||
place_item('Master Sword Pedestal', swords_to_use.pop())
|
||||
else:
|
||||
swords_to_use.pop()
|
||||
place_item('Master Sword Pedestal', 'Triforce')
|
||||
if swords_to_use:
|
||||
pool.extend(swords_to_use)
|
||||
else:
|
||||
progressive_swords = want_progressives()
|
||||
pool.extend(diff.progressivesword if progressive_swords else diff.basicsword)
|
||||
if swords == 'assured' and goal != 'icerodhunt':
|
||||
if progressive_swords:
|
||||
precollected_items.append('Progressive Sword')
|
||||
pool.remove('Progressive Sword')
|
||||
else:
|
||||
precollected_items.append('Fighter Sword')
|
||||
pool.remove('Fighter Sword')
|
||||
pool.extend(['Rupees (50)'])
|
||||
|
||||
extraitems = total_items_to_place - len(pool) - len(placed_items)
|
||||
|
||||
@@ -684,7 +662,7 @@ def get_pool_core(world, player: int):
|
||||
else:
|
||||
break
|
||||
|
||||
if goal == 'pedestal' and swords != 'vanilla':
|
||||
if goal == 'pedestal':
|
||||
place_item('Master Sword Pedestal', 'Triforce')
|
||||
pool.remove("Rupees (20)")
|
||||
|
||||
|
||||
@@ -961,7 +961,7 @@ def patch_rom(world, rom, player, team, enemized):
|
||||
|
||||
# Set overflow items for progressive equipment
|
||||
rom.write_bytes(0x180090,
|
||||
[difficulty.progressive_sword_limit if world.swords[player] != 'swordless' else 0,
|
||||
[difficulty.progressive_sword_limit if not world.swordless[player] else 0,
|
||||
overflow_replacement,
|
||||
difficulty.progressive_shield_limit, overflow_replacement,
|
||||
difficulty.progressive_armor_limit, overflow_replacement,
|
||||
@@ -971,7 +971,7 @@ def patch_rom(world, rom, player, team, enemized):
|
||||
rom.write_bytes(0x180098, [difficulty.progressive_bow_limit, overflow_replacement])
|
||||
|
||||
if difficulty.progressive_bow_limit < 2 and (
|
||||
world.swords[player] == 'swordless' or world.logic[player] == 'noglitches'):
|
||||
world.swordless[player] or world.logic[player] == 'noglitches'):
|
||||
rom.write_bytes(0x180098, [2, overflow_replacement])
|
||||
rom.write_byte(0x180181, 0x01) # Make silver arrows work only on ganon
|
||||
rom.write_byte(0x180182, 0x00) # Don't auto equip silvers on pickup
|
||||
@@ -1123,11 +1123,11 @@ def patch_rom(world, rom, player, team, enemized):
|
||||
rom.write_byte(0x180029, 0x01) # Smithy quick item give
|
||||
|
||||
# set swordless mode settings
|
||||
rom.write_byte(0x18003F, 0x01 if world.swords[player] == 'swordless' else 0x00) # hammer can harm ganon
|
||||
rom.write_byte(0x180040, 0x01 if world.swords[player] == 'swordless' else 0x00) # open curtains
|
||||
rom.write_byte(0x180041, 0x01 if world.swords[player] == 'swordless' else 0x00) # swordless medallions
|
||||
rom.write_byte(0x180043, 0xFF if world.swords[player] == 'swordless' else 0x00) # starting sword for link
|
||||
rom.write_byte(0x180044, 0x01 if world.swords[player] == 'swordless' else 0x00) # hammer activates tablets
|
||||
rom.write_byte(0x18003F, 0x01 if world.swordless[player] else 0x00) # hammer can harm ganon
|
||||
rom.write_byte(0x180040, 0x01 if world.swordless[player] else 0x00) # open curtains
|
||||
rom.write_byte(0x180041, 0x01 if world.swordless[player] else 0x00) # swordless medallions
|
||||
rom.write_byte(0x180043, 0xFF if world.swordless[player] else 0x00) # starting sword for link
|
||||
rom.write_byte(0x180044, 0x01 if world.swordless[player] else 0x00) # hammer activates tablets
|
||||
|
||||
if world.item_functionality[player] == 'easy':
|
||||
rom.write_byte(0x18003F, 0x01) # hammer can harm ganon
|
||||
@@ -2218,7 +2218,7 @@ def write_strings(rom, world, player, team):
|
||||
prog_bow_locs = world.find_items('Progressive Bow', player)
|
||||
distinguished_prog_bow_loc = next((location for location in prog_bow_locs if location.item.code == 0x65), None)
|
||||
progressive_silvers = world.difficulty_requirements[player].progressive_bow_limit >= 2 or (
|
||||
world.swords[player] == 'swordless' or world.logic[player] == 'noglitches')
|
||||
world.swordless[player] or world.logic[player] == 'noglitches')
|
||||
if distinguished_prog_bow_loc:
|
||||
prog_bow_locs.remove(distinguished_prog_bow_loc)
|
||||
silverarrow_hint = (' %s?' % hint_text(distinguished_prog_bow_loc).replace('Ganon\'s',
|
||||
|
||||
@@ -505,7 +505,7 @@ def default_rules(world, player):
|
||||
|
||||
set_rule(world.get_entrance('Pyramid Hole', player), lambda state: state.has('Beat Agahnim 2', player) or world.open_pyramid[player])
|
||||
|
||||
if world.swords[player] == 'swordless':
|
||||
if world.swordless[player]:
|
||||
swordless_rules(world, player)
|
||||
|
||||
|
||||
@@ -657,7 +657,7 @@ def inverted_rules(world, player):
|
||||
|
||||
set_rule(world.get_entrance('Inverted Pyramid Hole', player), lambda state: state.has('Beat Agahnim 2', player) or world.open_pyramid[player])
|
||||
|
||||
if world.swords[player] == 'swordless':
|
||||
if world.swordless[player]:
|
||||
swordless_rules(world, player)
|
||||
|
||||
def no_glitches_rules(world, player):
|
||||
|
||||
Reference in New Issue
Block a user