From 4ed2a5b5108a14a86f59592ee82bf6c20d9cb0f0 Mon Sep 17 00:00:00 2001 From: LLCoolDave Date: Sun, 4 Jun 2017 14:43:13 +0200 Subject: [PATCH] Add priority attribute to items. They are placed after advancement items, but before the rest. Ensures they are available even in seeds that overfill the itempool. --- BaseClasses.py | 3 +- Items.py | 262 ++++++++++++++++++++++++------------------------- Main.py | 16 +-- Plando.py | 4 +- 4 files changed, 140 insertions(+), 145 deletions(-) diff --git a/BaseClasses.py b/BaseClasses.py index 2abcc7b1..fb358d8f 100644 --- a/BaseClasses.py +++ b/BaseClasses.py @@ -464,9 +464,10 @@ class Location(object): class Item(object): - def __init__(self, name='', advancement=False, key=False, crystal=False, code=None, altar_hint=None, altar_credit=None, sickkid_credit=None, zora_credit=None, witch_credit=None, fluteboy_credit=None): + def __init__(self, name='', advancement=False, priority=False, key=False, crystal=False, code=None, altar_hint=None, altar_credit=None, sickkid_credit=None, zora_credit=None, witch_credit=None, fluteboy_credit=None): self.name = name self.advancement = advancement + self.priority = priority self.key = key self.crystal = crystal self.altar_hint_text = altar_hint diff --git a/Items.py b/Items.py index ccc7d0c5..912148be 100644 --- a/Items.py +++ b/Items.py @@ -11,11 +11,11 @@ def ItemFactory(items): singleton = True for item in items: if item in item_table: - advancement, key, crystal, code, altar_hint, altar_credit, sickkid_credit, zora_credit, witch_credit, fluteboy_credit = item_table[item] + advancement, priority, key, crystal, code, altar_hint, altar_credit, sickkid_credit, zora_credit, witch_credit, fluteboy_credit = item_table[item] if item == 'Bottle': # randomly fill bottle code = [0x16, 0x2B, 0x2C, 0x2D, 0x3C, 0x3D, 0x48][random.randint(0, 6)] - ret.append(Item(item, advancement, key, crystal, code, altar_hint, altar_credit, sickkid_credit, zora_credit, witch_credit, fluteboy_credit)) + ret.append(Item(item, advancement, priority, key, crystal, code, altar_hint, altar_credit, sickkid_credit, zora_credit, witch_credit, fluteboy_credit)) else: logging.getLogger('').warning('Unknown Item: %s' % item) return None @@ -26,133 +26,133 @@ def ItemFactory(items): return ret -# Format: Name: (Advancement, Key, Crystal, ItemCode, Altar Hint Text, Altar Credit Text, Sick Kid Credit Text, Zora Credit Text, Witch Credit Text, Flute Boy Credit Text) -item_table = {'Bow': (True, False, False, 0x0B, 'You have\nchosen the\narcher class.', None, None, None, None, None), - 'Book of Mudora': (True, False, False, 0x1D, 'This is a\nparadox?!', None, None, None, None, None), - 'Hammer': (True, False, False, 0x09, 'stop\nhammer time!', None, None, None, None, None), - 'Hookshot': (True, False, False, 0x0A, 'BOING!!!\nBOING!!!\nBOING!!!', None, None, None, None, None), - 'Magic Mirror': (True, False, False, 0x1A, 'Isn\'t your\nreflection so\npretty?', None, None, None, None, None), - 'Ocarina': (True, False, False, 0x14, 'Save the duck\nand fly to\nfreedom!', None, None, None, None, None), - 'Pegasus Boots': (True, False, False, 0x4B, 'Gotta go fast!', None, None, None, None, None), - 'Power Glove': (True, False, False, 0x1B, 'Now you can\nlift weak\nstuff!', None, None, None, None, None), - 'Cape': (True, False, False, 0x19, 'Wear this to\nbecome\ninvisible!', None, None, None, None, None), - 'Mushroom': (True, False, False, 0x29, 'I\'m a fun guy!\n\nI\'m a funghi!', None, None, None, None, None), - 'Shovel': (True, False, False, 0x13, 'Can\n You\n Dig it?', None, None, None, None, None), - 'Lamp': (True, False, False, 0x12, 'Baby, baby,\nbaby.\nLight my way!', None, None, None, None, None), - 'Magic Powder': (True, False, False, 0x0D, 'you can turn\nanti-faeries\ninto fairies', None, None, None, None, None), - 'Moon Pearl': (True, False, False, 0x1F, ' Bunny Link\n be\n gone!', None, None, None, None, None), - 'Cane of Somaria': (True, False, False, 0x15, 'I make blocks\nto hold down\nswitches!', None, None, None, None, None), - 'Fire Rod': (True, False, False, 0x07, 'I\'m the hot\nrod. I make\nthings burn!', None, None, None, None, None), - 'Flippers': (True, False, False, 0x1E, 'fancy a swim?', None, None, None, None, None), - 'Ice Rod': (True, False, False, 0x08, 'I\'m the cold\nrod. I make\nthings freeze!', None, None, None, None, None), - 'Titans Mitts': (True, False, False, 0x1C, 'Now you can\nlift heavy\nstuff!', None, None, None, None, None), - 'Ether': (True, False, False, 0x10, 'This magic\ncoin freezes\neverything!', None, None, None, None, None), - 'Bombos': (True, False, False, 0x0F, 'Burn, baby,\nburn! Fear my\nring of fire!', None, None, None, None, None), - 'Quake': (True, False, False, 0x11, 'Maxing out the\nRichter scale\nis what I do!', None, None, None, None, None), - 'Bottle': (True, False, False, 0xFF, 'Now you can\nstore potions\nand stuff!', None, None, None, None, None), # specific content written on creation - 'Master Sword': (True, False, False, 0x50, 'I thought this\nwas meant to\nbe randomized?', None, None, None, None, None), - 'Tempered Sword': (True, False, False, 0x02, 'I stole the\nblacksmith\'s\njob!', None, None, None, None, None), - 'Fighter Sword': (True, False, False, 0x49, 'A pathetic\nsword rests\nhere!', None, None, None, None, None), - 'Golden Sword': (True, False, False, 0x03, 'The butter\nsword rests\nhere!', None, None, None, None, None), - 'Progressive Sword': (True, False, False, 0x5E, 'a better copy\nof your sword\nfor your time', None, None, None, None, None), - 'Progressive Glove': (True, False, False, 0x61, 'a way to lift\nheavier things', None, None, None, None, None), - 'Silver Arrows': (True, False, False, 0x58, 'Do you fancy\nsilver tipped\narrows?', None, None, None, None, None), - 'Green Pendant': (True, False, True, [0x04, 0x38, 0x60, 0x00, 0x69, 0x01], None, None, None, None, None, None), - 'Red Pendant': (True, False, True, [0x02, 0x34, 0x60, 0x00, 0x69, 0x02], None, None, None, None, None, None), - 'Blue Pendant': (True, False, True, [0x01, 0x32, 0x60, 0x00, 0x69, 0x03], None, None, None, None, None, None), - 'Triforce': (True, False, False, 0x6A, '\n YOU WIN!', None, None, None, None, None), - 'Power Star': (True, False, False, 0x6B, 'a small victory', None, None, None, None, None), - 'Triforce Piece': (True, False, False, 0x6C, 'a small victory', None, None, None, None, None), - 'Crystal 1': (True, False, True, [0x02, 0x34, 0x64, 0x40, 0x7F, 0x06], None, None, None, None, None, None), - 'Crystal 2': (True, False, True, [0x10, 0x34, 0x64, 0x40, 0x79, 0x06], None, None, None, None, None, None), - 'Crystal 3': (True, False, True, [0x40, 0x34, 0x64, 0x40, 0x6C, 0x06], None, None, None, None, None, None), - 'Crystal 4': (True, False, True, [0x20, 0x34, 0x64, 0x40, 0x6D, 0x06], None, None, None, None, None, None), - 'Crystal 5': (True, False, True, [0x04, 0x34, 0x64, 0x40, 0x6E, 0x06], None, None, None, None, None, None), - 'Crystal 6': (True, False, True, [0x01, 0x34, 0x64, 0x40, 0x6F, 0x06], None, None, None, None, None, None), - 'Crystal 7': (True, False, True, [0x08, 0x34, 0x64, 0x40, 0x7C, 0x06], None, None, None, None, None, None), - 'Single Arrow': (False, False, False, 0x43, 'a lonely arrow\nsits here.', None, None, None, None, None), - 'Arrows (10)': (False, False, False, 0x44, 'This will give\nyou ten shots\nwith your bow!', None, None, None, None, None), - 'Arrow Upgrade (+10)': (False, False, False, 0x54, 'increase arrow\nstorage, low\nlow price', None, None, None, None, None), - 'Arrow Upgrade (+5)': (False, False, False, 0x53, 'increase arrow\nstorage, low\nlow price', None, None, None, None, None), - 'Single Bomb': (False, False, False, 0x27, 'I make things\ngo BOOM! But\njust once.', None, None, None, None, None), - 'Bombs (3)': (False, False, False, 0x28, 'I make things\ngo triple\nBOOM!!!', None, None, None, None, None), - 'Bomb Upgrade (+10)': (False, False, False, 0x52, 'increase bomb\nstorage, low\nlow price', None, None, None, None, None), - 'Bomb Upgrade (+5)': (False, False, False, 0x51, 'increase bomb\nstorage, low\nlow price', None, None, None, None, None), - 'Blue Mail': (False, False, False, 0x22, 'Now you\'re a\nblue elf!', None, None, None, None, None), - 'Red Mail': (False, False, False, 0x23, 'Now you\'re a\nred elf!', None, None, None, None, None), - 'Progressive Armor': (False, False, False, 0x60, 'time for a\nchange of\nclothes?', None, None, None, None, None), - 'Blue Boomerang': (False, False, False, 0x0C, 'No matter what\nyou do, blue\nreturns to you', None, None, None, None, None), - 'Red Boomerang': (False, False, False, 0x2A, 'No matter what\nyou do, red\nreturns to you', None, None, None, None, None), - 'Blue Shield': (False, False, False, 0x04, 'Now you can\ndefend against\npebbles!', None, None, None, None, None), - 'Red Shield': (False, False, False, 0x05, 'Now you can\ndefend against\nfireballs!', None, None, None, None, None), - 'Mirror Shield': (False, False, False, 0x06, 'Now you can\ndefend against\nlasers!', None, None, None, None, None), - 'Progressive Shield': (False, False, False, 0x5F, 'have a better\nblocker in\nfront of you', None, None, None, None, None), - 'Bug Catching Net': (False, False, False, 0x21, 'Let\'s catch\nsome bees and\nfaeries!', None, None, None, None, None), - 'Cane of Byrna': (False, False, False, 0x18, 'Use this to\nbecome\ninvincible!', None, None, None, None, None), - 'Boss Heart Container': (False, False, False, 0x3E, 'Maximum health\nincreased!\nYeah!', None, None, None, None, None), - 'Sanctuary Heart Container': (False, False, False, 0x3F, 'Maximum health\nincreased!\nYeah!', None, None, None, None, None), - 'Piece of Heart': (False, False, False, 0x17, 'Just a little\npiece of love!', None, None, None, None, None), - 'Rupee (1)': (False, False, False, 0x34, 'Just pocket\nchange. Move\nright along.', None, None, None, None, None), - 'Rupees (5)': (False, False, False, 0x35, 'Just pocket\nchange. Move\nright along.', None, None, None, None, None), - 'Rupees (20)': (False, False, False, 0x36, 'Just couch\ncash. Move\nright along.', None, None, None, None, None), - 'Rupees (50)': (False, False, False, 0x41, 'Just couch\ncash. Move\nright along.', None, None, None, None, None), - 'Rupees (100)': (False, False, False, 0x40, 'A rupee stash!\nHell yeah!', None, None, None, None, None), - 'Rupees (300)': (False, False, False, 0x46, 'A rupee hoard!\nHell yeah!', None, None, None, None, None), - 'Rupoor': (False, False, False, 0x59, 'a debt collector', None, None, None, None, None), - 'Red Clock': (False, False, False, 0x5B, 'a waste of time', None, None, None, None, None), - 'Blue Clock': (False, False, False, 0x5C, 'a bit of time', None, None, None, None, None), - 'Green Clock': (False, False, False, 0x5D, 'a lot of time', None, None, None, None, None), - 'Single RNG': (False, False, False, 0x62, 'something you don\'t yet have', None, None, None, None, None), - 'Multi RNG': (False, False, False, 0x63, 'something you may already have', None, None, None, None, None), - 'Magic Upgrade (1/2)': (True, False, False, 0x4E, 'Your magic\npower has been\ndoubled!', None, None, None, None, None), # can be required to beat mothula in an open seed in very very rare circumstance - 'Magic Upgrade (1/4)': (True, False, False, 0x4F, 'Your magic\npower has been\nquadrupled!', None, None, None, None, None), # can be required to beat mothula in an open seed in very very rare circumstance +# Format: Name: (Advancement, Priority, Key, Crystal, ItemCode, Altar Hint Text, Altar Credit Text, Sick Kid Credit Text, Zora Credit Text, Witch Credit Text, Flute Boy Credit Text) +item_table = {'Bow': (True, False, False, False, 0x0B, 'You have\nchosen the\narcher class.', None, None, None, None, None), + 'Book of Mudora': (True, False, False, False, 0x1D, 'This is a\nparadox?!', None, None, None, None, None), + 'Hammer': (True, False, False, False, 0x09, 'stop\nhammer time!', None, None, None, None, None), + 'Hookshot': (True, False, False, False, 0x0A, 'BOING!!!\nBOING!!!\nBOING!!!', None, None, None, None, None), + 'Magic Mirror': (True, False, False, False, 0x1A, 'Isn\'t your\nreflection so\npretty?', None, None, None, None, None), + 'Ocarina': (True, False, False, False, 0x14, 'Save the duck\nand fly to\nfreedom!', None, None, None, None, None), + 'Pegasus Boots': (True, False, False, False, 0x4B, 'Gotta go fast!', None, None, None, None, None), + 'Power Glove': (True, False, False, False, 0x1B, 'Now you can\nlift weak\nstuff!', None, None, None, None, None), + 'Cape': (True, False, False, False, 0x19, 'Wear this to\nbecome\ninvisible!', None, None, None, None, None), + 'Mushroom': (True, False, False, False, 0x29, 'I\'m a fun guy!\n\nI\'m a funghi!', None, None, None, None, None), + 'Shovel': (True, False, False, False, 0x13, 'Can\n You\n Dig it?', None, None, None, None, None), + 'Lamp': (True, False, False, False, 0x12, 'Baby, baby,\nbaby.\nLight my way!', None, None, None, None, None), + 'Magic Powder': (True, False, False, False, 0x0D, 'you can turn\nanti-faeries\ninto fairies', None, None, None, None, None), + 'Moon Pearl': (True, False, False, False, 0x1F, ' Bunny Link\n be\n gone!', None, None, None, None, None), + 'Cane of Somaria': (True, False, False, False, 0x15, 'I make blocks\nto hold down\nswitches!', None, None, None, None, None), + 'Fire Rod': (True, False, False, False, 0x07, 'I\'m the hot\nrod. I make\nthings burn!', None, None, None, None, None), + 'Flippers': (True, False, False, False, 0x1E, 'fancy a swim?', None, None, None, None, None), + 'Ice Rod': (True, False, False, False, 0x08, 'I\'m the cold\nrod. I make\nthings freeze!', None, None, None, None, None), + 'Titans Mitts': (True, False, False, False, 0x1C, 'Now you can\nlift heavy\nstuff!', None, None, None, None, None), + 'Ether': (True, False, False, False, 0x10, 'This magic\ncoin freezes\neverything!', None, None, None, None, None), + 'Bombos': (True, False, False, False, 0x0F, 'Burn, baby,\nburn! Fear my\nring of fire!', None, None, None, None, None), + 'Quake': (True, False, False, False, 0x11, 'Maxing out the\nRichter scale\nis what I do!', None, None, None, None, None), + 'Bottle': (True, False, False, False, 0xFF, 'Now you can\nstore potions\nand stuff!', None, None, None, None, None), # specific content written on creation + 'Master Sword': (True, False, False, False, 0x50, 'I thought this\nwas meant to\nbe randomized?', None, None, None, None, None), + 'Tempered Sword': (True, False, False, False, 0x02, 'I stole the\nblacksmith\'s\njob!', None, None, None, None, None), + 'Fighter Sword': (True, False, False, False, 0x49, 'A pathetic\nsword rests\nhere!', None, None, None, None, None), + 'Golden Sword': (True, False, False, False, 0x03, 'The butter\nsword rests\nhere!', None, None, None, None, None), + 'Progressive Sword': (True, False, False, False, 0x5E, 'a better copy\nof your sword\nfor your time', None, None, None, None, None), + 'Progressive Glove': (True, False, False, False, 0x61, 'a way to lift\nheavier things', None, None, None, None, None), + 'Silver Arrows': (True, False, False, False, 0x58, 'Do you fancy\nsilver tipped\narrows?', None, None, None, None, None), + 'Green Pendant': (True, False, False, True, [0x04, 0x38, 0x60, 0x00, 0x69, 0x01], None, None, None, None, None, None), + 'Red Pendant': (True, False, False, True, [0x02, 0x34, 0x60, 0x00, 0x69, 0x02], None, None, None, None, None, None), + 'Blue Pendant': (True, False, False, True, [0x01, 0x32, 0x60, 0x00, 0x69, 0x03], None, None, None, None, None, None), + 'Triforce': (True, False, False, False, 0x6A, '\n YOU WIN!', None, None, None, None, None), + 'Power Star': (True, False, False, False, 0x6B, 'a small victory', None, None, None, None, None), + 'Triforce Piece': (True, False, False, False, 0x6C, 'a small victory', None, None, None, None, None), + 'Crystal 1': (True, False, False, True, [0x02, 0x34, 0x64, 0x40, 0x7F, 0x06], None, None, None, None, None, None), + 'Crystal 2': (True, False, False, True, [0x10, 0x34, 0x64, 0x40, 0x79, 0x06], None, None, None, None, None, None), + 'Crystal 3': (True, False, False, True, [0x40, 0x34, 0x64, 0x40, 0x6C, 0x06], None, None, None, None, None, None), + 'Crystal 4': (True, False, False, True, [0x20, 0x34, 0x64, 0x40, 0x6D, 0x06], None, None, None, None, None, None), + 'Crystal 5': (True, False, False, True, [0x04, 0x34, 0x64, 0x40, 0x6E, 0x06], None, None, None, None, None, None), + 'Crystal 6': (True, False, False, True, [0x01, 0x34, 0x64, 0x40, 0x6F, 0x06], None, None, None, None, None, None), + 'Crystal 7': (True, False, False, True, [0x08, 0x34, 0x64, 0x40, 0x7C, 0x06], None, None, None, None, None, None), + 'Single Arrow': (False, False, False, False, 0x43, 'a lonely arrow\nsits here.', None, None, None, None, None), + 'Arrows (10)': (False, False, False, False, 0x44, 'This will give\nyou ten shots\nwith your bow!', None, None, None, None, None), + 'Arrow Upgrade (+10)': (False, False, False, False, 0x54, 'increase arrow\nstorage, low\nlow price', None, None, None, None, None), + 'Arrow Upgrade (+5)': (False, False, False, False, 0x53, 'increase arrow\nstorage, low\nlow price', None, None, None, None, None), + 'Single Bomb': (False, False, False, False, 0x27, 'I make things\ngo BOOM! But\njust once.', None, None, None, None, None), + 'Bombs (3)': (False, False, False, False, 0x28, 'I make things\ngo triple\nBOOM!!!', None, None, None, None, None), + 'Bomb Upgrade (+10)': (False, False, False, False, 0x52, 'increase bomb\nstorage, low\nlow price', None, None, None, None, None), + 'Bomb Upgrade (+5)': (False, False, False, False, 0x51, 'increase bomb\nstorage, low\nlow price', None, None, None, None, None), + 'Blue Mail': (False, True, False, False, 0x22, 'Now you\'re a\nblue elf!', None, None, None, None, None), + 'Red Mail': (False, True, False, False, 0x23, 'Now you\'re a\nred elf!', None, None, None, None, None), + 'Progressive Armor': (False, True, False, False, 0x60, 'time for a\nchange of\nclothes?', None, None, None, None, None), + 'Blue Boomerang': (False, True, False, False, 0x0C, 'No matter what\nyou do, blue\nreturns to you', None, None, None, None, None), + 'Red Boomerang': (False, True, False, False, 0x2A, 'No matter what\nyou do, red\nreturns to you', None, None, None, None, None), + 'Blue Shield': (False, True, False, False, 0x04, 'Now you can\ndefend against\npebbles!', None, None, None, None, None), + 'Red Shield': (False, True, False, False, 0x05, 'Now you can\ndefend against\nfireballs!', None, None, None, None, None), + 'Mirror Shield': (False, True, False, False, 0x06, 'Now you can\ndefend against\nlasers!', None, None, None, None, None), + 'Progressive Shield': (False, True, False, False, 0x5F, 'have a better\nblocker in\nfront of you', None, None, None, None, None), + 'Bug Catching Net': (False, True, False, False, 0x21, 'Let\'s catch\nsome bees and\nfaeries!', None, None, None, None, None), + 'Cane of Byrna': (False, True, False, False, 0x18, 'Use this to\nbecome\ninvincible!', None, None, None, None, None), + 'Boss Heart Container': (False, False, False, False, 0x3E, 'Maximum health\nincreased!\nYeah!', None, None, None, None, None), + 'Sanctuary Heart Container': (False, False, False, False, 0x3F, 'Maximum health\nincreased!\nYeah!', None, None, None, None, None), + 'Piece of Heart': (False, False, False, False, 0x17, 'Just a little\npiece of love!', None, None, None, None, None), + 'Rupee (1)': (False, False, False, False, 0x34, 'Just pocket\nchange. Move\nright along.', None, None, None, None, None), + 'Rupees (5)': (False, False, False, False, 0x35, 'Just pocket\nchange. Move\nright along.', None, None, None, None, None), + 'Rupees (20)': (False, False, False, False, 0x36, 'Just couch\ncash. Move\nright along.', None, None, None, None, None), + 'Rupees (50)': (False, False, False, False, 0x41, 'Just couch\ncash. Move\nright along.', None, None, None, None, None), + 'Rupees (100)': (False, False, False, False, 0x40, 'A rupee stash!\nHell yeah!', None, None, None, None, None), + 'Rupees (300)': (False, False, False, False, 0x46, 'A rupee hoard!\nHell yeah!', None, None, None, None, None), + 'Rupoor': (False, False, False, False, 0x59, 'a debt collector', None, None, None, None, None), + 'Red Clock': (False, True, False, False, 0x5B, 'a waste of time', None, None, None, None, None), + 'Blue Clock': (False, True, False, False, 0x5C, 'a bit of time', None, None, None, None, None), + 'Green Clock': (False, True, False, False, 0x5D, 'a lot of time', None, None, None, None, None), + 'Single RNG': (False, True, False, False, 0x62, 'something you don\'t yet have', None, None, None, None, None), + 'Multi RNG': (False, True, False, False, 0x63, 'something you may already have', None, None, None, None, None), + 'Magic Upgrade (1/2)': (True, False, False, False, 0x4E, 'Your magic\npower has been\ndoubled!', None, None, None, None, None), # can be required to beat mothula in an open seed in very very rare circumstance + 'Magic Upgrade (1/4)': (True, False, False, False, 0x4F, 'Your magic\npower has been\nquadrupled!', None, None, None, None, None), # can be required to beat mothula in an open seed in very very rare circumstance # ToDo Use dungeons specific items once they work correctly - 'Small Key (Eastern Palace)': (False, True, False, 0x24, None, None, None, None, None, None), - 'Big Key (Eastern Palace)': (False, True, False, 0x32, None, None, None, None, None, None), - 'Compass (Eastern Palace)': (False, False, False, 0x25, None, None, None, None, None, None), - 'Map (Eastern Palace)': (False, False, False, 0x33, None, None, None, None, None, None), - 'Small Key (Desert Palace)': (False, True, False, 0x24, None, None, None, None, None, None), - 'Big Key (Desert Palace)': (False, True, False, 0x32, None, None, None, None, None, None), - 'Compass (Desert Palace)': (False, False, False, 0x25, None, None, None, None, None, None), - 'Map (Desert Palace)': (False, False, False, 0x33, None, None, None, None, None, None), - 'Small Key (Tower of Hera)': (False, True, False, 0x24, None, None, None, None, None, None), - 'Big Key (Tower of Hera)': (False, True, False, 0x32, None, None, None, None, None, None), - 'Compass (Tower of Hera)': (False, False, False, 0x25, None, None, None, None, None, None), - 'Map (Tower of Hera)': (False, False, False, 0x33, None, None, None, None, None, None), - 'Small Key (Escape)': (False, True, False, 0x24, None, None, None, None, None, None), - 'Big Key (Escape)': (False, True, False, 0x32, None, None, None, None, None, None), - 'Map (Escape)': (False, False, False, 0x33, None, None, None, None, None, None), - 'Small Key (Agahnims Tower)': (False, True, False, 0x24, None, None, None, None, None, None), - 'Small Key (Palace of Darkness)': (False, True, False, 0x24, None, None, None, None, None, None), - 'Big Key (Palace of Darkness)': (False, True, False, 0x32, None, None, None, None, None, None), - 'Compass (Palace of Darkness)': (False, False, False, 0x25, None, None, None, None, None, None), - 'Map (Palace of Darkness)': (False, False, False, 0x33, None, None, None, None, None, None), - 'Small Key (Thieves Town)': (False, True, False, 0x24, None, None, None, None, None, None), - 'Big Key (Thieves Town)': (False, True, False, 0x32, None, None, None, None, None, None), - 'Compass (Thieves Town)': (False, False, False, 0x25, None, None, None, None, None, None), - 'Map (Thieves Town)': (False, False, False, 0x33, None, None, None, None, None, None), - 'Small Key (Skull Woods)': (False, True, False, 0x24, None, None, None, None, None, None), - 'Big Key (Skull Woods)': (False, True, False, 0x32, None, None, None, None, None, None), - 'Compass (Skull Woods)': (False, False, False, 0x25, None, None, None, None, None, None), - 'Map (Skull Woods)': (False, False, False, 0x33, None, None, None, None, None, None), - 'Small Key (Swamp Palace)': (False, True, False, 0x24, None, None, None, None, None, None), - 'Big Key (Swamp Palace)': (False, True, False, 0x32, None, None, None, None, None, None), - 'Compass (Swamp Palace)': (False, False, False, 0x25, None, None, None, None, None, None), - 'Map (Swamp Palace)': (False, False, False, 0x33, None, None, None, None, None, None), - 'Small Key (Ice Palace)': (False, True, False, 0x24, None, None, None, None, None, None), - 'Big Key (Ice Palace)': (False, True, False, 0x32, None, None, None, None, None, None), - 'Compass (Ice Palace)': (False, False, False, 0x25, None, None, None, None, None, None), - 'Map (Ice Palace)': (False, False, False, 0x33, None, None, None, None, None, None), - 'Small Key (Misery Mire)': (False, True, False, 0x24, None, None, None, None, None, None), - 'Big Key (Misery Mire)': (False, True, False, 0x32, None, None, None, None, None, None), - 'Compass (Misery Mire)': (False, False, False, 0x25, None, None, None, None, None, None), - 'Map (Misery Mire)': (False, False, False, 0x33, None, None, None, None, None, None), - 'Small Key (Turtle Rock)': (False, True, False, 0x24, None, None, None, None, None, None), - 'Big Key (Turtle Rock)': (False, True, False, 0x32, None, None, None, None, None, None), - 'Compass (Turtle Rock)': (False, False, False, 0x25, None, None, None, None, None, None), - 'Map (Turtle Rock)': (False, False, False, 0x33, None, None, None, None, None, None), - 'Small Key (Ganons Tower)': (False, True, False, 0x24, None, None, None, None, None, None), - 'Big Key (Ganons Tower)': (False, True, False, 0x32, None, None, None, None, None, None), - 'Compass (Ganons Tower)': (False, False, False, 0x25, None, None, None, None, None, None), - 'Map (Ganons Tower)': (False, False, False, 0x33, None, None, None, None, None, None), - 'Nothing': (False, False, False, 0x5A, 'Some Hot Air', None, None, None, None, None)} + 'Small Key (Eastern Palace)': (False, False, True, False, 0x24, None, None, None, None, None, None), + 'Big Key (Eastern Palace)': (False, False, True, False, 0x32, None, None, None, None, None, None), + 'Compass (Eastern Palace)': (False, True, False, False, 0x25, None, None, None, None, None, None), + 'Map (Eastern Palace)': (False, True, False, False, 0x33, None, None, None, None, None, None), + 'Small Key (Desert Palace)': (False, False, True, False, 0x24, None, None, None, None, None, None), + 'Big Key (Desert Palace)': (False, False, True, False, 0x32, None, None, None, None, None, None), + 'Compass (Desert Palace)': (False, True, False, False, 0x25, None, None, None, None, None, None), + 'Map (Desert Palace)': (False, True, False, False, 0x33, None, None, None, None, None, None), + 'Small Key (Tower of Hera)': (False, False, True, False, 0x24, None, None, None, None, None, None), + 'Big Key (Tower of Hera)': (False, False, True, False, 0x32, None, None, None, None, None, None), + 'Compass (Tower of Hera)': (False, True, False, False, 0x25, None, None, None, None, None, None), + 'Map (Tower of Hera)': (False, True, False, False, 0x33, None, None, None, None, None, None), + 'Small Key (Escape)': (False, False, True, False, 0x24, None, None, None, None, None, None), + 'Big Key (Escape)': (False, False, True, False, 0x32, None, None, None, None, None, None), + 'Map (Escape)': (False, True, False, False, 0x33, None, None, None, None, None, None), + 'Small Key (Agahnims Tower)': (False, False, True, False, 0x24, None, None, None, None, None, None), + 'Small Key (Palace of Darkness)': (False, False, True, False, 0x24, None, None, None, None, None, None), + 'Big Key (Palace of Darkness)': (False, False, True, False, 0x32, None, None, None, None, None, None), + 'Compass (Palace of Darkness)': (False, True, False, False, 0x25, None, None, None, None, None, None), + 'Map (Palace of Darkness)': (False, True, False, False, 0x33, None, None, None, None, None, None), + 'Small Key (Thieves Town)': (False, False, True, False, 0x24, None, None, None, None, None, None), + 'Big Key (Thieves Town)': (False, False, True, False, 0x32, None, None, None, None, None, None), + 'Compass (Thieves Town)': (False, True, False, False, 0x25, None, None, None, None, None, None), + 'Map (Thieves Town)': (False, True, False, False, 0x33, None, None, None, None, None, None), + 'Small Key (Skull Woods)': (False, False, True, False, 0x24, None, None, None, None, None, None), + 'Big Key (Skull Woods)': (False, False, True, False, 0x32, None, None, None, None, None, None), + 'Compass (Skull Woods)': (False, True, False, False, 0x25, None, None, None, None, None, None), + 'Map (Skull Woods)': (False, True, False, False, 0x33, None, None, None, None, None, None), + 'Small Key (Swamp Palace)': (False, False, True, False, 0x24, None, None, None, None, None, None), + 'Big Key (Swamp Palace)': (False, False, True, False, 0x32, None, None, None, None, None, None), + 'Compass (Swamp Palace)': (False, True, False, False, 0x25, None, None, None, None, None, None), + 'Map (Swamp Palace)': (False, True, False, False, 0x33, None, None, None, None, None, None), + 'Small Key (Ice Palace)': (False, False, True, False, 0x24, None, None, None, None, None, None), + 'Big Key (Ice Palace)': (False, False, True, False, 0x32, None, None, None, None, None, None), + 'Compass (Ice Palace)': (False, True, False, False, 0x25, None, None, None, None, None, None), + 'Map (Ice Palace)': (False, True, False, False, 0x33, None, None, None, None, None, None), + 'Small Key (Misery Mire)': (False, False, True, False, 0x24, None, None, None, None, None, None), + 'Big Key (Misery Mire)': (False, False, True, False, 0x32, None, None, None, None, None, None), + 'Compass (Misery Mire)': (False, True, False, False, 0x25, None, None, None, None, None, None), + 'Map (Misery Mire)': (False, True, False, False, 0x33, None, None, None, None, None, None), + 'Small Key (Turtle Rock)': (False, False, True, False, 0x24, None, None, None, None, None, None), + 'Big Key (Turtle Rock)': (False, False, True, False, 0x32, None, None, None, None, None, None), + 'Compass (Turtle Rock)': (False, True, False, False, 0x25, None, None, None, None, None, None), + 'Map (Turtle Rock)': (False, True, False, False, 0x33, None, None, None, None, None, None), + 'Small Key (Ganons Tower)': (False, False, True, False, 0x24, None, None, None, None, None, None), + 'Big Key (Ganons Tower)': (False, False, True, False, 0x32, None, None, None, None, None, None), + 'Compass (Ganons Tower)': (False, True, False, False, 0x25, None, None, None, None, None, None), + 'Map (Ganons Tower)': (False, True, False, False, 0x33, None, None, None, None, None, None), + 'Nothing': (False, False, False, False, 0x5A, 'Some Hot Air', None, None, None, None, None)} diff --git a/Main.py b/Main.py index 3cfcd27c..2d1f8ddf 100644 --- a/Main.py +++ b/Main.py @@ -118,13 +118,10 @@ def distribute_items_cutoff(world, cutoffrate=0.33): candidate_item_to_place = None item_to_place = None for item in itempool: - if advancement_placed: + if advancement_placed or (progress_done and (item.advancement or item.priority)): item_to_place = item break if item.advancement: - if progress_done: - item_to_place = item - break candidate_item_to_place = item if world.unlocks_new_location(item): item_to_place = item @@ -188,13 +185,10 @@ def distribute_items_staleness(world): candidate_item_to_place = None item_to_place = None for item in itempool: - if advancement_placed: + if advancement_placed or (progress_done and (item.advancement or item.priority)): item_to_place = item break if item.advancement: - if progress_done: - item_to_place = item - break candidate_item_to_place = item if world.unlocks_new_location(item): item_to_place = item @@ -300,7 +294,7 @@ def flood_items(world): location_list = world.get_reachable_locations() random.shuffle(location_list) for location in location_list: - if location.item is not None and not location.item.advancement and not location.item.key and 'Map' not in location.item.name and 'Compass' not in location.item.name: + if location.item is not None and not location.item.advancement and not location.item.priority and not location.item.key: # safe to replace replace_item = location.item replace_item.location = None @@ -398,13 +392,13 @@ def copy_world(world): # fill locations for location in world.get_locations(): if location.item is not None: - item = Item(location.item.name, location.item.advancement, location.item.key) + item = Item(location.item.name, location.item.advancement, location.item.priority, location.item.key) ret.get_location(location.name).item = item item.location = ret.get_location(location.name) # copy remaining itempool. No item in itempool should have an assigned location for item in world.itempool: - ret.itempool.append(Item(item.name, item.advancement, item.key)) + ret.itempool.append(Item(item.name, item.advancement, item.priority, item.key)) # copy progress items in state ret.state.prog_items = list(world.state.prog_items) diff --git a/Plando.py b/Plando.py index 9ca1e739..bec90e18 100644 --- a/Plando.py +++ b/Plando.py @@ -165,13 +165,13 @@ def copy_world(world): # fill locations for location in world.get_locations(): if location.item is not None: - item = Item(location.item.name, location.item.advancement, location.item.key) + item = Item(location.item.name, location.item.advancement, location.item.priority, location.item.key) ret.get_location(location.name).item = item item.location = ret.get_location(location.name) # copy remaining itempool. No item in itempool should have an assigned location for item in world.itempool: - ret.itempool.append(Item(item.name, item.advancement, item.key)) + ret.itempool.append(Item(item.name, item.advancement, item.priority, item.key)) # copy progress items in state ret.state.prog_items = list(world.state.prog_items)