mirror of
https://github.com/MarioSpore/Grinch-AP.git
synced 2025-10-21 20:21:32 -06:00
Ocarina of Time 7.0 (#1277)
## What is this fixing or adding? - Adds the majority of OoTR 7.0 features: - Pot shuffle, Freestanding item shuffle, Crate shuffle, Beehive shuffle - Key rings mode - Dungeon shortcuts to speed up dungeons - "Regional" shuffle for dungeon items - New options for shop pricing in shopsanity - Expanded Ganon's Boss Key shuffle options - Pre-planted beans - Improved Chest Appearance Matches Contents mode - Blue Fire Arrows - Bonk self-damage - Finer control over MQ dungeons and spawn position randomization - Several bugfixes as a result of the update: - Items recognized by the server and valid starting items are now in a 1-to-1 correspondence. In particular, starting with keys is now supported. - Entrance randomization success rate improved. Hopefully it is now at 100%. Co-authored-by: Zach Parks <zach@alliware.com>
This commit is contained in:
@@ -64,37 +64,37 @@ class OOTItem(Item):
|
||||
# None -> Normal
|
||||
# Item: (type, Progressive, GetItemID, special),
|
||||
item_table = {
|
||||
'Bombs (5)': ('Item', None, 0x01, None),
|
||||
'Deku Nuts (5)': ('Item', None, 0x02, None),
|
||||
'Bombs (5)': ('Item', None, 0x01, {'junk': 8}),
|
||||
'Deku Nuts (5)': ('Item', None, 0x02, {'junk': 5}),
|
||||
'Bombchus (10)': ('Item', True, 0x03, None),
|
||||
'Boomerang': ('Item', True, 0x06, None),
|
||||
'Deku Stick (1)': ('Item', None, 0x07, None),
|
||||
'Deku Stick (1)': ('Item', None, 0x07, {'junk': 5}),
|
||||
'Lens of Truth': ('Item', True, 0x0A, None),
|
||||
'Megaton Hammer': ('Item', True, 0x0D, None),
|
||||
'Cojiro': ('Item', True, 0x0E, None),
|
||||
'Cojiro': ('Item', True, 0x0E, {'trade': True}),
|
||||
'Bottle': ('Item', True, 0x0F, {'bottle': float('Inf')}),
|
||||
'Bottle with Milk': ('Item', True, 0x14, {'bottle': float('Inf')}),
|
||||
'Rutos Letter': ('Item', True, 0x15, None),
|
||||
'Deliver Letter': ('Item', True, None, {'bottle': float('Inf')}),
|
||||
'Sell Big Poe': ('Item', True, None, {'bottle': float('Inf')}),
|
||||
'Magic Bean': ('Item', True, 0x16, None),
|
||||
'Skull Mask': ('Item', True, 0x17, None),
|
||||
'Spooky Mask': ('Item', None, 0x18, None),
|
||||
'Keaton Mask': ('Item', None, 0x1A, None),
|
||||
'Bunny Hood': ('Item', None, 0x1B, None),
|
||||
'Mask of Truth': ('Item', True, 0x1C, None),
|
||||
'Pocket Egg': ('Item', True, 0x1D, None),
|
||||
'Pocket Cucco': ('Item', True, 0x1E, None),
|
||||
'Odd Mushroom': ('Item', True, 0x1F, None),
|
||||
'Odd Potion': ('Item', True, 0x20, None),
|
||||
'Poachers Saw': ('Item', True, 0x21, None),
|
||||
'Broken Sword': ('Item', True, 0x22, None),
|
||||
'Prescription': ('Item', True, 0x23, None),
|
||||
'Eyeball Frog': ('Item', True, 0x24, None),
|
||||
'Eyedrops': ('Item', True, 0x25, None),
|
||||
'Claim Check': ('Item', True, 0x26, None),
|
||||
'Magic Bean': ('Item', True, 0x16, {'progressive': 10}),
|
||||
'Skull Mask': ('Item', True, 0x17, {'trade': True}),
|
||||
'Spooky Mask': ('Item', None, 0x18, {'trade': True}),
|
||||
'Keaton Mask': ('Item', None, 0x1A, {'trade': True}),
|
||||
'Bunny Hood': ('Item', None, 0x1B, {'trade': True}),
|
||||
'Mask of Truth': ('Item', True, 0x1C, {'trade': True}),
|
||||
'Pocket Egg': ('Item', True, 0x1D, {'trade': True}),
|
||||
'Pocket Cucco': ('Item', True, 0x1E, {'trade': True}),
|
||||
'Odd Mushroom': ('Item', True, 0x1F, {'trade': True}),
|
||||
'Odd Potion': ('Item', True, 0x20, {'trade': True}),
|
||||
'Poachers Saw': ('Item', True, 0x21, {'trade': True}),
|
||||
'Broken Sword': ('Item', True, 0x22, {'trade': True}),
|
||||
'Prescription': ('Item', True, 0x23, {'trade': True}),
|
||||
'Eyeball Frog': ('Item', True, 0x24, {'trade': True}),
|
||||
'Eyedrops': ('Item', True, 0x25, {'trade': True}),
|
||||
'Claim Check': ('Item', True, 0x26, {'trade': True}),
|
||||
'Kokiri Sword': ('Item', True, 0x27, None),
|
||||
'Giants Knife': ('Item', True, 0x28, None),
|
||||
'Giants Knife': ('Item', None, 0x28, None),
|
||||
'Deku Shield': ('Item', None, 0x29, None),
|
||||
'Hylian Shield': ('Item', None, 0x2A, None),
|
||||
'Mirror Shield': ('Item', True, 0x2B, None),
|
||||
@@ -104,28 +104,27 @@ item_table = {
|
||||
'Hover Boots': ('Item', True, 0x2F, None),
|
||||
'Stone of Agony': ('Item', True, 0x39, None),
|
||||
'Gerudo Membership Card': ('Item', True, 0x3A, None),
|
||||
'Heart Container': ('Item', None, 0x3D, None),
|
||||
'Piece of Heart': ('Item', None, 0x3E, None),
|
||||
'Heart Container': ('Item', True, 0x3D, {'alias': ('Piece of Heart', 4), 'progressive': float('Inf')}),
|
||||
'Piece of Heart': ('Item', True, 0x3E, {'progressive': float('Inf')}),
|
||||
'Boss Key': ('BossKey', True, 0x3F, None),
|
||||
'Compass': ('Compass', None, 0x40, None),
|
||||
'Map': ('Map', None, 0x41, None),
|
||||
'Small Key': ('SmallKey', True, 0x42, {'progressive': float('Inf')}),
|
||||
'Weird Egg': ('Item', True, 0x47, None),
|
||||
'Recovery Heart': ('Item', None, 0x48, None),
|
||||
'Arrows (5)': ('Item', None, 0x49, None),
|
||||
'Arrows (10)': ('Item', None, 0x4A, None),
|
||||
'Arrows (30)': ('Item', None, 0x4B, None),
|
||||
'Rupee (1)': ('Item', None, 0x4C, None),
|
||||
'Rupees (5)': ('Item', None, 0x4D, None),
|
||||
'Rupees (20)': ('Item', None, 0x4E, None),
|
||||
'Heart Container (Boss)': ('Item', None, 0x4F, None),
|
||||
'Weird Egg': ('Item', True, 0x47, {'trade': True}),
|
||||
'Recovery Heart': ('Item', None, 0x48, {'junk': 0}),
|
||||
'Arrows (5)': ('Item', None, 0x49, {'junk': 8}),
|
||||
'Arrows (10)': ('Item', None, 0x4A, {'junk': 2}),
|
||||
'Arrows (30)': ('Item', None, 0x4B, {'junk': 0}),
|
||||
'Rupee (1)': ('Item', None, 0x4C, {'junk': -1}),
|
||||
'Rupees (5)': ('Item', None, 0x4D, {'junk': 10}),
|
||||
'Rupees (20)': ('Item', None, 0x4E, {'junk': 4}),
|
||||
'Milk': ('Item', None, 0x50, None),
|
||||
'Goron Mask': ('Item', None, 0x51, None),
|
||||
'Zora Mask': ('Item', None, 0x52, None),
|
||||
'Gerudo Mask': ('Item', None, 0x53, None),
|
||||
'Rupees (50)': ('Item', None, 0x55, None),
|
||||
'Rupees (200)': ('Item', None, 0x56, None),
|
||||
'Biggoron Sword': ('Item', True, 0x57, None),
|
||||
'Rupees (50)': ('Item', None, 0x55, {'junk': 1}),
|
||||
'Rupees (200)': ('Item', None, 0x56, {'junk': 0}),
|
||||
'Biggoron Sword': ('Item', None, 0x57, None),
|
||||
'Fire Arrows': ('Item', True, 0x58, None),
|
||||
'Ice Arrows': ('Item', True, 0x59, None),
|
||||
'Light Arrows': ('Item', True, 0x5A, None),
|
||||
@@ -133,15 +132,15 @@ item_table = {
|
||||
'Dins Fire': ('Item', True, 0x5C, None),
|
||||
'Nayrus Love': ('Item', True, 0x5E, None),
|
||||
'Farores Wind': ('Item', True, 0x5D, None),
|
||||
'Deku Nuts (10)': ('Item', None, 0x64, None),
|
||||
'Bombs (10)': ('Item', None, 0x66, None),
|
||||
'Bombs (20)': ('Item', None, 0x67, None),
|
||||
'Deku Seeds (30)': ('Item', None, 0x69, None),
|
||||
'Deku Nuts (10)': ('Item', None, 0x64, {'junk': 0}),
|
||||
'Bombs (10)': ('Item', None, 0x66, {'junk': 2}),
|
||||
'Bombs (20)': ('Item', None, 0x67, {'junk': 0}),
|
||||
'Deku Seeds (30)': ('Item', None, 0x69, {'junk': 5}),
|
||||
'Bombchus (5)': ('Item', True, 0x6A, None),
|
||||
'Bombchus (20)': ('Item', True, 0x6B, None),
|
||||
'Rupee (Treasure Chest Game)': ('Item', None, 0x72, None),
|
||||
'Piece of Heart (Treasure Chest Game)': ('Item', None, 0x76, None),
|
||||
'Ice Trap': ('Item', None, 0x7C, None),
|
||||
'Piece of Heart (Treasure Chest Game)': ('Item', True, 0x76, {'alias': ('Piece of Heart', 1), 'progressive': float('Inf')}),
|
||||
'Ice Trap': ('Item', None, 0x7C, {'junk': 0}),
|
||||
'Progressive Hookshot': ('Item', True, 0x80, {'progressive': 2}),
|
||||
'Progressive Strength Upgrade': ('Item', True, 0x81, {'progressive': 3}),
|
||||
'Bomb Bag': ('Item', True, 0x82, None),
|
||||
@@ -168,40 +167,41 @@ item_table = {
|
||||
'Boss Key (Water Temple)': ('BossKey', True, 0x97, None),
|
||||
'Boss Key (Spirit Temple)': ('BossKey', True, 0x98, None),
|
||||
'Boss Key (Shadow Temple)': ('BossKey', True, 0x99, None),
|
||||
'Boss Key (Ganons Castle)': ('GanonBossKey',True,0x9A,None),
|
||||
'Compass (Deku Tree)': ('Compass', None, 0x9B, None),
|
||||
'Compass (Dodongos Cavern)': ('Compass', None, 0x9C, None),
|
||||
'Compass (Jabu Jabus Belly)': ('Compass', None, 0x9D, None),
|
||||
'Compass (Forest Temple)': ('Compass', None, 0x9E, None),
|
||||
'Compass (Fire Temple)': ('Compass', None, 0x9F, None),
|
||||
'Compass (Water Temple)': ('Compass', None, 0xA0, None),
|
||||
'Compass (Spirit Temple)': ('Compass', None, 0xA1, None),
|
||||
'Compass (Shadow Temple)': ('Compass', None, 0xA2, None),
|
||||
'Compass (Bottom of the Well)': ('Compass', None, 0xA3, None),
|
||||
'Compass (Ice Cavern)': ('Compass', None, 0xA4, None),
|
||||
'Map (Deku Tree)': ('Map', None, 0xA5, None),
|
||||
'Map (Dodongos Cavern)': ('Map', None, 0xA6, None),
|
||||
'Map (Jabu Jabus Belly)': ('Map', None, 0xA7, None),
|
||||
'Map (Forest Temple)': ('Map', None, 0xA8, None),
|
||||
'Map (Fire Temple)': ('Map', None, 0xA9, None),
|
||||
'Map (Water Temple)': ('Map', None, 0xAA, None),
|
||||
'Map (Spirit Temple)': ('Map', None, 0xAB, None),
|
||||
'Map (Shadow Temple)': ('Map', None, 0xAC, None),
|
||||
'Map (Bottom of the Well)': ('Map', None, 0xAD, None),
|
||||
'Map (Ice Cavern)': ('Map', None, 0xAE, None),
|
||||
'Boss Key (Ganons Castle)': ('GanonBossKey', True, 0x9A, None),
|
||||
'Compass (Deku Tree)': ('Compass', False, 0x9B, None),
|
||||
'Compass (Dodongos Cavern)': ('Compass', False, 0x9C, None),
|
||||
'Compass (Jabu Jabus Belly)': ('Compass', False, 0x9D, None),
|
||||
'Compass (Forest Temple)': ('Compass', False, 0x9E, None),
|
||||
'Compass (Fire Temple)': ('Compass', False, 0x9F, None),
|
||||
'Compass (Water Temple)': ('Compass', False, 0xA0, None),
|
||||
'Compass (Spirit Temple)': ('Compass', False, 0xA1, None),
|
||||
'Compass (Shadow Temple)': ('Compass', False, 0xA2, None),
|
||||
'Compass (Bottom of the Well)': ('Compass', False, 0xA3, None),
|
||||
'Compass (Ice Cavern)': ('Compass', False, 0xA4, None),
|
||||
'Map (Deku Tree)': ('Map', False, 0xA5, None),
|
||||
'Map (Dodongos Cavern)': ('Map', False, 0xA6, None),
|
||||
'Map (Jabu Jabus Belly)': ('Map', False, 0xA7, None),
|
||||
'Map (Forest Temple)': ('Map', False, 0xA8, None),
|
||||
'Map (Fire Temple)': ('Map', False, 0xA9, None),
|
||||
'Map (Water Temple)': ('Map', False, 0xAA, None),
|
||||
'Map (Spirit Temple)': ('Map', False, 0xAB, None),
|
||||
'Map (Shadow Temple)': ('Map', False, 0xAC, None),
|
||||
'Map (Bottom of the Well)': ('Map', False, 0xAD, None),
|
||||
'Map (Ice Cavern)': ('Map', False, 0xAE, None),
|
||||
'Small Key (Forest Temple)': ('SmallKey', True, 0xAF, {'progressive': float('Inf')}),
|
||||
'Small Key (Fire Temple)': ('SmallKey', True, 0xB0, {'progressive': float('Inf')}),
|
||||
'Small Key (Water Temple)': ('SmallKey', True, 0xB1, {'progressive': float('Inf')}),
|
||||
'Small Key (Spirit Temple)': ('SmallKey', True, 0xB2, {'progressive': float('Inf')}),
|
||||
'Small Key (Shadow Temple)': ('SmallKey', True, 0xB3, {'progressive': float('Inf')}),
|
||||
'Small Key (Bottom of the Well)': ('SmallKey', True, 0xB4, {'progressive': float('Inf')}),
|
||||
'Small Key (Gerudo Training Ground)': ('SmallKey',True, 0xB5, {'progressive': float('Inf')}),
|
||||
'Small Key (Thieves Hideout)': ('HideoutSmallKey',True, 0xB6, {'progressive': float('Inf')}),
|
||||
'Small Key (Gerudo Training Ground)': ('SmallKey', True, 0xB5, {'progressive': float('Inf')}),
|
||||
'Small Key (Thieves Hideout)': ('HideoutSmallKey', True, 0xB6, {'progressive': float('Inf')}),
|
||||
'Small Key (Ganons Castle)': ('SmallKey', True, 0xB7, {'progressive': float('Inf')}),
|
||||
'Double Defense': ('Item', True, 0xB8, None),
|
||||
'Magic Bean Pack': ('Item', True, 0xC9, None),
|
||||
'Double Defense': ('Item', None, 0xB8, None),
|
||||
'Buy Magic Bean': ('Item', True, 0x16, {'alias': ('Magic Bean', 10), 'progressive': 10}),
|
||||
'Magic Bean Pack': ('Item', True, 0xC9, {'alias': ('Magic Bean', 10), 'progressive': 10}),
|
||||
'Triforce Piece': ('Item', True, 0xCA, {'progressive': float('Inf')}),
|
||||
'Zeldas Letter': ('Item', True, 0x0B, None),
|
||||
'Zeldas Letter': ('Item', True, 0x0B, {'trade': True}),
|
||||
'Time Travel': ('Event', True, None, None),
|
||||
'Scarecrow Song': ('Event', True, None, None),
|
||||
'Triforce': ('Event', True, None, None),
|
||||
@@ -224,6 +224,7 @@ item_table = {
|
||||
'Bugs': ('Drop', True, None, None),
|
||||
'Big Poe': ('Drop', True, None, None),
|
||||
'Bombchu Drop': ('Drop', True, None, None),
|
||||
'Deku Shield Drop': ('Drop', True, None, None),
|
||||
|
||||
# Consumable refills defined mostly to placate 'starting with' options
|
||||
'Arrows': ('Refill', None, None, None),
|
||||
@@ -306,15 +307,25 @@ item_table = {
|
||||
'item_id': 0x65,
|
||||
}),
|
||||
|
||||
'Small Key Ring (Forest Temple)': ('SmallKey', True, 0xCB, {'alias': ('Small Key (Forest Temple)', 10), 'progressive': float('Inf')}),
|
||||
'Small Key Ring (Fire Temple)': ('SmallKey', True, 0xCC, {'alias': ('Small Key (Fire Temple)', 10), 'progressive': float('Inf')}),
|
||||
'Small Key Ring (Water Temple)': ('SmallKey', True, 0xCD, {'alias': ('Small Key (Water Temple)', 10), 'progressive': float('Inf')}),
|
||||
'Small Key Ring (Spirit Temple)': ('SmallKey', True, 0xCE, {'alias': ('Small Key (Spirit Temple)', 10), 'progressive': float('Inf')}),
|
||||
'Small Key Ring (Shadow Temple)': ('SmallKey', True, 0xCF, {'alias': ('Small Key (Shadow Temple)', 10), 'progressive': float('Inf')}),
|
||||
'Small Key Ring (Bottom of the Well)': ('SmallKey', True, 0xD0, {'alias': ('Small Key (Bottom of the Well)', 10), 'progressive': float('Inf')}),
|
||||
'Small Key Ring (Gerudo Training Ground)': ('SmallKey', True, 0xD1, {'alias': ('Small Key (Gerudo Training Ground)', 10), 'progressive': float('Inf')}),
|
||||
'Small Key Ring (Thieves Hideout)': ('HideoutSmallKey', True, 0xD2, {'alias': ('Small Key (Thieves Hideout)', 10), 'progressive': float('Inf')}),
|
||||
'Small Key Ring (Ganons Castle)': ('SmallKey', True, 0xD3, {'alias': ('Small Key (Ganons Castle)', 10), 'progressive': float('Inf')}),
|
||||
|
||||
'Buy Deku Nut (5)': ('Shop', True, 0x00, {'object': 0x00BB, 'price': 15}),
|
||||
'Buy Arrows (30)': ('Shop', False, 0x01, {'object': 0x00D8, 'price': 60}),
|
||||
'Buy Arrows (50)': ('Shop', False, 0x02, {'object': 0x00D8, 'price': 90}),
|
||||
'Buy Bombs (5) [25]': ('Shop', False, 0x03, {'object': 0x00CE, 'price': 25}),
|
||||
'Buy Bombs (5) for 25 Rupees': ('Shop', False, 0x03, {'object': 0x00CE, 'price': 25}),
|
||||
'Buy Deku Nut (10)': ('Shop', True, 0x04, {'object': 0x00BB, 'price': 30}),
|
||||
'Buy Deku Stick (1)': ('Shop', True, 0x05, {'object': 0x00C7, 'price': 10}),
|
||||
'Buy Bombs (10)': ('Shop', False, 0x06, {'object': 0x00CE, 'price': 50}),
|
||||
'Buy Fish': ('Shop', True, 0x07, {'object': 0x00F4, 'price': 200}),
|
||||
'Buy Red Potion [30]': ('Shop', False, 0x08, {'object': 0x00EB, 'price': 30}),
|
||||
'Buy Red Potion for 30 Rupees': ('Shop', False, 0x08, {'object': 0x00EB, 'price': 30}),
|
||||
'Buy Green Potion': ('Shop', False, 0x09, {'object': 0x00EB, 'price': 30}),
|
||||
'Buy Blue Potion': ('Shop', False, 0x0A, {'object': 0x00EB, 'price': 100}),
|
||||
'Buy Hylian Shield': ('Shop', True, 0x0C, {'object': 0x00DC, 'price': 80}),
|
||||
@@ -334,9 +345,9 @@ item_table = {
|
||||
'Buy Arrows (10)': ('Shop', False, 0x2C, {'object': 0x00D8, 'price': 20}),
|
||||
'Buy Bombs (20)': ('Shop', False, 0x2D, {'object': 0x00CE, 'price': 80}),
|
||||
'Buy Bombs (30)': ('Shop', False, 0x2E, {'object': 0x00CE, 'price': 120}),
|
||||
'Buy Bombs (5) [35]': ('Shop', False, 0x2F, {'object': 0x00CE, 'price': 35}),
|
||||
'Buy Red Potion [40]': ('Shop', False, 0x30, {'object': 0x00EB, 'price': 40}),
|
||||
'Buy Red Potion [50]': ('Shop', False, 0x31, {'object': 0x00EB, 'price': 50}),
|
||||
'Buy Bombs (5) for 35 Rupees': ('Shop', False, 0x2F, {'object': 0x00CE, 'price': 35}),
|
||||
'Buy Red Potion for 40 Rupees': ('Shop', False, 0x30, {'object': 0x00EB, 'price': 40}),
|
||||
'Buy Red Potion for 50 Rupees': ('Shop', False, 0x31, {'object': 0x00EB, 'price': 50}),
|
||||
|
||||
'Kokiri Emerald': ('DungeonReward', True, None,
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user