2017-05-15 18:28:04 +00:00
from BaseClasses import Item
2017-05-20 12:06:32 +00:00
import random
2017-05-25 13:58:35 +00:00
import logging
def ItemFactory ( items ) :
ret = [ ]
singleton = False
if isinstance ( items , str ) :
items = [ 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 ]
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 ) )
else :
logging . getLogger ( ' ' ) . warning ( ' Unknown Items: %s ' % item )
if singleton :
return ret [ 0 ]
else :
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 \n chosen the \n archer class. ' , None , None , None , None , None ) ,
' Book of Mudora ' : ( True , False , False , 0x1D , ' This is a \n paradox?! ' , None , None , None , None , None ) ,
' Hammer ' : ( True , False , False , 0x09 , ' stop \n hammer time! ' , None , None , None , None , None ) ,
' Hookshot ' : ( True , False , False , 0x0A , ' BOING!!! \n BOING!!! \n BOING!!! ' , None , None , None , None , None ) ,
' Magic Mirror ' : ( True , False , False , 0x1A , ' Isn \' t your \n reflection so \n pretty? ' , None , None , None , None , None ) ,
' Ocarina ' : ( True , False , False , 0x14 , ' Save the duck \n and fly to \n freedom! ' , 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 \n lift weak \n stuff! ' , None , None , None , None , None ) ,
' Cape ' : ( True , False , False , 0x19 , ' Wear this to \n become \n invisible! ' , None , None , None , None , None ) ,
' Mushroom ' : ( True , False , False , 0x29 , ' I \' m a fun guy! \n \n I \' 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, \n baby. \n Light my way! ' , None , None , None , None , None ) ,
' Magic Powder ' : ( True , False , False , 0x0D , ' you can turn \n anti-faeries \n into 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 \n to hold down \n switches! ' , None , None , None , None , None ) ,
' Fire Rod ' : ( True , False , False , 0x07 , ' I \' m the hot \n rod. I make \n things 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 \n rod. I make \n things freeze! ' , None , None , None , None , None ) ,
' Titans Mitts ' : ( True , False , False , 0x1C , ' Now you can \n lift heavy \n stuff! ' , None , None , None , None , None ) ,
' Ether ' : ( True , False , False , 0x10 , ' Zero Kelvin! \n Absolute zero! \n Fear the cold! ' , None , None , None , None , None ) ,
' Bombos ' : ( True , False , False , 0x0F , ' Burn, baby, \n burn! Fear my \n ring of fire! ' , None , None , None , None , None ) ,
' Quake ' : ( True , False , False , 0x11 , ' Maxing out the \n Richter scale \n is what I do! ' , None , None , None , None , None ) ,
' Bottle ' : ( True , False , False , 0xFF , ' Now you can \n store potions \n and stuff! ' , None , None , None , None , None ) , # specific content written on creation
' Master Sword ' : ( True , False , False , 0x50 , ' I thought this \n was meant to \n be randomized? ' , None , None , None , None , None ) ,
' Tempered Sword ' : ( True , False , False , 0x02 , ' I stole the \n blacksmith \' s \n job! ' , None , None , None , None , None ) ,
' Fighter Sword ' : ( True , False , False , 0x49 , ' A pathetic \n sword rests \n here! ' , None , None , None , None , None ) ,
' GoldenSword ' : ( True , False , False , 0x03 , ' The butter \n sword rests \n here! ' , None , None , None , None , None ) ,
' Progressive Sword ' : ( True , False , False , 0x5E , ' a better copy \n of your sword \n for your time ' , None , None , None , None , None ) ,
' Progressive Glove ' : ( True , False , False , 0x61 , ' a way to lift \n heavier things ' , None , None , None , None , None ) ,
' Silver Arrows ' : ( True , False , False , 0x58 , ' Do you fancy \n silver tipped \n arrows? ' , 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 ) ,
' 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 \n sits here. ' , None , None , None , None , None ) ,
' Arrows (10) ' : ( False , False , False , 0x44 , ' This will give \n you ten shots \n with your bow! ' , None , None , None , None , None ) ,
' Arrow Upgrade (+10) ' : ( False , False , False , 0x54 , ' increase arrow \n storage, low \n low price ' , None , None , None , None , None ) ,
' Arrow Upgrade (+5) ' : ( False , False , False , 0x53 , ' increase arrow \n storage, low \n low price ' , None , None , None , None , None ) ,
' Single Bomb ' : ( False , False , False , 0x27 , ' I make things \n go BOOM! But \n just once. ' , None , None , None , None , None ) ,
' Bombs (3) ' : ( False , False , False , 0x28 , ' I make things \n go triple \n BOOM!!! ' , None , None , None , None , None ) ,
' Bomb Upgrade (+10) ' : ( False , False , False , 0x52 , ' increase bomb \n storage, low \n low price ' , None , None , None , None , None ) ,
' Bomb Upgrade (+5) ' : ( False , False , False , 0x51 , ' increase bomb \n storage, low \n low price ' , None , None , None , None , None ) ,
' Blue Mail ' : ( False , False , False , 0x22 , ' Now you \' re a \n blue elf! ' , None , None , None , None , None ) ,
' Red Mail ' : ( False , False , False , 0x23 , ' Now you \' re a \n red elf! ' , None , None , None , None , None ) ,
' Progressive Armor ' : ( False , False , False , 0x60 , ' time for a \n change of \n clothes? ' , None , None , None , None , None ) ,
' Blue Boomerang ' : ( False , False , False , 0x0C , ' No matter what \n you do, blue \n returns to you ' , None , None , None , None , None ) ,
' Red Boomerang ' : ( False , False , False , 0x2A , ' No matter what \n you do, red \n returns to you ' , None , None , None , None , None ) ,
' Blue Shield ' : ( False , False , False , 0x04 , ' Now you can \n defend against \n pebbles! ' , None , None , None , None , None ) ,
' Red Shield ' : ( False , False , False , 0x05 , ' Now you can \n defend against \n fireballs! ' , None , None , None , None , None ) ,
' Mirror Shield ' : ( False , False , False , 0x06 , ' Now you can \n defend against \n lasers! ' , None , None , None , None , None ) ,
' Progressive Shield ' : ( False , False , False , 0x5F , ' have a better \n blocker in \n front of you ' , None , None , None , None , None ) ,
' Bug Catching Net ' : ( False , False , False , 0x21 , ' Let \' s catch \n some bees and \n faeries! ' , None , None , None , None , None ) ,
' Cane of Byrna ' : ( False , False , False , 0x18 , ' Use this to \n become \n invincible! ' , None , None , None , None , None ) ,
' Boss Heart Container ' : ( False , False , False , 0x3E , ' Maximum health \n increased! \n Yeah! ' , None , None , None , None , None ) ,
' Sanctuary Heart Container ' : ( False , False , False , 0x3F , ' Maximum health \n increased! \n Yeah! ' , None , None , None , None , None ) ,
' Piece of Heart ' : ( False , False , False , 0x17 , ' Just a little \n piece of love! ' , None , None , None , None , None ) ,
' Rupee (1) ' : ( False , False , False , 0x34 , ' Just pocket \n change. Move \n right along. ' , None , None , None , None , None ) ,
' Rupees (5) ' : ( False , False , False , 0x35 , ' Just pocket \n change. Move \n right along. ' , None , None , None , None , None ) ,
' Rupees (20) ' : ( False , False , False , 0x36 , ' Just couch \n cash. Move \n right along. ' , None , None , None , None , None ) ,
' Rupees (50) ' : ( False , False , False , 0x41 , ' Just couch \n cash. Move \n right along. ' , None , None , None , None , None ) ,
' Rupees (100) ' : ( False , False , False , 0x40 , ' A rupee stash! \n Hell yeah! ' , None , None , None , None , None ) ,
' Rupees (300) ' : ( False , False , False , 0x46 , ' A rupee hoard! \n Hell yeah! ' , None , None , None , None , None ) ,
' Magic Upgrade (1/2) ' : ( True , False , False , 0x4E , ' Your magic \n power has been \n doubled! ' , 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 \n power has been \n quadrupled! ' , 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 ) }