High difficulty updates

Should implement the myriad changes v29 will have to Hard+. This assumes silvers do not exist in Expert which is ambiguous.
This commit is contained in:
AmazingAmpharos 2018-03-14 13:30:11 -05:00 committed by GitHub
parent 4c33bf72ff
commit 7ebe4f9d93
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 56 additions and 40 deletions

View File

@ -10,15 +10,15 @@ from Dungeons import get_dungeon_item_pool
#Some basic items that various modes require are placed here, including pendants and crystals. Medallion requirements for the two relevant entrances are also decided. #Some basic items that various modes require are placed here, including pendants and crystals. Medallion requirements for the two relevant entrances are also decided.
alwaysitems = ['Bombos', 'Book of Mudora', 'Bow', 'Cane of Somaria', 'Ether', 'Fire Rod', 'Flippers', 'Ocarina', 'Hammer', 'Hookshot', 'Ice Rod', 'Lamp', alwaysitems = ['Bombos', 'Book of Mudora', 'Bow', 'Cane of Somaria', 'Ether', 'Fire Rod', 'Flippers', 'Ocarina', 'Hammer', 'Hookshot', 'Ice Rod', 'Lamp',
'Cape', 'Magic Powder', 'Mushroom', 'Pegasus Boots', 'Quake', 'Shovel', 'Bug Catching Net', 'Cane of Byrna'] 'Cape', 'Magic Powder', 'Mushroom', 'Pegasus Boots', 'Quake', 'Shovel', 'Bug Catching Net', 'Cane of Byrna', 'Blue Boomerang', 'Red Boomerang']
progressivegloves = ['Progressive Glove'] * 2 progressivegloves = ['Progressive Glove'] * 2
basicgloves = ['Power Glove', 'Titans Mitts'] basicgloves = ['Power Glove', 'Titans Mitts']
normalbottles = ['Bottle', 'Bottle (Red Potion)', 'Bottle (Green Potion)', 'Bottle (Blue Potion)', 'Bottle (Fairy)', 'Bottle (Bee)', 'Bottle (Good Bee)'] normalbottles = ['Bottle', 'Bottle (Red Potion)', 'Bottle (Green Potion)', 'Bottle (Blue Potion)', 'Bottle (Fairy)', 'Bottle (Bee)', 'Bottle (Good Bee)']
hardbottles = ['Bottle', 'Bottle (Red Potion)', 'Bottle (Green Potion)', 'Bottle (Blue Potion)', 'Bottle (Bee)', 'Bottle (Good Bee)'] hardbottles = ['Bottle', 'Bottle (Red Potion)', 'Bottle (Green Potion)', 'Bottle (Blue Potion)', 'Bottle (Bee)', 'Bottle (Good Bee)']
normalbaseitems = (['Blue Boomerang', 'Red Boomerang', 'Silver Arrows', 'Magic Upgrade (1/2)'] + ['Rupees (300)'] * 4 + normalbaseitems = (['Silver Arrows', 'Magic Upgrade (1/2)', 'Single Arrow', 'Sanctuary Heart Container', 'Arrow Upgrade (+10)', 'Bomb Upgrade (+10)'] +
['Single Arrow', 'Sanctuary Heart Container', 'Arrow Upgrade (+10)', 'Bomb Upgrade (+10)'] + ['Boss Heart Container'] * 10 + ['Piece of Heart'] * 24) ['Rupees (300)'] * 4 + ['Boss Heart Container'] * 10 + ['Piece of Heart'] * 24)
normalfirst15extra = ['Rupees (100)', 'Rupees (300)', 'Rupees (50)'] + ['Arrow Upgrade (+5)'] * 6 + ['Bomb Upgrade (+5)'] * 6 normalfirst15extra = ['Rupees (100)', 'Rupees (300)', 'Rupees (50)'] + ['Arrow Upgrade (+5)'] * 6 + ['Bomb Upgrade (+5)'] * 6
normalsecond15extra = ['Bombs (3)'] * 10 + ['Rupees (50)'] * 2 + ['Arrows (10)'] * 2 + ['Rupee (1)'] normalsecond15extra = ['Bombs (3)'] * 10 + ['Rupees (50)'] * 2 + ['Arrows (10)'] * 2 + ['Rupee (1)']
normalthird10extra = ['Rupees (50)'] * 4 + ['Rupees (20)'] * 3 + ['Arrows (10)', 'Rupee (1)', 'Rupees (5)'] normalthird10extra = ['Rupees (50)'] * 4 + ['Rupees (20)'] * 3 + ['Arrows (10)', 'Rupee (1)', 'Rupees (5)']
@ -26,8 +26,8 @@ normalfourth5extra = ['Arrows (10)'] * 2 + ['Rupees (20)'] * 2 + ['Rupees (5)']
normalfinal25extra = ['Rupees (20)'] * 23 + ['Rupees (5)'] * 2 normalfinal25extra = ['Rupees (20)'] * 23 + ['Rupees (5)'] * 2
easybaseitems = (['Blue Boomerang', 'Red Boomerang', 'Sanctuary Heart Container'] + ['Rupees (300)'] * 4 + ['Magic Upgrade (1/2)'] * 2 + ['Lamp'] * 2 + easybaseitems = (['Sanctuary Heart Container'] + ['Rupees (300)'] * 4 + ['Magic Upgrade (1/2)'] * 2 + ['Lamp'] * 2 + ['Silver Arrows'] * 2 +
['Silver Arrows'] * 2 + ['Boss Heart Container'] * 10 + ['Piece of Heart'] * 12) ['Boss Heart Container'] * 10 + ['Piece of Heart'] * 12)
easyextra = ['Piece of Heart'] * 12 + ['Rupees (300)'] easyextra = ['Piece of Heart'] * 12 + ['Rupees (300)']
easylimitedextra = ['Boss Heart Container'] * 3 # collapsing down the 12 pieces of heart easylimitedextra = ['Boss Heart Container'] * 3 # collapsing down the 12 pieces of heart
easyfirst15extra = ['Rupees (100)', 'Arrow Upgrade (+10)', 'Bomb Upgrade (+10)'] + ['Arrow Upgrade (+5)'] * 6 + ['Bomb Upgrade (+5)'] * 6 easyfirst15extra = ['Rupees (100)', 'Arrow Upgrade (+10)', 'Bomb Upgrade (+10)'] + ['Arrow Upgrade (+5)'] * 6 + ['Bomb Upgrade (+5)'] * 6
@ -36,29 +36,27 @@ easythird5extra = ['Rupees (50)'] * 2 + ['Bombs (3)'] * 2 + ['Arrows (10)']
easyfinal25extra = ['Rupees (50)'] * 4 + ['Rupees (20)'] * 14 + ['Rupee (1)'] + ['Arrows (10)'] * 4 + ['Rupees (5)'] * 2 easyfinal25extra = ['Rupees (50)'] * 4 + ['Rupees (20)'] * 14 + ['Rupee (1)'] + ['Arrows (10)'] * 4 + ['Rupees (5)'] * 2
easytimedotherextra = ['Red Clock'] * 5 easytimedotherextra = ['Red Clock'] * 5
hardbaseitems = (['Silver Arrows', 'Single Arrow', 'Single Bomb'] + ['Rupees (300)'] + ['Rupees (100)'] * 3 + ['Rupees (50)'] * 5 + ['Bombs (3)'] * 5 + hardbaseitems = ['Silver Arrows', 'Single Arrow'] + ['Rupees (300)'] * 4 + ['Boss Heart Container'] * 6 + ['Piece of Heart'] * 20 + ['Rupees (5)'] * 7 + ['Bombs (3)'] * 5
['Boss Heart Container'] * 5 + ['Piece of Heart'] * 24) hardfirst20extra = ['Rupees (100)', 'Rupees (300)', 'Rupees (50)'] + ['Bombs (3)'] * 5 + ['Rupees (5)'] * 10 + ['Arrows (10)', 'Rupee (1)']
hardfirst20extra = ['Single Bomb'] * 7 + ['Rupees (5)'] * 8 + ['Rupee (1)'] * 2 + ['Rupees (20)'] * 2 + ['Arrows (10)'] hardsecond10extra = ['Rupees (5)'] * 5 + ['Rupees (50)'] * 2 + ['Arrows (10)'] * 2 + ['Rupee (1)']
hardsecond10extra = ['Rupees (5)'] * 7 + ['Rupee (1)'] * 3 hardthird10extra = ['Rupees (50)'] * 4 + ['Rupees (20)'] * 3 + ['Rupees (5)'] * 3
hardthird10extra = ['Arrows (10)'] * 4 + ['Rupees (20)'] * 3 + ['Single Bomb'] * 3 hardfourth10extra = ['Arrows (10)'] * 2 + ['Rupees (20)'] * 7 + ['Rupees (5)']
hardfourth10extra = ['Rupees (5)'] * 3 + ['Single Arrow'] * 5 + ['Single Bomb'] * 2 hardfinal20extra = ['Rupees (20)'] * 18 + ['Rupees (5)'] * 2
hardfinal20extra = ['Single Bomb'] * 4 + ['Rupees (5)'] * 2 + ['Single Arrow'] * 14
expertbaseitems = (['Single Arrow', 'Rupees (300)', 'Rupees (100)', 'Bombs (3)', 'Arrows (10)'] + ['Rupees (50)'] * 4 + ['Rupees (5)'] * 5 + expertbaseitems = (['Rupees (300)'] * 4 + ['Single Arrow', 'Boss Heart Container', 'Rupee (1)'] + ['Piece of Heart'] * 20 + ['Rupees (5)'] * 3 +
['Rupees (20)'] * 3 + ['Single Bomb'] * 10 + ['Piece of Heart'] * 24) ['Bombs (3)'] * 10 + ['Rupees (50)'] * 2 + ['Arrows (10)'] * 2 + ['Rupees (20)'] * 2)
expertfirst15extra = ['Single Bomb'] * 7 + ['Rupees (20)'] * 3 + ['Single Arrow'] * 5 expertfirst15extra = ['Rupees (100)', 'Rupees (300)', 'Rupees (50)'] + ['Rupees (5)'] * 12
expertsecond15extra = ['Single Bomb'] * 6 + ['Single Arrow'] * 4 + ['Rupee (1)'] * 5 expertsecond15extra = ['Rupees (5)'] * 10 + ['Rupees (20)'] * 5
expertthird10extra = ['Rupees (5)'] * 3 + ['Single Bomb'] * 3 + ['Rupees (20)'] * 2 + ['Single Arrow'] * 2 expertthird10extra = ['Rupees (50)'] * 4 + ['Rupees (5)'] * 2 + ['Arrows (10)'] * 3 + ['Rupee (1)']
expertfourth5extra = ['Rupees (5)'] * 2 + ['Single Arrow'] * 3 expertfourth5extra = ['Rupees (5)'] * 5
expertfinal25extra = ['Single Bomb'] * 4 + ['Rupees (20)'] * 3 + ['Single Arrow'] * 18 expertfinal25extra = ['Rupees (20)'] * 23 + ['Rupees (5)'] * 2
insanebaseitems = (['Bombs (3)', 'Arrows (10)'] + ['Rupees (50)'] * 4 + ['Rupees (5)'] * 10 + ['Rupees (300)'] * 5 + ['Rupees (100)'] * 4 + insanebaseitems = ['Rupees (300)'] * 4 + ['Single Arrow'] + ['Rupees (5)'] * 24 + ['Bombs (3)'] * 10 + ['Rupees (50)'] * 2 + ['Arrows (10)'] * 2 + ['Rupee (1)'] + ['Rupees (20)'] * 5
['Rupee (1)'] * 8 + ['Rupees (20)'] * 4 + ['Single Bomb'] * 8 + ['Single Arrow'] * 6) insanefirst15extra = ['Rupees (100)', 'Rupees (300)', 'Rupees (50)'] + ['Rupees (5)'] * 12
insanefirst15extra = ['Single Bomb'] * 5 + ['Single Arrow'] * 4 + ['Rupee (1)'] * 5 + ['Rupees (20)'] insanesecond15extra = ['Rupees (5)'] * 10 + ['Rupees (20)'] * 5
insanesecond15extra = ['Single Bomb'] * 5 + ['Single Arrow'] * 5 + ['Rupee (1)'] * 5 insanethird10extra = ['Rupees (50)'] * 4 + ['Rupees (5)'] * 2 + ['Arrows (10)'] * 3 + ['Rupee (1)']
insanethird10extra = ['Single Bomb'] * 4 + ['Single Arrow'] * 3 + ['Rupee (1)'] * 3 insanefourth5extra = ['Rupees (5)'] * 5
insanefourth5extra = ['Single Bomb'] + ['Single Arrow'] * 2 + ['Rupee (1)'] * 2 insanefinal25extra = ['Rupees (20)'] * 23 + ['Rupees (5)'] * 2
insanefinal25extra = ['Single Bomb'] * 2 + ['Single Arrow'] * 10 + ['Rupee (1)'] * 7 + ['Rupees (20)'] * 6
Difficulty = namedtuple('Difficulty', Difficulty = namedtuple('Difficulty',
['baseitems', 'bottles', 'bottle_count', 'same_bottle', 'progressiveshield', ['baseitems', 'bottles', 'bottle_count', 'same_bottle', 'progressiveshield',
@ -150,15 +148,15 @@ difficulties = {
progressive_sword_limit = 3, progressive_sword_limit = 3,
progressive_shield_limit = 2, progressive_shield_limit = 2,
progressive_armor_limit = 1, progressive_armor_limit = 1,
progressive_bottle_limit = 2, progressive_bottle_limit = 4,
), ),
'expert': Difficulty( 'expert': Difficulty(
baseitems = expertbaseitems, baseitems = expertbaseitems,
bottles = hardbottles, bottles = hardbottles,
bottle_count = 4, bottle_count = 4,
same_bottle = True, same_bottle = False,
progressiveshield = [], progressiveshield = ['Progressive Shield'] * 3,
basicshield = [], basicshield = ['Progressive Shield'] * 3, #only the first one will upgrade, making this equivalent to two blue shields
progressivearmor = [], progressivearmor = [],
basicarmor = [], basicarmor = [],
swordless = ['Rupees (20)'] * 3 + ['Silver Arrows'], swordless = ['Rupees (20)'] * 3 + ['Silver Arrows'],
@ -171,15 +169,15 @@ difficulties = {
conditional_extras = no_conditonal_extras, conditional_extras = no_conditonal_extras,
extras = [expertfirst15extra, expertsecond15extra, expertthird10extra, expertfourth5extra, expertfinal25extra], extras = [expertfirst15extra, expertsecond15extra, expertthird10extra, expertfourth5extra, expertfinal25extra],
progressive_sword_limit = 2, progressive_sword_limit = 2,
progressive_shield_limit = 0, progressive_shield_limit = 1,
progressive_armor_limit = 0, progressive_armor_limit = 0,
progressive_bottle_limit = 1, progressive_bottle_limit = 4,
), ),
'insane': Difficulty( 'insane': Difficulty(
baseitems = insanebaseitems, baseitems = insanebaseitems,
bottles = hardbottles, bottles = hardbottles,
bottle_count = 4, bottle_count = 4,
same_bottle = True, same_bottle = False,
progressiveshield = [], progressiveshield = [],
basicshield = [], basicshield = [],
progressivearmor = [], progressivearmor = [],
@ -196,7 +194,7 @@ difficulties = {
progressive_sword_limit = 2, progressive_sword_limit = 2,
progressive_shield_limit = 0, progressive_shield_limit = 0,
progressive_armor_limit = 0, progressive_armor_limit = 0,
progressive_bottle_limit = 1, progressive_bottle_limit = 4,
), ),
} }

30
Rom.py
View File

@ -411,7 +411,7 @@ def patch_rom(world, rom, hashtable, beep='normal', color='red', sprite=None):
# Powdered Fairies Prize # Powdered Fairies Prize
rom.write_byte(0x36DD0, 0xD8) # One Heart rom.write_byte(0x36DD0, 0xD8) # One Heart
# potion heal amount # potion heal amount
rom.write_byte(0x180084, 0x28) # Five Hearts rom.write_byte(0x180084, 0x38) # Seven Hearts
# potion magic restore amount # potion magic restore amount
rom.write_byte(0x180085, 0x40) # Half Magic rom.write_byte(0x180085, 0x40) # Half Magic
#Cape magic cost #Cape magic cost
@ -423,6 +423,10 @@ def patch_rom(world, rom, hashtable, beep='normal', color='red', sprite=None):
overflow_replacement = GREEN_TWENTY_RUPEES overflow_replacement = GREEN_TWENTY_RUPEES
# Rupoor negative value # Rupoor negative value
rom.write_int16_to_rom(0x180036, world.rupoor_cost) rom.write_int16_to_rom(0x180036, world.rupoor_cost)
# Set stun items
rom.write_byte(0x180180, 0x01) # Hookshot only
# Make silver arrows only usable against Ganon
rom.write_byte(0x180181, 0x01)
#Make Blue Shield more expensive #Make Blue Shield more expensive
rom.write_bytes(0xF73D2, [0xFC, 0xFF]) rom.write_bytes(0xF73D2, [0xFC, 0xFF])
rom.write_bytes(0xF73DA, [0x04, 0x00]) rom.write_bytes(0xF73DA, [0x04, 0x00])
@ -443,20 +447,24 @@ def patch_rom(world, rom, hashtable, beep='normal', color='red', sprite=None):
rom.write_byte(0xF723F, 0xE7) rom.write_byte(0xF723F, 0xE7)
elif world.difficulty == 'expert': elif world.difficulty == 'expert':
# Powdered Fairies Prize # Powdered Fairies Prize
rom.write_byte(0x36DD0, 0x79) # Bees rom.write_byte(0x36DD0, 0xD8) # One Heart
# potion heal amount # potion heal amount
rom.write_byte(0x180084, 0x08) # One Heart rom.write_byte(0x180084, 0x08) # One Heart
# potion magic restore amount # potion magic restore amount
rom.write_byte(0x180085, 0x20) # Quarter Magic rom.write_byte(0x180085, 0x20) # Quarter Magic
#Cape magic cost #Cape magic cost
rom.write_bytes(0x3ADA7, [0x02, 0x02, 0x02]) rom.write_bytes(0x3ADA7, [0x01, 0x01, 0x01])
# Byrna Invulnerability: off # Byrna Invulnerability: off
rom.write_byte(0x18004F, 0x00) rom.write_byte(0x18004F, 0x00)
#Disable catching fairies #Disable catching fairies
rom.write_byte(0x34FD6, 0x80) rom.write_byte(0x34FD6, 0x80)
overflow_replacement = GREEN_TWENTY_RUPEES overflow_replacement = GREEN_TWENTY_RUPEES
# Rupoor negative value # Rupoor negative value
rom.write_int16_to_rom(0x180036, 20) rom.write_int16_to_rom(0x180036, world.rupoor_cost)
# Set stun items
rom.write_byte(0x180180, 0x00) # Nothing
# Make silver arrows only usable against Ganon
rom.write_byte(0x180181, 0x01)
#Make Blue Shield more expensive #Make Blue Shield more expensive
rom.write_bytes(0xF73D2, [0xFC, 0xFF]) rom.write_bytes(0xF73D2, [0xFC, 0xFF])
rom.write_bytes(0xF73DA, [0x04, 0x00]) rom.write_bytes(0xF73DA, [0x04, 0x00])
@ -483,14 +491,18 @@ def patch_rom(world, rom, hashtable, beep='normal', color='red', sprite=None):
# potion magic restore amount # potion magic restore amount
rom.write_byte(0x180085, 0x00) # No healing rom.write_byte(0x180085, 0x00) # No healing
#Cape magic cost #Cape magic cost
rom.write_bytes(0x3ADA7, [0x02, 0x02, 0x02]) rom.write_bytes(0x3ADA7, [0x01, 0x01, 0x01])
# Byrna Invulnerability: off # Byrna Invulnerability: off
rom.write_byte(0x18004F, 0x00) rom.write_byte(0x18004F, 0x00)
#Disable catching fairies #Disable catching fairies
rom.write_byte(0x34FD6, 0x80) rom.write_byte(0x34FD6, 0x80)
overflow_replacement = GREEN_TWENTY_RUPEES overflow_replacement = GREEN_TWENTY_RUPEES
# Rupoor negative value # Rupoor negative value
rom.write_int16_to_rom(0x180036, 9999) rom.write_int16_to_rom(0x180036, world.rupoor_cost)
# Set stun items
rom.write_byte(0x180180, 0x00) # Nothing
# Make silver arrows only usable against Ganon
rom.write_byte(0x180181, 0x01)
#Make Blue Shield more expensive #Make Blue Shield more expensive
rom.write_bytes(0xF73D2, [0xFC, 0xFF]) rom.write_bytes(0xF73D2, [0xFC, 0xFF])
rom.write_bytes(0xF73DA, [0x04, 0x00]) rom.write_bytes(0xF73DA, [0x04, 0x00])
@ -522,6 +534,12 @@ def patch_rom(world, rom, hashtable, beep='normal', color='red', sprite=None):
rom.write_byte(0x18004F, 0x01) rom.write_byte(0x18004F, 0x01)
#Enable catching fairies #Enable catching fairies
rom.write_byte(0x34FD6, 0xF0) rom.write_byte(0x34FD6, 0xF0)
# Rupoor negative value
rom.write_int16_to_rom(0x180036, world.rupoor_cost)
# Set stun items
rom.write_byte(0x180180, 0x03) # All standard items
# Make silver arrows freely usable
rom.write_byte(0x180181, 0x00)
#Set overflow items for progressive equipment #Set overflow items for progressive equipment
if world.goal == 'triforcehunt': if world.goal == 'triforcehunt':
overflow_replacement = TRIFORCE_PIECE overflow_replacement = TRIFORCE_PIECE